all: autogenerated update (2018-11-01)

Add:
- cloudsearch/v1

Update:
- abusiveexperiencereport/v1
- acceleratedmobilepageurl/v1
- accesscontextmanager/v1beta
- adexchangebuyer/v1.2
- adexchangebuyer/v1.3
- adexchangebuyer/v1.4
- adexchangebuyer2/v2beta1
- adexperiencereport/v1
- admin/datatransfer/v1
- admin/directory/v1
- admin/reports/v1
- adsense/v1.4
- adsensehost/v4.1
- alertcenter/v1beta1
- analytics/v2.4
- analytics/v3
- analyticsreporting/v4
- androiddeviceprovisioning/v1
- androidenterprise/v1
- androidmanagement/v1
- androidpublisher/v1
- androidpublisher/v1.1
- androidpublisher/v2
- androidpublisher/v3
- appengine/v1
- appengine/v1alpha
- appengine/v1beta
- appengine/v1beta4
- appengine/v1beta5
- appsactivity/v1
- appstate/v1
- bigquery/v2
- bigquerydatatransfer/v1
- binaryauthorization/v1beta1
- blogger/v2
- blogger/v3
- books/v1
- calendar/v3
- chat/v1
- civicinfo/v2
- classroom/v1
- cloudasset/v1beta1
- cloudbilling/v1
- cloudbuild/v1
- clouddebugger/v2
- clouderrorreporting/v1beta1
- cloudfunctions/v1
- cloudfunctions/v1beta2
- cloudiot/v1
- cloudkms/v1
- cloudprofiler/v2
- cloudresourcemanager/v1
- cloudresourcemanager/v1beta1
- cloudresourcemanager/v2
- cloudresourcemanager/v2beta1
- cloudshell/v1
- cloudshell/v1alpha1
- cloudtasks/v2beta2
- cloudtasks/v2beta3
- cloudtrace/v1
- cloudtrace/v2
- composer/v1
- composer/v1beta1
- compute/v0.alpha
- compute/v0.beta
- compute/v1
- container/v1
- container/v1beta1
- content/v2
- customsearch/v1
- dataflow/v1b3
- dataproc/v1
- dataproc/v1beta2
- datastore/v1
- datastore/v1beta1
- datastore/v1beta3
- deploymentmanager/v0.alpha
- deploymentmanager/v2
- deploymentmanager/v2beta
- dfareporting/v3.0
- dfareporting/v3.1
- dfareporting/v3.2
- dialogflow/v2
- dialogflow/v2beta1
- digitalassetlinks/v1
- discovery/v1
- dlp/v2
- dns/v1
- dns/v1beta2
- dns/v2beta1
- doubleclickbidmanager/v1
- doubleclicksearch/v2
- drive/v2
- drive/v3
- file/v1beta1
- firebasedynamiclinks/v1
- firebasehosting/v1beta1
- firebaserules/v1
- firestore/v1
- firestore/v1beta1
- firestore/v1beta2
- fitness/v1
- fusiontables/v1
- fusiontables/v2
- games/v1
- gamesconfiguration/v1configuration
- gamesmanagement/v1management
- genomics/v1
- genomics/v1alpha2
- genomics/v2alpha1
- gmail/v1
- groupsmigration/v1
- groupssettings/v1
- iam/v1
- iamcredentials/v1
- iap/v1beta1
- identitytoolkit/v3
- indexing/v3
- jobs/v2
- jobs/v3
- jobs/v3p1beta1
- kgsearch/v1
- language/v1
- language/v1beta1
- language/v1beta2
- licensing/v1
- logging/v2
- logging/v2beta1
- manufacturers/v1
- mirror/v1
- ml/v1
- monitoring/v3
- oauth2/v1
- oauth2/v2
- oslogin/v1
- oslogin/v1alpha
- oslogin/v1beta
- pagespeedonline/v1
- pagespeedonline/v2
- pagespeedonline/v4
- partners/v2
- people/v1
- playcustomapp/v1
- plus/v1
- plusdomains/v1
- poly/v1
- proximitybeacon/v1beta1
- pubsub/v1
- pubsub/v1beta1a
- pubsub/v1beta2
- redis/v1
- redis/v1beta1
- replicapool/v1beta1
- replicapoolupdater/v1beta1
- reseller/v1
- runtimeconfig/v1
- runtimeconfig/v1beta1
- safebrowsing/v4
- script/v1
- searchconsole/v1
- servicebroker/v1
- servicebroker/v1alpha1
- servicebroker/v1beta1
- serviceconsumermanagement/v1
- servicecontrol/v1
- servicemanagement/v1
- servicenetworking/v1beta
- serviceusage/v1
- serviceusage/v1beta1
- sheets/v4
- siteverification/v1
- slides/v1
- sourcerepo/v1
- spanner/v1
- speech/v1
- speech/v1beta1
- sqladmin/v1beta4
- storage/v1
- storage/v1beta1
- storage/v1beta2
- storagetransfer/v1
- streetviewpublish/v1
- surveys/v2
- tagmanager/v1
- tagmanager/v2
- tasks/v1
- testing/v1
- texttospeech/v1
- texttospeech/v1beta1
- toolresults/v1beta3
- tpu/v1
- tpu/v1alpha1
- translate/v2
- urlshortener/v1
- vault/v1
- videointelligence/v1
- videointelligence/v1beta2
- videointelligence/v1p1beta1
- vision/v1
- vision/v1p1beta1
- vision/v1p2beta1
- webfonts/v1
- webmasters/v3
- websecurityscanner/v1alpha
- youtube/v3
- youtubeanalytics/v1
- youtubeanalytics/v1beta1
- youtubeanalytics/v2
- youtubereporting/v1
diff --git a/abusiveexperiencereport/v1/abusiveexperiencereport-gen.go b/abusiveexperiencereport/v1/abusiveexperiencereport-gen.go
index 3128614..bf0c164 100644
--- a/abusiveexperiencereport/v1/abusiveexperiencereport-gen.go
+++ b/abusiveexperiencereport/v1/abusiveexperiencereport-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go b/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go
index 9184ed5..5c805fa 100644
--- a/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go
+++ b/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/accesscontextmanager/v1beta/accesscontextmanager-gen.go b/accesscontextmanager/v1beta/accesscontextmanager-gen.go
index 9babd5a..e4f7a88 100644
--- a/accesscontextmanager/v1beta/accesscontextmanager-gen.go
+++ b/accesscontextmanager/v1beta/accesscontextmanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/adexchangebuyer/v1.2/adexchangebuyer-gen.go b/adexchangebuyer/v1.2/adexchangebuyer-gen.go
index 0a8e8a7..0bf64df 100644
--- a/adexchangebuyer/v1.2/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.2/adexchangebuyer-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/adexchangebuyer/v1.3/adexchangebuyer-gen.go b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
index c959465..bb44667 100644
--- a/adexchangebuyer/v1.3/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/adexchangebuyer/v1.4/adexchangebuyer-gen.go b/adexchangebuyer/v1.4/adexchangebuyer-gen.go
index dbda4e9..ae354ce 100644
--- a/adexchangebuyer/v1.4/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.4/adexchangebuyer-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
index 7100972..49e45be 100644
--- a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
+++ b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/adexperiencereport/v1/adexperiencereport-gen.go b/adexperiencereport/v1/adexperiencereport-gen.go
index 853b10f..64a8fec 100644
--- a/adexperiencereport/v1/adexperiencereport-gen.go
+++ b/adexperiencereport/v1/adexperiencereport-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/admin/datatransfer/v1/admin-gen.go b/admin/datatransfer/v1/admin-gen.go
index 637ecda..f1659d1 100644
--- a/admin/datatransfer/v1/admin-gen.go
+++ b/admin/datatransfer/v1/admin-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/admin/directory/v1/admin-gen.go b/admin/directory/v1/admin-gen.go
index 29dfdf3..f88cc99 100644
--- a/admin/directory/v1/admin-gen.go
+++ b/admin/directory/v1/admin-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/admin/reports/v1/admin-gen.go b/admin/reports/v1/admin-gen.go
index a2079f3..1000f18 100644
--- a/admin/reports/v1/admin-gen.go
+++ b/admin/reports/v1/admin-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/adsense/v1.4/adsense-gen.go b/adsense/v1.4/adsense-gen.go
index 43bb2d1..c05af5b 100644
--- a/adsense/v1.4/adsense-gen.go
+++ b/adsense/v1.4/adsense-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/adsensehost/v4.1/adsensehost-gen.go b/adsensehost/v4.1/adsensehost-gen.go
index 4b2e8c7..b736e13 100644
--- a/adsensehost/v4.1/adsensehost-gen.go
+++ b/adsensehost/v4.1/adsensehost-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/alertcenter/v1beta1/alertcenter-gen.go b/alertcenter/v1beta1/alertcenter-gen.go
index 58d8fdd..0a1cd08 100644
--- a/alertcenter/v1beta1/alertcenter-gen.go
+++ b/alertcenter/v1beta1/alertcenter-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/analytics/v2.4/analytics-gen.go b/analytics/v2.4/analytics-gen.go
index a9a2b3c..768b44c 100644
--- a/analytics/v2.4/analytics-gen.go
+++ b/analytics/v2.4/analytics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/analytics/v3/analytics-gen.go b/analytics/v3/analytics-gen.go
index 5754f0b..e737e32 100644
--- a/analytics/v3/analytics-gen.go
+++ b/analytics/v3/analytics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/analyticsreporting/v4/analyticsreporting-gen.go b/analyticsreporting/v4/analyticsreporting-gen.go
index 1c1c61d..9f8ba46 100644
--- a/analyticsreporting/v4/analyticsreporting-gen.go
+++ b/analyticsreporting/v4/analyticsreporting-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/androiddeviceprovisioning/v1/androiddeviceprovisioning-gen.go b/androiddeviceprovisioning/v1/androiddeviceprovisioning-gen.go
index b57aa60..45bc6b9 100644
--- a/androiddeviceprovisioning/v1/androiddeviceprovisioning-gen.go
+++ b/androiddeviceprovisioning/v1/androiddeviceprovisioning-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/androidenterprise/v1/androidenterprise-api.json b/androidenterprise/v1/androidenterprise-api.json
index d776c58..869af22 100644
--- a/androidenterprise/v1/androidenterprise-api.json
+++ b/androidenterprise/v1/androidenterprise-api.json
@@ -15,7 +15,7 @@
   "description": "Manages the deployment of apps to Android for Work users.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/android/work/play/emm-api",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/4oEp_ERLhnN2ABk55KEAUwUycA4\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/VlKYEVA-7U4oafD19kx3_U1-kTQ\"",
   "icons": {
     "x16": "https://www.google.com/images/icons/product/android-16.png",
     "x32": "https://www.google.com/images/icons/product/android-32.png"
@@ -2758,7 +2758,7 @@
       }
     }
   },
-  "revision": "20181017",
+  "revision": "20181024",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Administrator": {
@@ -2810,7 +2810,7 @@
         },
         "playSearch": {
           "$ref": "AdministratorWebTokenSpecPlaySearch",
-          "description": "Options for displaying the Play Search page."
+          "description": "Options for displaying the managed Play Search apps page."
         },
         "privateApps": {
           "$ref": "AdministratorWebTokenSpecPrivateApps",
@@ -2818,7 +2818,7 @@
         },
         "storeBuilder": {
           "$ref": "AdministratorWebTokenSpecStoreBuilder",
-          "description": "Options for displaying the Store Builder page."
+          "description": "Options for displaying the Organize apps page."
         },
         "webApps": {
           "$ref": "AdministratorWebTokenSpecWebApps",
@@ -2835,7 +2835,7 @@
           "type": "boolean"
         },
         "enabled": {
-          "description": "Whether the Play Search page is displayed. Default is true.",
+          "description": "Whether the managed Play Search apps page is displayed. Default is true.",
           "type": "boolean"
         }
       },
@@ -2855,7 +2855,7 @@
       "id": "AdministratorWebTokenSpecStoreBuilder",
       "properties": {
         "enabled": {
-          "description": "Whether the Store Builder page is displayed. Default is true.",
+          "description": "Whether the Organize apps page is displayed. Default is true.",
           "type": "boolean"
         }
       },
diff --git a/androidenterprise/v1/androidenterprise-gen.go b/androidenterprise/v1/androidenterprise-gen.go
index 8424b14..bbff292 100644
--- a/androidenterprise/v1/androidenterprise-gen.go
+++ b/androidenterprise/v1/androidenterprise-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -335,13 +336,13 @@
 	// Permission: Deprecated. Use PlaySearch.approveApps.
 	Permission []string `json:"permission,omitempty"`
 
-	// PlaySearch: Options for displaying the Play Search page.
+	// PlaySearch: Options for displaying the managed Play Search apps page.
 	PlaySearch *AdministratorWebTokenSpecPlaySearch `json:"playSearch,omitempty"`
 
 	// PrivateApps: Options for displaying the Private Apps page.
 	PrivateApps *AdministratorWebTokenSpecPrivateApps `json:"privateApps,omitempty"`
 
-	// StoreBuilder: Options for displaying the Store Builder page.
+	// StoreBuilder: Options for displaying the Organize apps page.
 	StoreBuilder *AdministratorWebTokenSpecStoreBuilder `json:"storeBuilder,omitempty"`
 
 	// WebApps: Options for displaying the Web Apps page.
@@ -375,7 +376,8 @@
 	// false.
 	ApproveApps bool `json:"approveApps,omitempty"`
 
-	// Enabled: Whether the Play Search page is displayed. Default is true.
+	// Enabled: Whether the managed Play Search apps page is displayed.
+	// Default is true.
 	Enabled bool `json:"enabled,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "ApproveApps") to
@@ -429,7 +431,7 @@
 }
 
 type AdministratorWebTokenSpecStoreBuilder struct {
-	// Enabled: Whether the Store Builder page is displayed. Default is
+	// Enabled: Whether the Organize apps page is displayed. Default is
 	// true.
 	Enabled bool `json:"enabled,omitempty"`
 
diff --git a/androidmanagement/v1/androidmanagement-gen.go b/androidmanagement/v1/androidmanagement-gen.go
index ee3f934..53e6bcd 100644
--- a/androidmanagement/v1/androidmanagement-gen.go
+++ b/androidmanagement/v1/androidmanagement-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/androidpublisher/v1.1/androidpublisher-gen.go b/androidpublisher/v1.1/androidpublisher-gen.go
index 4ad72bc..000b640 100644
--- a/androidpublisher/v1.1/androidpublisher-gen.go
+++ b/androidpublisher/v1.1/androidpublisher-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/androidpublisher/v1/androidpublisher-gen.go b/androidpublisher/v1/androidpublisher-gen.go
index cac2fc6..74c5e2a 100644
--- a/androidpublisher/v1/androidpublisher-gen.go
+++ b/androidpublisher/v1/androidpublisher-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/androidpublisher/v2/androidpublisher-gen.go b/androidpublisher/v2/androidpublisher-gen.go
index c48dd79..51c1498 100644
--- a/androidpublisher/v2/androidpublisher-gen.go
+++ b/androidpublisher/v2/androidpublisher-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/androidpublisher/v3/androidpublisher-gen.go b/androidpublisher/v3/androidpublisher-gen.go
index b607690..f98bb65 100644
--- a/androidpublisher/v3/androidpublisher-gen.go
+++ b/androidpublisher/v3/androidpublisher-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/api-list.json b/api-list.json
index 226711f..4165a1b 100644
--- a/api-list.json
+++ b/api-list.json
@@ -891,6 +891,21 @@
   },
   {
    "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",
diff --git a/appengine/v1/appengine-gen.go b/appengine/v1/appengine-gen.go
index e58d9ab..1178f65 100644
--- a/appengine/v1/appengine-gen.go
+++ b/appengine/v1/appengine-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/appengine/v1alpha/appengine-gen.go b/appengine/v1alpha/appengine-gen.go
index 82132ab..10d0fb7 100644
--- a/appengine/v1alpha/appengine-gen.go
+++ b/appengine/v1alpha/appengine-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/appengine/v1beta/appengine-gen.go b/appengine/v1beta/appengine-gen.go
index b03d28c..06e20fe 100644
--- a/appengine/v1beta/appengine-gen.go
+++ b/appengine/v1beta/appengine-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/appengine/v1beta4/appengine-gen.go b/appengine/v1beta4/appengine-gen.go
index 8759285..f31c917 100644
--- a/appengine/v1beta4/appengine-gen.go
+++ b/appengine/v1beta4/appengine-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/appengine/v1beta5/appengine-gen.go b/appengine/v1beta5/appengine-gen.go
index 96c7836..baeeace 100644
--- a/appengine/v1beta5/appengine-gen.go
+++ b/appengine/v1beta5/appengine-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/appsactivity/v1/appsactivity-gen.go b/appsactivity/v1/appsactivity-gen.go
index c20d13c..ccb8e65 100644
--- a/appsactivity/v1/appsactivity-gen.go
+++ b/appsactivity/v1/appsactivity-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/appstate/v1/appstate-gen.go b/appstate/v1/appstate-gen.go
index 0e3ee14..0067a15 100644
--- a/appstate/v1/appstate-gen.go
+++ b/appstate/v1/appstate-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/bigquery/v2/bigquery-gen.go b/bigquery/v2/bigquery-gen.go
index 7700519..f0ca591 100644
--- a/bigquery/v2/bigquery-gen.go
+++ b/bigquery/v2/bigquery-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/bigquerydatatransfer/v1/bigquerydatatransfer-api.json b/bigquerydatatransfer/v1/bigquerydatatransfer-api.json
index 8e0c22e..e92216c 100644
--- a/bigquerydatatransfer/v1/bigquerydatatransfer-api.json
+++ b/bigquerydatatransfer/v1/bigquerydatatransfer-api.json
@@ -1145,7 +1145,7 @@
       }
     }
   },
-  "revision": "20181001",
+  "revision": "20181027",
   "rootUrl": "https://bigquerydatatransfer.googleapis.com/",
   "schemas": {
     "CheckValidCredsRequest": {
@@ -1628,7 +1628,7 @@
             "State placeholder.",
             "Data transfer is scheduled and is waiting to be picked up by\ndata transfer backend.",
             "Data transfer is in progress.",
-            "Data transfer completed successsfully.",
+            "Data transfer completed successfully.",
             "Data transfer failed.",
             "Data transfer is cancelled."
           ],
@@ -1745,7 +1745,7 @@
             "State placeholder.",
             "Data transfer is scheduled and is waiting to be picked up by\ndata transfer backend.",
             "Data transfer is in progress.",
-            "Data transfer completed successsfully.",
+            "Data transfer completed successfully.",
             "Data transfer failed.",
             "Data transfer is cancelled."
           ],
diff --git a/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go b/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go
index a201bfe..3545e37 100644
--- a/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go
+++ b/bigquerydatatransfer/v1/bigquerydatatransfer-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -1043,7 +1044,7 @@
 	// up by
 	// data transfer backend.
 	//   "RUNNING" - Data transfer is in progress.
-	//   "SUCCEEDED" - Data transfer completed successsfully.
+	//   "SUCCEEDED" - Data transfer completed successfully.
 	//   "FAILED" - Data transfer failed.
 	//   "CANCELLED" - Data transfer is cancelled.
 	State string `json:"state,omitempty"`
@@ -1188,7 +1189,7 @@
 	// up by
 	// data transfer backend.
 	//   "RUNNING" - Data transfer is in progress.
-	//   "SUCCEEDED" - Data transfer completed successsfully.
+	//   "SUCCEEDED" - Data transfer completed successfully.
 	//   "FAILED" - Data transfer failed.
 	//   "CANCELLED" - Data transfer is cancelled.
 	State string `json:"state,omitempty"`
diff --git a/binaryauthorization/v1beta1/binaryauthorization-gen.go b/binaryauthorization/v1beta1/binaryauthorization-gen.go
index 7e22cd5..963d4ea 100644
--- a/binaryauthorization/v1beta1/binaryauthorization-gen.go
+++ b/binaryauthorization/v1beta1/binaryauthorization-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/blogger/v2/blogger-gen.go b/blogger/v2/blogger-gen.go
index 399831d..6066a7f 100644
--- a/blogger/v2/blogger-gen.go
+++ b/blogger/v2/blogger-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/blogger/v3/blogger-gen.go b/blogger/v3/blogger-gen.go
index 8941c3a..e9b951d 100644
--- a/blogger/v3/blogger-gen.go
+++ b/blogger/v3/blogger-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/books/v1/books-gen.go b/books/v1/books-gen.go
index fb12233..92029b5 100644
--- a/books/v1/books-gen.go
+++ b/books/v1/books-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/calendar/v3/calendar-gen.go b/calendar/v3/calendar-gen.go
index 19c8015..379477b 100644
--- a/calendar/v3/calendar-gen.go
+++ b/calendar/v3/calendar-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/chat/v1/chat-gen.go b/chat/v1/chat-gen.go
index fe4d3ce..6aadfb9 100644
--- a/chat/v1/chat-gen.go
+++ b/chat/v1/chat-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/civicinfo/v2/civicinfo-gen.go b/civicinfo/v2/civicinfo-gen.go
index e283684..0910d32 100644
--- a/civicinfo/v2/civicinfo-gen.go
+++ b/civicinfo/v2/civicinfo-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/classroom/v1/classroom-gen.go b/classroom/v1/classroom-gen.go
index da5f8d7..a2720f8 100644
--- a/classroom/v1/classroom-gen.go
+++ b/classroom/v1/classroom-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudasset/v1beta1/cloudasset-gen.go b/cloudasset/v1beta1/cloudasset-gen.go
index c229646..ac9a56f 100644
--- a/cloudasset/v1beta1/cloudasset-gen.go
+++ b/cloudasset/v1beta1/cloudasset-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudbilling/v1/cloudbilling-gen.go b/cloudbilling/v1/cloudbilling-gen.go
index aee6648..b358d01 100644
--- a/cloudbilling/v1/cloudbilling-gen.go
+++ b/cloudbilling/v1/cloudbilling-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudbuild/v1/cloudbuild-gen.go b/cloudbuild/v1/cloudbuild-gen.go
index 47de077..da26e38 100644
--- a/cloudbuild/v1/cloudbuild-gen.go
+++ b/cloudbuild/v1/cloudbuild-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/clouddebugger/v2/clouddebugger-gen.go b/clouddebugger/v2/clouddebugger-gen.go
index 5dd8db9..34d64bd 100644
--- a/clouddebugger/v2/clouddebugger-gen.go
+++ b/clouddebugger/v2/clouddebugger-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/clouderrorreporting/v1beta1/clouderrorreporting-gen.go b/clouderrorreporting/v1beta1/clouderrorreporting-gen.go
index 00c8c35..ef20d61 100644
--- a/clouderrorreporting/v1beta1/clouderrorreporting-gen.go
+++ b/clouderrorreporting/v1beta1/clouderrorreporting-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudfunctions/v1/cloudfunctions-gen.go b/cloudfunctions/v1/cloudfunctions-gen.go
index c720912..dd5b195 100644
--- a/cloudfunctions/v1/cloudfunctions-gen.go
+++ b/cloudfunctions/v1/cloudfunctions-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudfunctions/v1beta2/cloudfunctions-gen.go b/cloudfunctions/v1beta2/cloudfunctions-gen.go
index d6a73ba..b8807d4 100644
--- a/cloudfunctions/v1beta2/cloudfunctions-gen.go
+++ b/cloudfunctions/v1beta2/cloudfunctions-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudiot/v1/cloudiot-gen.go b/cloudiot/v1/cloudiot-gen.go
index 97360fd..3416455 100644
--- a/cloudiot/v1/cloudiot-gen.go
+++ b/cloudiot/v1/cloudiot-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudkms/v1/cloudkms-gen.go b/cloudkms/v1/cloudkms-gen.go
index 0f5b14b..b840421 100644
--- a/cloudkms/v1/cloudkms-gen.go
+++ b/cloudkms/v1/cloudkms-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudprofiler/v2/cloudprofiler-gen.go b/cloudprofiler/v2/cloudprofiler-gen.go
index d35a563..aa2bdc4 100644
--- a/cloudprofiler/v2/cloudprofiler-gen.go
+++ b/cloudprofiler/v2/cloudprofiler-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudresourcemanager/v1/cloudresourcemanager-gen.go b/cloudresourcemanager/v1/cloudresourcemanager-gen.go
index 42b44c7..ec405fd 100644
--- a/cloudresourcemanager/v1/cloudresourcemanager-gen.go
+++ b/cloudresourcemanager/v1/cloudresourcemanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go b/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
index 4c224fe..e9772d9 100644
--- a/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
+++ b/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudresourcemanager/v2/cloudresourcemanager-gen.go b/cloudresourcemanager/v2/cloudresourcemanager-gen.go
index 550c1f6..31f349e 100644
--- a/cloudresourcemanager/v2/cloudresourcemanager-gen.go
+++ b/cloudresourcemanager/v2/cloudresourcemanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudresourcemanager/v2beta1/cloudresourcemanager-gen.go b/cloudresourcemanager/v2beta1/cloudresourcemanager-gen.go
index e19ff4a..dc65337 100644
--- a/cloudresourcemanager/v2beta1/cloudresourcemanager-gen.go
+++ b/cloudresourcemanager/v2beta1/cloudresourcemanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudsearch/v1/cloudsearch-api.json b/cloudsearch/v1/cloudsearch-api.json
new file mode 100644
index 0000000..70cfe37
--- /dev/null
+++ b/cloudsearch/v1/cloudsearch-api.json
@@ -0,0 +1,4281 @@
+{
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud_search": {
+          "description": "Index and serve your organization's data with Cloud Search"
+        },
+        "https://www.googleapis.com/auth/cloud_search.debug": {
+          "description": "New Service: https://www.googleapis.com/auth/cloud_search.debug"
+        },
+        "https://www.googleapis.com/auth/cloud_search.indexing": {
+          "description": "New Service: https://www.googleapis.com/auth/cloud_search.indexing"
+        },
+        "https://www.googleapis.com/auth/cloud_search.query": {
+          "description": "Search your organization's data in the Cloud Search index"
+        },
+        "https://www.googleapis.com/auth/cloud_search.settings": {
+          "description": "New Service: https://www.googleapis.com/auth/cloud_search.settings"
+        },
+        "https://www.googleapis.com/auth/cloud_search.settings.indexing": {
+          "description": "New Service: https://www.googleapis.com/auth/cloud_search.settings.indexing"
+        },
+        "https://www.googleapis.com/auth/cloud_search.settings.query": {
+          "description": "New Service: https://www.googleapis.com/auth/cloud_search.settings.query"
+        },
+        "https://www.googleapis.com/auth/cloud_search.stats": {
+          "description": "New Service: https://www.googleapis.com/auth/cloud_search.stats"
+        },
+        "https://www.googleapis.com/auth/cloud_search.stats.indexing": {
+          "description": "New Service: https://www.googleapis.com/auth/cloud_search.stats.indexing"
+        }
+      }
+    }
+  },
+  "basePath": "",
+  "baseUrl": "https://cloudsearch.googleapis.com/",
+  "batchPath": "batch",
+  "canonicalName": "Cloud Search",
+  "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.",
+  "discoveryVersion": "v1",
+  "documentationLink": "https://gsuite.google.com/products/cloud-search/",
+  "fullyEncodeReservedExpansion": true,
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
+  "id": "cloudsearch:v1",
+  "kind": "discovery#restDescription",
+  "name": "cloudsearch",
+  "ownerDomain": "google.com",
+  "ownerName": "Google",
+  "parameters": {
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "location": "query",
+      "type": "string"
+    },
+    "alt": {
+      "default": "json",
+      "description": "Data format for response.",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "enumDescriptions": [
+        "Responses with Content-Type of application/json",
+        "Media download with context-dependent Content-Type",
+        "Responses with Content-Type of application/x-protobuf"
+      ],
+      "location": "query",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "location": "query",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "location": "query",
+      "type": "string"
+    },
+    "key": {
+      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
+      "location": "query",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "location": "query",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "default": "true",
+      "description": "Returns response with indentations and line breaks.",
+      "location": "query",
+      "type": "boolean"
+    },
+    "quotaUser": {
+      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
+      "location": "query",
+      "type": "string"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "location": "query",
+      "type": "string"
+    }
+  },
+  "protocol": "rest",
+  "resources": {
+    "debug": {
+      "resources": {
+        "datasources": {
+          "resources": {
+            "items": {
+              "resources": {
+                "unmappedids": {
+                  "methods": {
+                    "list": {
+                      "description": "List all unmapped identities for a specific item.",
+                      "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}/unmappedids",
+                      "httpMethod": "GET",
+                      "id": "cloudsearch.debug.datasources.items.unmappedids.list",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "pageSize": {
+                          "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
+                          "format": "int32",
+                          "location": "query",
+                          "type": "integer"
+                        },
+                        "pageToken": {
+                          "description": "The next_page_token value returned from a previous List request, if any.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "parent": {
+                          "description": "The name of the item, in the following format:\ndatasources/{source_id}/items/{ID}",
+                          "location": "path",
+                          "pattern": "^datasources/[^/]+/items/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/debug/{+parent}/unmappedids",
+                      "response": {
+                        "$ref": "ListUnmappedIdentitiesResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud_search",
+                        "https://www.googleapis.com/auth/cloud_search.debug"
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        "identitysources": {
+          "resources": {
+            "items": {
+              "methods": {
+                "listForunmappedidentity": {
+                  "description": "Lists names of items associated with an unmapped identity.",
+                  "flatPath": "v1/debug/identitysources/{identitysourcesId}/items:forunmappedidentity",
+                  "httpMethod": "GET",
+                  "id": "cloudsearch.debug.identitysources.items.listForunmappedidentity",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "groupResourceName": {
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The next_page_token value returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "The name of the identity source, in the following format:\nidentitysources/{source_id}}",
+                      "location": "path",
+                      "pattern": "^identitysources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "userResourceName": {
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/debug/{+parent}/items:forunmappedidentity",
+                  "response": {
+                    "$ref": "ListItemNamesForUnmappedIdentityResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.debug"
+                  ]
+                }
+              }
+            },
+            "unmappedids": {
+              "methods": {
+                "list": {
+                  "description": "Lists unmapped user identities for an identity source.",
+                  "flatPath": "v1/debug/identitysources/{identitysourcesId}/unmappedids",
+                  "httpMethod": "GET",
+                  "id": "cloudsearch.debug.identitysources.unmappedids.list",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "pageSize": {
+                      "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The next_page_token value returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "The name of the identity source, in the following format:\nidentitysources/{source_id}",
+                      "location": "path",
+                      "pattern": "^identitysources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "resolutionStatusCode": {
+                      "description": "Limit users selection to this status.",
+                      "enum": [
+                        "CODE_UNSPECIFIED",
+                        "NOT_FOUND",
+                        "IDENTITY_SOURCE_NOT_FOUND",
+                        "IDENTITY_SOURCE_MISCONFIGURED",
+                        "TOO_MANY_MAPPINGS_FOUND",
+                        "INTERNAL_ERROR"
+                      ],
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/debug/{+parent}/unmappedids",
+                  "response": {
+                    "$ref": "ListUnmappedIdentitiesResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.debug"
+                  ]
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "indexing": {
+      "resources": {
+        "datasources": {
+          "methods": {
+            "deleteSchema": {
+              "description": "Deletes the schema of a data source.",
+              "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+              "httpMethod": "DELETE",
+              "id": "cloudsearch.indexing.datasources.deleteSchema",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "name": {
+                  "description": "Name of the data source to delete Schema.  Format:\ndatasources/{source_id}",
+                  "location": "path",
+                  "pattern": "^datasources/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/indexing/{+name}/schema",
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            },
+            "getSchema": {
+              "description": "Gets the schema of a data source.",
+              "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+              "httpMethod": "GET",
+              "id": "cloudsearch.indexing.datasources.getSchema",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "name": {
+                  "description": "Name of the data source to get Schema.  Format:\ndatasources/{source_id}",
+                  "location": "path",
+                  "pattern": "^datasources/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/indexing/{+name}/schema",
+              "response": {
+                "$ref": "Schema"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            },
+            "updateSchema": {
+              "description": "Updates the schema of a data source.",
+              "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+              "httpMethod": "PUT",
+              "id": "cloudsearch.indexing.datasources.updateSchema",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Name of the data source to update Schema.  Format:\ndatasources/{source_id}",
+                  "location": "path",
+                  "pattern": "^datasources/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/indexing/{+name}/schema",
+              "request": {
+                "$ref": "UpdateSchemaRequest"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            }
+          },
+          "resources": {
+            "items": {
+              "methods": {
+                "delete": {
+                  "description": "Deletes Item resource for the\nspecified resource name.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
+                  "httpMethod": "DELETE",
+                  "id": "cloudsearch.indexing.datasources.items.delete",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "connectorName": {
+                      "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "debugOptions.enableDebugging": {
+                      "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "mode": {
+                      "description": "Required. The RequestMode for this request.",
+                      "enum": [
+                        "UNSPECIFIED",
+                        "SYNCHRONOUS",
+                        "ASYNCHRONOUS"
+                      ],
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "name": {
+                      "description": "Required. Name of the item to delete.\nFormat: datasources/{source_id}/items/{item_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+/items/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "version": {
+                      "description": "Required. The incremented version of the item to delete from the index.\nThe indexing system stores the version from the datasource as a\nbyte string and compares the Item version in the index\nto the version of the queued Item using lexical ordering.\n\u003cbr /\u003e\u003cbr /\u003e\nCloud Search Indexing won't delete any queued item with\na version value that is less than or equal to\nthe version of the currently indexed item.\nThe maximum length for this field is 1024 bytes.",
+                      "format": "byte",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "deleteQueueItems": {
+                  "description": "Deletes all items in a queue. This method is useful for deleting stale\nitems.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items:deleteQueueItems",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.indexing.datasources.items.deleteQueueItems",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Name of the Data Source to delete items in a queue.\nFormat: datasources/{source_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}/items:deleteQueueItems",
+                  "request": {
+                    "$ref": "DeleteQueueItemsRequest"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "get": {
+                  "description": "Gets Item resource by item name.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
+                  "httpMethod": "GET",
+                  "id": "cloudsearch.indexing.datasources.items.get",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "connectorName": {
+                      "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "debugOptions.enableDebugging": {
+                      "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "name": {
+                      "description": "Name of the item to get info.\nFormat: datasources/{source_id}/items/{item_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+/items/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}",
+                  "response": {
+                    "$ref": "Item"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "index": {
+                  "description": "Updates Item ACL, metadata, and\ncontent. It will insert the Item if it\ndoes not exist.\nThis method does not support partial updates.  Fields with no provided\nvalues are cleared out in the Cloud Search index.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:index",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.indexing.datasources.items.index",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Name of the Item. Format:\ndatasources/{source_id}/items/{item_id}\n\u003cbr /\u003eThis is a required field.\nThe maximum length is 1536 characters.",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+/items/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}:index",
+                  "request": {
+                    "$ref": "IndexItemRequest"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "list": {
+                  "description": "Lists all or a subset of Item resources.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items",
+                  "httpMethod": "GET",
+                  "id": "cloudsearch.indexing.datasources.items.list",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "brief": {
+                      "description": "When set to true, the indexing system only populates the following fields:\nname,\nversion,\nmetadata.hash,\nstructured_data.hash,\ncontent.hash.\n\u003cbr /\u003eIf this value is false, then all the fields are populated in Item.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "connectorName": {
+                      "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "debugOptions.enableDebugging": {
+                      "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                      "location": "query",
+                      "type": "boolean"
+                    },
+                    "name": {
+                      "description": "Name of the Data Source to list Items.  Format:\ndatasources/{source_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "Maximum number of items to fetch in a request.\nThe max value is 1000 when brief is true.  The max value is 10 if brief\nis false.\n\u003cbr /\u003eThe default value is 10",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The next_page_token value returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}/items",
+                  "response": {
+                    "$ref": "ListItemsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "poll": {
+                  "description": "Polls for unreserved items from the indexing queue and marks a\nset as reserved, starting with items that have\nthe oldest timestamp from the highest priority\nItemStatus.\nThe priority order is as follows: \u003cbr /\u003e\nERROR\n\u003cbr /\u003e\nMODIFIED\n\u003cbr /\u003e\nNEW_ITEM\n\u003cbr /\u003e\nACCEPTED\n\u003cbr /\u003e\nReserving items ensures that polling from other threads\ncannot create overlapping sets.\n\nAfter handling the reserved items, the client should put items back\ninto the unreserved state, either by calling\nindex,\nor by calling\npush with\nthe type REQUEUE.\n\nItems automatically become available (unreserved) after 4 hours even if no\nupdate or push method is called.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items:poll",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.indexing.datasources.items.poll",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Name of the Data Source to poll items.\nFormat: datasources/{source_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}/items:poll",
+                  "request": {
+                    "$ref": "PollItemsRequest"
+                  },
+                  "response": {
+                    "$ref": "PollItemsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "push": {
+                  "description": "Pushes an item onto a queue for later polling and updating.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:push",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.indexing.datasources.items.push",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Name of the item to\npush into the indexing queue.\u003cbr /\u003e\nFormat: datasources/{source_id}/items/{ID}\n\u003cbr /\u003eThis is a required field.\nThe maximum length is 1536 characters.",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+/items/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}:push",
+                  "request": {
+                    "$ref": "PushItemRequest"
+                  },
+                  "response": {
+                    "$ref": "Item"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "unreserve": {
+                  "description": "Unreserves all items from a queue, making them all eligible to be\npolled.  This method is useful for resetting the indexing queue\nafter a connector has been restarted.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items:unreserve",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.indexing.datasources.items.unreserve",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Name of the Data Source to unreserve all items.\nFormat: datasources/{source_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}/items:unreserve",
+                  "request": {
+                    "$ref": "UnreserveItemsRequest"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                },
+                "upload": {
+                  "description": "Creates an upload session for uploading item content. For items smaller\nthan 100 KiB, it's easier to embed the content\ninline within\nupdate.",
+                  "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:upload",
+                  "httpMethod": "POST",
+                  "id": "cloudsearch.indexing.datasources.items.upload",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Name of the Data Source to start a resumable upload.\nFormat: datasources/{source_id}",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+/items/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/indexing/{+name}:upload",
+                  "request": {
+                    "$ref": "StartUploadItemRequest"
+                  },
+                  "response": {
+                    "$ref": "UploadItemRef"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.indexing"
+                  ]
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "media": {
+      "methods": {
+        "upload": {
+          "description": "Uploads media for indexing.\n\nThe upload endpoint supports direct and resumable upload protocols and\nis intended for large items that can not be inlined during index requests. To\nindex large content:\n\n1. Call upload to begin\n   a session and get the item reference.\n1. Upload the content using the item reference's resource name.\n1. Call index with the item\n   reference as the content.\n\nFor additional information, see\n[Create a content connector using the REST API](https://developers.google.com/cloud-search/docs/guides/content-connector#rest).",
+          "flatPath": "v1/media/{mediaId}",
+          "httpMethod": "POST",
+          "id": "cloudsearch.media.upload",
+          "mediaUpload": {
+            "accept": [
+              "*/*"
+            ],
+            "protocols": {
+              "simple": {
+                "multipart": true,
+                "path": "/upload/v1/media/{+resourceName}"
+              }
+            }
+          },
+          "parameterOrder": [
+            "resourceName"
+          ],
+          "parameters": {
+            "resourceName": {
+              "description": "Name of the media that is being downloaded.  See\nReadRequest.resource_name.",
+              "location": "path",
+              "pattern": "^.+$",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "v1/media/{+resourceName}",
+          "request": {
+            "$ref": "Media"
+          },
+          "response": {
+            "$ref": "Media"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud_search",
+            "https://www.googleapis.com/auth/cloud_search.indexing"
+          ],
+          "supportsMediaUpload": true
+        }
+      }
+    },
+    "operations": {
+      "methods": {
+        "get": {
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+          "flatPath": "v1/operations/{operationsId}",
+          "httpMethod": "GET",
+          "id": "cloudsearch.operations.get",
+          "parameterOrder": [
+            "name"
+          ],
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource.",
+              "location": "path",
+              "pattern": "^operations/.+$",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "path": "v1/{+name}",
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud_search",
+            "https://www.googleapis.com/auth/cloud_search.debug",
+            "https://www.googleapis.com/auth/cloud_search.indexing",
+            "https://www.googleapis.com/auth/cloud_search.settings",
+            "https://www.googleapis.com/auth/cloud_search.settings.indexing",
+            "https://www.googleapis.com/auth/cloud_search.settings.query"
+          ]
+        }
+      }
+    },
+    "query": {
+      "methods": {
+        "search": {
+          "description": "The Cloud Search Query API provides the search method, which returns\nthe most relevant results from a user query.  The results can come from\nG Suite Apps, such as Gmail or Google Drive, or they can come from data\nthat you have indexed from a third party.",
+          "flatPath": "v1/query/search",
+          "httpMethod": "POST",
+          "id": "cloudsearch.query.search",
+          "parameterOrder": [],
+          "parameters": {},
+          "path": "v1/query/search",
+          "request": {
+            "$ref": "SearchRequest"
+          },
+          "response": {
+            "$ref": "SearchResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud_search",
+            "https://www.googleapis.com/auth/cloud_search.query"
+          ]
+        },
+        "suggest": {
+          "description": "Provides suggestions for autocompleting the query.",
+          "flatPath": "v1/query/suggest",
+          "httpMethod": "POST",
+          "id": "cloudsearch.query.suggest",
+          "parameterOrder": [],
+          "parameters": {},
+          "path": "v1/query/suggest",
+          "request": {
+            "$ref": "SuggestRequest"
+          },
+          "response": {
+            "$ref": "SuggestResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud_search",
+            "https://www.googleapis.com/auth/cloud_search.query"
+          ]
+        }
+      },
+      "resources": {
+        "sources": {
+          "methods": {
+            "list": {
+              "description": "Returns list of sources that user can use for Search and Suggest APIs.",
+              "flatPath": "v1/query/sources",
+              "httpMethod": "GET",
+              "id": "cloudsearch.query.sources.list",
+              "parameterOrder": [],
+              "parameters": {
+                "pageToken": {
+                  "description": "Number of sources to return in the response.",
+                  "location": "query",
+                  "type": "string"
+                },
+                "requestOptions.debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "requestOptions.languageCode": {
+                  "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nFor translations.",
+                  "location": "query",
+                  "type": "string"
+                },
+                "requestOptions.searchApplicationId": {
+                  "description": "Id of the application created using SearchApplicationsService.",
+                  "location": "query",
+                  "type": "string"
+                },
+                "requestOptions.timeZone": {
+                  "description": "Current user's time zone id, such as \"America/Los_Angeles\" or\n\"Australia/Sydney\". These IDs are defined by\n[Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/)\nproject, and currently available in the file\n[timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml)",
+                  "location": "query",
+                  "type": "string"
+                }
+              },
+              "path": "v1/query/sources",
+              "response": {
+                "$ref": "ListQuerySourcesResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.query"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "settings": {
+      "resources": {
+        "datasources": {
+          "methods": {
+            "create": {
+              "description": "Creates data source.",
+              "flatPath": "v1/settings/datasources",
+              "httpMethod": "POST",
+              "id": "cloudsearch.settings.datasources.create",
+              "parameterOrder": [],
+              "parameters": {},
+              "path": "v1/settings/datasources",
+              "request": {
+                "$ref": "DataSource"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            },
+            "delete": {
+              "description": "Deletes a data source.",
+              "flatPath": "v1/settings/datasources/{datasourcesId}",
+              "httpMethod": "DELETE",
+              "id": "cloudsearch.settings.datasources.delete",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "name": {
+                  "description": "Name of the data source.\nFormat: datasources/{source_id}.",
+                  "location": "path",
+                  "pattern": "^datasources/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/{+name}",
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            },
+            "get": {
+              "description": "Gets a data source.",
+              "flatPath": "v1/settings/datasources/{datasourcesId}",
+              "httpMethod": "GET",
+              "id": "cloudsearch.settings.datasources.get",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "name": {
+                  "description": "Name of the data source resource.\nFormat: datasources/{source_id}.",
+                  "location": "path",
+                  "pattern": "^datasources/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/{+name}",
+              "response": {
+                "$ref": "DataSource"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            },
+            "list": {
+              "description": "Lists data sources.",
+              "flatPath": "v1/settings/datasources",
+              "httpMethod": "GET",
+              "id": "cloudsearch.settings.datasources.list",
+              "parameterOrder": [],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "pageSize": {
+                  "description": "Maximum number of data sources to fetch in a request.\nThe max value is 100.\n\u003cbr /\u003eThe default value is 10",
+                  "format": "int32",
+                  "location": "query",
+                  "type": "integer"
+                },
+                "pageToken": {
+                  "description": "Starting index of the results.",
+                  "location": "query",
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/datasources",
+              "response": {
+                "$ref": "ListDataSourceResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            },
+            "update": {
+              "description": "Updates a data source.",
+              "flatPath": "v1/settings/datasources/{datasourcesId}",
+              "httpMethod": "PUT",
+              "id": "cloudsearch.settings.datasources.update",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Name of the data source resource.\nFormat: datasources/{source_id}.\n\u003cbr /\u003eThe name is ignored when creating a data source.",
+                  "location": "path",
+                  "pattern": "^datasources/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/{+name}",
+              "request": {
+                "$ref": "UpdateDataSourceRequest"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+              ]
+            }
+          }
+        },
+        "searchapplications": {
+          "methods": {
+            "create": {
+              "description": "Creates a search application.",
+              "flatPath": "v1/settings/searchapplications",
+              "httpMethod": "POST",
+              "id": "cloudsearch.settings.searchapplications.create",
+              "parameterOrder": [],
+              "parameters": {},
+              "path": "v1/settings/searchapplications",
+              "request": {
+                "$ref": "SearchApplication"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.query"
+              ]
+            },
+            "delete": {
+              "description": "Deletes a search application.",
+              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+              "httpMethod": "DELETE",
+              "id": "cloudsearch.settings.searchapplications.delete",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "name": {
+                  "description": "The name of the search application to be deleted.\n\u003cbr /\u003eFormat: applications/{application_id}.",
+                  "location": "path",
+                  "pattern": "^searchapplications/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/{+name}",
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.query"
+              ]
+            },
+            "get": {
+              "description": "Gets the specified search application.",
+              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+              "httpMethod": "GET",
+              "id": "cloudsearch.settings.searchapplications.get",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "name": {
+                  "description": "Name of the search application.\n\u003cbr /\u003eFormat: applications/{application_id}.",
+                  "location": "path",
+                  "pattern": "^searchapplications/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/{+name}",
+              "response": {
+                "$ref": "SearchApplication"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.query"
+              ]
+            },
+            "list": {
+              "description": "Lists all search applications.",
+              "flatPath": "v1/settings/searchapplications",
+              "httpMethod": "GET",
+              "id": "cloudsearch.settings.searchapplications.list",
+              "parameterOrder": [],
+              "parameters": {
+                "debugOptions.enableDebugging": {
+                  "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+                  "location": "query",
+                  "type": "boolean"
+                },
+                "pageSize": {
+                  "description": "The maximum number of items to return.",
+                  "format": "int32",
+                  "location": "query",
+                  "type": "integer"
+                },
+                "pageToken": {
+                  "description": "The next_page_token value returned from a previous List request, if any.\n\u003cbr/\u003e The default value is 10",
+                  "location": "query",
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/searchapplications",
+              "response": {
+                "$ref": "ListSearchApplicationsResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.query"
+              ]
+            },
+            "reset": {
+              "description": "Resets a search application to default settings. This will return an empty\nresponse.",
+              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}:reset",
+              "httpMethod": "POST",
+              "id": "cloudsearch.settings.searchapplications.reset",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The name of the search application to be reset.\n\u003cbr /\u003eFormat: applications/{application_id}.",
+                  "location": "path",
+                  "pattern": "^searchapplications/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/{+name}:reset",
+              "request": {
+                "$ref": "ResetSearchApplicationRequest"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.query"
+              ]
+            },
+            "update": {
+              "description": "Updates a search application.",
+              "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+              "httpMethod": "PUT",
+              "id": "cloudsearch.settings.searchapplications.update",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Name of the Search Application.\n\u003cbr /\u003eFormat: searchapplications/{application_id}.",
+                  "location": "path",
+                  "pattern": "^searchapplications/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/settings/{+name}",
+              "request": {
+                "$ref": "SearchApplication"
+              },
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud_search",
+                "https://www.googleapis.com/auth/cloud_search.settings",
+                "https://www.googleapis.com/auth/cloud_search.settings.query"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "stats": {
+      "methods": {
+        "getIndex": {
+          "description": "Gets indexed item statistics aggreggated across all data sources.",
+          "flatPath": "v1/stats/index",
+          "httpMethod": "GET",
+          "id": "cloudsearch.stats.getIndex",
+          "parameterOrder": [],
+          "parameters": {
+            "fromDate.day": {
+              "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+              "format": "int32",
+              "location": "query",
+              "type": "integer"
+            },
+            "fromDate.month": {
+              "description": "Month of date. Must be from 1 to 12.",
+              "format": "int32",
+              "location": "query",
+              "type": "integer"
+            },
+            "fromDate.year": {
+              "description": "Year of date. Must be from 1 to 9999.",
+              "format": "int32",
+              "location": "query",
+              "type": "integer"
+            },
+            "toDate.day": {
+              "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+              "format": "int32",
+              "location": "query",
+              "type": "integer"
+            },
+            "toDate.month": {
+              "description": "Month of date. Must be from 1 to 12.",
+              "format": "int32",
+              "location": "query",
+              "type": "integer"
+            },
+            "toDate.year": {
+              "description": "Year of date. Must be from 1 to 9999.",
+              "format": "int32",
+              "location": "query",
+              "type": "integer"
+            }
+          },
+          "path": "v1/stats/index",
+          "response": {
+            "$ref": "GetCustomerIndexStatsResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud_search",
+            "https://www.googleapis.com/auth/cloud_search.stats",
+            "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+          ]
+        }
+      },
+      "resources": {
+        "index": {
+          "resources": {
+            "datasources": {
+              "methods": {
+                "get": {
+                  "description": "Gets indexed item statistics for a single data source.",
+                  "flatPath": "v1/stats/index/datasources/{datasourcesId}",
+                  "httpMethod": "GET",
+                  "id": "cloudsearch.stats.index.datasources.get",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "fromDate.day": {
+                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "fromDate.month": {
+                      "description": "Month of date. Must be from 1 to 12.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "fromDate.year": {
+                      "description": "Year of date. Must be from 1 to 9999.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "name": {
+                      "description": "The resource id of the data source to retrieve statistics for,\nin the following format: \"datasources/{source_id}\"",
+                      "location": "path",
+                      "pattern": "^datasources/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "toDate.day": {
+                      "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "toDate.month": {
+                      "description": "Month of date. Must be from 1 to 12.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "toDate.year": {
+                      "description": "Year of date. Must be from 1 to 9999.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    }
+                  },
+                  "path": "v1/stats/index/{+name}",
+                  "response": {
+                    "$ref": "GetDataSourceIndexStatsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud_search",
+                    "https://www.googleapis.com/auth/cloud_search.stats",
+                    "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+                  ]
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "revision": "20181029",
+  "rootUrl": "https://cloudsearch.googleapis.com/",
+  "schemas": {
+    "BooleanOperatorOptions": {
+      "description": "Used to provide a search operator for boolean properties. This is\noptional. Search operators let users restrict the query to specific fields\nrelevant to the type of item being searched.",
+      "id": "BooleanOperatorOptions",
+      "properties": {
+        "operatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\nboolean property. For example, if operatorName is *closed* and the\nproperty's name is *isClosed*, then queries like\n*closed:\u0026lt;value\u0026gt;* will show results only where the value of the\nproperty named *isClosed* matches *\u0026lt;value\u0026gt;*. By contrast, a\nsearch that uses the same *\u0026lt;value\u0026gt;* without an operator will return\nall items where *\u0026lt;value\u0026gt;* matches the value of any\nString properties or text within the content field for the item.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "BooleanPropertyOptions": {
+      "description": "Options for boolean properties.",
+      "id": "BooleanPropertyOptions",
+      "properties": {
+        "operatorOptions": {
+          "$ref": "BooleanOperatorOptions",
+          "description": "If set, describes how the boolean should be used as a search operator."
+        }
+      },
+      "type": "object"
+    },
+    "CompositeFilter": {
+      "id": "CompositeFilter",
+      "properties": {
+        "logicOperator": {
+          "description": "The logic operator of the sub filter.",
+          "enum": [
+            "AND",
+            "OR",
+            "NOT"
+          ],
+          "enumDescriptions": [
+            "Logical operators, which can only be applied to sub filters.",
+            "",
+            "NOT can only be applied on a single sub filter."
+          ],
+          "type": "string"
+        },
+        "subFilters": {
+          "description": "Sub filters.",
+          "items": {
+            "$ref": "Filter"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "CustomerIndexStats": {
+      "description": "Aggregation of items by status code as of the specified date.",
+      "id": "CustomerIndexStats",
+      "properties": {
+        "date": {
+          "$ref": "Date",
+          "description": "Date for which statistics were calculated."
+        },
+        "itemCountByStatus": {
+          "description": "Number of items aggregrated by status code.",
+          "items": {
+            "$ref": "ItemCountByStatus"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DataSource": {
+      "description": "Data source is a logical namespace for items to be indexed.\nAll items must belong to a data source.  This is the prerequisite before\nitems can be indexed into Cloud Search.",
+      "id": "DataSource",
+      "properties": {
+        "disableModifications": {
+          "description": "If true, Indexing API rejects any modification calls to this data source\nsuch as create, update, and delete.\nDisabling this does not imply halting process of previously\naccepted data.",
+          "type": "boolean"
+        },
+        "disableServing": {
+          "description": "Disable serving any search or assist results.",
+          "type": "boolean"
+        },
+        "displayName": {
+          "description": "Required. Display name of the data source\nThe maximum length is 300 characters.",
+          "type": "string"
+        },
+        "indexingServiceAccounts": {
+          "description": "List of service accounts that have indexing access.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "itemsVisibility": {
+          "description": "This restricts visibility to items at a data source level to the\ndisjunction of users/groups mentioned with the field. Note that, this\ndoes not ensure access to a specific item, as users need to have ACL\npermissions on the contained items. This ensures a high level access\non the entire data source, and that the individual items are not shared\noutside this visibility.",
+          "items": {
+            "$ref": "GSuitePrincipal"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "Name of the data source resource.\nFormat: datasources/{source_id}.\n\u003cbr /\u003eThe name is ignored when creating a data source.",
+          "type": "string"
+        },
+        "operationIds": {
+          "description": "IDs of the Long Running Operations (LROs) currently running for this schema.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "shortName": {
+          "description": "A short name or alias for the source.  This value will be used to match the\n'source' operator. For example, if the short name is *\u0026lt;value\u0026gt;* then\nqueries like *source:\u0026lt;value\u0026gt;* will only return results for this\nsource. The value must be unique across all data sources. The value must\nonly contain alphanumeric characters (a-zA-Z0-9). The value cannot start\nwith 'google' and cannot be one of the following: mail, gmail, docs, drive,\ngroups, sites, calendar, hangouts, gplus, keep.\nIts maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DataSourceIndexStats": {
+      "description": "Aggregation of items by status code as of the specified date.",
+      "id": "DataSourceIndexStats",
+      "properties": {
+        "date": {
+          "$ref": "Date",
+          "description": "Date for which index stats were calculated. If the date of request is not\nthe current date then stats calculated on the next day are returned. Stats\nare calculated close to mid night in this case. If date of request is\ncurrent date, then real time stats are returned."
+        },
+        "itemCountByStatus": {
+          "description": "Number of items aggregrated by status code.",
+          "items": {
+            "$ref": "ItemCountByStatus"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DataSourceRestriction": {
+      "description": "Restriction on Datasource.",
+      "id": "DataSourceRestriction",
+      "properties": {
+        "filterOptions": {
+          "description": "Filter options restricting the results. If multiple filters\nare present, they are grouped by object type before joining.\nFilters with the same object type are joined conjunctively, then\nthe resulting expressions are joined disjunctively.\n\nThe maximum number of elements is 20.",
+          "items": {
+            "$ref": "FilterOptions"
+          },
+          "type": "array"
+        },
+        "source": {
+          "$ref": "Source",
+          "description": "The source of restriction."
+        }
+      },
+      "type": "object"
+    },
+    "Date": {
+      "description": "Represents a whole calendar date, for example a date of birth. The time of day and time zone are either specified elsewhere or are not significant. The date is relative to the [Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar). The date must be a valid calendar date between the year 1 and 9999.",
+      "id": "Date",
+      "properties": {
+        "day": {
+          "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "month": {
+          "description": "Month of date. Must be from 1 to 12.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "year": {
+          "description": "Year of date. Must be from 1 to 9999.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "DateOperatorOptions": {
+      "description": "Optional. Provides a search operator for date properties.\nSearch operators let users restrict the query to specific fields relevant\nto the type of item being searched.",
+      "id": "DateOperatorOptions",
+      "properties": {
+        "greaterThanOperatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ndate property using the greater-than operator. For example, if\ngreaterThanOperatorName is *closedafter* and the property's name is\n*closeDate*, then queries like *closedafter:\u0026lt;value\u0026gt;* will\nshow results only where the value of the property named *closeDate* is\nlater than *\u0026lt;value\u0026gt;*.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        },
+        "lessThanOperatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ndate property using the less-than operator. For example, if\nlessThanOperatorName is *closedbefore* and the property's name is\n*closeDate*, then queries like *closedbefore:\u0026lt;value\u0026gt;* will\nshow results only where the value of the property named *closeDate* is\nearlier than *\u0026lt;value\u0026gt;*.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        },
+        "operatorName": {
+          "description": "Indicates the actual string required in the query in order to isolate the\ndate property. For example, suppose an issue tracking schema object\nhas a property named *closeDate* that specifies an operator with an\noperatorName of *closedon*. For searches on that data, queries like\n*closedon:\u0026lt;value\u0026gt;* will show results only where the value of the\n*closeDate* property matches *\u0026lt;value\u0026gt;*. By contrast, a\nsearch that uses the same *\u0026lt;value\u0026gt;* without an operator will return\nall items where *\u0026lt;value\u0026gt;* matches the value of any String\nproperties or text within the content field for the indexed datasource.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DatePropertyOptions": {
+      "description": "Options for date properties.",
+      "id": "DatePropertyOptions",
+      "properties": {
+        "operatorOptions": {
+          "$ref": "DateOperatorOptions",
+          "description": "If set, describes how the date should be used as a search operator."
+        }
+      },
+      "type": "object"
+    },
+    "DateValues": {
+      "description": "List of date values.",
+      "id": "DateValues",
+      "properties": {
+        "values": {
+          "description": "The maximum number of elements is 100.",
+          "items": {
+            "$ref": "Date"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DebugOptions": {
+      "description": "Shared request debug options for all cloudsearch RPC methods.",
+      "id": "DebugOptions",
+      "properties": {
+        "enableDebugging": {
+          "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "DeleteQueueItemsRequest": {
+      "id": "DeleteQueueItemsRequest",
+      "properties": {
+        "connectorName": {
+          "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+          "type": "string"
+        },
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "queue": {
+          "description": "Name of a queue to delete items from.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DisplayedProperty": {
+      "description": "A reference to a top-level property within the object that should be\ndisplayed in search results. The values of the chosen properties will be\ndisplayed in the search results along with the\ndislpay label\nfor that property if one is specified. If a display label is not specified,\nonly the values will be shown.",
+      "id": "DisplayedProperty",
+      "properties": {
+        "propertyName": {
+          "description": "The name of the top-level property as defined in a property definition\nfor the object. If the name is not a defined property in the schema, an\nerror will be given when attempting to update the schema.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DoubleOperatorOptions": {
+      "description": "Used to provide a search operator for double properties. This is\noptional. Search operators let users restrict the query to specific fields\nrelevant to the type of item being searched.",
+      "id": "DoubleOperatorOptions",
+      "properties": {
+        "operatorName": {
+          "description": "Indicates the operator name required in the query in order to use the\ndouble property in sorting or as a facet.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DoublePropertyOptions": {
+      "description": "Options for double properties.",
+      "id": "DoublePropertyOptions",
+      "properties": {
+        "operatorOptions": {
+          "$ref": "DoubleOperatorOptions",
+          "description": "If set, describes how the double should be used as a search operator."
+        }
+      },
+      "type": "object"
+    },
+    "DoubleValues": {
+      "description": "List of double values.",
+      "id": "DoubleValues",
+      "properties": {
+        "values": {
+          "description": "The maximum number of elements is 100.",
+          "items": {
+            "format": "double",
+            "type": "number"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "DriveFollowUpRestrict": {
+      "description": "Drive follow-up search restricts (e.g. \"followup:suggestions\").",
+      "id": "DriveFollowUpRestrict",
+      "properties": {
+        "type": {
+          "enum": [
+            "UNSPECIFIED",
+            "FOLLOWUP_SUGGESTIONS",
+            "FOLLOWUP_ACTION_ITEMS"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DriveLocationRestrict": {
+      "description": "Drive location search restricts (e.g. \"is:starred\").",
+      "id": "DriveLocationRestrict",
+      "properties": {
+        "type": {
+          "enum": [
+            "UNSPECIFIED",
+            "TRASHED",
+            "STARRED"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DriveMimeTypeRestrict": {
+      "description": "Drive mime-type search restricts (e.g. \"type:pdf\").",
+      "id": "DriveMimeTypeRestrict",
+      "properties": {
+        "type": {
+          "enum": [
+            "UNSPECIFIED",
+            "PDF",
+            "DOCUMENT",
+            "PRESENTATION",
+            "SPREADSHEET",
+            "FORM",
+            "DRAWING",
+            "SCRIPT",
+            "MAP",
+            "IMAGE",
+            "AUDIO",
+            "VIDEO",
+            "FOLDER",
+            "ARCHIVE"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "DriveTimeSpanRestrict": {
+      "description": "The time span search restrict (e.g. \"after:2017-09-11 before:2017-09-12\").",
+      "id": "DriveTimeSpanRestrict",
+      "properties": {
+        "type": {
+          "enum": [
+            "UNSPECIFIED",
+            "TODAY",
+            "YESTERDAY",
+            "LAST_7_DAYS",
+            "LAST_30_DAYS",
+            "LAST_90_DAYS"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            "",
+            "Not Enabled",
+            "Not Enabled"
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "EmailAddress": {
+      "description": "A person's email address.",
+      "id": "EmailAddress",
+      "properties": {
+        "emailAddress": {
+          "description": "The email address.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "EnumOperatorOptions": {
+      "description": "Used to provide a search operator for enum properties. This is\noptional. Search operators let users restrict the query to specific fields\nrelevant to the type of item being searched. For example, if you provide no\noperator for a *priority* enum property with possible values *p0* and *p1*,\na query that contains the term *p0* will return items that have *p0* as the\nvalue of the *priority* property, as well as any items that contain the\nstring *p0* in other fields. If you provide an operator name for the enum,\nsuch as *priority*, then search users can use that operator to refine\nresults to only items that have *p0* as this property's value, with the\nquery *priority:p0*.",
+      "id": "EnumOperatorOptions",
+      "properties": {
+        "operatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\nenum property. For example, if operatorName is *priority* and the\nproperty's name is *priorityVal*, then queries like\n*priority:\u0026lt;value\u0026gt;* will show results only where the value of the\nproperty named *priorityVal* matches *\u0026lt;value\u0026gt;*. By contrast, a\nsearch that uses the same *\u0026lt;value\u0026gt;* without an operator will return\nall items where *\u0026lt;value\u0026gt;* matches the value of any String\nproperties or text within the content field for the item.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "EnumPropertyOptions": {
+      "description": "Options for enum properties, which allow you to define a restricted set of\nstrings to match user queries, set rankings for those string values, and\ndefine an operator name to be paired with those strings so that users can\nnarrow results to only items with a specific value. For example, for items in\na request tracking system with priority information, you could define *p0* as\nan allowable enum value and tie this enum to the operator name *priority* so\nthat search users could add *priority:p0* to their query to restrict the set\nof results to only those items indexed with the value *p0*.",
+      "id": "EnumPropertyOptions",
+      "properties": {
+        "operatorOptions": {
+          "$ref": "EnumOperatorOptions",
+          "description": "If set, describes how the enum should be used as a search operator."
+        },
+        "orderedRanking": {
+          "description": "Used to specify the ordered ranking for the enumeration that determines how\nthe integer values provided in the possible EnumValuePairs are used to rank\nresults. If specified, integer values must be provided for all possible\nEnumValuePair values given for this property. Can only be used if\nisRepeatable\nis false.",
+          "enum": [
+            "NO_ORDER",
+            "ASCENDING",
+            "DESCENDING"
+          ],
+          "enumDescriptions": [
+            "There is no ranking order for the property. Results will not be adjusted\nby this property's value.",
+            "This property is ranked in ascending order. Lower values indicate lower\nranking.",
+            "This property is ranked in descending order. Lower values indicate\nhigher ranking."
+          ],
+          "type": "string"
+        },
+        "possibleValues": {
+          "description": "The list of possible values for the enumeration property. All\nEnumValuePairs must provide a string value. If you specify an integer value\nfor one EnumValuePair, then all possible EnumValuePairs must provide an\ninteger value. Both the string value and integer value must be unique over\nall possible values. Once set, possible values cannot be removed or\nmodified. If you supply an ordered ranking and think you might insert\nadditional enum values in the future, leave gaps in the initial integer\nvalues to allow adding a value in between previously registered values.\nThe maximum number of elements is 100.",
+          "items": {
+            "$ref": "EnumValuePair"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "EnumValuePair": {
+      "description": "The enumeration value pair defines two things: a required string value and\nan optional integer value. The string value defines the necessary query\nterm required to retrieve that item, such as *p0* for a priority item.\nThe integer value determines the ranking of that string value relative\nto other enumerated values for the same property. For example, you might\nassociate *p0* with *0* and define another enum pair such as *p1* and *1*.\nYou must use the integer value in combination with\nordered\nranking to\nset the ranking of a given value relative to other enumerated values for\nthe same property name. Here, a ranking order of DESCENDING for *priority*\nproperties results in a ranking boost for items indexed with a value of\n*p0* compared to items indexed with a value of *p1*. Without a specified\nranking order, the integer value has no effect on item ranking.",
+      "id": "EnumValuePair",
+      "properties": {
+        "integerValue": {
+          "description": "The integer value of the EnumValuePair which must be non-negative.\nOptional.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "stringValue": {
+          "description": "The string value of the EnumValuePair.\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "EnumValues": {
+      "description": "List of enum values.",
+      "id": "EnumValues",
+      "properties": {
+        "values": {
+          "description": "The maximum allowable length for string values is 32 characters.\nThe maximum number of elements is 100.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ErrorInfo": {
+      "description": "Error information about the response.",
+      "id": "ErrorInfo",
+      "properties": {
+        "errorMessages": {
+          "items": {
+            "$ref": "ErrorMessage"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ErrorMessage": {
+      "description": "Error message per source response.",
+      "id": "ErrorMessage",
+      "properties": {
+        "errorMessage": {
+          "type": "string"
+        },
+        "source": {
+          "$ref": "Source"
+        }
+      },
+      "type": "object"
+    },
+    "FacetBucket": {
+      "description": "A bucket in a facet is the basic unit of operation. A bucket can comprise\neither a single value OR a contiguous range of values, depending on the\ntype of the field bucketed.\nFacetBucket is currently used only for returning the response object.",
+      "id": "FacetBucket",
+      "properties": {
+        "count": {
+          "description": "Number of results that match the bucket value.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "percentage": {
+          "description": "Percent of results that match the bucket value. This value is between\n(0-100].\nThis may not be accurate and is a best effort estimate.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "value": {
+          "$ref": "Value"
+        }
+      },
+      "type": "object"
+    },
+    "FacetOptions": {
+      "description": "Specifies operators to return facet results for. There will be one\nFacetResult for every source_name/object_type/operator_name combination.",
+      "id": "FacetOptions",
+      "properties": {
+        "objectType": {
+          "description": "If object_type is set, only those objects of that type will be used to\ncompute facets. If empty, then all objects will be used to compute facets.",
+          "type": "string"
+        },
+        "operatorName": {
+          "description": "Name of the operator chosen for faceting. @see\ncloudsearch.SchemaPropertyOptions",
+          "type": "string"
+        },
+        "sourceName": {
+          "description": "Source name to facet on. Format: datasources/{source_id}\nIf empty, all data sources will be used.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "FacetResult": {
+      "description": "Source specific facet response",
+      "id": "FacetResult",
+      "properties": {
+        "buckets": {
+          "description": "FacetBuckets for values in response containing atleast a single result.",
+          "items": {
+            "$ref": "FacetBucket"
+          },
+          "type": "array"
+        },
+        "objectType": {
+          "description": "Object type for which facet results are returned. Can be empty.",
+          "type": "string"
+        },
+        "operatorName": {
+          "description": "Name of the operator chosen for faceting. @see\ncloudsearch.SchemaPropertyOptions",
+          "type": "string"
+        },
+        "sourceName": {
+          "description": "Source name for which facet results are returned. Will not be empty.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "FieldViolation": {
+      "id": "FieldViolation",
+      "properties": {
+        "description": {
+          "description": "Description of the error.",
+          "type": "string"
+        },
+        "field": {
+          "description": "Path of field with violation.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Filter": {
+      "description": "A generic way of expressing filters in a query, which supports two\napproaches: \u003cbr/\u003e\u003cbr/\u003e\n**1. Setting a ValueFilter.** The name must match an operator_name defined in\nthe schema for your data source.\n\u003cbr/\u003e\n**2. Setting a CompositeFilter.** The filters are evaluated\nusing the logical operator. The top-level operators can only be either an AND\nor a NOT. AND can appear only at the top-most level. OR can appear only under\na top-level AND.",
+      "id": "Filter",
+      "properties": {
+        "compositeFilter": {
+          "$ref": "CompositeFilter"
+        },
+        "valueFilter": {
+          "$ref": "ValueFilter"
+        }
+      },
+      "type": "object"
+    },
+    "FilterOptions": {
+      "description": "Filter options to be applied on query.",
+      "id": "FilterOptions",
+      "properties": {
+        "filter": {
+          "$ref": "Filter",
+          "description": "Generic filter to restrict the search, such as `lang:en`, `site:xyz`."
+        },
+        "objectType": {
+          "description": "If object_type is set, only objects of that type are returned. This should\ncorrespond to the name of the object that was registered within the\ndefinition of schema. The maximum length is 256 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "FreshnessOptions": {
+      "description": "Indicates which freshness property to use when adjusting search ranking for\nan item. Fresher, more recent dates indicate higher quality. Use the\nfreshness option property that best works with your data. For fileshare\ndocuments, last modified time is most relevant. For calendar event data,\nthe time when the event occurs is a more relevant freshness indicator. In\nthis way, calendar events that occur closer to the time of the search query\nare considered higher quality and ranked accordingly.",
+      "id": "FreshnessOptions",
+      "properties": {
+        "freshnessDuration": {
+          "description": "The duration (in seconds) after which an object should be considered\nstale.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "freshnessProperty": {
+          "description": "This property indicates the freshness level of the object in the index.\nIf set, this property must be a top-level property within the\nPropertyDefinitions\nand it must be a\ntimestamp type\nor\ndate type.\nOtherwise, the Indexing API uses\nupdateTime\nas the freshness indicator.\nThe maximum length is 256 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GSuitePrincipal": {
+      "id": "GSuitePrincipal",
+      "properties": {
+        "gsuiteDomain": {
+          "description": "This principal represents all users of the G Suite domain of the\ncustomer.",
+          "type": "boolean"
+        },
+        "gsuiteGroupEmail": {
+          "description": "This principal references a G Suite group account",
+          "type": "string"
+        },
+        "gsuiteUserEmail": {
+          "description": "This principal references a G Suite user account",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GetCustomerIndexStatsResponse": {
+      "id": "GetCustomerIndexStatsResponse",
+      "properties": {
+        "stats": {
+          "description": "Summary of indexed item counts, one for each day in the requested range.",
+          "items": {
+            "$ref": "CustomerIndexStats"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GetDataSourceIndexStatsResponse": {
+      "id": "GetDataSourceIndexStatsResponse",
+      "properties": {
+        "stats": {
+          "description": "Summary of indexed item counts, one for each day in the requested range.",
+          "items": {
+            "$ref": "DataSourceIndexStats"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "HtmlOperatorOptions": {
+      "description": "Used to provide a search operator for html properties. This is optional.\nSearch operators let users restrict the query to specific fields relevant\nto the type of item being searched.",
+      "id": "HtmlOperatorOptions",
+      "properties": {
+        "operatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\nhtml property. For example, if operatorName is *subject* and the\nproperty's name is *subjectLine*, then queries like\n*subject:\u0026lt;value\u0026gt;* will show results only where the value of the\nproperty named *subjectLine* matches *\u0026lt;value\u0026gt;*. By contrast, a\nsearch that uses the same *\u0026lt;value\u0026gt;* without an operator will return\nall items where *\u0026lt;value\u0026gt;* matches the value of any\nhtml properties or text within the content field for the item.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "HtmlPropertyOptions": {
+      "description": "Options for html properties.",
+      "id": "HtmlPropertyOptions",
+      "properties": {
+        "operatorOptions": {
+          "$ref": "HtmlOperatorOptions",
+          "description": "If set, describes how the property should be used as a search operator."
+        },
+        "retrievalImportance": {
+          "$ref": "RetrievalImportance",
+          "description": "Indicates the search quality importance of the tokens within the\nfield when used for retrieval. Can only be set to DEFAULT or NONE."
+        }
+      },
+      "type": "object"
+    },
+    "HtmlValues": {
+      "description": "List of html values.",
+      "id": "HtmlValues",
+      "properties": {
+        "values": {
+          "description": "The maximum allowable length for html values is 2048 characters.\nThe maximum number of string elements is 100.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "IndexItemRequest": {
+      "id": "IndexItemRequest",
+      "properties": {
+        "connectorName": {
+          "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+          "type": "string"
+        },
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "item": {
+          "$ref": "Item",
+          "description": "Name of the item.  Format:\ndatasources/{source_id}/items/{item_id}"
+        },
+        "mode": {
+          "description": "Required. The RequestMode for this request.",
+          "enum": [
+            "UNSPECIFIED",
+            "SYNCHRONOUS",
+            "ASYNCHRONOUS"
+          ],
+          "enumDescriptions": [
+            "Priority is not specified in the update request.\nLeaving priority unspecified results in an update failure.",
+            "For real-time updates.",
+            "For changes that are executed after the response is sent back to the\ncaller."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "IntegerOperatorOptions": {
+      "description": "Used to provide a search operator for integer properties. This is\noptional. Search operators let users restrict the query to specific fields\nrelevant to the type of item being searched.",
+      "id": "IntegerOperatorOptions",
+      "properties": {
+        "greaterThanOperatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ninteger property using the greater-than operator. For example, if\ngreaterThanOperatorName is *priorityabove* and the property's name is\n*priorityVal*, then queries like *priorityabove:\u0026lt;value\u0026gt;* will\nshow results only where the value of the property named *priorityVal* is\ngreater than *\u0026lt;value\u0026gt;*.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        },
+        "lessThanOperatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ninteger property using the less-than operator. For example, if\nlessThanOperatorName is *prioritybelow* and the property's name is\n*priorityVal*, then queries like *prioritybelow:\u0026lt;value\u0026gt;* will\nshow results only where the value of the property named *priorityVal* is\nless than *\u0026lt;value\u0026gt;*.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        },
+        "operatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ninteger property. For example, if operatorName is *priority* and the\nproperty's name is *priorityVal*, then queries like\n*priority:\u0026lt;value\u0026gt;* will show results only where the value of the\nproperty named *priorityVal* matches *\u0026lt;value\u0026gt;*. By contrast, a\nsearch that uses the same *\u0026lt;value\u0026gt;* without an operator will return\nall items where *\u0026lt;value\u0026gt;* matches the value of any String\nproperties or text within the content field for the item.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "IntegerPropertyOptions": {
+      "description": "Options for integer properties.",
+      "id": "IntegerPropertyOptions",
+      "properties": {
+        "maximumValue": {
+          "description": "The maximum value of the property. The minimum and maximum values for the\nproperty are used to rank results according to the\nordered ranking.\nIndexing requests with values greater than the maximum are accepted and\nranked with the same weight as items indexed with the maximum value.",
+          "format": "int64",
+          "type": "string"
+        },
+        "minimumValue": {
+          "description": "The minimum value of the property. The minimum and maximum values for the\nproperty are used to rank results according to the\nordered ranking.\nIndexing requests with values less than the minimum are accepted and\nranked with the same weight as items indexed with the minimum value.",
+          "format": "int64",
+          "type": "string"
+        },
+        "operatorOptions": {
+          "$ref": "IntegerOperatorOptions",
+          "description": "If set, describes how the integer should be used as a search operator."
+        },
+        "orderedRanking": {
+          "description": "Used to specify the ordered ranking for the integer. Can only be used if\nisRepeatable\nis false.",
+          "enum": [
+            "NO_ORDER",
+            "ASCENDING",
+            "DESCENDING"
+          ],
+          "enumDescriptions": [
+            "There is no ranking order for the property. Results will not be adjusted\nby this property's value.",
+            "This property is ranked in ascending order. Lower values indicate lower\nranking.",
+            "This property is ranked in descending order. Lower values indicate\nhigher ranking."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "IntegerValues": {
+      "description": "List of integer values.",
+      "id": "IntegerValues",
+      "properties": {
+        "values": {
+          "description": "The maximum number of elements is 100.",
+          "items": {
+            "format": "int64",
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Interaction": {
+      "description": "Represents an interaction between a user and an item.",
+      "id": "Interaction",
+      "properties": {
+        "interactionTime": {
+          "description": "The time when the user acted on the item.  If multiple actions of the same\ntype exist for a single user, only the most recent action is recorded.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "principal": {
+          "$ref": "Principal",
+          "description": "The user that acted on the item."
+        },
+        "type": {
+          "enum": [
+            "UNSPECIFIED",
+            "VIEW",
+            "EDIT"
+          ],
+          "enumDescriptions": [
+            "Invalid value.",
+            "This interaction indicates the user viewed the item.",
+            "This interaction indicates the user edited the item."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Item": {
+      "description": "Represents a single object that is an item in the search index, such as a\nfile, folder, or a database record.",
+      "id": "Item",
+      "properties": {
+        "acl": {
+          "$ref": "ItemAcl",
+          "description": "Access control list for this item."
+        },
+        "content": {
+          "$ref": "ItemContent",
+          "description": "Item content to be indexed and made text searchable."
+        },
+        "itemType": {
+          "description": "Type for this item.",
+          "enum": [
+            "UNSPECIFIED",
+            "CONTENT_ITEM",
+            "CONTAINER_ITEM",
+            "VIRTUAL_CONTAINER_ITEM"
+          ],
+          "enumDescriptions": [
+            "",
+            "An item that is indexed for the only purpose of serving information.\nThese items cannot be referred in\ncontainerName\nor inheritAclFrom\nfields.",
+            "An item that gets indexed and whose purpose is to supply other items\nwith ACLs and/or contain other items.",
+            "An item that does not get indexed, but otherwise has the same purpose\nas CONTAINER_ITEM."
+          ],
+          "type": "string"
+        },
+        "metadata": {
+          "$ref": "ItemMetadata",
+          "description": "Metadata information."
+        },
+        "name": {
+          "description": "Name of the Item. Format:\ndatasources/{source_id}/items/{item_id}\n\u003cbr /\u003eThis is a required field.\nThe maximum length is 1536 characters.",
+          "type": "string"
+        },
+        "payload": {
+          "description": "Additional state connector can store for this item.\nThe maximum length is 10000 bytes.",
+          "format": "byte",
+          "type": "string"
+        },
+        "queue": {
+          "description": "Queue this item belongs to.\nThe maximum length is 100 characters.",
+          "type": "string"
+        },
+        "status": {
+          "$ref": "ItemStatus",
+          "description": "Status of the item.\nOutput only field."
+        },
+        "structuredData": {
+          "$ref": "ItemStructuredData",
+          "description": "The structured data for the item that should conform to a registered\nobject definition in the schema for the data source."
+        },
+        "version": {
+          "description": "Required. The indexing system stores the version from the datasource as a\nbyte string and compares the Item version in the index\nto the version of the queued Item using lexical ordering.\n\u003cbr /\u003e\u003cbr /\u003e\nCloud Search Indexing won't index or delete any queued item with\na version value that is less than or equal to the version of the\ncurrently indexed item.\nThe maximum length for this field is 1024 bytes.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ItemAcl": {
+      "description": "Access control list information for the item. For more information see\nhttps://developers.google.com/cloud-search/docs/guides/index-your-data#acls",
+      "id": "ItemAcl",
+      "properties": {
+        "aclInheritanceType": {
+          "description": "Sets the type of access rules to apply when an item inherits its ACL from a\nparent. This should always be set in tandem with the\ninheritAclFrom\nfield. Also, when the\ninheritAclFrom field\nis set, this field should be set to a valid AclInheritanceType.",
+          "enum": [
+            "NOT_APPLICABLE",
+            "CHILD_OVERRIDE",
+            "PARENT_OVERRIDE",
+            "BOTH_PERMIT"
+          ],
+          "enumDescriptions": [
+            "The default value when this item does not inherit an ACL.\nUse NOT_APPLICABLE when\ninheritAclFrom\nis empty.  An item without ACL inheritance can still have ACLs supplied\nby its own readers and\ndeniedReaders fields.",
+            "During an authorization conflict, the ACL of the child item determines\nits read access.",
+            "During an authorization conflict, the ACL of the parent item\nspecified in the\ninheritAclFrom\nfield determines read access.",
+            "Access is granted only if this item and the parent item specified in\nthe inheritAclFrom\nfield both permit read access."
+          ],
+          "type": "string"
+        },
+        "deniedReaders": {
+          "description": "List of principals who are explicitly denied access to the item in search\nresults. While principals are denied access by default, use denied readers\nto handle exceptions and override the list allowed readers.\nThe maximum number of elements is 100.",
+          "items": {
+            "$ref": "Principal"
+          },
+          "type": "array"
+        },
+        "inheritAclFrom": {
+          "description": "Name of the item to inherit the Access Permission List (ACL) from.\nNote: ACL inheritance *only* provides access permissions\nto child items and does not define structural relationships, nor does it\nprovide convenient ways to delete large groups of items.\nDeleting an ACL parent from the index only alters the access permissions of\nchild items that reference the parent in the\ninheritAclFrom\nfield. The item is still in the index, but may not\nvisible in search results. By contrast, deletion of a container item\nalso deletes all items that reference the container via the\ncontainerName\nfield.\nThe maximum length for this field is 1536 characters.",
+          "type": "string"
+        },
+        "owners": {
+          "description": "Optional. List of owners for the item. This field has no bearing on\ndocument access permissions. It does, however, offer\na slight ranking boosts items where the querying user is an owner.\nThe maximum number of elements is 5.",
+          "items": {
+            "$ref": "Principal"
+          },
+          "type": "array"
+        },
+        "readers": {
+          "description": "List of principals who are allowed to see the item in search results.\nOptional if inheriting permissions from another item or if the item\nis not intended to be visible, such as\nvirtual containers.\nThe maximum number of elements is 1000.",
+          "items": {
+            "$ref": "Principal"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ItemContent": {
+      "description": "Content of an item to be indexed and surfaced by Cloud Search.",
+      "id": "ItemContent",
+      "properties": {
+        "contentDataRef": {
+          "$ref": "UploadItemRef",
+          "description": "Upload reference ID of a previously uploaded content via write method."
+        },
+        "contentFormat": {
+          "enum": [
+            "UNSPECIFIED",
+            "HTML",
+            "TEXT",
+            "RAW"
+          ],
+          "enumDescriptions": [
+            "Invalid value.",
+            "contentFormat is HTML.",
+            "contentFormat is free text.",
+            "contentFormat is raw bytes."
+          ],
+          "type": "string"
+        },
+        "hash": {
+          "description": "Hashing info calculated and provided by the API client for content.\nCan be used with the items.push method to calculate modified state.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "inlineContent": {
+          "description": "Content that is supplied inlined within the update method.\nThe maximum length is 102400 bytes (100 KiB).",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ItemCountByStatus": {
+      "id": "ItemCountByStatus",
+      "properties": {
+        "count": {
+          "description": "Number of items matching the status code.",
+          "format": "int64",
+          "type": "string"
+        },
+        "statusCode": {
+          "description": "Status of the items.",
+          "enum": [
+            "CODE_UNSPECIFIED",
+            "ERROR",
+            "MODIFIED",
+            "NEW_ITEM",
+            "ACCEPTED"
+          ],
+          "enumDescriptions": [
+            "Input-only value.  Used with\nItems.list\nto list all items in the queue, regardless of status.",
+            "Error encountered by Cloud Search while processing this item.\nDetails of the error are in\nrepositoryError.",
+            "Item has been modified in the repository, and is out of date with\nthe version previously accepted into Cloud Search.",
+            "Item is known to exist in the repository, but is not yet accepted by\nCloud Search.\nAn item can be in this state when\nItems.push\nhas been called for\nan item of this name that did not exist previously.",
+            "API has accepted the up-to-date data of this item."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ItemMetadata": {
+      "description": "Available metadata fields for the item.",
+      "id": "ItemMetadata",
+      "properties": {
+        "containerName": {
+          "description": "The name of the container for this item.\nDeletion of the container item leads to automatic deletion of this\nitem.  Note: ACLs are not inherited from a container item.\nTo provide ACL inheritance for an item, use the\ninheritAclFrom\nfield. The maximum length is 1536 characters.",
+          "type": "string"
+        },
+        "contentLanguage": {
+          "description": "The BCP-47 language code for the item, such as \"en-US\" or \"sr-Latn\". For\nmore information, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nThe maximum length is 32 characters.",
+          "type": "string"
+        },
+        "createTime": {
+          "description": "The time when the item was created in the source repository.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "hash": {
+          "description": "Hashing value provided by the API caller.\nThis can be used with the\nitems.push\nmethod to calculate modified state.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "interactions": {
+          "description": "A list of interactions for the item.  Interactions are used to improve\nSearch quality, but are not exposed to end users.\nThe maximum number of elements is 1000.",
+          "items": {
+            "$ref": "Interaction"
+          },
+          "type": "array"
+        },
+        "keywords": {
+          "description": "Additional keywords or phrases that should match the item.\nUsed internally for user generated content.\nThe maximum number of elements is 100.\nThe maximum length is 8192 characters.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "mimeType": {
+          "description": "The original mime-type of\nItemContent.content\nin the source repository.\nThe maximum length is 256 characters.",
+          "type": "string"
+        },
+        "objectType": {
+          "description": "The type of the item.  This should correspond to the name of an object\ndefinition in the schema registered for the data source.  For example, if\nthe schema for the data source contains an object definition with name\n'document', then item indexing requests for objects of that type should set\nobjectType to 'document'.\nThe maximum length is 256 characters.",
+          "type": "string"
+        },
+        "searchQualityMetadata": {
+          "$ref": "SearchQualityMetadata",
+          "description": "Additional search quality metadata of the item"
+        },
+        "sourceRepositoryUrl": {
+          "description": "Link to the source repository serving the data.  \u0026#83;earch results apply\nthis link to the title.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "title": {
+          "description": "The title of the item.  If given, this will be the displayed title of the\nSearch result.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "updateTime": {
+          "description": "The time when the item was last modified in the source repository.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ItemStatus": {
+      "description": "This contains item's status and any errors.",
+      "id": "ItemStatus",
+      "properties": {
+        "code": {
+          "description": "Status code.",
+          "enum": [
+            "CODE_UNSPECIFIED",
+            "ERROR",
+            "MODIFIED",
+            "NEW_ITEM",
+            "ACCEPTED"
+          ],
+          "enumDescriptions": [
+            "Input-only value.  Used with\nItems.list\nto list all items in the queue, regardless of status.",
+            "Error encountered by Cloud Search while processing this item.\nDetails of the error are in\nrepositoryError.",
+            "Item has been modified in the repository, and is out of date with\nthe version previously accepted into Cloud Search.",
+            "Item is known to exist in the repository, but is not yet accepted by\nCloud Search.\nAn item can be in this state when\nItems.push\nhas been called for\nan item of this name that did not exist previously.",
+            "API has accepted the up-to-date data of this item."
+          ],
+          "type": "string"
+        },
+        "processingErrors": {
+          "description": "Error details in case the item is in ERROR state.",
+          "items": {
+            "$ref": "ProcessingError"
+          },
+          "type": "array"
+        },
+        "repositoryErrors": {
+          "description": "Repository error reported by connector.",
+          "items": {
+            "$ref": "RepositoryError"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ItemStructuredData": {
+      "description": "Available structured data fields for the item.",
+      "id": "ItemStructuredData",
+      "properties": {
+        "hash": {
+          "description": "Hashing value provided by the API caller.\nThis can be used with the\nitems.push\nmethod to calculate modified state.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "object": {
+          "$ref": "StructuredDataObject",
+          "description": "The structured data object that should conform to a registered object\ndefinition in the schema for the data source."
+        }
+      },
+      "type": "object"
+    },
+    "ListDataSourceResponse": {
+      "id": "ListDataSourceResponse",
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        },
+        "sources": {
+          "items": {
+            "$ref": "DataSource"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ListItemNamesForUnmappedIdentityResponse": {
+      "id": "ListItemNamesForUnmappedIdentityResponse",
+      "properties": {
+        "itemNames": {
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ListItemsResponse": {
+      "id": "ListItemsResponse",
+      "properties": {
+        "items": {
+          "items": {
+            "$ref": "Item"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ListQuerySourcesResponse": {
+      "description": "List sources response.",
+      "id": "ListQuerySourcesResponse",
+      "properties": {
+        "nextPageToken": {
+          "type": "string"
+        },
+        "sources": {
+          "items": {
+            "$ref": "QuerySource"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ListSearchApplicationsResponse": {
+      "id": "ListSearchApplicationsResponse",
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        },
+        "searchApplications": {
+          "items": {
+            "$ref": "SearchApplication"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ListUnmappedIdentitiesResponse": {
+      "id": "ListUnmappedIdentitiesResponse",
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no\nmore results in the list.",
+          "type": "string"
+        },
+        "unmappedIdentities": {
+          "items": {
+            "$ref": "UnmappedIdentity"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "MatchRange": {
+      "description": "Matched range of a snippet [start, end).",
+      "id": "MatchRange",
+      "properties": {
+        "end": {
+          "description": "End of the match in the snippet.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "start": {
+          "description": "Starting position of the match in the snippet.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "Media": {
+      "description": "Media resource.",
+      "id": "Media",
+      "properties": {
+        "resourceName": {
+          "description": "Name of the media resource.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Metadata": {
+      "description": "Metadata of a matched search result.",
+      "id": "Metadata",
+      "properties": {
+        "createTime": {
+          "description": "The creation time for this document or object in the search result.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "displayOptions": {
+          "$ref": "ResultDisplayMetadata",
+          "description": "Options that specify how to display a structured data search result."
+        },
+        "fields": {
+          "description": "Indexed fields in structured data, returned as a generic named property.",
+          "items": {
+            "$ref": "NamedProperty"
+          },
+          "type": "array"
+        },
+        "mimeType": {
+          "description": "Mime type of the search result.",
+          "type": "string"
+        },
+        "objectType": {
+          "description": "Object type of the search result.",
+          "type": "string"
+        },
+        "owner": {
+          "$ref": "Person",
+          "description": "Owner (usually creator) of the document or object of the search result."
+        },
+        "source": {
+          "$ref": "Source",
+          "description": "The named source for the result, such as Gmail."
+        },
+        "updateTime": {
+          "description": "The last modified date for the object in the search result.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Metaline": {
+      "description": "A metaline is a list of properties that are displayed along with the search\nresult to provide context.",
+      "id": "Metaline",
+      "properties": {
+        "properties": {
+          "description": "The list of displayed properties for the metaline.",
+          "items": {
+            "$ref": "DisplayedProperty"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Name": {
+      "description": "A person's name.",
+      "id": "Name",
+      "properties": {
+        "displayName": {
+          "description": "The read-only display name formatted according to the locale specified by\nthe viewer's account or the \u003ccode\u003eAccept-Language\u003c/code\u003e HTTP header.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "NamedProperty": {
+      "description": "A typed name-value pair for structured data.  The type of the value should\nbe the same as the registered type for the `name` property in the object\ndefinition of `objectType`.",
+      "id": "NamedProperty",
+      "properties": {
+        "booleanValue": {
+          "type": "boolean"
+        },
+        "dateValues": {
+          "$ref": "DateValues"
+        },
+        "doubleValues": {
+          "$ref": "DoubleValues"
+        },
+        "enumValues": {
+          "$ref": "EnumValues"
+        },
+        "htmlValues": {
+          "$ref": "HtmlValues"
+        },
+        "integerValues": {
+          "$ref": "IntegerValues"
+        },
+        "name": {
+          "description": "The name of the property.  This name should correspond to the name of the\nproperty that was registered for object definition in the schema.\nThe maximum allowable length for this property is 256 characters.",
+          "type": "string"
+        },
+        "objectValues": {
+          "$ref": "ObjectValues"
+        },
+        "textValues": {
+          "$ref": "TextValues"
+        },
+        "timestampValues": {
+          "$ref": "TimestampValues"
+        }
+      },
+      "type": "object"
+    },
+    "ObjectDefinition": {
+      "description": "The definition for an object within a data source.",
+      "id": "ObjectDefinition",
+      "properties": {
+        "name": {
+          "description": "Name for the object, which then defines its type. Item indexing requests\nshould set the\nobjectType field\nequal to this value. For example, if *name* is *Document*, then indexing\nrequests for items of type Document should set\nobjectType equal to\n*Document*. Each object definition must be uniquely named within a schema.\nThe name must start with a letter and can only contain letters (A-Z, a-z)\nor numbers (0-9).\nThe maximum length is 256 characters.",
+          "type": "string"
+        },
+        "options": {
+          "$ref": "ObjectOptions",
+          "description": "The optional object-specific options."
+        },
+        "propertyDefinitions": {
+          "description": "The property definitions for the object.\nThe maximum number of elements is 1000.",
+          "items": {
+            "$ref": "PropertyDefinition"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ObjectDisplayOptions": {
+      "description": "The display options for an object.",
+      "id": "ObjectDisplayOptions",
+      "properties": {
+        "metalines": {
+          "description": "Defines the properties that will be displayed in the metalines of the\nsearch results. The property values will be displayed in the order given\nhere. If a property holds multiple values, all of the values will be\ndiplayed before the next properties. For this reason, it is a good practice\nto specify singular properties before repeated properties in this list. All\nof the properties must set\nis_returnable\nto true. The maximum number of elements is 3.",
+          "items": {
+            "$ref": "Metaline"
+          },
+          "type": "array"
+        },
+        "objectDisplayLabel": {
+          "description": "The user friendly label to display in the search result to inidicate the\ntype of the item. This is OPTIONAL; if not given, an object label will not\nbe displayed on the context line of the search results. The maximum length\nis 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ObjectOptions": {
+      "description": "The options for an object.",
+      "id": "ObjectOptions",
+      "properties": {
+        "displayOptions": {
+          "$ref": "ObjectDisplayOptions",
+          "description": "Options that determine how the object is displayed in the Cloud Search\nresults page."
+        },
+        "freshnessOptions": {
+          "$ref": "FreshnessOptions",
+          "description": "The freshness options for an object."
+        }
+      },
+      "type": "object"
+    },
+    "ObjectPropertyOptions": {
+      "description": "Options for object properties.",
+      "id": "ObjectPropertyOptions",
+      "properties": {
+        "subobjectProperties": {
+          "description": "The properties of the sub-object. These properties represent a nested\nobject. For example, if this property represents a postal address, the\nsubobjectProperties might be named *street*, *city*, and *state*.\nThe maximum number of elements is 1000.",
+          "items": {
+            "$ref": "PropertyDefinition"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ObjectValues": {
+      "description": "List of object values.",
+      "id": "ObjectValues",
+      "properties": {
+        "values": {
+          "description": "The maximum number of elements is 100.",
+          "items": {
+            "$ref": "StructuredDataObject"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "id": "Operation",
+      "properties": {
+        "done": {
+          "description": "If the value is `false`, it means the operation is still in progress.\nIf `true`, the operation is completed, and either `error` or `response` is\navailable.",
+          "type": "boolean"
+        },
+        "error": {
+          "$ref": "Status",
+          "description": "The error result of the operation in case of failure or cancellation."
+        },
+        "metadata": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
+          "type": "object"
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
+        },
+        "response": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "The normal response of the operation in case of success.  If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
+          "type": "object"
+        }
+      },
+      "type": "object"
+    },
+    "PeopleSuggestion": {
+      "description": "A people suggestion.",
+      "id": "PeopleSuggestion",
+      "properties": {
+        "person": {
+          "$ref": "Person",
+          "description": "Suggested person. All fields of the person object might not be populated."
+        }
+      },
+      "type": "object"
+    },
+    "Person": {
+      "description": "Object to represent a person.",
+      "id": "Person",
+      "properties": {
+        "emailAddresses": {
+          "description": "The person's email addresses",
+          "items": {
+            "$ref": "EmailAddress"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "The resource name of the person to provide information about.\nSee \u003ca href=\"https://developers.google.com/people/api/rest/v1/people/get\"\u003e\nPeople.get\u003c/a\u003e from Google People API.",
+          "type": "string"
+        },
+        "obfuscatedId": {
+          "description": "Obfuscated ID of a person.",
+          "type": "string"
+        },
+        "personNames": {
+          "description": "The person's name",
+          "items": {
+            "$ref": "Name"
+          },
+          "type": "array"
+        },
+        "photos": {
+          "description": "A person's read-only photo. A picture shown next to the person's name to\nhelp others recognize the person in search results.",
+          "items": {
+            "$ref": "Photo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Photo": {
+      "description": "A person's photo.",
+      "id": "Photo",
+      "properties": {
+        "url": {
+          "description": "The URL of the photo.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "PollItemsRequest": {
+      "id": "PollItemsRequest",
+      "properties": {
+        "connectorName": {
+          "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+          "type": "string"
+        },
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "limit": {
+          "description": "Maximum number of items to return.\n\u003cbr /\u003eThe maximum and the default value is 1000",
+          "format": "int32",
+          "type": "integer"
+        },
+        "queue": {
+          "description": "Queue name to fetch items from.  If unspecified, PollItems will\nfetch from 'default' queue.\nThe maximum length is 100 characters.",
+          "type": "string"
+        },
+        "statusCodes": {
+          "description": "Limit the items polled to the ones with these statuses.",
+          "enumDescriptions": [
+            "Input-only value.  Used with\nItems.list\nto list all items in the queue, regardless of status.",
+            "Error encountered by Cloud Search while processing this item.\nDetails of the error are in\nrepositoryError.",
+            "Item has been modified in the repository, and is out of date with\nthe version previously accepted into Cloud Search.",
+            "Item is known to exist in the repository, but is not yet accepted by\nCloud Search.\nAn item can be in this state when\nItems.push\nhas been called for\nan item of this name that did not exist previously.",
+            "API has accepted the up-to-date data of this item."
+          ],
+          "items": {
+            "enum": [
+              "CODE_UNSPECIFIED",
+              "ERROR",
+              "MODIFIED",
+              "NEW_ITEM",
+              "ACCEPTED"
+            ],
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "PollItemsResponse": {
+      "id": "PollItemsResponse",
+      "properties": {
+        "items": {
+          "description": "Set of items from the queue available for connector to process.\n\u003cbr /\u003eThese items have the following subset of fields populated: \u003cbr /\u003e\n\u003cbr /\u003eversion\n\u003cbr /\u003emetadata.hash\n\u003cbr /\u003estructured_data.hash\n\u003cbr /\u003econtent.hash\n\u003cbr /\u003epayload\n\u003cbr /\u003estatus\n\u003cbr /\u003equeue",
+          "items": {
+            "$ref": "Item"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "Principal": {
+      "description": "Reference to a user, group, or domain.",
+      "id": "Principal",
+      "properties": {
+        "groupResourceName": {
+          "description": "This principal is a group identified using an external identity.\nThe name field must specify the group resource name with this format:\nidentitysources/{source_id}/groups/{ID}",
+          "type": "string"
+        },
+        "gsuitePrincipal": {
+          "$ref": "GSuitePrincipal",
+          "description": "This principal is a GSuite user, group or domain."
+        },
+        "userResourceName": {
+          "description": "This principal is a user identified using an external identity.\nThe name field must specify the user resource name with this format:\nidentitysources/{source_id}/users/{ID}",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ProcessingError": {
+      "id": "ProcessingError",
+      "properties": {
+        "code": {
+          "description": "Error code indicating the nature of the error.",
+          "enum": [
+            "PROCESSING_ERROR_CODE_UNSPECIFIED",
+            "MALFORMED_REQUEST",
+            "UNSUPPORTED_CONTENT_FORMAT",
+            "INDIRECT_BROKEN_ACL",
+            "ACL_CYCLE"
+          ],
+          "enumDescriptions": [
+            "Input only value.  Use this value in Items.",
+            "Item's ACL, metadata, or content is malformed or in invalid state.\nFieldViolations contains more details on where the problem is.",
+            "Countent format is unsupported.",
+            "Items with incomplete ACL information due to inheriting other\nitems with broken ACL or having groups with unmapped descendants.",
+            "ACL inheritance graph formed a cycle."
+          ],
+          "type": "string"
+        },
+        "errorMessage": {
+          "description": "Description of the error.",
+          "type": "string"
+        },
+        "fieldViolations": {
+          "description": "In case the item fields are invalid, this field contains the details\nabout the validation errors.",
+          "items": {
+            "$ref": "FieldViolation"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "PropertyDefinition": {
+      "description": "The definition of a property within an object.",
+      "id": "PropertyDefinition",
+      "properties": {
+        "booleanPropertyOptions": {
+          "$ref": "BooleanPropertyOptions"
+        },
+        "datePropertyOptions": {
+          "$ref": "DatePropertyOptions"
+        },
+        "displayOptions": {
+          "$ref": "PropertyDisplayOptions",
+          "description": "Options that determine how the property is displayed in the Cloud Search\nresults page if it is specified to be displayed in the object's\ndisplay options\n."
+        },
+        "doublePropertyOptions": {
+          "$ref": "DoublePropertyOptions"
+        },
+        "enumPropertyOptions": {
+          "$ref": "EnumPropertyOptions"
+        },
+        "htmlPropertyOptions": {
+          "$ref": "HtmlPropertyOptions"
+        },
+        "integerPropertyOptions": {
+          "$ref": "IntegerPropertyOptions"
+        },
+        "isFacetable": {
+          "description": "Indicates that the property can be used for generating facets. Cannot be\ntrue for properties whose type is object. IsReturnable must be true to set\nthis option.\nOnly supported for Boolean, Enum, and Text properties.",
+          "type": "boolean"
+        },
+        "isRepeatable": {
+          "description": "Indicates that multiple values are allowed for the property. For example, a\ndocument only has one description but can have multiple comments. Cannot be\ntrue for properties whose type is a boolean.\nIf set to false, properties that contain more than one value will cause the\nindexing request for that item to be rejected.",
+          "type": "boolean"
+        },
+        "isReturnable": {
+          "description": "Indicates that the property identifies data that should be returned in search\nresults via the Query API. If set to *true*, indicates that Query API\nusers can use matching property fields in results. However, storing fields\nrequires more space allocation and uses more bandwidth for search queries,\nwhich impacts performance over large datasets. Set to *true* here only if\nthe field is needed for search results. Cannot be true for properties\nwhose type is an object.",
+          "type": "boolean"
+        },
+        "isSortable": {
+          "description": "Indicates that the property can be used for sorting. Cannot be true for\nproperties that are repeatable. Cannot be true for properties whose type\nis object or user identifier. IsReturnable must be true to set this option.\nOnly supported for Boolean, Date, Double, Integer, and Timestamp\nproperties.",
+          "type": "boolean"
+        },
+        "name": {
+          "description": "The name of the property. Item indexing requests sent to the Indexing API\nshould set the property name\nequal to this value. For example, if name is *subject_line*, then indexing\nrequests for document items with subject fields should set the\nname for that field equal to\n*subject_line*. Use the name as the identifier for the object property.\nOnce registered as a property for an object, you cannot re-use this name\nfor another property within that object.\nThe name must start with a letter and can only contain letters (A-Z, a-z)\nor numbers (0-9).\nThe maximum length is 256 characters.",
+          "type": "string"
+        },
+        "objectPropertyOptions": {
+          "$ref": "ObjectPropertyOptions"
+        },
+        "textPropertyOptions": {
+          "$ref": "TextPropertyOptions"
+        },
+        "timestampPropertyOptions": {
+          "$ref": "TimestampPropertyOptions"
+        }
+      },
+      "type": "object"
+    },
+    "PropertyDisplayOptions": {
+      "description": "The display options for a property.",
+      "id": "PropertyDisplayOptions",
+      "properties": {
+        "displayLabel": {
+          "description": "The user friendly label for the property that will be used if the property\nis specified to be displayed in ObjectDisplayOptions. If given, the display\nlabel will be shown in front of the property values when the property is\npart of the object display options. For example, if the property value is\n'1', the value by itself may not be useful context for the user. If the\ndisplay name given was 'priority', then the user will see 'priority : 1' in\nthe search results which provides clear conext to search users. This is\nOPTIONAL; if not given, only the property values will be displayed.\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "PushItem": {
+      "description": "Represents an item to be pushed to the indexing queue.",
+      "id": "PushItem",
+      "properties": {
+        "contentHash": {
+          "description": "Content hash of the item according to the repository. If specified, this is\nused to determine how to modify this\nitem's status. Setting this field and the\ntype field results in argument\nerror.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "metadataHash": {
+          "description": "Metadata hash of the item according to the repository. If specified, this\nis used to determine how to modify this\nitem's status. Setting this field and the\ntype field results in argument\nerror.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "payload": {
+          "description": "Provides additional document state information for the connector,\nsuch as an alternate repository ID and other metadata.\nThe maximum length is 8192 bytes.",
+          "format": "byte",
+          "type": "string"
+        },
+        "queue": {
+          "description": "Queue to which this item belongs to.  The \u003ccode\u003edefault\u003c/code\u003e queue is\nchosen if this field is not specified. The maximum length is\n512 characters.",
+          "type": "string"
+        },
+        "repositoryError": {
+          "$ref": "RepositoryError",
+          "description": "Populate this field to store Connector or repository error details.\nThis information is displayed in the Admin Console.\nThis field may only be populated when the\nType is\nREPOSITORY_ERROR."
+        },
+        "structuredDataHash": {
+          "description": "Structured data hash of the item according to the repository. If specified,\nthis is used to determine how to modify this item's status. Setting this\nfield and the type field\nresults in argument error.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        },
+        "type": {
+          "description": "The type of the push operation that defines the push behavior.",
+          "enum": [
+            "UNSPECIFIED",
+            "MODIFIED",
+            "NOT_MODIFIED",
+            "REPOSITORY_ERROR",
+            "REQUEUE"
+          ],
+          "enumDescriptions": [
+            "Default UNSPECIFIED.  Specifies that the push operation should not modify\nItemStatus",
+            "Indicates that the repository document has been modified or updated since\nthe previous\nupdate\ncall. This changes status to\nMODIFIED state for\nan existing item. If this is called on a non existing item, the status is\nchanged to\nNEW_ITEM.",
+            "Item in the repository has not been modified since the last update\ncall.  This push operation will set status to\nACCEPTED state.",
+            "Connector is facing a repository error regarding this item.  Change\nstatus to\nREPOSITORY_ERROR\nstate. Item is unreserved and rescheduled at a future time determined by\nexponential backoff.",
+            "Call push with REQUEUE only for items that have been reserved.\nThis action unreserves the item and resets its available time to the\nwall clock time."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "PushItemRequest": {
+      "id": "PushItemRequest",
+      "properties": {
+        "connectorName": {
+          "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+          "type": "string"
+        },
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "item": {
+          "$ref": "PushItem",
+          "description": "Item to push onto the queue."
+        }
+      },
+      "type": "object"
+    },
+    "QueryInterpretation": {
+      "id": "QueryInterpretation",
+      "properties": {
+        "interpretationType": {
+          "enum": [
+            "NONE",
+            "BLEND",
+            "REPLACE"
+          ],
+          "enumDescriptions": [
+            "No natural language interpretation or the natural language interpretation\nis not used to fetch the search results.",
+            "The natural language results is mixed with results from original query.",
+            "The results only contain natural language results."
+          ],
+          "type": "string"
+        },
+        "interpretedQuery": {
+          "description": "The interpretation of the query used in search. For example, query \"email\nfrom john\" will be interpreted as \"from:john source:mail\"",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "QueryInterpretationOptions": {
+      "description": "Options to interpret user query.",
+      "id": "QueryInterpretationOptions",
+      "properties": {
+        "disableNlInterpretation": {
+          "description": "Flag to disable natural language (NL) interpretation of queries. Default is\nfalse, Set to true to disable natural language interpretation. NL\ninterpretation only applies to predefined datasources.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "QueryItem": {
+      "description": "Information relevant only to a query entry.",
+      "id": "QueryItem",
+      "properties": {
+        "isSynthetic": {
+          "description": "True if the text was generated by means other than a previous user search.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "QueryOperator": {
+      "description": "The definition of a operator that can be used in a Search/Suggest request.",
+      "id": "QueryOperator",
+      "properties": {
+        "displayName": {
+          "description": "Display name of the operator",
+          "type": "string"
+        },
+        "enumValues": {
+          "description": "Potential list of values for the opeatror field. This field is only filled\nwhen we can safely enumerate all the possible values of this operator.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "greaterThanOperatorName": {
+          "description": "Indicates the operator name that can be used to  isolate the property using\nthe greater-than operator.",
+          "type": "string"
+        },
+        "isFacetable": {
+          "description": "Can this operator be used to get facets.",
+          "type": "boolean"
+        },
+        "isRepeatable": {
+          "description": "Indicates if multiple values can be set for this property.",
+          "type": "boolean"
+        },
+        "isReturnable": {
+          "description": "Will the property associated with this facet be returned as part of search\nresults.",
+          "type": "boolean"
+        },
+        "isSortable": {
+          "description": "Can this operator be used to sort results.",
+          "type": "boolean"
+        },
+        "isSuggestable": {
+          "description": "Can get suggestions for this field.",
+          "type": "boolean"
+        },
+        "lessThanOperatorName": {
+          "description": "Indicates the operator name that can be used to  isolate the property using\nthe less-than operator.",
+          "type": "string"
+        },
+        "operatorName": {
+          "description": "The name of the operator.",
+          "type": "string"
+        },
+        "type": {
+          "description": "Type of the operator.",
+          "enum": [
+            "UNKNOWN",
+            "INTEGER",
+            "DOUBLE",
+            "TIMESTAMP",
+            "BOOLEAN",
+            "ENUM",
+            "DATE",
+            "TEXT",
+            "HTML"
+          ],
+          "enumDescriptions": [
+            "Invalid value.",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "QuerySource": {
+      "description": "List of sources that the user can search using the query API.",
+      "id": "QuerySource",
+      "properties": {
+        "displayName": {
+          "description": "Display name of the data source.",
+          "type": "string"
+        },
+        "operators": {
+          "description": "List of all operators applicable for this source.",
+          "items": {
+            "$ref": "QueryOperator"
+          },
+          "type": "array"
+        },
+        "shortName": {
+          "description": "A short name or alias for the source.  This value can be used with the\n'source' operator.",
+          "type": "string"
+        },
+        "source": {
+          "$ref": "Source",
+          "description": "Name of the source"
+        }
+      },
+      "type": "object"
+    },
+    "QuerySuggestion": {
+      "description": "A completed query suggestion.",
+      "id": "QuerySuggestion",
+      "properties": {},
+      "type": "object"
+    },
+    "RepositoryError": {
+      "description": "Errors when the connector is communicating to the source repository.",
+      "id": "RepositoryError",
+      "properties": {
+        "errorMessage": {
+          "description": "Message that describes the error. The maximum allowable length\nof the message is 8192 characters.",
+          "type": "string"
+        },
+        "httpStatusCode": {
+          "description": "Error codes.  Matches the definition of HTTP status codes.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "type": {
+          "description": "Type of error.",
+          "enum": [
+            "UNKNOWN",
+            "NETWORK_ERROR",
+            "DNS_ERROR",
+            "CONNECTION_ERROR",
+            "AUTHENTICATION_ERROR",
+            "AUTHORIZATION_ERROR",
+            "SERVER_ERROR",
+            "QUOTA_EXCEEDED",
+            "SERVICE_UNAVAILABLE",
+            "CLIENT_ERROR"
+          ],
+          "enumDescriptions": [
+            "Unknown error.",
+            "Unknown or unreachable host.",
+            "DNS problem, such as the DNS server is not responding.",
+            "Cannot connect to the repository server.",
+            "Failed authentication due to incorrect credentials.",
+            "Service account is not authorized for the repository.",
+            "Repository server error.",
+            "Quota exceeded.",
+            "Server temporarily unavailable.",
+            "Client-related error, such as an invalid request from the connector to\nthe repository server."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RequestOptions": {
+      "description": "Shared request options for all RPC methods.",
+      "id": "RequestOptions",
+      "properties": {
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Debug options of the request"
+        },
+        "languageCode": {
+          "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nFor translations.",
+          "type": "string"
+        },
+        "searchApplicationId": {
+          "description": "Id of the application created using SearchApplicationsService.",
+          "type": "string"
+        },
+        "timeZone": {
+          "description": "Current user's time zone id, such as \"America/Los_Angeles\" or\n\"Australia/Sydney\". These IDs are defined by\n[Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/)\nproject, and currently available in the file\n[timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml)",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ResetSearchApplicationRequest": {
+      "id": "ResetSearchApplicationRequest",
+      "properties": {
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        }
+      },
+      "type": "object"
+    },
+    "ResponseDebugInfo": {
+      "description": "Debugging information about the response.",
+      "id": "ResponseDebugInfo",
+      "properties": {
+        "formattedDebugInfo": {
+          "description": "General debug info formatted for display.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RestrictItem": {
+      "description": "Information relevant only to a restrict entry.\nNextId: 7",
+      "id": "RestrictItem",
+      "properties": {
+        "driveFollowUpRestrict": {
+          "$ref": "DriveFollowUpRestrict"
+        },
+        "driveLocationRestrict": {
+          "$ref": "DriveLocationRestrict"
+        },
+        "driveMimeTypeRestrict": {
+          "$ref": "DriveMimeTypeRestrict"
+        },
+        "driveTimeSpanRestrict": {
+          "$ref": "DriveTimeSpanRestrict"
+        },
+        "searchOperator": {
+          "description": "The search restrict (e.g. \"after:2017-09-11 before:2017-09-12\").",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ResultCounts": {
+      "description": "Result count information",
+      "id": "ResultCounts",
+      "properties": {
+        "sourceResultCounts": {
+          "description": "Result count information for each source with results.",
+          "items": {
+            "$ref": "SourceResultCount"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ResultDebugInfo": {
+      "description": "Debugging information about the result.",
+      "id": "ResultDebugInfo",
+      "properties": {
+        "formattedDebugInfo": {
+          "description": "General debug info formatted for display.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ResultDisplayField": {
+      "description": "Display Fields for Search Results",
+      "id": "ResultDisplayField",
+      "properties": {
+        "label": {
+          "description": "The display label for the property.",
+          "type": "string"
+        },
+        "operatorName": {
+          "description": "The operator name of the property.",
+          "type": "string"
+        },
+        "property": {
+          "$ref": "NamedProperty",
+          "description": "The name value pair for the property."
+        }
+      },
+      "type": "object"
+    },
+    "ResultDisplayLine": {
+      "description": "The collection of fields that make up a displayed line",
+      "id": "ResultDisplayLine",
+      "properties": {
+        "fields": {
+          "items": {
+            "$ref": "ResultDisplayField"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ResultDisplayMetadata": {
+      "id": "ResultDisplayMetadata",
+      "properties": {
+        "metalines": {
+          "description": "The metalines content to be displayed with the result.",
+          "items": {
+            "$ref": "ResultDisplayLine"
+          },
+          "type": "array"
+        },
+        "objectTypeLabel": {
+          "description": "The display label for the object.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RetrievalImportance": {
+      "id": "RetrievalImportance",
+      "properties": {
+        "importance": {
+          "description": "Indicates the ranking importance given to property when it is matched\nduring retrieval. Once set, the token importance of a property cannot be\nchanged.",
+          "enum": [
+            "DEFAULT",
+            "HIGHEST",
+            "HIGH",
+            "LOW",
+            "NONE"
+          ],
+          "enumDescriptions": [
+            "Treat the match like a body text match.",
+            "Treat the match like a match against title of the item.",
+            "Treat the match with higher importance than body text.",
+            "Treat the match with lower importance than body text.",
+            "Do not match against this field during retrieval. The property can still\nbe used for operator matching, faceting, and suggest if\ndesired."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Schema": {
+      "description": "The schema definition for a data source.",
+      "id": "Schema",
+      "properties": {
+        "objectDefinitions": {
+          "description": "The list of top-level objects for the data source.\nThe maximum number of elements is 10.",
+          "items": {
+            "$ref": "ObjectDefinition"
+          },
+          "type": "array"
+        },
+        "operationIds": {
+          "description": "IDs of the Long Running Operations (LROs) currently running for this\nschema. After modifying the schema, wait for opeations to complete\nbefore indexing additional content.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ScoringConfig": {
+      "description": "Scoring configurations for a source while processing a\nSearch or\nSuggest request.",
+      "id": "ScoringConfig",
+      "properties": {
+        "disableFreshness": {
+          "description": "Whether to use freshness as a ranking signal. By default, freshness is used\nas a ranking signal.",
+          "type": "boolean"
+        },
+        "disablePersonalization": {
+          "description": "Whether to personalize the results. By default, personal signals will\nbe used to boost results.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "SearchApplication": {
+      "description": "SearchApplication",
+      "id": "SearchApplication",
+      "properties": {
+        "dataSourceRestrictions": {
+          "description": "Retrictions applied to the configurations.\nThe maximum number of elements is 10.",
+          "items": {
+            "$ref": "DataSourceRestriction"
+          },
+          "type": "array"
+        },
+        "defaultFacetOptions": {
+          "description": "The default fields for returning facet results.\nThe sources specified here also have been included in\ndata_source_restrictions\nabove.",
+          "items": {
+            "$ref": "FacetOptions"
+          },
+          "type": "array"
+        },
+        "defaultSortOptions": {
+          "$ref": "SortOptions",
+          "description": "The default options for sorting the search results"
+        },
+        "displayName": {
+          "description": "Display name of the Search Application.\nThe maximum length is 300 characters.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Name of the Search Application.\n\u003cbr /\u003eFormat: searchapplications/{application_id}.",
+          "type": "string"
+        },
+        "operationIds": {
+          "description": "IDs of the Long Running Operations (LROs) currently running for this schema.\nOutput only field.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "scoringConfig": {
+          "$ref": "ScoringConfig",
+          "description": "Configuration for ranking results."
+        },
+        "sourceConfig": {
+          "description": "Configuration for a sources specified in data_source_restrictions.",
+          "items": {
+            "$ref": "SourceConfig"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "SearchQualityMetadata": {
+      "description": "Additional search quality metadata of the item.",
+      "id": "SearchQualityMetadata",
+      "properties": {
+        "quality": {
+          "description": "An indication of the quality of the item, used to influence search quality.\nValue should be between 0.0 (lowest quality) and 1.0 (highest quality).",
+          "format": "double",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
+    "SearchRequest": {
+      "description": "The search API request.",
+      "id": "SearchRequest",
+      "properties": {
+        "dataSourceRestrictions": {
+          "description": "The sources to use for querying. If not specified, all data sources\nfrom the current search application are used.",
+          "items": {
+            "$ref": "DataSourceRestriction"
+          },
+          "type": "array"
+        },
+        "facetOptions": {
+          "items": {
+            "$ref": "FacetOptions"
+          },
+          "type": "array"
+        },
+        "pageSize": {
+          "description": "Maximum number of search results to return in one page.\nValid values are between 1 and 100, inclusive.\nDefault value is 10.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "query": {
+          "description": "The raw query string.\nSee supported search operators in the [Cloud search\nCheat\nSheet](https://gsuite.google.com/learning-center/products/cloudsearch/cheat-sheet/)",
+          "type": "string"
+        },
+        "queryInterpretationOptions": {
+          "$ref": "QueryInterpretationOptions",
+          "description": "Options to interpret the user query."
+        },
+        "requestOptions": {
+          "$ref": "RequestOptions",
+          "description": "Request options, such as the search application and user timezone."
+        },
+        "sortOptions": {
+          "$ref": "SortOptions",
+          "description": "The options for sorting the search results"
+        },
+        "start": {
+          "description": "Starting index of the results.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "type": "object"
+    },
+    "SearchResponse": {
+      "description": "The search API response.",
+      "id": "SearchResponse",
+      "properties": {
+        "debugInfo": {
+          "$ref": "ResponseDebugInfo",
+          "description": "Debugging information about the response."
+        },
+        "errorInfo": {
+          "$ref": "ErrorInfo",
+          "description": "Error information about the response."
+        },
+        "facetResults": {
+          "description": "Repeated facet results.",
+          "items": {
+            "$ref": "FacetResult"
+          },
+          "type": "array"
+        },
+        "hasMoreResults": {
+          "description": "Whether there are more search results matching the query.",
+          "type": "boolean"
+        },
+        "queryInterpretation": {
+          "$ref": "QueryInterpretation",
+          "description": "Query interpretation result for user query. Empty if query interpretation\nis disabled."
+        },
+        "resultCountEstimate": {
+          "description": "The estimated result count for this query.",
+          "format": "int64",
+          "type": "string"
+        },
+        "resultCountExact": {
+          "description": "The exact result count for this query.",
+          "format": "int64",
+          "type": "string"
+        },
+        "resultCounts": {
+          "$ref": "ResultCounts",
+          "description": "Expanded result count information."
+        },
+        "results": {
+          "description": "Results from a search query.",
+          "items": {
+            "$ref": "SearchResult"
+          },
+          "type": "array"
+        },
+        "spellResults": {
+          "description": "Suggested spelling for the query.",
+          "items": {
+            "$ref": "SpellResult"
+          },
+          "type": "array"
+        },
+        "structuredResults": {
+          "description": "Structured results for the user query. These results are not counted\nagainst the page_size.",
+          "items": {
+            "$ref": "StructuredResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "SearchResult": {
+      "description": "Results containing indexed information for a document.",
+      "id": "SearchResult",
+      "properties": {
+        "clusteredResults": {
+          "description": "If source is clustered, provide list of clustered results. There will only\nbe one level of clustered results. If current source is not enabled for\nclustering, this field will be empty.",
+          "items": {
+            "$ref": "SearchResult"
+          },
+          "type": "array"
+        },
+        "debugInfo": {
+          "$ref": "ResultDebugInfo",
+          "description": "Debugging information about this search result."
+        },
+        "metadata": {
+          "$ref": "Metadata",
+          "description": "Metadata of the search result."
+        },
+        "snippet": {
+          "$ref": "Snippet",
+          "description": "The concatenation of all snippets (summaries) available for this result."
+        },
+        "title": {
+          "description": "Title of the search result.",
+          "type": "string"
+        },
+        "url": {
+          "description": "The URL of the result.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Snippet": {
+      "description": "Snippet of the search result, which summarizes the content of the resulting\npage.",
+      "id": "Snippet",
+      "properties": {
+        "matchRanges": {
+          "description": "The matched ranges in the snippet.",
+          "items": {
+            "$ref": "MatchRange"
+          },
+          "type": "array"
+        },
+        "snippet": {
+          "description": "The snippet of the document.\nThe snippet of the document. May contain escaped HTML character that\nshould be unescaped prior to rendering.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SortOptions": {
+      "id": "SortOptions",
+      "properties": {
+        "operatorName": {
+          "description": "Name of the operator corresponding to the field to sort on.\nThe corresponding property must be marked as\nsortable.",
+          "type": "string"
+        },
+        "sortOrder": {
+          "description": "Ascending is the default sort order",
+          "enum": [
+            "ASCENDING",
+            "DESCENDING"
+          ],
+          "enumDescriptions": [
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Source": {
+      "description": "Defines sources for the suggest/search APIs.",
+      "id": "Source",
+      "properties": {
+        "name": {
+          "description": "Source name for content indexed by the\nIndexing API.",
+          "type": "string"
+        },
+        "predefinedSource": {
+          "description": "Predefined content source for Google Apps.",
+          "enum": [
+            "NONE",
+            "QUERY_HISTORY",
+            "PERSON",
+            "GOOGLE_DRIVE",
+            "GOOGLE_GMAIL",
+            "GOOGLE_SITES",
+            "GOOGLE_GROUPS",
+            "GOOGLE_CALENDAR",
+            "GOOGLE_KEEP"
+          ],
+          "enumDescriptions": [
+            "",
+            "Suggests queries issued by the user in the past. Only valid when used\nwith the suggest API. Ignored when used in the query API.",
+            "Suggests people in the organization. Only valid when used\nwith the suggest API. Results in an error when used in the query API.",
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SourceConfig": {
+      "description": "Configurations for a source while processing a\nSearch or\nSuggest request.",
+      "id": "SourceConfig",
+      "properties": {
+        "crowdingConfig": {
+          "$ref": "SourceCrowdingConfig",
+          "description": "The crowding configuration for the source."
+        },
+        "scoringConfig": {
+          "$ref": "SourceScoringConfig",
+          "description": "The scoring configuration for the source."
+        },
+        "source": {
+          "$ref": "Source",
+          "description": "The source for which this configuration is to be used."
+        }
+      },
+      "type": "object"
+    },
+    "SourceCrowdingConfig": {
+      "description": "Set search results crowding limits. Crowding is a situation in which\nmultiple results from the same source or host \"crowd out\" other results,\ndiminishing the quality of search for users. To foster better search quality\nand source diversity in search results, you can set a condition to reduce\nrepetitive results by source.",
+      "id": "SourceCrowdingConfig",
+      "properties": {
+        "field": {
+          "description": "Use a field to control results crowding. For example, if you want to\ncontrol overly similar results from Gmail topics, use `thread_id`.\nFor similar pages from Google Sites, you can use `webspace_id`.\nWhen matching query results contain the same field value in\n`GenericMetadata`, crowding limits are set on those records.",
+          "type": "string"
+        },
+        "numResults": {
+          "description": "Maximum number of results allowed from a source.\nNo limits will be set on results if this value is less than or equal to 0.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "numSuggestions": {
+          "description": "Maximum number of suggestions allowed from a source.\nNo limits will be set on results if this value is less than or equal to 0.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "source": {
+          "description": "Control results by content source. This option limits the total number\nof results from a given source and ignores field-based crowding control.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "SourceResultCount": {
+      "description": "Per source result count information.",
+      "id": "SourceResultCount",
+      "properties": {
+        "hasMoreResults": {
+          "description": "Whether there are more search results for this source.",
+          "type": "boolean"
+        },
+        "resultCountEstimate": {
+          "description": "The estimated result count for this source.",
+          "format": "int64",
+          "type": "string"
+        },
+        "resultCountExact": {
+          "description": "The exact result count for this source.",
+          "format": "int64",
+          "type": "string"
+        },
+        "source": {
+          "$ref": "Source",
+          "description": "The source the result count information is associated with."
+        }
+      },
+      "type": "object"
+    },
+    "SourceScoringConfig": {
+      "description": "Set the scoring configuration. This allows modifying the ranking of results\nfor a source.",
+      "id": "SourceScoringConfig",
+      "properties": {
+        "sourceImportance": {
+          "description": "Importance of the source.",
+          "enum": [
+            "DEFAULT",
+            "LOW",
+            "HIGH"
+          ],
+          "enumDescriptions": [
+            "",
+            "",
+            ""
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "SpellResult": {
+      "id": "SpellResult",
+      "properties": {
+        "suggestedQuery": {
+          "description": "The suggested spelling of the query.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "StartUploadItemRequest": {
+      "description": "Start upload file request.",
+      "id": "StartUploadItemRequest",
+      "properties": {
+        "connectorName": {
+          "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+          "type": "string"
+        },
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        }
+      },
+      "type": "object"
+    },
+    "Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` that can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "id": "Status",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There is a common set of\nmessage types for APIs to use.",
+          "items": {
+            "additionalProperties": {
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
+            },
+            "type": "object"
+          },
+          "type": "array"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "StructuredDataObject": {
+      "description": "A structured data object consisting of named properties.",
+      "id": "StructuredDataObject",
+      "properties": {
+        "properties": {
+          "description": "The properties for the object.\nThe maximum number of elements is 1000.",
+          "items": {
+            "$ref": "NamedProperty"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "StructuredResult": {
+      "description": "Structured results that are returned as part of search request.",
+      "id": "StructuredResult",
+      "properties": {
+        "person": {
+          "$ref": "Person"
+        }
+      },
+      "type": "object"
+    },
+    "SuggestRequest": {
+      "description": "Request of suggest API.",
+      "id": "SuggestRequest",
+      "properties": {
+        "dataSourceRestrictions": {
+          "description": "The sources to use for suggestions. If not specified, all data sources\nfrom the current search application are used.",
+          "items": {
+            "$ref": "DataSourceRestriction"
+          },
+          "type": "array"
+        },
+        "query": {
+          "description": "Partial query for the completion suggestion.",
+          "type": "string"
+        },
+        "requestOptions": {
+          "$ref": "RequestOptions",
+          "description": "Request options, such as the search application and user timezone."
+        }
+      },
+      "type": "object"
+    },
+    "SuggestResponse": {
+      "description": "Response of the suggest API.",
+      "id": "SuggestResponse",
+      "properties": {
+        "suggestResults": {
+          "description": "List of suggestion results.",
+          "items": {
+            "$ref": "SuggestResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "SuggestResult": {
+      "description": "One suggestion result.",
+      "id": "SuggestResult",
+      "properties": {
+        "peopleSuggestion": {
+          "$ref": "PeopleSuggestion"
+        },
+        "querySuggestion": {
+          "$ref": "QuerySuggestion"
+        },
+        "source": {
+          "$ref": "Source",
+          "description": "The source of the suggestion."
+        },
+        "suggestedQuery": {
+          "description": "The suggested query that will be used for search, when the user\nclicks on the suggestion",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "TextOperatorOptions": {
+      "description": "Used to provide a search operator for text properties. This is optional.\nSearch operators let users restrict the query to specific fields relevant\nto the type of item being searched.",
+      "id": "TextOperatorOptions",
+      "properties": {
+        "exactMatchWithOperator": {
+          "description": "If true, the text value will be tokenized as one atomic value in\noperator searches and facet matches. For example, if the operator name is\n\"genre\" and the value is \"science-fiction\" the query restrictions\n\"genre:science\" and \"genre:fiction\" will not match the item;\n\"genre:science-fiction\" will. Value matching is case-sensitive\nand does not remove special characters.\nIf false, the text will be tokenized. For example, if the value is\n\"science-fiction\" the queries \"genre:science\" and \"genre:fiction\" will\nmatch the item.",
+          "type": "boolean"
+        },
+        "operatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ntext property. For example, if operatorName is *subject* and the\nproperty's name is *subjectLine*, then queries like\n*subject:\u0026lt;value\u0026gt;* will show results only where the value of the\nproperty named *subjectLine* matches *\u0026lt;value\u0026gt;*. By contrast, a\nsearch that uses the same *\u0026lt;value\u0026gt;* without an operator will return\nall items where *\u0026lt;value\u0026gt;* matches the value of any\ntext properties or text within the content field for the item.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "TextPropertyOptions": {
+      "description": "Options for text properties.",
+      "id": "TextPropertyOptions",
+      "properties": {
+        "operatorOptions": {
+          "$ref": "TextOperatorOptions",
+          "description": "If set, describes how the property should be used as a search operator."
+        },
+        "retrievalImportance": {
+          "$ref": "RetrievalImportance",
+          "description": "Indicates the search quality importance of the tokens within the\nfield when used for retrieval."
+        }
+      },
+      "type": "object"
+    },
+    "TextValues": {
+      "description": "List of text values.",
+      "id": "TextValues",
+      "properties": {
+        "values": {
+          "description": "The maximum allowable length for text values is 2048 characters.\nThe maximum number of string elements is 100.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "TimestampOperatorOptions": {
+      "description": "Used to provide a search operator for timestamp properties. This is\noptional. Search operators let users restrict the query to specific fields\nrelevant to the type of item being searched.",
+      "id": "TimestampOperatorOptions",
+      "properties": {
+        "greaterThanOperatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ntimestamp property using the greater-than operator. For example, if\ngreaterThanOperatorName is *closedafter* and the property's name is\n*closeDate*, then queries like *closedafter:\u0026lt;value\u0026gt;* will\nshow results only where the value of the property named *closeDate* is\nlater than *\u0026lt;value\u0026gt;*.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        },
+        "lessThanOperatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ntimestamp property using the less-than operator. For example, if\nlessThanOperatorName is *closedbefore* and the property's name is\n*closeDate*, then queries like *closedbefore:\u0026lt;value\u0026gt;* will\nshow results only where the value of the property named *closeDate* is\nearlier than *\u0026lt;value\u0026gt;*.\nThe operator name can only contain lowercase letters (a-z).\nThe maximum length is 32 characters.",
+          "type": "string"
+        },
+        "operatorName": {
+          "description": "Indicates the operator name required in the query in order to isolate the\ntimestamp property. For example, if operatorName is *closedon* and the\nproperty's name is *closeDate*, then queries like\n*closedon:\u0026lt;value\u0026gt;* will show results only where the value of the\nproperty named *closeDate* matches *\u0026lt;value\u0026gt;*. By contrast, a\nsearch that uses the same *\u0026lt;value\u0026gt;* without an operator will return\nall items where *\u0026lt;value\u0026gt;* matches the value of any String\nproperties or text within the content field for the item. The operator\nname can only contain lowercase letters (a-z). The maximum length is 32\ncharacters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "TimestampPropertyOptions": {
+      "description": "Options for timestamp properties.",
+      "id": "TimestampPropertyOptions",
+      "properties": {
+        "operatorOptions": {
+          "$ref": "TimestampOperatorOptions",
+          "description": "If set, describes how the timestamp should be used as a search operator."
+        }
+      },
+      "type": "object"
+    },
+    "TimestampValues": {
+      "description": "List of timestamp values.",
+      "id": "TimestampValues",
+      "properties": {
+        "values": {
+          "description": "The maximum number of elements is 100.",
+          "items": {
+            "format": "google-datetime",
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "UnmappedIdentity": {
+      "id": "UnmappedIdentity",
+      "properties": {
+        "externalIdentity": {
+          "$ref": "Principal",
+          "description": "The resource name for an external user."
+        },
+        "resolutionStatusCode": {
+          "description": "The resolution status for the external identity.",
+          "enum": [
+            "CODE_UNSPECIFIED",
+            "NOT_FOUND",
+            "IDENTITY_SOURCE_NOT_FOUND",
+            "IDENTITY_SOURCE_MISCONFIGURED",
+            "TOO_MANY_MAPPINGS_FOUND",
+            "INTERNAL_ERROR"
+          ],
+          "enumDescriptions": [
+            "Input-only value.  Used to list all unmapped identities regardless of\nstatus.",
+            "The unmapped identity was not found in IDaaS, and needs to be provided by\nthe user.",
+            "The identity source associated with the identity was either not found or\ndeleted.",
+            "IDaaS does not understand the identity source, probably because the\nschema was modified in a non compatible way.",
+            "The number of users associated with the external identity is too large.",
+            "Internal error."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "UnreserveItemsRequest": {
+      "id": "UnreserveItemsRequest",
+      "properties": {
+        "connectorName": {
+          "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+          "type": "string"
+        },
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "queue": {
+          "description": "Name of a queue to unreserve items from.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "UpdateDataSourceRequest": {
+      "id": "UpdateDataSourceRequest",
+      "properties": {
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "source": {
+          "$ref": "DataSource"
+        }
+      },
+      "type": "object"
+    },
+    "UpdateSchemaRequest": {
+      "id": "UpdateSchemaRequest",
+      "properties": {
+        "debugOptions": {
+          "$ref": "DebugOptions",
+          "description": "Common debug options."
+        },
+        "schema": {
+          "$ref": "Schema",
+          "description": "The new schema for the source."
+        },
+        "validateOnly": {
+          "description": "If true, the request will be validated without side effects.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "UploadItemRef": {
+      "description": "Represents an upload session reference.\nThis reference is created via upload\nmethod.\nUpdating of item content may refer to this uploaded content via\ncontentDataRef.",
+      "id": "UploadItemRef",
+      "properties": {
+        "name": {
+          "description": "Name of the content reference.\nThe maximum length is 2048 characters.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Value": {
+      "description": "Definition of a single value with generic type.",
+      "id": "Value",
+      "properties": {
+        "booleanValue": {
+          "type": "boolean"
+        },
+        "dateValue": {
+          "$ref": "Date"
+        },
+        "doubleValue": {
+          "format": "double",
+          "type": "number"
+        },
+        "integerValue": {
+          "format": "int64",
+          "type": "string"
+        },
+        "stringValue": {
+          "type": "string"
+        },
+        "timestampValue": {
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ValueFilter": {
+      "id": "ValueFilter",
+      "properties": {
+        "operatorName": {
+          "description": "The `operator_name` applied to the query, such as *price_greater_than*.\nThe filter can work against both types of filters defined in the schema\nfor your data source:\n\u003cbr/\u003e\u003cbr/\u003e\n1. `operator_name`, where the query filters results by the property\nthat matches the value.\n\u003cbr/\u003e\n2. `greater_than_operator_name` or `less_than_operator_name` in your\nschema. The query filters the results for the property values that are\ngreater than or less than  the supplied value in the query.",
+          "type": "string"
+        },
+        "value": {
+          "$ref": "Value",
+          "description": "The value to be compared with."
+        }
+      },
+      "type": "object"
+    }
+  },
+  "servicePath": "",
+  "title": "Cloud Search API",
+  "version": "v1",
+  "version_module": true
+}
\ No newline at end of file
diff --git a/cloudsearch/v1/cloudsearch-gen.go b/cloudsearch/v1/cloudsearch-gen.go
new file mode 100644
index 0000000..26fb378
--- /dev/null
+++ b/cloudsearch/v1/cloudsearch-gen.go
@@ -0,0 +1,11778 @@
+// Package cloudsearch provides access to the Cloud Search API.
+//
+// See https://gsuite.google.com/products/cloud-search/
+//
+// Usage example:
+//
+//   import "google.golang.org/api/cloudsearch/v1"
+//   ...
+//   cloudsearchService, err := cloudsearch.New(oauthHttpClient)
+package cloudsearch // import "google.golang.org/api/cloudsearch/v1"
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
+)
+
+// Always reference these packages, just in case the auto-generated code
+// below doesn't.
+var _ = bytes.NewBuffer
+var _ = strconv.Itoa
+var _ = fmt.Sprintf
+var _ = json.NewDecoder
+var _ = io.Copy
+var _ = url.Parse
+var _ = gensupport.MarshalJSON
+var _ = googleapi.Version
+var _ = errors.New
+var _ = strings.Replace
+var _ = context.Canceled
+var _ = ctxhttp.Do
+
+const apiId = "cloudsearch:v1"
+const apiName = "cloudsearch"
+const apiVersion = "v1"
+const basePath = "https://cloudsearch.googleapis.com/"
+
+// OAuth2 scopes used by this API.
+const (
+	// Index and serve your organization's data with Cloud Search
+	CloudSearchScope = "https://www.googleapis.com/auth/cloud_search"
+
+	// New Service: https://www.googleapis.com/auth/cloud_search.debug
+	CloudSearchDebugScope = "https://www.googleapis.com/auth/cloud_search.debug"
+
+	// New Service: https://www.googleapis.com/auth/cloud_search.indexing
+	CloudSearchIndexingScope = "https://www.googleapis.com/auth/cloud_search.indexing"
+
+	// Search your organization's data in the Cloud Search index
+	CloudSearchQueryScope = "https://www.googleapis.com/auth/cloud_search.query"
+
+	// New Service: https://www.googleapis.com/auth/cloud_search.settings
+	CloudSearchSettingsScope = "https://www.googleapis.com/auth/cloud_search.settings"
+
+	// New Service:
+	// https://www.googleapis.com/auth/cloud_search.settings.indexing
+	CloudSearchSettingsIndexingScope = "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+
+	// New Service:
+	// https://www.googleapis.com/auth/cloud_search.settings.query
+	CloudSearchSettingsQueryScope = "https://www.googleapis.com/auth/cloud_search.settings.query"
+
+	// New Service: https://www.googleapis.com/auth/cloud_search.stats
+	CloudSearchStatsScope = "https://www.googleapis.com/auth/cloud_search.stats"
+
+	// New Service:
+	// https://www.googleapis.com/auth/cloud_search.stats.indexing
+	CloudSearchStatsIndexingScope = "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	s.Debug = NewDebugService(s)
+	s.Indexing = NewIndexingService(s)
+	s.Media = NewMediaService(s)
+	s.Operations = NewOperationsService(s)
+	s.Query = NewQueryService(s)
+	s.Settings = NewSettingsService(s)
+	s.Stats = NewStatsService(s)
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Debug *DebugService
+
+	Indexing *IndexingService
+
+	Media *MediaService
+
+	Operations *OperationsService
+
+	Query *QueryService
+
+	Settings *SettingsService
+
+	Stats *StatsService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewDebugService(s *Service) *DebugService {
+	rs := &DebugService{s: s}
+	rs.Datasources = NewDebugDatasourcesService(s)
+	rs.Identitysources = NewDebugIdentitysourcesService(s)
+	return rs
+}
+
+type DebugService struct {
+	s *Service
+
+	Datasources *DebugDatasourcesService
+
+	Identitysources *DebugIdentitysourcesService
+}
+
+func NewDebugDatasourcesService(s *Service) *DebugDatasourcesService {
+	rs := &DebugDatasourcesService{s: s}
+	rs.Items = NewDebugDatasourcesItemsService(s)
+	return rs
+}
+
+type DebugDatasourcesService struct {
+	s *Service
+
+	Items *DebugDatasourcesItemsService
+}
+
+func NewDebugDatasourcesItemsService(s *Service) *DebugDatasourcesItemsService {
+	rs := &DebugDatasourcesItemsService{s: s}
+	rs.Unmappedids = NewDebugDatasourcesItemsUnmappedidsService(s)
+	return rs
+}
+
+type DebugDatasourcesItemsService struct {
+	s *Service
+
+	Unmappedids *DebugDatasourcesItemsUnmappedidsService
+}
+
+func NewDebugDatasourcesItemsUnmappedidsService(s *Service) *DebugDatasourcesItemsUnmappedidsService {
+	rs := &DebugDatasourcesItemsUnmappedidsService{s: s}
+	return rs
+}
+
+type DebugDatasourcesItemsUnmappedidsService struct {
+	s *Service
+}
+
+func NewDebugIdentitysourcesService(s *Service) *DebugIdentitysourcesService {
+	rs := &DebugIdentitysourcesService{s: s}
+	rs.Items = NewDebugIdentitysourcesItemsService(s)
+	rs.Unmappedids = NewDebugIdentitysourcesUnmappedidsService(s)
+	return rs
+}
+
+type DebugIdentitysourcesService struct {
+	s *Service
+
+	Items *DebugIdentitysourcesItemsService
+
+	Unmappedids *DebugIdentitysourcesUnmappedidsService
+}
+
+func NewDebugIdentitysourcesItemsService(s *Service) *DebugIdentitysourcesItemsService {
+	rs := &DebugIdentitysourcesItemsService{s: s}
+	return rs
+}
+
+type DebugIdentitysourcesItemsService struct {
+	s *Service
+}
+
+func NewDebugIdentitysourcesUnmappedidsService(s *Service) *DebugIdentitysourcesUnmappedidsService {
+	rs := &DebugIdentitysourcesUnmappedidsService{s: s}
+	return rs
+}
+
+type DebugIdentitysourcesUnmappedidsService struct {
+	s *Service
+}
+
+func NewIndexingService(s *Service) *IndexingService {
+	rs := &IndexingService{s: s}
+	rs.Datasources = NewIndexingDatasourcesService(s)
+	return rs
+}
+
+type IndexingService struct {
+	s *Service
+
+	Datasources *IndexingDatasourcesService
+}
+
+func NewIndexingDatasourcesService(s *Service) *IndexingDatasourcesService {
+	rs := &IndexingDatasourcesService{s: s}
+	rs.Items = NewIndexingDatasourcesItemsService(s)
+	return rs
+}
+
+type IndexingDatasourcesService struct {
+	s *Service
+
+	Items *IndexingDatasourcesItemsService
+}
+
+func NewIndexingDatasourcesItemsService(s *Service) *IndexingDatasourcesItemsService {
+	rs := &IndexingDatasourcesItemsService{s: s}
+	return rs
+}
+
+type IndexingDatasourcesItemsService struct {
+	s *Service
+}
+
+func NewMediaService(s *Service) *MediaService {
+	rs := &MediaService{s: s}
+	return rs
+}
+
+type MediaService struct {
+	s *Service
+}
+
+func NewOperationsService(s *Service) *OperationsService {
+	rs := &OperationsService{s: s}
+	return rs
+}
+
+type OperationsService struct {
+	s *Service
+}
+
+func NewQueryService(s *Service) *QueryService {
+	rs := &QueryService{s: s}
+	rs.Sources = NewQuerySourcesService(s)
+	return rs
+}
+
+type QueryService struct {
+	s *Service
+
+	Sources *QuerySourcesService
+}
+
+func NewQuerySourcesService(s *Service) *QuerySourcesService {
+	rs := &QuerySourcesService{s: s}
+	return rs
+}
+
+type QuerySourcesService struct {
+	s *Service
+}
+
+func NewSettingsService(s *Service) *SettingsService {
+	rs := &SettingsService{s: s}
+	rs.Datasources = NewSettingsDatasourcesService(s)
+	rs.Searchapplications = NewSettingsSearchapplicationsService(s)
+	return rs
+}
+
+type SettingsService struct {
+	s *Service
+
+	Datasources *SettingsDatasourcesService
+
+	Searchapplications *SettingsSearchapplicationsService
+}
+
+func NewSettingsDatasourcesService(s *Service) *SettingsDatasourcesService {
+	rs := &SettingsDatasourcesService{s: s}
+	return rs
+}
+
+type SettingsDatasourcesService struct {
+	s *Service
+}
+
+func NewSettingsSearchapplicationsService(s *Service) *SettingsSearchapplicationsService {
+	rs := &SettingsSearchapplicationsService{s: s}
+	return rs
+}
+
+type SettingsSearchapplicationsService struct {
+	s *Service
+}
+
+func NewStatsService(s *Service) *StatsService {
+	rs := &StatsService{s: s}
+	rs.Index = NewStatsIndexService(s)
+	return rs
+}
+
+type StatsService struct {
+	s *Service
+
+	Index *StatsIndexService
+}
+
+func NewStatsIndexService(s *Service) *StatsIndexService {
+	rs := &StatsIndexService{s: s}
+	rs.Datasources = NewStatsIndexDatasourcesService(s)
+	return rs
+}
+
+type StatsIndexService struct {
+	s *Service
+
+	Datasources *StatsIndexDatasourcesService
+}
+
+func NewStatsIndexDatasourcesService(s *Service) *StatsIndexDatasourcesService {
+	rs := &StatsIndexDatasourcesService{s: s}
+	return rs
+}
+
+type StatsIndexDatasourcesService struct {
+	s *Service
+}
+
+// BooleanOperatorOptions: Used to provide a search operator for boolean
+// properties. This is
+// optional. Search operators let users restrict the query to specific
+// fields
+// relevant to the type of item being searched.
+type BooleanOperatorOptions struct {
+	// OperatorName: Indicates the operator name required in the query in
+	// order to isolate the
+	// boolean property. For example, if operatorName is *closed* and
+	// the
+	// property's name is *isClosed*, then queries
+	// like
+	// *closed:<value>* will show results only where the value of
+	// the
+	// property named *isClosed* matches *<value>*. By contrast,
+	// a
+	// search that uses the same *<value>* without an operator will
+	// return
+	// all items where *<value>* matches the value of any
+	// String properties or text within the content field for the item.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorName") 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 *BooleanOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod BooleanOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// BooleanPropertyOptions: Options for boolean properties.
+type BooleanPropertyOptions struct {
+	// OperatorOptions: If set, describes how the boolean should be used as
+	// a search operator.
+	OperatorOptions *BooleanOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorOptions") 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 *BooleanPropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod BooleanPropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type CompositeFilter struct {
+	// LogicOperator: The logic operator of the sub filter.
+	//
+	// Possible values:
+	//   "AND" - Logical operators, which can only be applied to sub
+	// filters.
+	//   "OR"
+	//   "NOT" - NOT can only be applied on a single sub filter.
+	LogicOperator string `json:"logicOperator,omitempty"`
+
+	// SubFilters: Sub filters.
+	SubFilters []*Filter `json:"subFilters,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "LogicOperator") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "LogicOperator") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CompositeFilter) MarshalJSON() ([]byte, error) {
+	type NoMethod CompositeFilter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CustomerIndexStats: Aggregation of items by status code as of the
+// specified date.
+type CustomerIndexStats struct {
+	// Date: Date for which statistics were calculated.
+	Date *Date `json:"date,omitempty"`
+
+	// ItemCountByStatus: Number of items aggregrated by status code.
+	ItemCountByStatus []*ItemCountByStatus `json:"itemCountByStatus,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Date") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Date") 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 *CustomerIndexStats) MarshalJSON() ([]byte, error) {
+	type NoMethod CustomerIndexStats
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DataSource: Data source is a logical namespace for items to be
+// indexed.
+// All items must belong to a data source.  This is the prerequisite
+// before
+// items can be indexed into Cloud Search.
+type DataSource struct {
+	// DisableModifications: If true, Indexing API rejects any modification
+	// calls to this data source
+	// such as create, update, and delete.
+	// Disabling this does not imply halting process of previously
+	// accepted data.
+	DisableModifications bool `json:"disableModifications,omitempty"`
+
+	// DisableServing: Disable serving any search or assist results.
+	DisableServing bool `json:"disableServing,omitempty"`
+
+	// DisplayName: Required. Display name of the data source
+	// The maximum length is 300 characters.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// IndexingServiceAccounts: List of service accounts that have indexing
+	// access.
+	IndexingServiceAccounts []string `json:"indexingServiceAccounts,omitempty"`
+
+	// ItemsVisibility: This restricts visibility to items at a data source
+	// level to the
+	// disjunction of users/groups mentioned with the field. Note that,
+	// this
+	// does not ensure access to a specific item, as users need to have
+	// ACL
+	// permissions on the contained items. This ensures a high level
+	// access
+	// on the entire data source, and that the individual items are not
+	// shared
+	// outside this visibility.
+	ItemsVisibility []*GSuitePrincipal `json:"itemsVisibility,omitempty"`
+
+	// Name: Name of the data source resource.
+	// Format: datasources/{source_id}.
+	// <br />The name is ignored when creating a data source.
+	Name string `json:"name,omitempty"`
+
+	// OperationIds: IDs of the Long Running Operations (LROs) currently
+	// running for this schema.
+	OperationIds []string `json:"operationIds,omitempty"`
+
+	// ShortName: A short name or alias for the source.  This value will be
+	// used to match the
+	// 'source' operator. For example, if the short name is *&lt;value&gt;*
+	// then
+	// queries like *source:&lt;value&gt;* will only return results for
+	// this
+	// source. The value must be unique across all data sources. The value
+	// must
+	// only contain alphanumeric characters (a-zA-Z0-9). The value cannot
+	// start
+	// with 'google' and cannot be one of the following: mail, gmail, docs,
+	// drive,
+	// groups, sites, calendar, hangouts, gplus, keep.
+	// Its maximum length is 32 characters.
+	ShortName string `json:"shortName,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "DisableModifications") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "DisableModifications") 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 *DataSource) MarshalJSON() ([]byte, error) {
+	type NoMethod DataSource
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DataSourceIndexStats: Aggregation of items by status code as of the
+// specified date.
+type DataSourceIndexStats struct {
+	// Date: Date for which index stats were calculated. If the date of
+	// request is not
+	// the current date then stats calculated on the next day are returned.
+	// Stats
+	// are calculated close to mid night in this case. If date of request
+	// is
+	// current date, then real time stats are returned.
+	Date *Date `json:"date,omitempty"`
+
+	// ItemCountByStatus: Number of items aggregrated by status code.
+	ItemCountByStatus []*ItemCountByStatus `json:"itemCountByStatus,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Date") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Date") 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 *DataSourceIndexStats) MarshalJSON() ([]byte, error) {
+	type NoMethod DataSourceIndexStats
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DataSourceRestriction: Restriction on Datasource.
+type DataSourceRestriction struct {
+	// FilterOptions: Filter options restricting the results. If multiple
+	// filters
+	// are present, they are grouped by object type before joining.
+	// Filters with the same object type are joined conjunctively, then
+	// the resulting expressions are joined disjunctively.
+	//
+	// The maximum number of elements is 20.
+	FilterOptions []*FilterOptions `json:"filterOptions,omitempty"`
+
+	// Source: The source of restriction.
+	Source *Source `json:"source,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FilterOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "FilterOptions") 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 *DataSourceRestriction) MarshalJSON() ([]byte, error) {
+	type NoMethod DataSourceRestriction
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Date: Represents a whole calendar date, for example a date of birth.
+// The time of day and time zone are either specified elsewhere or are
+// not significant. The date is relative to the [Proleptic Gregorian
+// Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar).
+//  The date must be a valid calendar date between the year 1 and 9999.
+type Date struct {
+	// Day: Day of month. Must be from 1 to 31 and valid for the year and
+	// month.
+	Day int64 `json:"day,omitempty"`
+
+	// Month: Month of date. Must be from 1 to 12.
+	Month int64 `json:"month,omitempty"`
+
+	// Year: Year of date. Must be from 1 to 9999.
+	Year int64 `json:"year,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Day") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Day") 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 *Date) MarshalJSON() ([]byte, error) {
+	type NoMethod Date
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DateOperatorOptions: Optional. Provides a search operator for date
+// properties.
+// Search operators let users restrict the query to specific fields
+// relevant
+// to the type of item being searched.
+type DateOperatorOptions struct {
+	// GreaterThanOperatorName: Indicates the operator name required in the
+	// query in order to isolate the
+	// date property using the greater-than operator. For example,
+	// if
+	// greaterThanOperatorName is *closedafter* and the property's name
+	// is
+	// *closeDate*, then queries like *closedafter:&lt;value&gt;* will
+	// show results only where the value of the property named *closeDate*
+	// is
+	// later than *&lt;value&gt;*.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	GreaterThanOperatorName string `json:"greaterThanOperatorName,omitempty"`
+
+	// LessThanOperatorName: Indicates the operator name required in the
+	// query in order to isolate the
+	// date property using the less-than operator. For example,
+	// if
+	// lessThanOperatorName is *closedbefore* and the property's name
+	// is
+	// *closeDate*, then queries like *closedbefore:&lt;value&gt;* will
+	// show results only where the value of the property named *closeDate*
+	// is
+	// earlier than *&lt;value&gt;*.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	LessThanOperatorName string `json:"lessThanOperatorName,omitempty"`
+
+	// OperatorName: Indicates the actual string required in the query in
+	// order to isolate the
+	// date property. For example, suppose an issue tracking schema
+	// object
+	// has a property named *closeDate* that specifies an operator with
+	// an
+	// operatorName of *closedon*. For searches on that data, queries
+	// like
+	// *closedon:&lt;value&gt;* will show results only where the value of
+	// the
+	// *closeDate* property matches *&lt;value&gt;*. By contrast, a
+	// search that uses the same *&lt;value&gt;* without an operator will
+	// return
+	// all items where *&lt;value&gt;* matches the value of any
+	// String
+	// properties or text within the content field for the indexed
+	// datasource.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "GreaterThanOperatorName") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "GreaterThanOperatorName")
+	// 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 *DateOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod DateOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DatePropertyOptions: Options for date properties.
+type DatePropertyOptions struct {
+	// OperatorOptions: If set, describes how the date should be used as a
+	// search operator.
+	OperatorOptions *DateOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorOptions") 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 *DatePropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod DatePropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DateValues: List of date values.
+type DateValues struct {
+	// Values: The maximum number of elements is 100.
+	Values []*Date `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DateValues) MarshalJSON() ([]byte, error) {
+	type NoMethod DateValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DebugOptions: Shared request debug options for all cloudsearch RPC
+// methods.
+type DebugOptions struct {
+	// EnableDebugging: If set, the request will enable debugging features
+	// of Cloud Search.
+	// Only turn on this field, if asked by Google to help with debugging.
+	EnableDebugging bool `json:"enableDebugging,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EnableDebugging") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "EnableDebugging") 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 *DebugOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod DebugOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type DeleteQueueItemsRequest struct {
+	// ConnectorName: Name of connector making this call.
+	// <br />Format: datasources/{source_id}/connectors/{ID}
+	ConnectorName string `json:"connectorName,omitempty"`
+
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// Queue: Name of a queue to delete items from.
+	Queue string `json:"queue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConnectorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ConnectorName") 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 *DeleteQueueItemsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod DeleteQueueItemsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DisplayedProperty: A reference to a top-level property within the
+// object that should be
+// displayed in search results. The values of the chosen properties will
+// be
+// displayed in the search results along with the
+// dislpay label
+// for that property if one is specified. If a display label is not
+// specified,
+// only the values will be shown.
+type DisplayedProperty struct {
+	// PropertyName: The name of the top-level property as defined in a
+	// property definition
+	// for the object. If the name is not a defined property in the schema,
+	// an
+	// error will be given when attempting to update the schema.
+	PropertyName string `json:"propertyName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PropertyName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "PropertyName") 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 *DisplayedProperty) MarshalJSON() ([]byte, error) {
+	type NoMethod DisplayedProperty
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DoubleOperatorOptions: Used to provide a search operator for double
+// properties. This is
+// optional. Search operators let users restrict the query to specific
+// fields
+// relevant to the type of item being searched.
+type DoubleOperatorOptions struct {
+	// OperatorName: Indicates the operator name required in the query in
+	// order to use the
+	// double property in sorting or as a facet.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorName") 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 *DoubleOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod DoubleOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DoublePropertyOptions: Options for double properties.
+type DoublePropertyOptions struct {
+	// OperatorOptions: If set, describes how the double should be used as a
+	// search operator.
+	OperatorOptions *DoubleOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorOptions") 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 *DoublePropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod DoublePropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DoubleValues: List of double values.
+type DoubleValues struct {
+	// Values: The maximum number of elements is 100.
+	Values []float64 `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DoubleValues) MarshalJSON() ([]byte, error) {
+	type NoMethod DoubleValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DriveFollowUpRestrict: Drive follow-up search restricts (e.g.
+// "followup:suggestions").
+type DriveFollowUpRestrict struct {
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "FOLLOWUP_SUGGESTIONS"
+	//   "FOLLOWUP_ACTION_ITEMS"
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Type") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DriveFollowUpRestrict) MarshalJSON() ([]byte, error) {
+	type NoMethod DriveFollowUpRestrict
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DriveLocationRestrict: Drive location search restricts (e.g.
+// "is:starred").
+type DriveLocationRestrict struct {
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "TRASHED"
+	//   "STARRED"
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Type") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DriveLocationRestrict) MarshalJSON() ([]byte, error) {
+	type NoMethod DriveLocationRestrict
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DriveMimeTypeRestrict: Drive mime-type search restricts (e.g.
+// "type:pdf").
+type DriveMimeTypeRestrict struct {
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "PDF"
+	//   "DOCUMENT"
+	//   "PRESENTATION"
+	//   "SPREADSHEET"
+	//   "FORM"
+	//   "DRAWING"
+	//   "SCRIPT"
+	//   "MAP"
+	//   "IMAGE"
+	//   "AUDIO"
+	//   "VIDEO"
+	//   "FOLDER"
+	//   "ARCHIVE"
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Type") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DriveMimeTypeRestrict) MarshalJSON() ([]byte, error) {
+	type NoMethod DriveMimeTypeRestrict
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DriveTimeSpanRestrict: The time span search restrict (e.g.
+// "after:2017-09-11 before:2017-09-12").
+type DriveTimeSpanRestrict struct {
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "TODAY"
+	//   "YESTERDAY"
+	//   "LAST_7_DAYS"
+	//   "LAST_30_DAYS" - Not Enabled
+	//   "LAST_90_DAYS" - Not Enabled
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Type") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Type") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DriveTimeSpanRestrict) MarshalJSON() ([]byte, error) {
+	type NoMethod DriveTimeSpanRestrict
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// EmailAddress: A person's email address.
+type EmailAddress struct {
+	// EmailAddress: The email address.
+	EmailAddress string `json:"emailAddress,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EmailAddress") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "EmailAddress") 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 *EmailAddress) MarshalJSON() ([]byte, error) {
+	type NoMethod EmailAddress
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// EnumOperatorOptions: Used to provide a search operator for enum
+// properties. This is
+// optional. Search operators let users restrict the query to specific
+// fields
+// relevant to the type of item being searched. For example, if you
+// provide no
+// operator for a *priority* enum property with possible values *p0* and
+// *p1*,
+// a query that contains the term *p0* will return items that have *p0*
+// as the
+// value of the *priority* property, as well as any items that contain
+// the
+// string *p0* in other fields. If you provide an operator name for the
+// enum,
+// such as *priority*, then search users can use that operator to
+// refine
+// results to only items that have *p0* as this property's value, with
+// the
+// query *priority:p0*.
+type EnumOperatorOptions struct {
+	// OperatorName: Indicates the operator name required in the query in
+	// order to isolate the
+	// enum property. For example, if operatorName is *priority* and
+	// the
+	// property's name is *priorityVal*, then queries
+	// like
+	// *priority:&lt;value&gt;* will show results only where the value of
+	// the
+	// property named *priorityVal* matches *&lt;value&gt;*. By contrast,
+	// a
+	// search that uses the same *&lt;value&gt;* without an operator will
+	// return
+	// all items where *&lt;value&gt;* matches the value of any
+	// String
+	// properties or text within the content field for the item.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorName") 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 *EnumOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod EnumOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// EnumPropertyOptions: Options for enum properties, which allow you to
+// define a restricted set of
+// strings to match user queries, set rankings for those string values,
+// and
+// define an operator name to be paired with those strings so that users
+// can
+// narrow results to only items with a specific value. For example, for
+// items in
+// a request tracking system with priority information, you could define
+// *p0* as
+// an allowable enum value and tie this enum to the operator name
+// *priority* so
+// that search users could add *priority:p0* to their query to restrict
+// the set
+// of results to only those items indexed with the value *p0*.
+type EnumPropertyOptions struct {
+	// OperatorOptions: If set, describes how the enum should be used as a
+	// search operator.
+	OperatorOptions *EnumOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// OrderedRanking: Used to specify the ordered ranking for the
+	// enumeration that determines how
+	// the integer values provided in the possible EnumValuePairs are used
+	// to rank
+	// results. If specified, integer values must be provided for all
+	// possible
+	// EnumValuePair values given for this property. Can only be used
+	// if
+	// isRepeatable
+	// is false.
+	//
+	// Possible values:
+	//   "NO_ORDER" - There is no ranking order for the property. Results
+	// will not be adjusted
+	// by this property's value.
+	//   "ASCENDING" - This property is ranked in ascending order. Lower
+	// values indicate lower
+	// ranking.
+	//   "DESCENDING" - This property is ranked in descending order. Lower
+	// values indicate
+	// higher ranking.
+	OrderedRanking string `json:"orderedRanking,omitempty"`
+
+	// PossibleValues: The list of possible values for the enumeration
+	// property. All
+	// EnumValuePairs must provide a string value. If you specify an integer
+	// value
+	// for one EnumValuePair, then all possible EnumValuePairs must provide
+	// an
+	// integer value. Both the string value and integer value must be unique
+	// over
+	// all possible values. Once set, possible values cannot be removed
+	// or
+	// modified. If you supply an ordered ranking and think you might
+	// insert
+	// additional enum values in the future, leave gaps in the initial
+	// integer
+	// values to allow adding a value in between previously registered
+	// values.
+	// The maximum number of elements is 100.
+	PossibleValues []*EnumValuePair `json:"possibleValues,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorOptions") 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 *EnumPropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod EnumPropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// EnumValuePair: The enumeration value pair defines two things: a
+// required string value and
+// an optional integer value. The string value defines the necessary
+// query
+// term required to retrieve that item, such as *p0* for a priority
+// item.
+// The integer value determines the ranking of that string value
+// relative
+// to other enumerated values for the same property. For example, you
+// might
+// associate *p0* with *0* and define another enum pair such as *p1* and
+// *1*.
+// You must use the integer value in combination with
+// ordered
+// ranking to
+// set the ranking of a given value relative to other enumerated values
+// for
+// the same property name. Here, a ranking order of DESCENDING for
+// *priority*
+// properties results in a ranking boost for items indexed with a value
+// of
+// *p0* compared to items indexed with a value of *p1*. Without a
+// specified
+// ranking order, the integer value has no effect on item ranking.
+type EnumValuePair struct {
+	// IntegerValue: The integer value of the EnumValuePair which must be
+	// non-negative.
+	// Optional.
+	IntegerValue int64 `json:"integerValue,omitempty"`
+
+	// StringValue: The string value of the EnumValuePair.
+	// The maximum length is 32 characters.
+	StringValue string `json:"stringValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IntegerValue") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IntegerValue") 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 *EnumValuePair) MarshalJSON() ([]byte, error) {
+	type NoMethod EnumValuePair
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// EnumValues: List of enum values.
+type EnumValues struct {
+	// Values: The maximum allowable length for string values is 32
+	// characters.
+	// The maximum number of elements is 100.
+	Values []string `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *EnumValues) MarshalJSON() ([]byte, error) {
+	type NoMethod EnumValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ErrorInfo: Error information about the response.
+type ErrorInfo struct {
+	ErrorMessages []*ErrorMessage `json:"errorMessages,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ErrorMessages") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ErrorMessages") 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 *ErrorInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod ErrorInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ErrorMessage: Error message per source response.
+type ErrorMessage struct {
+	ErrorMessage string `json:"errorMessage,omitempty"`
+
+	Source *Source `json:"source,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ErrorMessage") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ErrorMessage") 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 *ErrorMessage) MarshalJSON() ([]byte, error) {
+	type NoMethod ErrorMessage
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FacetBucket: A bucket in a facet is the basic unit of operation. A
+// bucket can comprise
+// either a single value OR a contiguous range of values, depending on
+// the
+// type of the field bucketed.
+// FacetBucket is currently used only for returning the response object.
+type FacetBucket struct {
+	// Count: Number of results that match the bucket value.
+	Count int64 `json:"count,omitempty"`
+
+	// Percentage: Percent of results that match the bucket value. This
+	// value is between
+	// (0-100].
+	// This may not be accurate and is a best effort estimate.
+	Percentage int64 `json:"percentage,omitempty"`
+
+	Value *Value `json:"value,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 *FacetBucket) MarshalJSON() ([]byte, error) {
+	type NoMethod FacetBucket
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FacetOptions: Specifies operators to return facet results for. There
+// will be one
+// FacetResult for every source_name/object_type/operator_name
+// combination.
+type FacetOptions struct {
+	// ObjectType: If object_type is set, only those objects of that type
+	// will be used to
+	// compute facets. If empty, then all objects will be used to compute
+	// facets.
+	ObjectType string `json:"objectType,omitempty"`
+
+	// OperatorName: Name of the operator chosen for faceting.
+	// @see
+	// cloudsearch.SchemaPropertyOptions
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// SourceName: Source name to facet on. Format:
+	// datasources/{source_id}
+	// If empty, all data sources will be used.
+	SourceName string `json:"sourceName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ObjectType") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ObjectType") 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 *FacetOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod FacetOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FacetResult: Source specific facet response
+type FacetResult struct {
+	// Buckets: FacetBuckets for values in response containing atleast a
+	// single result.
+	Buckets []*FacetBucket `json:"buckets,omitempty"`
+
+	// ObjectType: Object type for which facet results are returned. Can be
+	// empty.
+	ObjectType string `json:"objectType,omitempty"`
+
+	// OperatorName: Name of the operator chosen for faceting.
+	// @see
+	// cloudsearch.SchemaPropertyOptions
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// SourceName: Source name for which facet results are returned. Will
+	// not be empty.
+	SourceName string `json:"sourceName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Buckets") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Buckets") 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 *FacetResult) MarshalJSON() ([]byte, error) {
+	type NoMethod FacetResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type FieldViolation struct {
+	// Description: Description of the error.
+	Description string `json:"description,omitempty"`
+
+	// Field: Path of field with violation.
+	Field string `json:"field,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *FieldViolation) MarshalJSON() ([]byte, error) {
+	type NoMethod FieldViolation
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Filter: A generic way of expressing filters in a query, which
+// supports two
+// approaches: <br/><br/>
+// **1. Setting a ValueFilter.** The name must match an operator_name
+// defined in
+// the schema for your data source.
+// <br/>
+// **2. Setting a CompositeFilter.** The filters are evaluated
+// using the logical operator. The top-level operators can only be
+// either an AND
+// or a NOT. AND can appear only at the top-most level. OR can appear
+// only under
+// a top-level AND.
+type Filter struct {
+	CompositeFilter *CompositeFilter `json:"compositeFilter,omitempty"`
+
+	ValueFilter *ValueFilter `json:"valueFilter,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CompositeFilter") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CompositeFilter") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Filter) MarshalJSON() ([]byte, error) {
+	type NoMethod Filter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FilterOptions: Filter options to be applied on query.
+type FilterOptions struct {
+	// Filter: Generic filter to restrict the search, such as `lang:en`,
+	// `site:xyz`.
+	Filter *Filter `json:"filter,omitempty"`
+
+	// ObjectType: If object_type is set, only objects of that type are
+	// returned. This should
+	// correspond to the name of the object that was registered within
+	// the
+	// definition of schema. The maximum length is 256 characters.
+	ObjectType string `json:"objectType,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Filter") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Filter") 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 *FilterOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod FilterOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FreshnessOptions: Indicates which freshness property to use when
+// adjusting search ranking for
+// an item. Fresher, more recent dates indicate higher quality. Use
+// the
+// freshness option property that best works with your data. For
+// fileshare
+// documents, last modified time is most relevant. For calendar event
+// data,
+// the time when the event occurs is a more relevant freshness
+// indicator. In
+// this way, calendar events that occur closer to the time of the search
+// query
+// are considered higher quality and ranked accordingly.
+type FreshnessOptions struct {
+	// FreshnessDuration: The duration (in seconds) after which an object
+	// should be considered
+	// stale.
+	FreshnessDuration string `json:"freshnessDuration,omitempty"`
+
+	// FreshnessProperty: This property indicates the freshness level of the
+	// object in the index.
+	// If set, this property must be a top-level property within
+	// the
+	// PropertyDefinitions
+	// and it must be a
+	// timestamp type
+	// or
+	// date type.
+	// Otherwise, the Indexing API uses
+	// updateTime
+	// as the freshness indicator.
+	// The maximum length is 256 characters.
+	FreshnessProperty string `json:"freshnessProperty,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FreshnessDuration")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "FreshnessDuration") 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 *FreshnessOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod FreshnessOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type GSuitePrincipal struct {
+	// GsuiteDomain: This principal represents all users of the G Suite
+	// domain of the
+	// customer.
+	GsuiteDomain bool `json:"gsuiteDomain,omitempty"`
+
+	// GsuiteGroupEmail: This principal references a G Suite group account
+	GsuiteGroupEmail string `json:"gsuiteGroupEmail,omitempty"`
+
+	// GsuiteUserEmail: This principal references a G Suite user account
+	GsuiteUserEmail string `json:"gsuiteUserEmail,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "GsuiteDomain") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "GsuiteDomain") 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 *GSuitePrincipal) MarshalJSON() ([]byte, error) {
+	type NoMethod GSuitePrincipal
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type GetCustomerIndexStatsResponse struct {
+	// Stats: Summary of indexed item counts, one for each day in the
+	// requested range.
+	Stats []*CustomerIndexStats `json:"stats,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Stats") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Stats") 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 *GetCustomerIndexStatsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod GetCustomerIndexStatsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type GetDataSourceIndexStatsResponse struct {
+	// Stats: Summary of indexed item counts, one for each day in the
+	// requested range.
+	Stats []*DataSourceIndexStats `json:"stats,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Stats") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Stats") 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 *GetDataSourceIndexStatsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod GetDataSourceIndexStatsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// HtmlOperatorOptions: Used to provide a search operator for html
+// properties. This is optional.
+// Search operators let users restrict the query to specific fields
+// relevant
+// to the type of item being searched.
+type HtmlOperatorOptions struct {
+	// OperatorName: Indicates the operator name required in the query in
+	// order to isolate the
+	// html property. For example, if operatorName is *subject* and
+	// the
+	// property's name is *subjectLine*, then queries
+	// like
+	// *subject:&lt;value&gt;* will show results only where the value of
+	// the
+	// property named *subjectLine* matches *&lt;value&gt;*. By contrast,
+	// a
+	// search that uses the same *&lt;value&gt;* without an operator will
+	// return
+	// all items where *&lt;value&gt;* matches the value of any
+	// html properties or text within the content field for the item.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorName") 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 *HtmlOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod HtmlOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// HtmlPropertyOptions: Options for html properties.
+type HtmlPropertyOptions struct {
+	// OperatorOptions: If set, describes how the property should be used as
+	// a search operator.
+	OperatorOptions *HtmlOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// RetrievalImportance: Indicates the search quality importance of the
+	// tokens within the
+	// field when used for retrieval. Can only be set to DEFAULT or NONE.
+	RetrievalImportance *RetrievalImportance `json:"retrievalImportance,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorOptions") 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 *HtmlPropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod HtmlPropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// HtmlValues: List of html values.
+type HtmlValues struct {
+	// Values: The maximum allowable length for html values is 2048
+	// characters.
+	// The maximum number of string elements is 100.
+	Values []string `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *HtmlValues) MarshalJSON() ([]byte, error) {
+	type NoMethod HtmlValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type IndexItemRequest struct {
+	// ConnectorName: Name of connector making this call.
+	// <br />Format: datasources/{source_id}/connectors/{ID}
+	ConnectorName string `json:"connectorName,omitempty"`
+
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// Item: Name of the item.
+	// Format:
+	// datasources/{source_id}/items/{item_id}
+	Item *Item `json:"item,omitempty"`
+
+	// Mode: Required. The RequestMode for this request.
+	//
+	// Possible values:
+	//   "UNSPECIFIED" - Priority is not specified in the update
+	// request.
+	// Leaving priority unspecified results in an update failure.
+	//   "SYNCHRONOUS" - For real-time updates.
+	//   "ASYNCHRONOUS" - For changes that are executed after the response
+	// is sent back to the
+	// caller.
+	Mode string `json:"mode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConnectorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ConnectorName") 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 *IndexItemRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod IndexItemRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// IntegerOperatorOptions: Used to provide a search operator for integer
+// properties. This is
+// optional. Search operators let users restrict the query to specific
+// fields
+// relevant to the type of item being searched.
+type IntegerOperatorOptions struct {
+	// GreaterThanOperatorName: Indicates the operator name required in the
+	// query in order to isolate the
+	// integer property using the greater-than operator. For example,
+	// if
+	// greaterThanOperatorName is *priorityabove* and the property's name
+	// is
+	// *priorityVal*, then queries like *priorityabove:&lt;value&gt;*
+	// will
+	// show results only where the value of the property named *priorityVal*
+	// is
+	// greater than *&lt;value&gt;*.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	GreaterThanOperatorName string `json:"greaterThanOperatorName,omitempty"`
+
+	// LessThanOperatorName: Indicates the operator name required in the
+	// query in order to isolate the
+	// integer property using the less-than operator. For example,
+	// if
+	// lessThanOperatorName is *prioritybelow* and the property's name
+	// is
+	// *priorityVal*, then queries like *prioritybelow:&lt;value&gt;*
+	// will
+	// show results only where the value of the property named *priorityVal*
+	// is
+	// less than *&lt;value&gt;*.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	LessThanOperatorName string `json:"lessThanOperatorName,omitempty"`
+
+	// OperatorName: Indicates the operator name required in the query in
+	// order to isolate the
+	// integer property. For example, if operatorName is *priority* and
+	// the
+	// property's name is *priorityVal*, then queries
+	// like
+	// *priority:&lt;value&gt;* will show results only where the value of
+	// the
+	// property named *priorityVal* matches *&lt;value&gt;*. By contrast,
+	// a
+	// search that uses the same *&lt;value&gt;* without an operator will
+	// return
+	// all items where *&lt;value&gt;* matches the value of any
+	// String
+	// properties or text within the content field for the item.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "GreaterThanOperatorName") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "GreaterThanOperatorName")
+	// 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 *IntegerOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod IntegerOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// IntegerPropertyOptions: Options for integer properties.
+type IntegerPropertyOptions struct {
+	// MaximumValue: The maximum value of the property. The minimum and
+	// maximum values for the
+	// property are used to rank results according to the
+	// ordered ranking.
+	// Indexing requests with values greater than the maximum are accepted
+	// and
+	// ranked with the same weight as items indexed with the maximum value.
+	MaximumValue int64 `json:"maximumValue,omitempty,string"`
+
+	// MinimumValue: The minimum value of the property. The minimum and
+	// maximum values for the
+	// property are used to rank results according to the
+	// ordered ranking.
+	// Indexing requests with values less than the minimum are accepted
+	// and
+	// ranked with the same weight as items indexed with the minimum value.
+	MinimumValue int64 `json:"minimumValue,omitempty,string"`
+
+	// OperatorOptions: If set, describes how the integer should be used as
+	// a search operator.
+	OperatorOptions *IntegerOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// OrderedRanking: Used to specify the ordered ranking for the integer.
+	// Can only be used if
+	// isRepeatable
+	// is false.
+	//
+	// Possible values:
+	//   "NO_ORDER" - There is no ranking order for the property. Results
+	// will not be adjusted
+	// by this property's value.
+	//   "ASCENDING" - This property is ranked in ascending order. Lower
+	// values indicate lower
+	// ranking.
+	//   "DESCENDING" - This property is ranked in descending order. Lower
+	// values indicate
+	// higher ranking.
+	OrderedRanking string `json:"orderedRanking,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "MaximumValue") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "MaximumValue") 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 *IntegerPropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod IntegerPropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// IntegerValues: List of integer values.
+type IntegerValues struct {
+	// Values: The maximum number of elements is 100.
+	Values googleapi.Int64s `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *IntegerValues) MarshalJSON() ([]byte, error) {
+	type NoMethod IntegerValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Interaction: Represents an interaction between a user and an item.
+type Interaction struct {
+	// InteractionTime: The time when the user acted on the item.  If
+	// multiple actions of the same
+	// type exist for a single user, only the most recent action is
+	// recorded.
+	InteractionTime string `json:"interactionTime,omitempty"`
+
+	// Principal: The user that acted on the item.
+	Principal *Principal `json:"principal,omitempty"`
+
+	// Possible values:
+	//   "UNSPECIFIED" - Invalid value.
+	//   "VIEW" - This interaction indicates the user viewed the item.
+	//   "EDIT" - This interaction indicates the user edited the item.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InteractionTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "InteractionTime") 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 *Interaction) MarshalJSON() ([]byte, error) {
+	type NoMethod Interaction
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Item: Represents a single object that is an item in the search index,
+// such as a
+// file, folder, or a database record.
+type Item struct {
+	// Acl: Access control list for this item.
+	Acl *ItemAcl `json:"acl,omitempty"`
+
+	// Content: Item content to be indexed and made text searchable.
+	Content *ItemContent `json:"content,omitempty"`
+
+	// ItemType: Type for this item.
+	//
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "CONTENT_ITEM" - An item that is indexed for the only purpose of
+	// serving information.
+	// These items cannot be referred in
+	// containerName
+	// or inheritAclFrom
+	// fields.
+	//   "CONTAINER_ITEM" - An item that gets indexed and whose purpose is
+	// to supply other items
+	// with ACLs and/or contain other items.
+	//   "VIRTUAL_CONTAINER_ITEM" - An item that does not get indexed, but
+	// otherwise has the same purpose
+	// as CONTAINER_ITEM.
+	ItemType string `json:"itemType,omitempty"`
+
+	// Metadata: Metadata information.
+	Metadata *ItemMetadata `json:"metadata,omitempty"`
+
+	// Name: Name of the Item.
+	// Format:
+	// datasources/{source_id}/items/{item_id}
+	// <br />This is a required field.
+	// The maximum length is 1536 characters.
+	Name string `json:"name,omitempty"`
+
+	// Payload: Additional state connector can store for this item.
+	// The maximum length is 10000 bytes.
+	Payload string `json:"payload,omitempty"`
+
+	// Queue: Queue this item belongs to.
+	// The maximum length is 100 characters.
+	Queue string `json:"queue,omitempty"`
+
+	// Status: Status of the item.
+	// Output only field.
+	Status *ItemStatus `json:"status,omitempty"`
+
+	// StructuredData: The structured data for the item that should conform
+	// to a registered
+	// object definition in the schema for the data source.
+	StructuredData *ItemStructuredData `json:"structuredData,omitempty"`
+
+	// Version: Required. The indexing system stores the version from the
+	// datasource as a
+	// byte string and compares the Item version in the index
+	// to the version of the queued Item using lexical ordering.
+	// <br /><br />
+	// Cloud Search Indexing won't index or delete any queued item with
+	// a version value that is less than or equal to the version of
+	// the
+	// currently indexed item.
+	// The maximum length for this field is 1024 bytes.
+	Version string `json:"version,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Acl") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Acl") 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 *Item) MarshalJSON() ([]byte, error) {
+	type NoMethod Item
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ItemAcl: Access control list information for the item. For more
+// information
+// see
+// https://developers.google.com/cloud-search/docs/guides/index-your-
+// data#acls
+type ItemAcl struct {
+	// AclInheritanceType: Sets the type of access rules to apply when an
+	// item inherits its ACL from a
+	// parent. This should always be set in tandem with
+	// the
+	// inheritAclFrom
+	// field. Also, when the
+	// inheritAclFrom field
+	// is set, this field should be set to a valid AclInheritanceType.
+	//
+	// Possible values:
+	//   "NOT_APPLICABLE" - The default value when this item does not
+	// inherit an ACL.
+	// Use NOT_APPLICABLE when
+	// inheritAclFrom
+	// is empty.  An item without ACL inheritance can still have ACLs
+	// supplied
+	// by its own readers and
+	// deniedReaders fields.
+	//   "CHILD_OVERRIDE" - During an authorization conflict, the ACL of the
+	// child item determines
+	// its read access.
+	//   "PARENT_OVERRIDE" - During an authorization conflict, the ACL of
+	// the parent item
+	// specified in the
+	// inheritAclFrom
+	// field determines read access.
+	//   "BOTH_PERMIT" - Access is granted only if this item and the parent
+	// item specified in
+	// the inheritAclFrom
+	// field both permit read access.
+	AclInheritanceType string `json:"aclInheritanceType,omitempty"`
+
+	// DeniedReaders: List of principals who are explicitly denied access to
+	// the item in search
+	// results. While principals are denied access by default, use denied
+	// readers
+	// to handle exceptions and override the list allowed readers.
+	// The maximum number of elements is 100.
+	DeniedReaders []*Principal `json:"deniedReaders,omitempty"`
+
+	// InheritAclFrom: Name of the item to inherit the Access Permission
+	// List (ACL) from.
+	// Note: ACL inheritance *only* provides access permissions
+	// to child items and does not define structural relationships, nor does
+	// it
+	// provide convenient ways to delete large groups of items.
+	// Deleting an ACL parent from the index only alters the access
+	// permissions of
+	// child items that reference the parent in the
+	// inheritAclFrom
+	// field. The item is still in the index, but may not
+	// visible in search results. By contrast, deletion of a container
+	// item
+	// also deletes all items that reference the container via
+	// the
+	// containerName
+	// field.
+	// The maximum length for this field is 1536 characters.
+	InheritAclFrom string `json:"inheritAclFrom,omitempty"`
+
+	// Owners: Optional. List of owners for the item. This field has no
+	// bearing on
+	// document access permissions. It does, however, offer
+	// a slight ranking boosts items where the querying user is an
+	// owner.
+	// The maximum number of elements is 5.
+	Owners []*Principal `json:"owners,omitempty"`
+
+	// Readers: List of principals who are allowed to see the item in search
+	// results.
+	// Optional if inheriting permissions from another item or if the
+	// item
+	// is not intended to be visible, such as
+	// virtual containers.
+	// The maximum number of elements is 1000.
+	Readers []*Principal `json:"readers,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AclInheritanceType")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "AclInheritanceType") 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 *ItemAcl) MarshalJSON() ([]byte, error) {
+	type NoMethod ItemAcl
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ItemContent: Content of an item to be indexed and surfaced by Cloud
+// Search.
+type ItemContent struct {
+	// ContentDataRef: Upload reference ID of a previously uploaded content
+	// via write method.
+	ContentDataRef *UploadItemRef `json:"contentDataRef,omitempty"`
+
+	// Possible values:
+	//   "UNSPECIFIED" - Invalid value.
+	//   "HTML" - contentFormat is HTML.
+	//   "TEXT" - contentFormat is free text.
+	//   "RAW" - contentFormat is raw bytes.
+	ContentFormat string `json:"contentFormat,omitempty"`
+
+	// Hash: Hashing info calculated and provided by the API client for
+	// content.
+	// Can be used with the items.push method to calculate modified
+	// state.
+	// The maximum length is 2048 characters.
+	Hash string `json:"hash,omitempty"`
+
+	// InlineContent: Content that is supplied inlined within the update
+	// method.
+	// The maximum length is 102400 bytes (100 KiB).
+	InlineContent string `json:"inlineContent,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ContentDataRef") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ContentDataRef") 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 *ItemContent) MarshalJSON() ([]byte, error) {
+	type NoMethod ItemContent
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ItemCountByStatus struct {
+	// Count: Number of items matching the status code.
+	Count int64 `json:"count,omitempty,string"`
+
+	// StatusCode: Status of the items.
+	//
+	// Possible values:
+	//   "CODE_UNSPECIFIED" - Input-only value.  Used with
+	// Items.list
+	// to list all items in the queue, regardless of status.
+	//   "ERROR" - Error encountered by Cloud Search while processing this
+	// item.
+	// Details of the error are in
+	// repositoryError.
+	//   "MODIFIED" - Item has been modified in the repository, and is out
+	// of date with
+	// the version previously accepted into Cloud Search.
+	//   "NEW_ITEM" - Item is known to exist in the repository, but is not
+	// yet accepted by
+	// Cloud Search.
+	// An item can be in this state when
+	// Items.push
+	// has been called for
+	// an item of this name that did not exist previously.
+	//   "ACCEPTED" - API has accepted the up-to-date data of this item.
+	StatusCode string `json:"statusCode,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 *ItemCountByStatus) MarshalJSON() ([]byte, error) {
+	type NoMethod ItemCountByStatus
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ItemMetadata: Available metadata fields for the item.
+type ItemMetadata struct {
+	// ContainerName: The name of the container for this item.
+	// Deletion of the container item leads to automatic deletion of
+	// this
+	// item.  Note: ACLs are not inherited from a container item.
+	// To provide ACL inheritance for an item, use the
+	// inheritAclFrom
+	// field. The maximum length is 1536 characters.
+	ContainerName string `json:"containerName,omitempty"`
+
+	// ContentLanguage: The BCP-47 language code for the item, such as
+	// "en-US" or "sr-Latn". For
+	// more information,
+	// see
+	// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
+	// Th
+	// e maximum length is 32 characters.
+	ContentLanguage string `json:"contentLanguage,omitempty"`
+
+	// CreateTime: The time when the item was created in the source
+	// repository.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// Hash: Hashing value provided by the API caller.
+	// This can be used with the
+	// items.push
+	// method to calculate modified state.
+	// The maximum length is 2048 characters.
+	Hash string `json:"hash,omitempty"`
+
+	// Interactions: A list of interactions for the item.  Interactions are
+	// used to improve
+	// Search quality, but are not exposed to end users.
+	// The maximum number of elements is 1000.
+	Interactions []*Interaction `json:"interactions,omitempty"`
+
+	// Keywords: Additional keywords or phrases that should match the
+	// item.
+	// Used internally for user generated content.
+	// The maximum number of elements is 100.
+	// The maximum length is 8192 characters.
+	Keywords []string `json:"keywords,omitempty"`
+
+	// MimeType: The original mime-type of
+	// ItemContent.content
+	// in the source repository.
+	// The maximum length is 256 characters.
+	MimeType string `json:"mimeType,omitempty"`
+
+	// ObjectType: The type of the item.  This should correspond to the name
+	// of an object
+	// definition in the schema registered for the data source.  For
+	// example, if
+	// the schema for the data source contains an object definition with
+	// name
+	// 'document', then item indexing requests for objects of that type
+	// should set
+	// objectType to 'document'.
+	// The maximum length is 256 characters.
+	ObjectType string `json:"objectType,omitempty"`
+
+	// SearchQualityMetadata: Additional search quality metadata of the item
+	SearchQualityMetadata *SearchQualityMetadata `json:"searchQualityMetadata,omitempty"`
+
+	// SourceRepositoryUrl: Link to the source repository serving the data.
+	// &#83;earch results apply
+	// this link to the title.
+	// The maximum length is 2048 characters.
+	SourceRepositoryUrl string `json:"sourceRepositoryUrl,omitempty"`
+
+	// Title: The title of the item.  If given, this will be the displayed
+	// title of the
+	// Search result.
+	// The maximum length is 2048 characters.
+	Title string `json:"title,omitempty"`
+
+	// UpdateTime: The time when the item was last modified in the source
+	// repository.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ContainerName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ContainerName") 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 *ItemMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod ItemMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ItemStatus: This contains item's status and any errors.
+type ItemStatus struct {
+	// Code: Status code.
+	//
+	// Possible values:
+	//   "CODE_UNSPECIFIED" - Input-only value.  Used with
+	// Items.list
+	// to list all items in the queue, regardless of status.
+	//   "ERROR" - Error encountered by Cloud Search while processing this
+	// item.
+	// Details of the error are in
+	// repositoryError.
+	//   "MODIFIED" - Item has been modified in the repository, and is out
+	// of date with
+	// the version previously accepted into Cloud Search.
+	//   "NEW_ITEM" - Item is known to exist in the repository, but is not
+	// yet accepted by
+	// Cloud Search.
+	// An item can be in this state when
+	// Items.push
+	// has been called for
+	// an item of this name that did not exist previously.
+	//   "ACCEPTED" - API has accepted the up-to-date data of this item.
+	Code string `json:"code,omitempty"`
+
+	// ProcessingErrors: Error details in case the item is in ERROR state.
+	ProcessingErrors []*ProcessingError `json:"processingErrors,omitempty"`
+
+	// RepositoryErrors: Repository error reported by connector.
+	RepositoryErrors []*RepositoryError `json:"repositoryErrors,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 *ItemStatus) MarshalJSON() ([]byte, error) {
+	type NoMethod ItemStatus
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ItemStructuredData: Available structured data fields for the item.
+type ItemStructuredData struct {
+	// Hash: Hashing value provided by the API caller.
+	// This can be used with the
+	// items.push
+	// method to calculate modified state.
+	// The maximum length is 2048 characters.
+	Hash string `json:"hash,omitempty"`
+
+	// Object: The structured data object that should conform to a
+	// registered object
+	// definition in the schema for the data source.
+	Object *StructuredDataObject `json:"object,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Hash") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Hash") 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 *ItemStructuredData) MarshalJSON() ([]byte, error) {
+	type NoMethod ItemStructuredData
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ListDataSourceResponse struct {
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	Sources []*DataSource `json:"sources,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListDataSourceResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListDataSourceResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ListItemNamesForUnmappedIdentityResponse struct {
+	ItemNames []string `json:"itemNames,omitempty"`
+
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "ItemNames") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ItemNames") 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 *ListItemNamesForUnmappedIdentityResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListItemNamesForUnmappedIdentityResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ListItemsResponse struct {
+	Items []*Item `json:"items,omitempty"`
+
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Items") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Items") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListItemsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListItemsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListQuerySourcesResponse: List sources response.
+type ListQuerySourcesResponse struct {
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	Sources []*QuerySource `json:"sources,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListQuerySourcesResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListQuerySourcesResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ListSearchApplicationsResponse struct {
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	SearchApplications []*SearchApplication `json:"searchApplications,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListSearchApplicationsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListSearchApplicationsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ListUnmappedIdentitiesResponse struct {
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no
+	// more results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	UnmappedIdentities []*UnmappedIdentity `json:"unmappedIdentities,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListUnmappedIdentitiesResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListUnmappedIdentitiesResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// MatchRange: Matched range of a snippet [start, end).
+type MatchRange struct {
+	// End: End of the match in the snippet.
+	End int64 `json:"end,omitempty"`
+
+	// Start: Starting position of the match in the snippet.
+	Start int64 `json:"start,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "End") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "End") 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 *MatchRange) MarshalJSON() ([]byte, error) {
+	type NoMethod MatchRange
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Media: Media resource.
+type Media struct {
+	// ResourceName: Name of the media resource.
+	ResourceName string `json:"resourceName,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "ResourceName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ResourceName") 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 *Media) MarshalJSON() ([]byte, error) {
+	type NoMethod Media
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Metadata: Metadata of a matched search result.
+type Metadata struct {
+	// CreateTime: The creation time for this document or object in the
+	// search result.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// DisplayOptions: Options that specify how to display a structured data
+	// search result.
+	DisplayOptions *ResultDisplayMetadata `json:"displayOptions,omitempty"`
+
+	// Fields: Indexed fields in structured data, returned as a generic
+	// named property.
+	Fields []*NamedProperty `json:"fields,omitempty"`
+
+	// MimeType: Mime type of the search result.
+	MimeType string `json:"mimeType,omitempty"`
+
+	// ObjectType: Object type of the search result.
+	ObjectType string `json:"objectType,omitempty"`
+
+	// Owner: Owner (usually creator) of the document or object of the
+	// search result.
+	Owner *Person `json:"owner,omitempty"`
+
+	// Source: The named source for the result, such as Gmail.
+	Source *Source `json:"source,omitempty"`
+
+	// UpdateTime: The last modified date for the object in the search
+	// result.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CreateTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CreateTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Metadata) MarshalJSON() ([]byte, error) {
+	type NoMethod Metadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Metaline: A metaline is a list of properties that are displayed along
+// with the search
+// result to provide context.
+type Metaline struct {
+	// Properties: The list of displayed properties for the metaline.
+	Properties []*DisplayedProperty `json:"properties,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Properties") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Properties") 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 *Metaline) MarshalJSON() ([]byte, error) {
+	type NoMethod Metaline
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Name: A person's name.
+type Name struct {
+	// DisplayName: The read-only display name formatted according to the
+	// locale specified by
+	// the viewer's account or the <code>Accept-Language</code> HTTP header.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DisplayName") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Name) MarshalJSON() ([]byte, error) {
+	type NoMethod Name
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// NamedProperty: A typed name-value pair for structured data.  The type
+// of the value should
+// be the same as the registered type for the `name` property in the
+// object
+// definition of `objectType`.
+type NamedProperty struct {
+	BooleanValue bool `json:"booleanValue,omitempty"`
+
+	DateValues *DateValues `json:"dateValues,omitempty"`
+
+	DoubleValues *DoubleValues `json:"doubleValues,omitempty"`
+
+	EnumValues *EnumValues `json:"enumValues,omitempty"`
+
+	HtmlValues *HtmlValues `json:"htmlValues,omitempty"`
+
+	IntegerValues *IntegerValues `json:"integerValues,omitempty"`
+
+	// Name: The name of the property.  This name should correspond to the
+	// name of the
+	// property that was registered for object definition in the schema.
+	// The maximum allowable length for this property is 256 characters.
+	Name string `json:"name,omitempty"`
+
+	ObjectValues *ObjectValues `json:"objectValues,omitempty"`
+
+	TextValues *TextValues `json:"textValues,omitempty"`
+
+	TimestampValues *TimestampValues `json:"timestampValues,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BooleanValue") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BooleanValue") 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 *NamedProperty) MarshalJSON() ([]byte, error) {
+	type NoMethod NamedProperty
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ObjectDefinition: The definition for an object within a data source.
+type ObjectDefinition struct {
+	// Name: Name for the object, which then defines its type. Item indexing
+	// requests
+	// should set the
+	// objectType field
+	// equal to this value. For example, if *name* is *Document*, then
+	// indexing
+	// requests for items of type Document should set
+	// objectType equal to
+	// *Document*. Each object definition must be uniquely named within a
+	// schema.
+	// The name must start with a letter and can only contain letters (A-Z,
+	// a-z)
+	// or numbers (0-9).
+	// The maximum length is 256 characters.
+	Name string `json:"name,omitempty"`
+
+	// Options: The optional object-specific options.
+	Options *ObjectOptions `json:"options,omitempty"`
+
+	// PropertyDefinitions: The property definitions for the object.
+	// The maximum number of elements is 1000.
+	PropertyDefinitions []*PropertyDefinition `json:"propertyDefinitions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ObjectDefinition) MarshalJSON() ([]byte, error) {
+	type NoMethod ObjectDefinition
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ObjectDisplayOptions: The display options for an object.
+type ObjectDisplayOptions struct {
+	// Metalines: Defines the properties that will be displayed in the
+	// metalines of the
+	// search results. The property values will be displayed in the order
+	// given
+	// here. If a property holds multiple values, all of the values will
+	// be
+	// diplayed before the next properties. For this reason, it is a good
+	// practice
+	// to specify singular properties before repeated properties in this
+	// list. All
+	// of the properties must set
+	// is_returnable
+	// to true. The maximum number of elements is 3.
+	Metalines []*Metaline `json:"metalines,omitempty"`
+
+	// ObjectDisplayLabel: The user friendly label to display in the search
+	// result to inidicate the
+	// type of the item. This is OPTIONAL; if not given, an object label
+	// will not
+	// be displayed on the context line of the search results. The maximum
+	// length
+	// is 32 characters.
+	ObjectDisplayLabel string `json:"objectDisplayLabel,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Metalines") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Metalines") 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 *ObjectDisplayOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod ObjectDisplayOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ObjectOptions: The options for an object.
+type ObjectOptions struct {
+	// DisplayOptions: Options that determine how the object is displayed in
+	// the Cloud Search
+	// results page.
+	DisplayOptions *ObjectDisplayOptions `json:"displayOptions,omitempty"`
+
+	// FreshnessOptions: The freshness options for an object.
+	FreshnessOptions *FreshnessOptions `json:"freshnessOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "DisplayOptions") 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 *ObjectOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod ObjectOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ObjectPropertyOptions: Options for object properties.
+type ObjectPropertyOptions struct {
+	// SubobjectProperties: The properties of the sub-object. These
+	// properties represent a nested
+	// object. For example, if this property represents a postal address,
+	// the
+	// subobjectProperties might be named *street*, *city*, and *state*.
+	// The maximum number of elements is 1000.
+	SubobjectProperties []*PropertyDefinition `json:"subobjectProperties,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "SubobjectProperties")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "SubobjectProperties") 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 *ObjectPropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod ObjectPropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ObjectValues: List of object values.
+type ObjectValues struct {
+	// Values: The maximum number of elements is 100.
+	Values []*StructuredDataObject `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ObjectValues) MarshalJSON() ([]byte, error) {
+	type NoMethod ObjectValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Operation: This resource represents a long-running operation that is
+// the result of a
+// network API call.
+type Operation struct {
+	// Done: If the value is `false`, it means the operation is still in
+	// progress.
+	// If `true`, the operation is completed, and either `error` or
+	// `response` is
+	// available.
+	Done bool `json:"done,omitempty"`
+
+	// Error: The error result of the operation in case of failure or
+	// cancellation.
+	Error *Status `json:"error,omitempty"`
+
+	// Metadata: Service-specific metadata associated with the operation.
+	// It typically
+	// contains progress information and common metadata such as create
+	// time.
+	// Some services might not provide such metadata.  Any method that
+	// returns a
+	// long-running operation should document the metadata type, if any.
+	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
+
+	// Name: The server-assigned name, which is only unique within the same
+	// service that
+	// originally returns it. If you use the default HTTP mapping,
+	// the
+	// `name` should have the format of `operations/some/unique/name`.
+	Name string `json:"name,omitempty"`
+
+	// Response: The normal response of the operation in case of success.
+	// If the original
+	// method returns no data on success, such as `Delete`, the response
+	// is
+	// `google.protobuf.Empty`.  If the original method is
+	// standard
+	// `Get`/`Create`/`Update`, the response should be the resource.  For
+	// other
+	// methods, the response should have the type `XxxResponse`, where
+	// `Xxx`
+	// is the original method name.  For example, if the original method
+	// name
+	// is `TakeSnapshot()`, the inferred response type
+	// is
+	// `TakeSnapshotResponse`.
+	Response googleapi.RawMessage `json:"response,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Done") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Done") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Operation) MarshalJSON() ([]byte, error) {
+	type NoMethod Operation
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PeopleSuggestion: A people suggestion.
+type PeopleSuggestion struct {
+	// Person: Suggested person. All fields of the person object might not
+	// be populated.
+	Person *Person `json:"person,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Person") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Person") 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 *PeopleSuggestion) MarshalJSON() ([]byte, error) {
+	type NoMethod PeopleSuggestion
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Person: Object to represent a person.
+type Person struct {
+	// EmailAddresses: The person's email addresses
+	EmailAddresses []*EmailAddress `json:"emailAddresses,omitempty"`
+
+	// Name: The resource name of the person to provide information
+	// about.
+	// See <a
+	// href="https://developers.google.com/people/api/rest/v1/people/get">
+	// Pe
+	// ople.get</a> from Google People API.
+	Name string `json:"name,omitempty"`
+
+	// ObfuscatedId: Obfuscated ID of a person.
+	ObfuscatedId string `json:"obfuscatedId,omitempty"`
+
+	// PersonNames: The person's name
+	PersonNames []*Name `json:"personNames,omitempty"`
+
+	// Photos: A person's read-only photo. A picture shown next to the
+	// person's name to
+	// help others recognize the person in search results.
+	Photos []*Photo `json:"photos,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EmailAddresses") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "EmailAddresses") 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 *Person) MarshalJSON() ([]byte, error) {
+	type NoMethod Person
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Photo: A person's photo.
+type Photo struct {
+	// Url: The URL of the photo.
+	Url string `json:"url,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Url") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Url") 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 *Photo) MarshalJSON() ([]byte, error) {
+	type NoMethod Photo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PollItemsRequest struct {
+	// ConnectorName: Name of connector making this call.
+	// <br />Format: datasources/{source_id}/connectors/{ID}
+	ConnectorName string `json:"connectorName,omitempty"`
+
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// Limit: Maximum number of items to return.
+	// <br />The maximum and the default value is 1000
+	Limit int64 `json:"limit,omitempty"`
+
+	// Queue: Queue name to fetch items from.  If unspecified, PollItems
+	// will
+	// fetch from 'default' queue.
+	// The maximum length is 100 characters.
+	Queue string `json:"queue,omitempty"`
+
+	// StatusCodes: Limit the items polled to the ones with these statuses.
+	//
+	// Possible values:
+	//   "CODE_UNSPECIFIED" - Input-only value.  Used with
+	// Items.list
+	// to list all items in the queue, regardless of status.
+	//   "ERROR" - Error encountered by Cloud Search while processing this
+	// item.
+	// Details of the error are in
+	// repositoryError.
+	//   "MODIFIED" - Item has been modified in the repository, and is out
+	// of date with
+	// the version previously accepted into Cloud Search.
+	//   "NEW_ITEM" - Item is known to exist in the repository, but is not
+	// yet accepted by
+	// Cloud Search.
+	// An item can be in this state when
+	// Items.push
+	// has been called for
+	// an item of this name that did not exist previously.
+	//   "ACCEPTED" - API has accepted the up-to-date data of this item.
+	StatusCodes []string `json:"statusCodes,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConnectorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ConnectorName") 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 *PollItemsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod PollItemsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PollItemsResponse struct {
+	// Items: Set of items from the queue available for connector to
+	// process.
+	// <br />These items have the following subset of fields populated: <br
+	// />
+	// <br />version
+	// <br />metadata.hash
+	// <br />structured_data.hash
+	// <br />content.hash
+	// <br />payload
+	// <br />status
+	// <br />queue
+	Items []*Item `json:"items,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Items") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Items") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *PollItemsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod PollItemsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Principal: Reference to a user, group, or domain.
+type Principal struct {
+	// GroupResourceName: This principal is a group identified using an
+	// external identity.
+	// The name field must specify the group resource name with this
+	// format:
+	// identitysources/{source_id}/groups/{ID}
+	GroupResourceName string `json:"groupResourceName,omitempty"`
+
+	// GsuitePrincipal: This principal is a GSuite user, group or domain.
+	GsuitePrincipal *GSuitePrincipal `json:"gsuitePrincipal,omitempty"`
+
+	// UserResourceName: This principal is a user identified using an
+	// external identity.
+	// The name field must specify the user resource name with this
+	// format:
+	// identitysources/{source_id}/users/{ID}
+	UserResourceName string `json:"userResourceName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "GroupResourceName")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "GroupResourceName") 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 *Principal) MarshalJSON() ([]byte, error) {
+	type NoMethod Principal
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ProcessingError struct {
+	// Code: Error code indicating the nature of the error.
+	//
+	// Possible values:
+	//   "PROCESSING_ERROR_CODE_UNSPECIFIED" - Input only value.  Use this
+	// value in Items.
+	//   "MALFORMED_REQUEST" - Item's ACL, metadata, or content is malformed
+	// or in invalid state.
+	// FieldViolations contains more details on where the problem is.
+	//   "UNSUPPORTED_CONTENT_FORMAT" - Countent format is unsupported.
+	//   "INDIRECT_BROKEN_ACL" - Items with incomplete ACL information due
+	// to inheriting other
+	// items with broken ACL or having groups with unmapped descendants.
+	//   "ACL_CYCLE" - ACL inheritance graph formed a cycle.
+	Code string `json:"code,omitempty"`
+
+	// ErrorMessage: Description of the error.
+	ErrorMessage string `json:"errorMessage,omitempty"`
+
+	// FieldViolations: In case the item fields are invalid, this field
+	// contains the details
+	// about the validation errors.
+	FieldViolations []*FieldViolation `json:"fieldViolations,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 *ProcessingError) MarshalJSON() ([]byte, error) {
+	type NoMethod ProcessingError
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PropertyDefinition: The definition of a property within an object.
+type PropertyDefinition struct {
+	BooleanPropertyOptions *BooleanPropertyOptions `json:"booleanPropertyOptions,omitempty"`
+
+	DatePropertyOptions *DatePropertyOptions `json:"datePropertyOptions,omitempty"`
+
+	// DisplayOptions: Options that determine how the property is displayed
+	// in the Cloud Search
+	// results page if it is specified to be displayed in the
+	// object's
+	// display options
+	// .
+	DisplayOptions *PropertyDisplayOptions `json:"displayOptions,omitempty"`
+
+	DoublePropertyOptions *DoublePropertyOptions `json:"doublePropertyOptions,omitempty"`
+
+	EnumPropertyOptions *EnumPropertyOptions `json:"enumPropertyOptions,omitempty"`
+
+	HtmlPropertyOptions *HtmlPropertyOptions `json:"htmlPropertyOptions,omitempty"`
+
+	IntegerPropertyOptions *IntegerPropertyOptions `json:"integerPropertyOptions,omitempty"`
+
+	// IsFacetable: Indicates that the property can be used for generating
+	// facets. Cannot be
+	// true for properties whose type is object. IsReturnable must be true
+	// to set
+	// this option.
+	// Only supported for Boolean, Enum, and Text properties.
+	IsFacetable bool `json:"isFacetable,omitempty"`
+
+	// IsRepeatable: Indicates that multiple values are allowed for the
+	// property. For example, a
+	// document only has one description but can have multiple comments.
+	// Cannot be
+	// true for properties whose type is a boolean.
+	// If set to false, properties that contain more than one value will
+	// cause the
+	// indexing request for that item to be rejected.
+	IsRepeatable bool `json:"isRepeatable,omitempty"`
+
+	// IsReturnable: Indicates that the property identifies data that should
+	// be returned in search
+	// results via the Query API. If set to *true*, indicates that Query
+	// API
+	// users can use matching property fields in results. However, storing
+	// fields
+	// requires more space allocation and uses more bandwidth for search
+	// queries,
+	// which impacts performance over large datasets. Set to *true* here
+	// only if
+	// the field is needed for search results. Cannot be true for
+	// properties
+	// whose type is an object.
+	IsReturnable bool `json:"isReturnable,omitempty"`
+
+	// IsSortable: Indicates that the property can be used for sorting.
+	// Cannot be true for
+	// properties that are repeatable. Cannot be true for properties whose
+	// type
+	// is object or user identifier. IsReturnable must be true to set this
+	// option.
+	// Only supported for Boolean, Date, Double, Integer, and
+	// Timestamp
+	// properties.
+	IsSortable bool `json:"isSortable,omitempty"`
+
+	// Name: The name of the property. Item indexing requests sent to the
+	// Indexing API
+	// should set the property name
+	// equal to this value. For example, if name is *subject_line*, then
+	// indexing
+	// requests for document items with subject fields should set the
+	// name for that field equal to
+	// *subject_line*. Use the name as the identifier for the object
+	// property.
+	// Once registered as a property for an object, you cannot re-use this
+	// name
+	// for another property within that object.
+	// The name must start with a letter and can only contain letters (A-Z,
+	// a-z)
+	// or numbers (0-9).
+	// The maximum length is 256 characters.
+	Name string `json:"name,omitempty"`
+
+	ObjectPropertyOptions *ObjectPropertyOptions `json:"objectPropertyOptions,omitempty"`
+
+	TextPropertyOptions *TextPropertyOptions `json:"textPropertyOptions,omitempty"`
+
+	TimestampPropertyOptions *TimestampPropertyOptions `json:"timestampPropertyOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "BooleanPropertyOptions") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "BooleanPropertyOptions")
+	// 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 *PropertyDefinition) MarshalJSON() ([]byte, error) {
+	type NoMethod PropertyDefinition
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PropertyDisplayOptions: The display options for a property.
+type PropertyDisplayOptions struct {
+	// DisplayLabel: The user friendly label for the property that will be
+	// used if the property
+	// is specified to be displayed in ObjectDisplayOptions. If given, the
+	// display
+	// label will be shown in front of the property values when the property
+	// is
+	// part of the object display options. For example, if the property
+	// value is
+	// '1', the value by itself may not be useful context for the user. If
+	// the
+	// display name given was 'priority', then the user will see 'priority :
+	// 1' in
+	// the search results which provides clear conext to search users. This
+	// is
+	// OPTIONAL; if not given, only the property values will be
+	// displayed.
+	// The maximum length is 32 characters.
+	DisplayLabel string `json:"displayLabel,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayLabel") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "DisplayLabel") 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 *PropertyDisplayOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod PropertyDisplayOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PushItem: Represents an item to be pushed to the indexing queue.
+type PushItem struct {
+	// ContentHash: Content hash of the item according to the repository. If
+	// specified, this is
+	// used to determine how to modify this
+	// item's status. Setting this field and the
+	// type field results in argument
+	// error.
+	// The maximum length is 2048 characters.
+	ContentHash string `json:"contentHash,omitempty"`
+
+	// MetadataHash: Metadata hash of the item according to the repository.
+	// If specified, this
+	// is used to determine how to modify this
+	// item's status. Setting this field and the
+	// type field results in argument
+	// error.
+	// The maximum length is 2048 characters.
+	MetadataHash string `json:"metadataHash,omitempty"`
+
+	// Payload: Provides additional document state information for the
+	// connector,
+	// such as an alternate repository ID and other metadata.
+	// The maximum length is 8192 bytes.
+	Payload string `json:"payload,omitempty"`
+
+	// Queue: Queue to which this item belongs to.  The <code>default</code>
+	// queue is
+	// chosen if this field is not specified. The maximum length is
+	// 512 characters.
+	Queue string `json:"queue,omitempty"`
+
+	// RepositoryError: Populate this field to store Connector or repository
+	// error details.
+	// This information is displayed in the Admin Console.
+	// This field may only be populated when the
+	// Type is
+	// REPOSITORY_ERROR.
+	RepositoryError *RepositoryError `json:"repositoryError,omitempty"`
+
+	// StructuredDataHash: Structured data hash of the item according to the
+	// repository. If specified,
+	// this is used to determine how to modify this item's status. Setting
+	// this
+	// field and the type field
+	// results in argument error.
+	// The maximum length is 2048 characters.
+	StructuredDataHash string `json:"structuredDataHash,omitempty"`
+
+	// Type: The type of the push operation that defines the push behavior.
+	//
+	// Possible values:
+	//   "UNSPECIFIED" - Default UNSPECIFIED.  Specifies that the push
+	// operation should not modify
+	// ItemStatus
+	//   "MODIFIED" - Indicates that the repository document has been
+	// modified or updated since
+	// the previous
+	// update
+	// call. This changes status to
+	// MODIFIED state for
+	// an existing item. If this is called on a non existing item, the
+	// status is
+	// changed to
+	// NEW_ITEM.
+	//   "NOT_MODIFIED" - Item in the repository has not been modified since
+	// the last update
+	// call.  This push operation will set status to
+	// ACCEPTED state.
+	//   "REPOSITORY_ERROR" - Connector is facing a repository error
+	// regarding this item.  Change
+	// status to
+	// REPOSITORY_ERROR
+	// state. Item is unreserved and rescheduled at a future time determined
+	// by
+	// exponential backoff.
+	//   "REQUEUE" - Call push with REQUEUE only for items that have been
+	// reserved.
+	// This action unreserves the item and resets its available time to
+	// the
+	// wall clock time.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ContentHash") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ContentHash") 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 *PushItem) MarshalJSON() ([]byte, error) {
+	type NoMethod PushItem
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type PushItemRequest struct {
+	// ConnectorName: Name of connector making this call.
+	// <br />Format: datasources/{source_id}/connectors/{ID}
+	ConnectorName string `json:"connectorName,omitempty"`
+
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// Item: Item to push onto the queue.
+	Item *PushItem `json:"item,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConnectorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ConnectorName") 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 *PushItemRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod PushItemRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type QueryInterpretation struct {
+	// Possible values:
+	//   "NONE" - No natural language interpretation or the natural language
+	// interpretation
+	// is not used to fetch the search results.
+	//   "BLEND" - The natural language results is mixed with results from
+	// original query.
+	//   "REPLACE" - The results only contain natural language results.
+	InterpretationType string `json:"interpretationType,omitempty"`
+
+	// InterpretedQuery: The interpretation of the query used in search. For
+	// example, query "email
+	// from john" will be interpreted as "from:john source:mail"
+	InterpretedQuery string `json:"interpretedQuery,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InterpretationType")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "InterpretationType") 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 *QueryInterpretation) MarshalJSON() ([]byte, error) {
+	type NoMethod QueryInterpretation
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QueryInterpretationOptions: Options to interpret user query.
+type QueryInterpretationOptions struct {
+	// DisableNlInterpretation: Flag to disable natural language (NL)
+	// interpretation of queries. Default is
+	// false, Set to true to disable natural language interpretation.
+	// NL
+	// interpretation only applies to predefined datasources.
+	DisableNlInterpretation bool `json:"disableNlInterpretation,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "DisableNlInterpretation") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "DisableNlInterpretation")
+	// 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 *QueryInterpretationOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod QueryInterpretationOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QueryItem: Information relevant only to a query entry.
+type QueryItem struct {
+	// IsSynthetic: True if the text was generated by means other than a
+	// previous user search.
+	IsSynthetic bool `json:"isSynthetic,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IsSynthetic") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IsSynthetic") 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 *QueryItem) MarshalJSON() ([]byte, error) {
+	type NoMethod QueryItem
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QueryOperator: The definition of a operator that can be used in a
+// Search/Suggest request.
+type QueryOperator struct {
+	// DisplayName: Display name of the operator
+	DisplayName string `json:"displayName,omitempty"`
+
+	// EnumValues: Potential list of values for the opeatror field. This
+	// field is only filled
+	// when we can safely enumerate all the possible values of this
+	// operator.
+	EnumValues []string `json:"enumValues,omitempty"`
+
+	// GreaterThanOperatorName: Indicates the operator name that can be used
+	// to  isolate the property using
+	// the greater-than operator.
+	GreaterThanOperatorName string `json:"greaterThanOperatorName,omitempty"`
+
+	// IsFacetable: Can this operator be used to get facets.
+	IsFacetable bool `json:"isFacetable,omitempty"`
+
+	// IsRepeatable: Indicates if multiple values can be set for this
+	// property.
+	IsRepeatable bool `json:"isRepeatable,omitempty"`
+
+	// IsReturnable: Will the property associated with this facet be
+	// returned as part of search
+	// results.
+	IsReturnable bool `json:"isReturnable,omitempty"`
+
+	// IsSortable: Can this operator be used to sort results.
+	IsSortable bool `json:"isSortable,omitempty"`
+
+	// IsSuggestable: Can get suggestions for this field.
+	IsSuggestable bool `json:"isSuggestable,omitempty"`
+
+	// LessThanOperatorName: Indicates the operator name that can be used to
+	//  isolate the property using
+	// the less-than operator.
+	LessThanOperatorName string `json:"lessThanOperatorName,omitempty"`
+
+	// OperatorName: The name of the operator.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// Type: Type of the operator.
+	//
+	// Possible values:
+	//   "UNKNOWN" - Invalid value.
+	//   "INTEGER"
+	//   "DOUBLE"
+	//   "TIMESTAMP"
+	//   "BOOLEAN"
+	//   "ENUM"
+	//   "DATE"
+	//   "TEXT"
+	//   "HTML"
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DisplayName") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *QueryOperator) MarshalJSON() ([]byte, error) {
+	type NoMethod QueryOperator
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QuerySource: List of sources that the user can search using the query
+// API.
+type QuerySource struct {
+	// DisplayName: Display name of the data source.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Operators: List of all operators applicable for this source.
+	Operators []*QueryOperator `json:"operators,omitempty"`
+
+	// ShortName: A short name or alias for the source.  This value can be
+	// used with the
+	// 'source' operator.
+	ShortName string `json:"shortName,omitempty"`
+
+	// Source: Name of the source
+	Source *Source `json:"source,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DisplayName") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *QuerySource) MarshalJSON() ([]byte, error) {
+	type NoMethod QuerySource
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QuerySuggestion: A completed query suggestion.
+type QuerySuggestion struct {
+}
+
+// RepositoryError: Errors when the connector is communicating to the
+// source repository.
+type RepositoryError struct {
+	// ErrorMessage: Message that describes the error. The maximum allowable
+	// length
+	// of the message is 8192 characters.
+	ErrorMessage string `json:"errorMessage,omitempty"`
+
+	// HttpStatusCode: Error codes.  Matches the definition of HTTP status
+	// codes.
+	HttpStatusCode int64 `json:"httpStatusCode,omitempty"`
+
+	// Type: Type of error.
+	//
+	// Possible values:
+	//   "UNKNOWN" - Unknown error.
+	//   "NETWORK_ERROR" - Unknown or unreachable host.
+	//   "DNS_ERROR" - DNS problem, such as the DNS server is not
+	// responding.
+	//   "CONNECTION_ERROR" - Cannot connect to the repository server.
+	//   "AUTHENTICATION_ERROR" - Failed authentication due to incorrect
+	// credentials.
+	//   "AUTHORIZATION_ERROR" - Service account is not authorized for the
+	// repository.
+	//   "SERVER_ERROR" - Repository server error.
+	//   "QUOTA_EXCEEDED" - Quota exceeded.
+	//   "SERVICE_UNAVAILABLE" - Server temporarily unavailable.
+	//   "CLIENT_ERROR" - Client-related error, such as an invalid request
+	// from the connector to
+	// the repository server.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ErrorMessage") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ErrorMessage") 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 *RepositoryError) MarshalJSON() ([]byte, error) {
+	type NoMethod RepositoryError
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RequestOptions: Shared request options for all RPC methods.
+type RequestOptions struct {
+	// DebugOptions: Debug options of the request
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// LanguageCode: The BCP-47 language code, such as "en-US" or
+	// "sr-Latn".
+	// For more information,
+	// see
+	// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
+	// Fo
+	// r translations.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// SearchApplicationId: Id of the application created using
+	// SearchApplicationsService.
+	SearchApplicationId string `json:"searchApplicationId,omitempty"`
+
+	// TimeZone: Current user's time zone id, such as "America/Los_Angeles"
+	// or
+	// "Australia/Sydney". These IDs are defined by
+	// [Unicode Common Locale Data Repository
+	// (CLDR)](http://cldr.unicode.org/)
+	// project, and currently available in the
+	// file
+	// [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/t
+	// imezone.xml)
+	TimeZone string `json:"timeZone,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DebugOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DebugOptions") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *RequestOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod RequestOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ResetSearchApplicationRequest struct {
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DebugOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DebugOptions") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ResetSearchApplicationRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod ResetSearchApplicationRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResponseDebugInfo: Debugging information about the response.
+type ResponseDebugInfo struct {
+	// FormattedDebugInfo: General debug info formatted for display.
+	FormattedDebugInfo string `json:"formattedDebugInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FormattedDebugInfo")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "FormattedDebugInfo") 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 *ResponseDebugInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod ResponseDebugInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RestrictItem: Information relevant only to a restrict entry.
+// NextId: 7
+type RestrictItem struct {
+	DriveFollowUpRestrict *DriveFollowUpRestrict `json:"driveFollowUpRestrict,omitempty"`
+
+	DriveLocationRestrict *DriveLocationRestrict `json:"driveLocationRestrict,omitempty"`
+
+	DriveMimeTypeRestrict *DriveMimeTypeRestrict `json:"driveMimeTypeRestrict,omitempty"`
+
+	DriveTimeSpanRestrict *DriveTimeSpanRestrict `json:"driveTimeSpanRestrict,omitempty"`
+
+	// SearchOperator: The search restrict (e.g. "after:2017-09-11
+	// before:2017-09-12").
+	SearchOperator string `json:"searchOperator,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "DriveFollowUpRestrict") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "DriveFollowUpRestrict") 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 *RestrictItem) MarshalJSON() ([]byte, error) {
+	type NoMethod RestrictItem
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResultCounts: Result count information
+type ResultCounts struct {
+	// SourceResultCounts: Result count information for each source with
+	// results.
+	SourceResultCounts []*SourceResultCount `json:"sourceResultCounts,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "SourceResultCounts")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "SourceResultCounts") 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 *ResultCounts) MarshalJSON() ([]byte, error) {
+	type NoMethod ResultCounts
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResultDebugInfo: Debugging information about the result.
+type ResultDebugInfo struct {
+	// FormattedDebugInfo: General debug info formatted for display.
+	FormattedDebugInfo string `json:"formattedDebugInfo,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FormattedDebugInfo")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "FormattedDebugInfo") 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 *ResultDebugInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod ResultDebugInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResultDisplayField: Display Fields for Search Results
+type ResultDisplayField struct {
+	// Label: The display label for the property.
+	Label string `json:"label,omitempty"`
+
+	// OperatorName: The operator name of the property.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// Property: The name value pair for the property.
+	Property *NamedProperty `json:"property,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Label") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Label") 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 *ResultDisplayField) MarshalJSON() ([]byte, error) {
+	type NoMethod ResultDisplayField
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResultDisplayLine: The collection of fields that make up a displayed
+// line
+type ResultDisplayLine struct {
+	Fields []*ResultDisplayField `json:"fields,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Fields") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Fields") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ResultDisplayLine) MarshalJSON() ([]byte, error) {
+	type NoMethod ResultDisplayLine
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ResultDisplayMetadata struct {
+	// Metalines: The metalines content to be displayed with the result.
+	Metalines []*ResultDisplayLine `json:"metalines,omitempty"`
+
+	// ObjectTypeLabel: The display label for the object.
+	ObjectTypeLabel string `json:"objectTypeLabel,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Metalines") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Metalines") 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 *ResultDisplayMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod ResultDisplayMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type RetrievalImportance struct {
+	// Importance: Indicates the ranking importance given to property when
+	// it is matched
+	// during retrieval. Once set, the token importance of a property cannot
+	// be
+	// changed.
+	//
+	// Possible values:
+	//   "DEFAULT" - Treat the match like a body text match.
+	//   "HIGHEST" - Treat the match like a match against title of the item.
+	//   "HIGH" - Treat the match with higher importance than body text.
+	//   "LOW" - Treat the match with lower importance than body text.
+	//   "NONE" - Do not match against this field during retrieval. The
+	// property can still
+	// be used for operator matching, faceting, and suggest if
+	// desired.
+	Importance string `json:"importance,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Importance") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Importance") 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 *RetrievalImportance) MarshalJSON() ([]byte, error) {
+	type NoMethod RetrievalImportance
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Schema: The schema definition for a data source.
+type Schema struct {
+	// ObjectDefinitions: The list of top-level objects for the data
+	// source.
+	// The maximum number of elements is 10.
+	ObjectDefinitions []*ObjectDefinition `json:"objectDefinitions,omitempty"`
+
+	// OperationIds: IDs of the Long Running Operations (LROs) currently
+	// running for this
+	// schema. After modifying the schema, wait for opeations to
+	// complete
+	// before indexing additional content.
+	OperationIds []string `json:"operationIds,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "ObjectDefinitions")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ObjectDefinitions") 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 *Schema) MarshalJSON() ([]byte, error) {
+	type NoMethod Schema
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ScoringConfig: Scoring configurations for a source while processing
+// a
+// Search or
+// Suggest request.
+type ScoringConfig struct {
+	// DisableFreshness: Whether to use freshness as a ranking signal. By
+	// default, freshness is used
+	// as a ranking signal.
+	DisableFreshness bool `json:"disableFreshness,omitempty"`
+
+	// DisablePersonalization: Whether to personalize the results. By
+	// default, personal signals will
+	// be used to boost results.
+	DisablePersonalization bool `json:"disablePersonalization,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DisableFreshness") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "DisableFreshness") 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 *ScoringConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod ScoringConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SearchApplication: SearchApplication
+type SearchApplication struct {
+	// DataSourceRestrictions: Retrictions applied to the
+	// configurations.
+	// The maximum number of elements is 10.
+	DataSourceRestrictions []*DataSourceRestriction `json:"dataSourceRestrictions,omitempty"`
+
+	// DefaultFacetOptions: The default fields for returning facet
+	// results.
+	// The sources specified here also have been included
+	// in
+	// data_source_restrictions
+	// above.
+	DefaultFacetOptions []*FacetOptions `json:"defaultFacetOptions,omitempty"`
+
+	// DefaultSortOptions: The default options for sorting the search
+	// results
+	DefaultSortOptions *SortOptions `json:"defaultSortOptions,omitempty"`
+
+	// DisplayName: Display name of the Search Application.
+	// The maximum length is 300 characters.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: Name of the Search Application.
+	// <br />Format: searchapplications/{application_id}.
+	Name string `json:"name,omitempty"`
+
+	// OperationIds: IDs of the Long Running Operations (LROs) currently
+	// running for this schema.
+	// Output only field.
+	OperationIds []string `json:"operationIds,omitempty"`
+
+	// ScoringConfig: Configuration for ranking results.
+	ScoringConfig *ScoringConfig `json:"scoringConfig,omitempty"`
+
+	// SourceConfig: Configuration for a sources specified in
+	// data_source_restrictions.
+	SourceConfig []*SourceConfig `json:"sourceConfig,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "DataSourceRestrictions") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "DataSourceRestrictions")
+	// 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 *SearchApplication) MarshalJSON() ([]byte, error) {
+	type NoMethod SearchApplication
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SearchQualityMetadata: Additional search quality metadata of the
+// item.
+type SearchQualityMetadata struct {
+	// Quality: An indication of the quality of the item, used to influence
+	// search quality.
+	// Value should be between 0.0 (lowest quality) and 1.0 (highest
+	// quality).
+	Quality float64 `json:"quality,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Quality") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Quality") 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 *SearchQualityMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod SearchQualityMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *SearchQualityMetadata) UnmarshalJSON(data []byte) error {
+	type NoMethod SearchQualityMetadata
+	var s1 struct {
+		Quality gensupport.JSONFloat64 `json:"quality"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Quality = float64(s1.Quality)
+	return nil
+}
+
+// SearchRequest: The search API request.
+type SearchRequest struct {
+	// DataSourceRestrictions: The sources to use for querying. If not
+	// specified, all data sources
+	// from the current search application are used.
+	DataSourceRestrictions []*DataSourceRestriction `json:"dataSourceRestrictions,omitempty"`
+
+	FacetOptions []*FacetOptions `json:"facetOptions,omitempty"`
+
+	// PageSize: Maximum number of search results to return in one
+	// page.
+	// Valid values are between 1 and 100, inclusive.
+	// Default value is 10.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// Query: The raw query string.
+	// See supported search operators in the [Cloud
+	// search
+	// Cheat
+	// Sheet](https://gsuite.google.com/learning-center/products
+	// /cloudsearch/cheat-sheet/)
+	Query string `json:"query,omitempty"`
+
+	// QueryInterpretationOptions: Options to interpret the user query.
+	QueryInterpretationOptions *QueryInterpretationOptions `json:"queryInterpretationOptions,omitempty"`
+
+	// RequestOptions: Request options, such as the search application and
+	// user timezone.
+	RequestOptions *RequestOptions `json:"requestOptions,omitempty"`
+
+	// SortOptions: The options for sorting the search results
+	SortOptions *SortOptions `json:"sortOptions,omitempty"`
+
+	// Start: Starting index of the results.
+	Start int64 `json:"start,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "DataSourceRestrictions") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "DataSourceRestrictions")
+	// 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 *SearchRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod SearchRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SearchResponse: The search API response.
+type SearchResponse struct {
+	// DebugInfo: Debugging information about the response.
+	DebugInfo *ResponseDebugInfo `json:"debugInfo,omitempty"`
+
+	// ErrorInfo: Error information about the response.
+	ErrorInfo *ErrorInfo `json:"errorInfo,omitempty"`
+
+	// FacetResults: Repeated facet results.
+	FacetResults []*FacetResult `json:"facetResults,omitempty"`
+
+	// HasMoreResults: Whether there are more search results matching the
+	// query.
+	HasMoreResults bool `json:"hasMoreResults,omitempty"`
+
+	// QueryInterpretation: Query interpretation result for user query.
+	// Empty if query interpretation
+	// is disabled.
+	QueryInterpretation *QueryInterpretation `json:"queryInterpretation,omitempty"`
+
+	// ResultCountEstimate: The estimated result count for this query.
+	ResultCountEstimate int64 `json:"resultCountEstimate,omitempty,string"`
+
+	// ResultCountExact: The exact result count for this query.
+	ResultCountExact int64 `json:"resultCountExact,omitempty,string"`
+
+	// ResultCounts: Expanded result count information.
+	ResultCounts *ResultCounts `json:"resultCounts,omitempty"`
+
+	// Results: Results from a search query.
+	Results []*SearchResult `json:"results,omitempty"`
+
+	// SpellResults: Suggested spelling for the query.
+	SpellResults []*SpellResult `json:"spellResults,omitempty"`
+
+	// StructuredResults: Structured results for the user query. These
+	// results are not counted
+	// against the page_size.
+	StructuredResults []*StructuredResult `json:"structuredResults,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "DebugInfo") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "DebugInfo") 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 *SearchResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod SearchResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SearchResult: Results containing indexed information for a document.
+type SearchResult struct {
+	// ClusteredResults: If source is clustered, provide list of clustered
+	// results. There will only
+	// be one level of clustered results. If current source is not enabled
+	// for
+	// clustering, this field will be empty.
+	ClusteredResults []*SearchResult `json:"clusteredResults,omitempty"`
+
+	// DebugInfo: Debugging information about this search result.
+	DebugInfo *ResultDebugInfo `json:"debugInfo,omitempty"`
+
+	// Metadata: Metadata of the search result.
+	Metadata *Metadata `json:"metadata,omitempty"`
+
+	// Snippet: The concatenation of all snippets (summaries) available for
+	// this result.
+	Snippet *Snippet `json:"snippet,omitempty"`
+
+	// Title: Title of the search result.
+	Title string `json:"title,omitempty"`
+
+	// Url: The URL of the result.
+	Url string `json:"url,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ClusteredResults") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ClusteredResults") 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 *SearchResult) MarshalJSON() ([]byte, error) {
+	type NoMethod SearchResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Snippet: Snippet of the search result, which summarizes the content
+// of the resulting
+// page.
+type Snippet struct {
+	// MatchRanges: The matched ranges in the snippet.
+	MatchRanges []*MatchRange `json:"matchRanges,omitempty"`
+
+	// Snippet: The snippet of the document.
+	// The snippet of the document. May contain escaped HTML character
+	// that
+	// should be unescaped prior to rendering.
+	Snippet string `json:"snippet,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "MatchRanges") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "MatchRanges") 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 *Snippet) MarshalJSON() ([]byte, error) {
+	type NoMethod Snippet
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type SortOptions struct {
+	// OperatorName: Name of the operator corresponding to the field to sort
+	// on.
+	// The corresponding property must be marked as
+	// sortable.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// SortOrder: Ascending is the default sort order
+	//
+	// Possible values:
+	//   "ASCENDING"
+	//   "DESCENDING"
+	SortOrder string `json:"sortOrder,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorName") 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 *SortOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod SortOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Source: Defines sources for the suggest/search APIs.
+type Source struct {
+	// Name: Source name for content indexed by the
+	// Indexing API.
+	Name string `json:"name,omitempty"`
+
+	// PredefinedSource: Predefined content source for Google Apps.
+	//
+	// Possible values:
+	//   "NONE"
+	//   "QUERY_HISTORY" - Suggests queries issued by the user in the past.
+	// Only valid when used
+	// with the suggest API. Ignored when used in the query API.
+	//   "PERSON" - Suggests people in the organization. Only valid when
+	// used
+	// with the suggest API. Results in an error when used in the query API.
+	//   "GOOGLE_DRIVE"
+	//   "GOOGLE_GMAIL"
+	//   "GOOGLE_SITES"
+	//   "GOOGLE_GROUPS"
+	//   "GOOGLE_CALENDAR"
+	//   "GOOGLE_KEEP"
+	PredefinedSource string `json:"predefinedSource,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Source) MarshalJSON() ([]byte, error) {
+	type NoMethod Source
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SourceConfig: Configurations for a source while processing a
+// Search or
+// Suggest request.
+type SourceConfig struct {
+	// CrowdingConfig: The crowding configuration for the source.
+	CrowdingConfig *SourceCrowdingConfig `json:"crowdingConfig,omitempty"`
+
+	// ScoringConfig: The scoring configuration for the source.
+	ScoringConfig *SourceScoringConfig `json:"scoringConfig,omitempty"`
+
+	// Source: The source for which this configuration is to be used.
+	Source *Source `json:"source,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CrowdingConfig") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "CrowdingConfig") 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 *SourceConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod SourceConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SourceCrowdingConfig: Set search results crowding limits. Crowding is
+// a situation in which
+// multiple results from the same source or host "crowd out" other
+// results,
+// diminishing the quality of search for users. To foster better search
+// quality
+// and source diversity in search results, you can set a condition to
+// reduce
+// repetitive results by source.
+type SourceCrowdingConfig struct {
+	// Field: Use a field to control results crowding. For example, if you
+	// want to
+	// control overly similar results from Gmail topics, use
+	// `thread_id`.
+	// For similar pages from Google Sites, you can use `webspace_id`.
+	// When matching query results contain the same field value
+	// in
+	// `GenericMetadata`, crowding limits are set on those records.
+	Field string `json:"field,omitempty"`
+
+	// NumResults: Maximum number of results allowed from a source.
+	// No limits will be set on results if this value is less than or equal
+	// to 0.
+	NumResults int64 `json:"numResults,omitempty"`
+
+	// NumSuggestions: Maximum number of suggestions allowed from a
+	// source.
+	// No limits will be set on results if this value is less than or equal
+	// to 0.
+	NumSuggestions int64 `json:"numSuggestions,omitempty"`
+
+	// Source: Control results by content source. This option limits the
+	// total number
+	// of results from a given source and ignores field-based crowding
+	// control.
+	Source bool `json:"source,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Field") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Field") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *SourceCrowdingConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod SourceCrowdingConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SourceResultCount: Per source result count information.
+type SourceResultCount struct {
+	// HasMoreResults: Whether there are more search results for this
+	// source.
+	HasMoreResults bool `json:"hasMoreResults,omitempty"`
+
+	// ResultCountEstimate: The estimated result count for this source.
+	ResultCountEstimate int64 `json:"resultCountEstimate,omitempty,string"`
+
+	// ResultCountExact: The exact result count for this source.
+	ResultCountExact int64 `json:"resultCountExact,omitempty,string"`
+
+	// Source: The source the result count information is associated with.
+	Source *Source `json:"source,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "HasMoreResults") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "HasMoreResults") 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 *SourceResultCount) MarshalJSON() ([]byte, error) {
+	type NoMethod SourceResultCount
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SourceScoringConfig: Set the scoring configuration. This allows
+// modifying the ranking of results
+// for a source.
+type SourceScoringConfig struct {
+	// SourceImportance: Importance of the source.
+	//
+	// Possible values:
+	//   "DEFAULT"
+	//   "LOW"
+	//   "HIGH"
+	SourceImportance string `json:"sourceImportance,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "SourceImportance") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "SourceImportance") 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 *SourceScoringConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod SourceScoringConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type SpellResult struct {
+	// SuggestedQuery: The suggested spelling of the query.
+	SuggestedQuery string `json:"suggestedQuery,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "SuggestedQuery") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "SuggestedQuery") 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 *SpellResult) MarshalJSON() ([]byte, error) {
+	type NoMethod SpellResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// StartUploadItemRequest: Start upload file request.
+type StartUploadItemRequest struct {
+	// ConnectorName: Name of connector making this call.
+	// <br />Format: datasources/{source_id}/connectors/{ID}
+	ConnectorName string `json:"connectorName,omitempty"`
+
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConnectorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ConnectorName") 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 *StartUploadItemRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod StartUploadItemRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Status: The `Status` type defines a logical error model that is
+// suitable for different
+// programming environments, including REST APIs and RPC APIs. It is
+// used by
+// [gRPC](https://github.com/grpc). The error model is designed to
+// be:
+//
+// - Simple to use and understand for most users
+// - Flexible enough to meet unexpected needs
+//
+// # Overview
+//
+// The `Status` message contains three pieces of data: error code, error
+// message,
+// and error details. The error code should be an enum value
+// of
+// google.rpc.Code, but it may accept additional error codes if needed.
+// The
+// error message should be a developer-facing English message that
+// helps
+// developers *understand* and *resolve* the error. If a localized
+// user-facing
+// error message is needed, put the localized message in the error
+// details or
+// localize it in the client. The optional error details may contain
+// arbitrary
+// information about the error. There is a predefined set of error
+// detail types
+// in the package `google.rpc` that can be used for common error
+// conditions.
+//
+// # Language mapping
+//
+// The `Status` message is the logical representation of the error
+// model, but it
+// is not necessarily the actual wire format. When the `Status` message
+// is
+// exposed in different client libraries and different wire protocols,
+// it can be
+// mapped differently. For example, it will likely be mapped to some
+// exceptions
+// in Java, but more likely mapped to some error codes in C.
+//
+// # Other uses
+//
+// The error model and the `Status` message can be used in a variety
+// of
+// environments, either with or without APIs, to provide a
+// consistent developer experience across different
+// environments.
+//
+// Example uses of this error model include:
+//
+// - Partial errors. If a service needs to return partial errors to the
+// client,
+//     it may embed the `Status` in the normal response to indicate the
+// partial
+//     errors.
+//
+// - Workflow errors. A typical workflow has multiple steps. Each step
+// may
+//     have a `Status` message for error reporting.
+//
+// - Batch operations. If a client uses batch request and batch
+// response, the
+//     `Status` message should be used directly inside batch response,
+// one for
+//     each error sub-response.
+//
+// - Asynchronous operations. If an API call embeds asynchronous
+// operation
+//     results in its response, the status of those operations should
+// be
+//     represented directly using the `Status` message.
+//
+// - Logging. If some API errors are stored in logs, the message
+// `Status` could
+//     be used directly after any stripping needed for security/privacy
+// reasons.
+type Status struct {
+	// Code: The status code, which should be an enum value of
+	// google.rpc.Code.
+	Code int64 `json:"code,omitempty"`
+
+	// Details: A list of messages that carry the error details.  There is a
+	// common set of
+	// message types for APIs to use.
+	Details []googleapi.RawMessage `json:"details,omitempty"`
+
+	// Message: A developer-facing error message, which should be in
+	// English. Any
+	// user-facing error message should be localized and sent in
+	// the
+	// google.rpc.Status.details field, or localized by the client.
+	Message string `json:"message,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Code") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Code") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Status) MarshalJSON() ([]byte, error) {
+	type NoMethod Status
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// StructuredDataObject: A structured data object consisting of named
+// properties.
+type StructuredDataObject struct {
+	// Properties: The properties for the object.
+	// The maximum number of elements is 1000.
+	Properties []*NamedProperty `json:"properties,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Properties") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Properties") 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 *StructuredDataObject) MarshalJSON() ([]byte, error) {
+	type NoMethod StructuredDataObject
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// StructuredResult: Structured results that are returned as part of
+// search request.
+type StructuredResult struct {
+	Person *Person `json:"person,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Person") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Person") 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 *StructuredResult) MarshalJSON() ([]byte, error) {
+	type NoMethod StructuredResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SuggestRequest: Request of suggest API.
+type SuggestRequest struct {
+	// DataSourceRestrictions: The sources to use for suggestions. If not
+	// specified, all data sources
+	// from the current search application are used.
+	DataSourceRestrictions []*DataSourceRestriction `json:"dataSourceRestrictions,omitempty"`
+
+	// Query: Partial query for the completion suggestion.
+	Query string `json:"query,omitempty"`
+
+	// RequestOptions: Request options, such as the search application and
+	// user timezone.
+	RequestOptions *RequestOptions `json:"requestOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "DataSourceRestrictions") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "DataSourceRestrictions")
+	// 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 *SuggestRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod SuggestRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SuggestResponse: Response of the suggest API.
+type SuggestResponse struct {
+	// SuggestResults: List of suggestion results.
+	SuggestResults []*SuggestResult `json:"suggestResults,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "SuggestResults") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "SuggestResults") 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 *SuggestResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod SuggestResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SuggestResult: One suggestion result.
+type SuggestResult struct {
+	PeopleSuggestion *PeopleSuggestion `json:"peopleSuggestion,omitempty"`
+
+	QuerySuggestion *QuerySuggestion `json:"querySuggestion,omitempty"`
+
+	// Source: The source of the suggestion.
+	Source *Source `json:"source,omitempty"`
+
+	// SuggestedQuery: The suggested query that will be used for search,
+	// when the user
+	// clicks on the suggestion
+	SuggestedQuery string `json:"suggestedQuery,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PeopleSuggestion") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "PeopleSuggestion") 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 *SuggestResult) MarshalJSON() ([]byte, error) {
+	type NoMethod SuggestResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TextOperatorOptions: Used to provide a search operator for text
+// properties. This is optional.
+// Search operators let users restrict the query to specific fields
+// relevant
+// to the type of item being searched.
+type TextOperatorOptions struct {
+	// ExactMatchWithOperator: If true, the text value will be tokenized as
+	// one atomic value in
+	// operator searches and facet matches. For example, if the operator
+	// name is
+	// "genre" and the value is "science-fiction" the query
+	// restrictions
+	// "genre:science" and "genre:fiction" will not match the
+	// item;
+	// "genre:science-fiction" will. Value matching is case-sensitive
+	// and does not remove special characters.
+	// If false, the text will be tokenized. For example, if the value
+	// is
+	// "science-fiction" the queries "genre:science" and "genre:fiction"
+	// will
+	// match the item.
+	ExactMatchWithOperator bool `json:"exactMatchWithOperator,omitempty"`
+
+	// OperatorName: Indicates the operator name required in the query in
+	// order to isolate the
+	// text property. For example, if operatorName is *subject* and
+	// the
+	// property's name is *subjectLine*, then queries
+	// like
+	// *subject:&lt;value&gt;* will show results only where the value of
+	// the
+	// property named *subjectLine* matches *&lt;value&gt;*. By contrast,
+	// a
+	// search that uses the same *&lt;value&gt;* without an operator will
+	// return
+	// all items where *&lt;value&gt;* matches the value of any
+	// text properties or text within the content field for the item.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "ExactMatchWithOperator") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "ExactMatchWithOperator")
+	// 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 *TextOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod TextOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TextPropertyOptions: Options for text properties.
+type TextPropertyOptions struct {
+	// OperatorOptions: If set, describes how the property should be used as
+	// a search operator.
+	OperatorOptions *TextOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// RetrievalImportance: Indicates the search quality importance of the
+	// tokens within the
+	// field when used for retrieval.
+	RetrievalImportance *RetrievalImportance `json:"retrievalImportance,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorOptions") 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 *TextPropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod TextPropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TextValues: List of text values.
+type TextValues struct {
+	// Values: The maximum allowable length for text values is 2048
+	// characters.
+	// The maximum number of string elements is 100.
+	Values []string `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TextValues) MarshalJSON() ([]byte, error) {
+	type NoMethod TextValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TimestampOperatorOptions: Used to provide a search operator for
+// timestamp properties. This is
+// optional. Search operators let users restrict the query to specific
+// fields
+// relevant to the type of item being searched.
+type TimestampOperatorOptions struct {
+	// GreaterThanOperatorName: Indicates the operator name required in the
+	// query in order to isolate the
+	// timestamp property using the greater-than operator. For example,
+	// if
+	// greaterThanOperatorName is *closedafter* and the property's name
+	// is
+	// *closeDate*, then queries like *closedafter:&lt;value&gt;* will
+	// show results only where the value of the property named *closeDate*
+	// is
+	// later than *&lt;value&gt;*.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	GreaterThanOperatorName string `json:"greaterThanOperatorName,omitempty"`
+
+	// LessThanOperatorName: Indicates the operator name required in the
+	// query in order to isolate the
+	// timestamp property using the less-than operator. For example,
+	// if
+	// lessThanOperatorName is *closedbefore* and the property's name
+	// is
+	// *closeDate*, then queries like *closedbefore:&lt;value&gt;* will
+	// show results only where the value of the property named *closeDate*
+	// is
+	// earlier than *&lt;value&gt;*.
+	// The operator name can only contain lowercase letters (a-z).
+	// The maximum length is 32 characters.
+	LessThanOperatorName string `json:"lessThanOperatorName,omitempty"`
+
+	// OperatorName: Indicates the operator name required in the query in
+	// order to isolate the
+	// timestamp property. For example, if operatorName is *closedon* and
+	// the
+	// property's name is *closeDate*, then queries
+	// like
+	// *closedon:&lt;value&gt;* will show results only where the value of
+	// the
+	// property named *closeDate* matches *&lt;value&gt;*. By contrast,
+	// a
+	// search that uses the same *&lt;value&gt;* without an operator will
+	// return
+	// all items where *&lt;value&gt;* matches the value of any
+	// String
+	// properties or text within the content field for the item. The
+	// operator
+	// name can only contain lowercase letters (a-z). The maximum length is
+	// 32
+	// characters.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "GreaterThanOperatorName") to unconditionally include in API
+	// requests. By default, fields with empty values are omitted from API
+	// requests. However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the 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. "GreaterThanOperatorName")
+	// 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 *TimestampOperatorOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod TimestampOperatorOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TimestampPropertyOptions: Options for timestamp properties.
+type TimestampPropertyOptions struct {
+	// OperatorOptions: If set, describes how the timestamp should be used
+	// as a search operator.
+	OperatorOptions *TimestampOperatorOptions `json:"operatorOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorOptions") 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 *TimestampPropertyOptions) MarshalJSON() ([]byte, error) {
+	type NoMethod TimestampPropertyOptions
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TimestampValues: List of timestamp values.
+type TimestampValues struct {
+	// Values: The maximum number of elements is 100.
+	Values []string `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Values") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Values") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TimestampValues) MarshalJSON() ([]byte, error) {
+	type NoMethod TimestampValues
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type UnmappedIdentity struct {
+	// ExternalIdentity: The resource name for an external user.
+	ExternalIdentity *Principal `json:"externalIdentity,omitempty"`
+
+	// ResolutionStatusCode: The resolution status for the external
+	// identity.
+	//
+	// Possible values:
+	//   "CODE_UNSPECIFIED" - Input-only value.  Used to list all unmapped
+	// identities regardless of
+	// status.
+	//   "NOT_FOUND" - The unmapped identity was not found in IDaaS, and
+	// needs to be provided by
+	// the user.
+	//   "IDENTITY_SOURCE_NOT_FOUND" - The identity source associated with
+	// the identity was either not found or
+	// deleted.
+	//   "IDENTITY_SOURCE_MISCONFIGURED" - IDaaS does not understand the
+	// identity source, probably because the
+	// schema was modified in a non compatible way.
+	//   "TOO_MANY_MAPPINGS_FOUND" - The number of users associated with the
+	// external identity is too large.
+	//   "INTERNAL_ERROR" - Internal error.
+	ResolutionStatusCode string `json:"resolutionStatusCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ExternalIdentity") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ExternalIdentity") 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 *UnmappedIdentity) MarshalJSON() ([]byte, error) {
+	type NoMethod UnmappedIdentity
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type UnreserveItemsRequest struct {
+	// ConnectorName: Name of connector making this call.
+	// <br />Format: datasources/{source_id}/connectors/{ID}
+	ConnectorName string `json:"connectorName,omitempty"`
+
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// Queue: Name of a queue to unreserve items from.
+	Queue string `json:"queue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ConnectorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ConnectorName") 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 *UnreserveItemsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod UnreserveItemsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type UpdateDataSourceRequest struct {
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	Source *DataSource `json:"source,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DebugOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DebugOptions") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *UpdateDataSourceRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod UpdateDataSourceRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type UpdateSchemaRequest struct {
+	// DebugOptions: Common debug options.
+	DebugOptions *DebugOptions `json:"debugOptions,omitempty"`
+
+	// Schema: The new schema for the source.
+	Schema *Schema `json:"schema,omitempty"`
+
+	// ValidateOnly: If true, the request will be validated without side
+	// effects.
+	ValidateOnly bool `json:"validateOnly,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DebugOptions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DebugOptions") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *UpdateSchemaRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod UpdateSchemaRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// UploadItemRef: Represents an upload session reference.
+// This reference is created via upload
+// method.
+// Updating of item content may refer to this uploaded content
+// via
+// contentDataRef.
+type UploadItemRef struct {
+	// Name: Name of the content reference.
+	// The maximum length is 2048 characters.
+	Name string `json:"name,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *UploadItemRef) MarshalJSON() ([]byte, error) {
+	type NoMethod UploadItemRef
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Value: Definition of a single value with generic type.
+type Value struct {
+	BooleanValue bool `json:"booleanValue,omitempty"`
+
+	DateValue *Date `json:"dateValue,omitempty"`
+
+	DoubleValue float64 `json:"doubleValue,omitempty"`
+
+	IntegerValue int64 `json:"integerValue,omitempty,string"`
+
+	StringValue string `json:"stringValue,omitempty"`
+
+	TimestampValue string `json:"timestampValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BooleanValue") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BooleanValue") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Value) MarshalJSON() ([]byte, error) {
+	type NoMethod Value
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *Value) UnmarshalJSON(data []byte) error {
+	type NoMethod Value
+	var s1 struct {
+		DoubleValue gensupport.JSONFloat64 `json:"doubleValue"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.DoubleValue = float64(s1.DoubleValue)
+	return nil
+}
+
+type ValueFilter struct {
+	// OperatorName: The `operator_name` applied to the query, such as
+	// *price_greater_than*.
+	// The filter can work against both types of filters defined in the
+	// schema
+	// for your data source:
+	// <br/><br/>
+	// 1. `operator_name`, where the query filters results by the
+	// property
+	// that matches the value.
+	// <br/>
+	// 2. `greater_than_operator_name` or `less_than_operator_name` in
+	// your
+	// schema. The query filters the results for the property values that
+	// are
+	// greater than or less than  the supplied value in the query.
+	OperatorName string `json:"operatorName,omitempty"`
+
+	// Value: The value to be compared with.
+	Value *Value `json:"value,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperatorName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OperatorName") 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 *ValueFilter) MarshalJSON() ([]byte, error) {
+	type NoMethod ValueFilter
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// method id "cloudsearch.debug.datasources.items.unmappedids.list":
+
+type DebugDatasourcesItemsUnmappedidsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: List all unmapped identities for a specific item.
+func (r *DebugDatasourcesItemsUnmappedidsService) List(parent string) *DebugDatasourcesItemsUnmappedidsListCall {
+	c := &DebugDatasourcesItemsUnmappedidsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum number of
+// items to fetch in a request.
+// Defaults to 100.
+func (c *DebugDatasourcesItemsUnmappedidsListCall) PageSize(pageSize int64) *DebugDatasourcesItemsUnmappedidsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token value returned from a previous List request, if any.
+func (c *DebugDatasourcesItemsUnmappedidsListCall) PageToken(pageToken string) *DebugDatasourcesItemsUnmappedidsListCall {
+	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 *DebugDatasourcesItemsUnmappedidsListCall) Fields(s ...googleapi.Field) *DebugDatasourcesItemsUnmappedidsListCall {
+	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 *DebugDatasourcesItemsUnmappedidsListCall) IfNoneMatch(entityTag string) *DebugDatasourcesItemsUnmappedidsListCall {
+	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 *DebugDatasourcesItemsUnmappedidsListCall) Context(ctx context.Context) *DebugDatasourcesItemsUnmappedidsListCall {
+	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 *DebugDatasourcesItemsUnmappedidsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *DebugDatasourcesItemsUnmappedidsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/debug/{+parent}/unmappedids")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.debug.datasources.items.unmappedids.list" call.
+// Exactly one of *ListUnmappedIdentitiesResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *ListUnmappedIdentitiesResponse.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 *DebugDatasourcesItemsUnmappedidsListCall) Do(opts ...googleapi.CallOption) (*ListUnmappedIdentitiesResponse, 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 := &ListUnmappedIdentitiesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "List all unmapped identities for a specific item.",
+	//   "flatPath": "v1/debug/datasources/{datasourcesId}/items/{itemsId}/unmappedids",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.debug.datasources.items.unmappedids.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token value returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "The name of the item, in the following format:\ndatasources/{source_id}/items/{ID}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+/items/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/debug/{+parent}/unmappedids",
+	//   "response": {
+	//     "$ref": "ListUnmappedIdentitiesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.debug"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *DebugDatasourcesItemsUnmappedidsListCall) Pages(ctx context.Context, f func(*ListUnmappedIdentitiesResponse) 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 "cloudsearch.debug.identitysources.items.listForunmappedidentity":
+
+type DebugIdentitysourcesItemsListForunmappedidentityCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// ListForunmappedidentity: Lists names of items associated with an
+// unmapped identity.
+func (r *DebugIdentitysourcesItemsService) ListForunmappedidentity(parent string) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	c := &DebugIdentitysourcesItemsListForunmappedidentityCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// GroupResourceName sets the optional parameter "groupResourceName":
+func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) GroupResourceName(groupResourceName string) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	c.urlParams_.Set("groupResourceName", groupResourceName)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum number of
+// items to fetch in a request.
+// Defaults to 100.
+func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) PageSize(pageSize int64) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token value returned from a previous List request, if any.
+func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) PageToken(pageToken string) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// UserResourceName sets the optional parameter "userResourceName":
+func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) UserResourceName(userResourceName string) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	c.urlParams_.Set("userResourceName", userResourceName)
+	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 *DebugIdentitysourcesItemsListForunmappedidentityCall) Fields(s ...googleapi.Field) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	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 *DebugIdentitysourcesItemsListForunmappedidentityCall) IfNoneMatch(entityTag string) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	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 *DebugIdentitysourcesItemsListForunmappedidentityCall) Context(ctx context.Context) *DebugIdentitysourcesItemsListForunmappedidentityCall {
+	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 *DebugIdentitysourcesItemsListForunmappedidentityCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/debug/{+parent}/items:forunmappedidentity")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.debug.identitysources.items.listForunmappedidentity" call.
+// Exactly one of *ListItemNamesForUnmappedIdentityResponse or error
+// will be non-nil. Any non-2xx status code is an error. Response
+// headers are in either
+// *ListItemNamesForUnmappedIdentityResponse.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 *DebugIdentitysourcesItemsListForunmappedidentityCall) Do(opts ...googleapi.CallOption) (*ListItemNamesForUnmappedIdentityResponse, 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 := &ListItemNamesForUnmappedIdentityResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists names of items associated with an unmapped identity.",
+	//   "flatPath": "v1/debug/identitysources/{identitysourcesId}/items:forunmappedidentity",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.debug.identitysources.items.listForunmappedidentity",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "groupResourceName": {
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token value returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "The name of the identity source, in the following format:\nidentitysources/{source_id}}",
+	//       "location": "path",
+	//       "pattern": "^identitysources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "userResourceName": {
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/debug/{+parent}/items:forunmappedidentity",
+	//   "response": {
+	//     "$ref": "ListItemNamesForUnmappedIdentityResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.debug"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *DebugIdentitysourcesItemsListForunmappedidentityCall) Pages(ctx context.Context, f func(*ListItemNamesForUnmappedIdentityResponse) 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 "cloudsearch.debug.identitysources.unmappedids.list":
+
+type DebugIdentitysourcesUnmappedidsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists unmapped user identities for an identity source.
+func (r *DebugIdentitysourcesUnmappedidsService) List(parent string) *DebugIdentitysourcesUnmappedidsListCall {
+	c := &DebugIdentitysourcesUnmappedidsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum number of
+// items to fetch in a request.
+// Defaults to 100.
+func (c *DebugIdentitysourcesUnmappedidsListCall) PageSize(pageSize int64) *DebugIdentitysourcesUnmappedidsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token value returned from a previous List request, if any.
+func (c *DebugIdentitysourcesUnmappedidsListCall) PageToken(pageToken string) *DebugIdentitysourcesUnmappedidsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// ResolutionStatusCode sets the optional parameter
+// "resolutionStatusCode": Limit users selection to this status.
+//
+// Possible values:
+//   "CODE_UNSPECIFIED"
+//   "NOT_FOUND"
+//   "IDENTITY_SOURCE_NOT_FOUND"
+//   "IDENTITY_SOURCE_MISCONFIGURED"
+//   "TOO_MANY_MAPPINGS_FOUND"
+//   "INTERNAL_ERROR"
+func (c *DebugIdentitysourcesUnmappedidsListCall) ResolutionStatusCode(resolutionStatusCode string) *DebugIdentitysourcesUnmappedidsListCall {
+	c.urlParams_.Set("resolutionStatusCode", resolutionStatusCode)
+	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 *DebugIdentitysourcesUnmappedidsListCall) Fields(s ...googleapi.Field) *DebugIdentitysourcesUnmappedidsListCall {
+	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 *DebugIdentitysourcesUnmappedidsListCall) IfNoneMatch(entityTag string) *DebugIdentitysourcesUnmappedidsListCall {
+	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 *DebugIdentitysourcesUnmappedidsListCall) Context(ctx context.Context) *DebugIdentitysourcesUnmappedidsListCall {
+	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 *DebugIdentitysourcesUnmappedidsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *DebugIdentitysourcesUnmappedidsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/debug/{+parent}/unmappedids")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.debug.identitysources.unmappedids.list" call.
+// Exactly one of *ListUnmappedIdentitiesResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *ListUnmappedIdentitiesResponse.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 *DebugIdentitysourcesUnmappedidsListCall) Do(opts ...googleapi.CallOption) (*ListUnmappedIdentitiesResponse, 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 := &ListUnmappedIdentitiesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists unmapped user identities for an identity source.",
+	//   "flatPath": "v1/debug/identitysources/{identitysourcesId}/unmappedids",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.debug.identitysources.unmappedids.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "Maximum number of items to fetch in a request.\nDefaults to 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token value returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "The name of the identity source, in the following format:\nidentitysources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^identitysources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "resolutionStatusCode": {
+	//       "description": "Limit users selection to this status.",
+	//       "enum": [
+	//         "CODE_UNSPECIFIED",
+	//         "NOT_FOUND",
+	//         "IDENTITY_SOURCE_NOT_FOUND",
+	//         "IDENTITY_SOURCE_MISCONFIGURED",
+	//         "TOO_MANY_MAPPINGS_FOUND",
+	//         "INTERNAL_ERROR"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/debug/{+parent}/unmappedids",
+	//   "response": {
+	//     "$ref": "ListUnmappedIdentitiesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.debug"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *DebugIdentitysourcesUnmappedidsListCall) Pages(ctx context.Context, f func(*ListUnmappedIdentitiesResponse) 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 "cloudsearch.indexing.datasources.deleteSchema":
+
+type IndexingDatasourcesDeleteSchemaCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// DeleteSchema: Deletes the schema of a data source.
+func (r *IndexingDatasourcesService) DeleteSchema(name string) *IndexingDatasourcesDeleteSchemaCall {
+	c := &IndexingDatasourcesDeleteSchemaCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *IndexingDatasourcesDeleteSchemaCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *IndexingDatasourcesDeleteSchemaCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *IndexingDatasourcesDeleteSchemaCall) Fields(s ...googleapi.Field) *IndexingDatasourcesDeleteSchemaCall {
+	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 *IndexingDatasourcesDeleteSchemaCall) Context(ctx context.Context) *IndexingDatasourcesDeleteSchemaCall {
+	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 *IndexingDatasourcesDeleteSchemaCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesDeleteSchemaCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}/schema")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.deleteSchema" 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 *IndexingDatasourcesDeleteSchemaCall) 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 schema of a data source.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+	//   "httpMethod": "DELETE",
+	//   "id": "cloudsearch.indexing.datasources.deleteSchema",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Name of the data source to delete Schema.  Format:\ndatasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}/schema",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.getSchema":
+
+type IndexingDatasourcesGetSchemaCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// GetSchema: Gets the schema of a data source.
+func (r *IndexingDatasourcesService) GetSchema(name string) *IndexingDatasourcesGetSchemaCall {
+	c := &IndexingDatasourcesGetSchemaCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *IndexingDatasourcesGetSchemaCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *IndexingDatasourcesGetSchemaCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *IndexingDatasourcesGetSchemaCall) Fields(s ...googleapi.Field) *IndexingDatasourcesGetSchemaCall {
+	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 *IndexingDatasourcesGetSchemaCall) IfNoneMatch(entityTag string) *IndexingDatasourcesGetSchemaCall {
+	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 *IndexingDatasourcesGetSchemaCall) Context(ctx context.Context) *IndexingDatasourcesGetSchemaCall {
+	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 *IndexingDatasourcesGetSchemaCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesGetSchemaCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}/schema")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.getSchema" call.
+// Exactly one of *Schema or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Schema.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 *IndexingDatasourcesGetSchemaCall) Do(opts ...googleapi.CallOption) (*Schema, 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 := &Schema{
+		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 schema of a data source.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.indexing.datasources.getSchema",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Name of the data source to get Schema.  Format:\ndatasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}/schema",
+	//   "response": {
+	//     "$ref": "Schema"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.updateSchema":
+
+type IndexingDatasourcesUpdateSchemaCall struct {
+	s                   *Service
+	name                string
+	updateschemarequest *UpdateSchemaRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// UpdateSchema: Updates the schema of a data source.
+func (r *IndexingDatasourcesService) UpdateSchema(name string, updateschemarequest *UpdateSchemaRequest) *IndexingDatasourcesUpdateSchemaCall {
+	c := &IndexingDatasourcesUpdateSchemaCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.updateschemarequest = updateschemarequest
+	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 *IndexingDatasourcesUpdateSchemaCall) Fields(s ...googleapi.Field) *IndexingDatasourcesUpdateSchemaCall {
+	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 *IndexingDatasourcesUpdateSchemaCall) Context(ctx context.Context) *IndexingDatasourcesUpdateSchemaCall {
+	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 *IndexingDatasourcesUpdateSchemaCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesUpdateSchemaCall) 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.updateschemarequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}/schema")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PUT", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.updateSchema" 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 *IndexingDatasourcesUpdateSchemaCall) 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": "Updates the schema of a data source.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/schema",
+	//   "httpMethod": "PUT",
+	//   "id": "cloudsearch.indexing.datasources.updateSchema",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the data source to update Schema.  Format:\ndatasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}/schema",
+	//   "request": {
+	//     "$ref": "UpdateSchemaRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.delete":
+
+type IndexingDatasourcesItemsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Deletes Item resource for the
+// specified resource name.
+func (r *IndexingDatasourcesItemsService) Delete(name string) *IndexingDatasourcesItemsDeleteCall {
+	c := &IndexingDatasourcesItemsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// ConnectorName sets the optional parameter "connectorName": Name of
+// connector making this call.
+// <br />Format: datasources/{source_id}/connectors/{ID}
+func (c *IndexingDatasourcesItemsDeleteCall) ConnectorName(connectorName string) *IndexingDatasourcesItemsDeleteCall {
+	c.urlParams_.Set("connectorName", connectorName)
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *IndexingDatasourcesItemsDeleteCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *IndexingDatasourcesItemsDeleteCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Mode sets the optional parameter "mode": Required. The RequestMode
+// for this request.
+//
+// Possible values:
+//   "UNSPECIFIED"
+//   "SYNCHRONOUS"
+//   "ASYNCHRONOUS"
+func (c *IndexingDatasourcesItemsDeleteCall) Mode(mode string) *IndexingDatasourcesItemsDeleteCall {
+	c.urlParams_.Set("mode", mode)
+	return c
+}
+
+// Version sets the optional parameter "version": Required. The
+// incremented version of the item to delete from the index.
+// The indexing system stores the version from the datasource as a
+// byte string and compares the Item version in the index
+// to the version of the queued Item using lexical ordering.
+// <br /><br />
+// Cloud Search Indexing won't delete any queued item with
+// a version value that is less than or equal to
+// the version of the currently indexed item.
+// The maximum length for this field is 1024 bytes.
+func (c *IndexingDatasourcesItemsDeleteCall) Version(version string) *IndexingDatasourcesItemsDeleteCall {
+	c.urlParams_.Set("version", version)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *IndexingDatasourcesItemsDeleteCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsDeleteCall {
+	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 *IndexingDatasourcesItemsDeleteCall) Context(ctx context.Context) *IndexingDatasourcesItemsDeleteCall {
+	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 *IndexingDatasourcesItemsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.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 *IndexingDatasourcesItemsDeleteCall) 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 Item resource for the\nspecified resource name.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "cloudsearch.indexing.datasources.items.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "connectorName": {
+	//       "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "mode": {
+	//       "description": "Required. The RequestMode for this request.",
+	//       "enum": [
+	//         "UNSPECIFIED",
+	//         "SYNCHRONOUS",
+	//         "ASYNCHRONOUS"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "Required. Name of the item to delete.\nFormat: datasources/{source_id}/items/{item_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+/items/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "version": {
+	//       "description": "Required. The incremented version of the item to delete from the index.\nThe indexing system stores the version from the datasource as a\nbyte string and compares the Item version in the index\nto the version of the queued Item using lexical ordering.\n\u003cbr /\u003e\u003cbr /\u003e\nCloud Search Indexing won't delete any queued item with\na version value that is less than or equal to\nthe version of the currently indexed item.\nThe maximum length for this field is 1024 bytes.",
+	//       "format": "byte",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.deleteQueueItems":
+
+type IndexingDatasourcesItemsDeleteQueueItemsCall struct {
+	s                       *Service
+	name                    string
+	deletequeueitemsrequest *DeleteQueueItemsRequest
+	urlParams_              gensupport.URLParams
+	ctx_                    context.Context
+	header_                 http.Header
+}
+
+// DeleteQueueItems: Deletes all items in a queue. This method is useful
+// for deleting stale
+// items.
+func (r *IndexingDatasourcesItemsService) DeleteQueueItems(name string, deletequeueitemsrequest *DeleteQueueItemsRequest) *IndexingDatasourcesItemsDeleteQueueItemsCall {
+	c := &IndexingDatasourcesItemsDeleteQueueItemsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.deletequeueitemsrequest = deletequeueitemsrequest
+	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 *IndexingDatasourcesItemsDeleteQueueItemsCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsDeleteQueueItemsCall {
+	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 *IndexingDatasourcesItemsDeleteQueueItemsCall) Context(ctx context.Context) *IndexingDatasourcesItemsDeleteQueueItemsCall {
+	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 *IndexingDatasourcesItemsDeleteQueueItemsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsDeleteQueueItemsCall) 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.deletequeueitemsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}/items:deleteQueueItems")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.deleteQueueItems" 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 *IndexingDatasourcesItemsDeleteQueueItemsCall) 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 all items in a queue. This method is useful for deleting stale\nitems.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items:deleteQueueItems",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.indexing.datasources.items.deleteQueueItems",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the Data Source to delete items in a queue.\nFormat: datasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}/items:deleteQueueItems",
+	//   "request": {
+	//     "$ref": "DeleteQueueItemsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.get":
+
+type IndexingDatasourcesItemsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets Item resource by item name.
+func (r *IndexingDatasourcesItemsService) Get(name string) *IndexingDatasourcesItemsGetCall {
+	c := &IndexingDatasourcesItemsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// ConnectorName sets the optional parameter "connectorName": Name of
+// connector making this call.
+// <br />Format: datasources/{source_id}/connectors/{ID}
+func (c *IndexingDatasourcesItemsGetCall) ConnectorName(connectorName string) *IndexingDatasourcesItemsGetCall {
+	c.urlParams_.Set("connectorName", connectorName)
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *IndexingDatasourcesItemsGetCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *IndexingDatasourcesItemsGetCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *IndexingDatasourcesItemsGetCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsGetCall {
+	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 *IndexingDatasourcesItemsGetCall) IfNoneMatch(entityTag string) *IndexingDatasourcesItemsGetCall {
+	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 *IndexingDatasourcesItemsGetCall) Context(ctx context.Context) *IndexingDatasourcesItemsGetCall {
+	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 *IndexingDatasourcesItemsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.get" call.
+// Exactly one of *Item or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Item.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 *IndexingDatasourcesItemsGetCall) Do(opts ...googleapi.CallOption) (*Item, 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 := &Item{
+		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 Item resource by item name.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.indexing.datasources.items.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "connectorName": {
+	//       "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Name of the item to get info.\nFormat: datasources/{source_id}/items/{item_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+/items/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}",
+	//   "response": {
+	//     "$ref": "Item"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.index":
+
+type IndexingDatasourcesItemsIndexCall struct {
+	s                *Service
+	name             string
+	indexitemrequest *IndexItemRequest
+	urlParams_       gensupport.URLParams
+	ctx_             context.Context
+	header_          http.Header
+}
+
+// Index: Updates Item ACL, metadata, and
+// content. It will insert the Item if it
+// does not exist.
+// This method does not support partial updates.  Fields with no
+// provided
+// values are cleared out in the Cloud Search index.
+func (r *IndexingDatasourcesItemsService) Index(name string, indexitemrequest *IndexItemRequest) *IndexingDatasourcesItemsIndexCall {
+	c := &IndexingDatasourcesItemsIndexCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.indexitemrequest = indexitemrequest
+	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 *IndexingDatasourcesItemsIndexCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsIndexCall {
+	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 *IndexingDatasourcesItemsIndexCall) Context(ctx context.Context) *IndexingDatasourcesItemsIndexCall {
+	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 *IndexingDatasourcesItemsIndexCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsIndexCall) 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.indexitemrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}:index")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.index" 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 *IndexingDatasourcesItemsIndexCall) 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": "Updates Item ACL, metadata, and\ncontent. It will insert the Item if it\ndoes not exist.\nThis method does not support partial updates.  Fields with no provided\nvalues are cleared out in the Cloud Search index.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:index",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.indexing.datasources.items.index",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the Item. Format:\ndatasources/{source_id}/items/{item_id}\n\u003cbr /\u003eThis is a required field.\nThe maximum length is 1536 characters.",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+/items/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}:index",
+	//   "request": {
+	//     "$ref": "IndexItemRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.list":
+
+type IndexingDatasourcesItemsListCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists all or a subset of Item resources.
+func (r *IndexingDatasourcesItemsService) List(name string) *IndexingDatasourcesItemsListCall {
+	c := &IndexingDatasourcesItemsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Brief sets the optional parameter "brief": When set to true, the
+// indexing system only populates the following
+// fields:
+// name,
+// version,
+// metadata.hash,
+// structured_data.hash,
+// content.ha
+// sh.
+// <br />If this value is false, then all the fields are populated in
+// Item.
+func (c *IndexingDatasourcesItemsListCall) Brief(brief bool) *IndexingDatasourcesItemsListCall {
+	c.urlParams_.Set("brief", fmt.Sprint(brief))
+	return c
+}
+
+// ConnectorName sets the optional parameter "connectorName": Name of
+// connector making this call.
+// <br />Format: datasources/{source_id}/connectors/{ID}
+func (c *IndexingDatasourcesItemsListCall) ConnectorName(connectorName string) *IndexingDatasourcesItemsListCall {
+	c.urlParams_.Set("connectorName", connectorName)
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *IndexingDatasourcesItemsListCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *IndexingDatasourcesItemsListCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum number of
+// items to fetch in a request.
+// The max value is 1000 when brief is true.  The max value is 10 if
+// brief
+// is false.
+// <br />The default value is 10
+func (c *IndexingDatasourcesItemsListCall) PageSize(pageSize int64) *IndexingDatasourcesItemsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token value returned from a previous List request, if any.
+func (c *IndexingDatasourcesItemsListCall) PageToken(pageToken string) *IndexingDatasourcesItemsListCall {
+	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 *IndexingDatasourcesItemsListCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsListCall {
+	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 *IndexingDatasourcesItemsListCall) IfNoneMatch(entityTag string) *IndexingDatasourcesItemsListCall {
+	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 *IndexingDatasourcesItemsListCall) Context(ctx context.Context) *IndexingDatasourcesItemsListCall {
+	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 *IndexingDatasourcesItemsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}/items")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.list" call.
+// Exactly one of *ListItemsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListItemsResponse.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 *IndexingDatasourcesItemsListCall) Do(opts ...googleapi.CallOption) (*ListItemsResponse, 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 := &ListItemsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all or a subset of Item resources.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.indexing.datasources.items.list",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "brief": {
+	//       "description": "When set to true, the indexing system only populates the following fields:\nname,\nversion,\nmetadata.hash,\nstructured_data.hash,\ncontent.hash.\n\u003cbr /\u003eIf this value is false, then all the fields are populated in Item.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "connectorName": {
+	//       "description": "Name of connector making this call.\n\u003cbr /\u003eFormat: datasources/{source_id}/connectors/{ID}",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Name of the Data Source to list Items.  Format:\ndatasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum number of items to fetch in a request.\nThe max value is 1000 when brief is true.  The max value is 10 if brief\nis false.\n\u003cbr /\u003eThe default value is 10",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token value returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}/items",
+	//   "response": {
+	//     "$ref": "ListItemsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// 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 *IndexingDatasourcesItemsListCall) Pages(ctx context.Context, f func(*ListItemsResponse) 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 "cloudsearch.indexing.datasources.items.poll":
+
+type IndexingDatasourcesItemsPollCall struct {
+	s                *Service
+	name             string
+	pollitemsrequest *PollItemsRequest
+	urlParams_       gensupport.URLParams
+	ctx_             context.Context
+	header_          http.Header
+}
+
+// Poll: Polls for unreserved items from the indexing queue and marks
+// a
+// set as reserved, starting with items that have
+// the oldest timestamp from the highest priority
+// ItemStatus.
+// The priority order is as follows: <br />
+// ERROR
+// <br />
+// MODIFIED
+// <br />
+// NEW_ITEM
+// <br />
+// ACCEPTED
+// <br />
+// Reserving items ensures that polling from other threads
+// cannot create overlapping sets.
+//
+// After handling the reserved items, the client should put items
+// back
+// into the unreserved state, either by calling
+// index,
+// or by calling
+// push with
+// the type REQUEUE.
+//
+// Items automatically become available (unreserved) after 4 hours even
+// if no
+// update or push method is called.
+func (r *IndexingDatasourcesItemsService) Poll(name string, pollitemsrequest *PollItemsRequest) *IndexingDatasourcesItemsPollCall {
+	c := &IndexingDatasourcesItemsPollCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.pollitemsrequest = pollitemsrequest
+	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 *IndexingDatasourcesItemsPollCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsPollCall {
+	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 *IndexingDatasourcesItemsPollCall) Context(ctx context.Context) *IndexingDatasourcesItemsPollCall {
+	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 *IndexingDatasourcesItemsPollCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsPollCall) 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.pollitemsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}/items:poll")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.poll" call.
+// Exactly one of *PollItemsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *PollItemsResponse.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 *IndexingDatasourcesItemsPollCall) Do(opts ...googleapi.CallOption) (*PollItemsResponse, 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 := &PollItemsResponse{
+		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": "Polls for unreserved items from the indexing queue and marks a\nset as reserved, starting with items that have\nthe oldest timestamp from the highest priority\nItemStatus.\nThe priority order is as follows: \u003cbr /\u003e\nERROR\n\u003cbr /\u003e\nMODIFIED\n\u003cbr /\u003e\nNEW_ITEM\n\u003cbr /\u003e\nACCEPTED\n\u003cbr /\u003e\nReserving items ensures that polling from other threads\ncannot create overlapping sets.\n\nAfter handling the reserved items, the client should put items back\ninto the unreserved state, either by calling\nindex,\nor by calling\npush with\nthe type REQUEUE.\n\nItems automatically become available (unreserved) after 4 hours even if no\nupdate or push method is called.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items:poll",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.indexing.datasources.items.poll",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the Data Source to poll items.\nFormat: datasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}/items:poll",
+	//   "request": {
+	//     "$ref": "PollItemsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PollItemsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.push":
+
+type IndexingDatasourcesItemsPushCall struct {
+	s               *Service
+	name            string
+	pushitemrequest *PushItemRequest
+	urlParams_      gensupport.URLParams
+	ctx_            context.Context
+	header_         http.Header
+}
+
+// Push: Pushes an item onto a queue for later polling and updating.
+func (r *IndexingDatasourcesItemsService) Push(name string, pushitemrequest *PushItemRequest) *IndexingDatasourcesItemsPushCall {
+	c := &IndexingDatasourcesItemsPushCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.pushitemrequest = pushitemrequest
+	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 *IndexingDatasourcesItemsPushCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsPushCall {
+	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 *IndexingDatasourcesItemsPushCall) Context(ctx context.Context) *IndexingDatasourcesItemsPushCall {
+	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 *IndexingDatasourcesItemsPushCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsPushCall) 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.pushitemrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}:push")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.push" call.
+// Exactly one of *Item or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Item.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 *IndexingDatasourcesItemsPushCall) Do(opts ...googleapi.CallOption) (*Item, 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 := &Item{
+		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": "Pushes an item onto a queue for later polling and updating.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:push",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.indexing.datasources.items.push",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the item to\npush into the indexing queue.\u003cbr /\u003e\nFormat: datasources/{source_id}/items/{ID}\n\u003cbr /\u003eThis is a required field.\nThe maximum length is 1536 characters.",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+/items/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}:push",
+	//   "request": {
+	//     "$ref": "PushItemRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Item"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.unreserve":
+
+type IndexingDatasourcesItemsUnreserveCall struct {
+	s                     *Service
+	name                  string
+	unreserveitemsrequest *UnreserveItemsRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// Unreserve: Unreserves all items from a queue, making them all
+// eligible to be
+// polled.  This method is useful for resetting the indexing queue
+// after a connector has been restarted.
+func (r *IndexingDatasourcesItemsService) Unreserve(name string, unreserveitemsrequest *UnreserveItemsRequest) *IndexingDatasourcesItemsUnreserveCall {
+	c := &IndexingDatasourcesItemsUnreserveCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.unreserveitemsrequest = unreserveitemsrequest
+	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 *IndexingDatasourcesItemsUnreserveCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsUnreserveCall {
+	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 *IndexingDatasourcesItemsUnreserveCall) Context(ctx context.Context) *IndexingDatasourcesItemsUnreserveCall {
+	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 *IndexingDatasourcesItemsUnreserveCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsUnreserveCall) 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.unreserveitemsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}/items:unreserve")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.unreserve" 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 *IndexingDatasourcesItemsUnreserveCall) 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": "Unreserves all items from a queue, making them all eligible to be\npolled.  This method is useful for resetting the indexing queue\nafter a connector has been restarted.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items:unreserve",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.indexing.datasources.items.unreserve",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the Data Source to unreserve all items.\nFormat: datasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}/items:unreserve",
+	//   "request": {
+	//     "$ref": "UnreserveItemsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.indexing.datasources.items.upload":
+
+type IndexingDatasourcesItemsUploadCall struct {
+	s                      *Service
+	name                   string
+	startuploaditemrequest *StartUploadItemRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// Upload: Creates an upload session for uploading item content. For
+// items smaller
+// than 100 KiB, it's easier to embed the content
+// inline within
+// update.
+func (r *IndexingDatasourcesItemsService) Upload(name string, startuploaditemrequest *StartUploadItemRequest) *IndexingDatasourcesItemsUploadCall {
+	c := &IndexingDatasourcesItemsUploadCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.startuploaditemrequest = startuploaditemrequest
+	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 *IndexingDatasourcesItemsUploadCall) Fields(s ...googleapi.Field) *IndexingDatasourcesItemsUploadCall {
+	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 *IndexingDatasourcesItemsUploadCall) Context(ctx context.Context) *IndexingDatasourcesItemsUploadCall {
+	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 *IndexingDatasourcesItemsUploadCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *IndexingDatasourcesItemsUploadCall) 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.startuploaditemrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/indexing/{+name}:upload")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.indexing.datasources.items.upload" call.
+// Exactly one of *UploadItemRef or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *UploadItemRef.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 *IndexingDatasourcesItemsUploadCall) Do(opts ...googleapi.CallOption) (*UploadItemRef, 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 := &UploadItemRef{
+		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 an upload session for uploading item content. For items smaller\nthan 100 KiB, it's easier to embed the content\ninline within\nupdate.",
+	//   "flatPath": "v1/indexing/datasources/{datasourcesId}/items/{itemsId}:upload",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.indexing.datasources.items.upload",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the Data Source to start a resumable upload.\nFormat: datasources/{source_id}",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+/items/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/indexing/{+name}:upload",
+	//   "request": {
+	//     "$ref": "StartUploadItemRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "UploadItemRef"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.media.upload":
+
+type MediaUploadCall struct {
+	s            *Service
+	resourceName string
+	media        *Media
+	urlParams_   gensupport.URLParams
+	mediaInfo_   *gensupport.MediaInfo
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Upload: Uploads media for indexing.
+//
+// The upload endpoint supports direct and resumable upload protocols
+// and
+// is intended for large items that can not be inlined during index
+// requests. To
+// index large content:
+//
+// 1. Call upload to begin
+//    a session and get the item reference.
+// 1. Upload the content using the item reference's resource name.
+// 1. Call index with the item
+//    reference as the content.
+//
+// For additional information, see
+// [Create a content connector using the REST
+// API](https://developers.google.com/cloud-search/docs/guides/content-co
+// nnector#rest).
+func (r *MediaService) Upload(resourceName string, media *Media) *MediaUploadCall {
+	c := &MediaUploadCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resourceName = resourceName
+	c.media = media
+	return c
+}
+
+// Media specifies the media to upload in one or more chunks. The chunk
+// size may be controlled by supplying a MediaOption generated by
+// googleapi.ChunkSize. The chunk size defaults to
+// googleapi.DefaultUploadChunkSize.The Content-Type header used in the
+// upload request will be determined by sniffing the contents of r,
+// unless a MediaOption generated by googleapi.ContentType is
+// supplied.
+// At most one of Media and ResumableMedia may be set.
+func (c *MediaUploadCall) Media(r io.Reader, options ...googleapi.MediaOption) *MediaUploadCall {
+	c.mediaInfo_ = gensupport.NewInfoFromMedia(r, options)
+	return c
+}
+
+// ResumableMedia specifies the media to upload in chunks and can be
+// canceled with ctx.
+//
+// Deprecated: use Media instead.
+//
+// At most one of Media and ResumableMedia may be set. mediaType
+// identifies the MIME media type of the upload, such as "image/png". If
+// mediaType is "", it will be auto-detected. The provided ctx will
+// supersede any context previously provided to the Context method.
+func (c *MediaUploadCall) ResumableMedia(ctx context.Context, r io.ReaderAt, size int64, mediaType string) *MediaUploadCall {
+	c.ctx_ = ctx
+	c.mediaInfo_ = gensupport.NewInfoFromResumableMedia(r, size, mediaType)
+	return c
+}
+
+// ProgressUpdater provides a callback function that will be called
+// after every chunk. It should be a low-latency function in order to
+// not slow down the upload operation. This should only be called when
+// using ResumableMedia (as opposed to Media).
+func (c *MediaUploadCall) ProgressUpdater(pu googleapi.ProgressUpdater) *MediaUploadCall {
+	c.mediaInfo_.SetProgressUpdater(pu)
+	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 *MediaUploadCall) Fields(s ...googleapi.Field) *MediaUploadCall {
+	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.
+// This context will supersede any context previously provided to the
+// ResumableMedia method.
+func (c *MediaUploadCall) Context(ctx context.Context) *MediaUploadCall {
+	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 *MediaUploadCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *MediaUploadCall) 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.media)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/media/{+resourceName}")
+	if c.mediaInfo_ != nil {
+		urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1)
+		c.urlParams_.Set("uploadType", c.mediaInfo_.UploadType())
+	}
+	if body == nil {
+		body = new(bytes.Buffer)
+		reqHeaders.Set("Content-Type", "application/json")
+	}
+	body, getBody, cleanup := c.mediaInfo_.UploadRequest(reqHeaders, body)
+	defer cleanup()
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	gensupport.SetGetBody(req, getBody)
+	googleapi.Expand(req.URL, map[string]string{
+		"resourceName": c.resourceName,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.media.upload" call.
+// Exactly one of *Media or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Media.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *MediaUploadCall) Do(opts ...googleapi.CallOption) (*Media, 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
+	}
+	rx := c.mediaInfo_.ResumableUpload(res.Header.Get("Location"))
+	if rx != nil {
+		rx.Client = c.s.client
+		rx.UserAgent = c.s.userAgent()
+		ctx := c.ctx_
+		if ctx == nil {
+			ctx = context.TODO()
+		}
+		res, err = rx.Upload(ctx)
+		if err != nil {
+			return nil, err
+		}
+		defer res.Body.Close()
+		if err := googleapi.CheckResponse(res); err != nil {
+			return nil, err
+		}
+	}
+	ret := &Media{
+		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": "Uploads media for indexing.\n\nThe upload endpoint supports direct and resumable upload protocols and\nis intended for large items that can not be inlined during index requests. To\nindex large content:\n\n1. Call upload to begin\n   a session and get the item reference.\n1. Upload the content using the item reference's resource name.\n1. Call index with the item\n   reference as the content.\n\nFor additional information, see\n[Create a content connector using the REST API](https://developers.google.com/cloud-search/docs/guides/content-connector#rest).",
+	//   "flatPath": "v1/media/{mediaId}",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.media.upload",
+	//   "mediaUpload": {
+	//     "accept": [
+	//       "*/*"
+	//     ],
+	//     "protocols": {
+	//       "simple": {
+	//         "multipart": true,
+	//         "path": "/upload/v1/media/{+resourceName}"
+	//       }
+	//     }
+	//   },
+	//   "parameterOrder": [
+	//     "resourceName"
+	//   ],
+	//   "parameters": {
+	//     "resourceName": {
+	//       "description": "Name of the media that is being downloaded.  See\nReadRequest.resource_name.",
+	//       "location": "path",
+	//       "pattern": "^.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/media/{+resourceName}",
+	//   "request": {
+	//     "$ref": "Media"
+	//   },
+	//   "response": {
+	//     "$ref": "Media"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing"
+	//   ],
+	//   "supportsMediaUpload": true
+	// }
+
+}
+
+// method id "cloudsearch.operations.get":
+
+type OperationsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets the latest state of a long-running operation.  Clients can
+// use this
+// method to poll the operation result at intervals as recommended by
+// the API
+// service.
+func (r *OperationsService) Get(name string) *OperationsGetCall {
+	c := &OperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OperationsGetCall) Fields(s ...googleapi.Field) *OperationsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *OperationsGetCall) IfNoneMatch(entityTag string) *OperationsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OperationsGetCall) Context(ctx context.Context) *OperationsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OperationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OperationsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.operations.get" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+	//   "flatPath": "v1/operations/{operationsId}",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.operations.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource.",
+	//       "location": "path",
+	//       "pattern": "^operations/.+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.debug",
+	//     "https://www.googleapis.com/auth/cloud_search.indexing",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.query.search":
+
+type QuerySearchCall struct {
+	s             *Service
+	searchrequest *SearchRequest
+	urlParams_    gensupport.URLParams
+	ctx_          context.Context
+	header_       http.Header
+}
+
+// Search: The Cloud Search Query API provides the search method, which
+// returns
+// the most relevant results from a user query.  The results can come
+// from
+// G Suite Apps, such as Gmail or Google Drive, or they can come from
+// data
+// that you have indexed from a third party.
+func (r *QueryService) Search(searchrequest *SearchRequest) *QuerySearchCall {
+	c := &QuerySearchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.searchrequest = searchrequest
+	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 *QuerySearchCall) Fields(s ...googleapi.Field) *QuerySearchCall {
+	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 *QuerySearchCall) Context(ctx context.Context) *QuerySearchCall {
+	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 *QuerySearchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *QuerySearchCall) 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.searchrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/query/search")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.query.search" call.
+// Exactly one of *SearchResponse or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *SearchResponse.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 *QuerySearchCall) Do(opts ...googleapi.CallOption) (*SearchResponse, 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 := &SearchResponse{
+		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": "The Cloud Search Query API provides the search method, which returns\nthe most relevant results from a user query.  The results can come from\nG Suite Apps, such as Gmail or Google Drive, or they can come from data\nthat you have indexed from a third party.",
+	//   "flatPath": "v1/query/search",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.query.search",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v1/query/search",
+	//   "request": {
+	//     "$ref": "SearchRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "SearchResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.query.suggest":
+
+type QuerySuggestCall struct {
+	s              *Service
+	suggestrequest *SuggestRequest
+	urlParams_     gensupport.URLParams
+	ctx_           context.Context
+	header_        http.Header
+}
+
+// Suggest: Provides suggestions for autocompleting the query.
+func (r *QueryService) Suggest(suggestrequest *SuggestRequest) *QuerySuggestCall {
+	c := &QuerySuggestCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.suggestrequest = suggestrequest
+	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 *QuerySuggestCall) Fields(s ...googleapi.Field) *QuerySuggestCall {
+	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 *QuerySuggestCall) Context(ctx context.Context) *QuerySuggestCall {
+	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 *QuerySuggestCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *QuerySuggestCall) 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.suggestrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/query/suggest")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.query.suggest" call.
+// Exactly one of *SuggestResponse or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *SuggestResponse.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 *QuerySuggestCall) Do(opts ...googleapi.CallOption) (*SuggestResponse, 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 := &SuggestResponse{
+		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": "Provides suggestions for autocompleting the query.",
+	//   "flatPath": "v1/query/suggest",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.query.suggest",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v1/query/suggest",
+	//   "request": {
+	//     "$ref": "SuggestRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "SuggestResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.query.sources.list":
+
+type QuerySourcesListCall struct {
+	s            *Service
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Returns list of sources that user can use for Search and
+// Suggest APIs.
+func (r *QuerySourcesService) List() *QuerySourcesListCall {
+	c := &QuerySourcesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Number of sources
+// to return in the response.
+func (c *QuerySourcesListCall) PageToken(pageToken string) *QuerySourcesListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// RequestOptionsDebugOptionsEnableDebugging sets the optional parameter
+// "requestOptions.debugOptions.enableDebugging": If set, the request
+// will enable debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *QuerySourcesListCall) RequestOptionsDebugOptionsEnableDebugging(requestOptionsDebugOptionsEnableDebugging bool) *QuerySourcesListCall {
+	c.urlParams_.Set("requestOptions.debugOptions.enableDebugging", fmt.Sprint(requestOptionsDebugOptionsEnableDebugging))
+	return c
+}
+
+// RequestOptionsLanguageCode sets the optional parameter
+// "requestOptions.languageCode": The BCP-47 language code, such as
+// "en-US" or "sr-Latn".
+// For more information,
+// see
+// http://www.unicode.org/reports/tr35/#Unicode_locale_identifier.
+// Fo
+// r translations.
+func (c *QuerySourcesListCall) RequestOptionsLanguageCode(requestOptionsLanguageCode string) *QuerySourcesListCall {
+	c.urlParams_.Set("requestOptions.languageCode", requestOptionsLanguageCode)
+	return c
+}
+
+// RequestOptionsSearchApplicationId sets the optional parameter
+// "requestOptions.searchApplicationId": Id of the application created
+// using SearchApplicationsService.
+func (c *QuerySourcesListCall) RequestOptionsSearchApplicationId(requestOptionsSearchApplicationId string) *QuerySourcesListCall {
+	c.urlParams_.Set("requestOptions.searchApplicationId", requestOptionsSearchApplicationId)
+	return c
+}
+
+// RequestOptionsTimeZone sets the optional parameter
+// "requestOptions.timeZone": Current user's time zone id, such as
+// "America/Los_Angeles" or
+// "Australia/Sydney". These IDs are defined by
+// [Unicode Common Locale Data Repository
+// (CLDR)](http://cldr.unicode.org/)
+// project, and currently available in the
+// file
+// [timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/t
+// imezone.xml)
+func (c *QuerySourcesListCall) RequestOptionsTimeZone(requestOptionsTimeZone string) *QuerySourcesListCall {
+	c.urlParams_.Set("requestOptions.timeZone", requestOptionsTimeZone)
+	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 *QuerySourcesListCall) Fields(s ...googleapi.Field) *QuerySourcesListCall {
+	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 *QuerySourcesListCall) IfNoneMatch(entityTag string) *QuerySourcesListCall {
+	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 *QuerySourcesListCall) Context(ctx context.Context) *QuerySourcesListCall {
+	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 *QuerySourcesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *QuerySourcesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/query/sources")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.query.sources.list" call.
+// Exactly one of *ListQuerySourcesResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListQuerySourcesResponse.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 *QuerySourcesListCall) Do(opts ...googleapi.CallOption) (*ListQuerySourcesResponse, 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 := &ListQuerySourcesResponse{
+		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 list of sources that user can use for Search and Suggest APIs.",
+	//   "flatPath": "v1/query/sources",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.query.sources.list",
+	//   "parameterOrder": [],
+	//   "parameters": {
+	//     "pageToken": {
+	//       "description": "Number of sources to return in the response.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "requestOptions.debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "requestOptions.languageCode": {
+	//       "description": "The BCP-47 language code, such as \"en-US\" or \"sr-Latn\".\nFor more information, see\nhttp://www.unicode.org/reports/tr35/#Unicode_locale_identifier.\nFor translations.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "requestOptions.searchApplicationId": {
+	//       "description": "Id of the application created using SearchApplicationsService.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "requestOptions.timeZone": {
+	//       "description": "Current user's time zone id, such as \"America/Los_Angeles\" or\n\"Australia/Sydney\". These IDs are defined by\n[Unicode Common Locale Data Repository (CLDR)](http://cldr.unicode.org/)\nproject, and currently available in the file\n[timezone.xml](http://unicode.org/repos/cldr/trunk/common/bcp47/timezone.xml)",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/query/sources",
+	//   "response": {
+	//     "$ref": "ListQuerySourcesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.query"
+	//   ]
+	// }
+
+}
+
+// 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 *QuerySourcesListCall) Pages(ctx context.Context, f func(*ListQuerySourcesResponse) 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 "cloudsearch.settings.datasources.create":
+
+type SettingsDatasourcesCreateCall struct {
+	s          *Service
+	datasource *DataSource
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Creates data source.
+func (r *SettingsDatasourcesService) Create(datasource *DataSource) *SettingsDatasourcesCreateCall {
+	c := &SettingsDatasourcesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.datasource = datasource
+	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 *SettingsDatasourcesCreateCall) Fields(s ...googleapi.Field) *SettingsDatasourcesCreateCall {
+	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 *SettingsDatasourcesCreateCall) Context(ctx context.Context) *SettingsDatasourcesCreateCall {
+	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 *SettingsDatasourcesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsDatasourcesCreateCall) 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.datasource)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/datasources")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.datasources.create" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *SettingsDatasourcesCreateCall) 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 data source.",
+	//   "flatPath": "v1/settings/datasources",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.settings.datasources.create",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v1/settings/datasources",
+	//   "request": {
+	//     "$ref": "DataSource"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.datasources.delete":
+
+type SettingsDatasourcesDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Deletes a data source.
+func (r *SettingsDatasourcesService) Delete(name string) *SettingsDatasourcesDeleteCall {
+	c := &SettingsDatasourcesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *SettingsDatasourcesDeleteCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *SettingsDatasourcesDeleteCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *SettingsDatasourcesDeleteCall) Fields(s ...googleapi.Field) *SettingsDatasourcesDeleteCall {
+	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 *SettingsDatasourcesDeleteCall) Context(ctx context.Context) *SettingsDatasourcesDeleteCall {
+	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 *SettingsDatasourcesDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsDatasourcesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.datasources.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 *SettingsDatasourcesDeleteCall) 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 a data source.",
+	//   "flatPath": "v1/settings/datasources/{datasourcesId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "cloudsearch.settings.datasources.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Name of the data source.\nFormat: datasources/{source_id}.",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.datasources.get":
+
+type SettingsDatasourcesGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets a data source.
+func (r *SettingsDatasourcesService) Get(name string) *SettingsDatasourcesGetCall {
+	c := &SettingsDatasourcesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *SettingsDatasourcesGetCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *SettingsDatasourcesGetCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *SettingsDatasourcesGetCall) Fields(s ...googleapi.Field) *SettingsDatasourcesGetCall {
+	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 *SettingsDatasourcesGetCall) IfNoneMatch(entityTag string) *SettingsDatasourcesGetCall {
+	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 *SettingsDatasourcesGetCall) Context(ctx context.Context) *SettingsDatasourcesGetCall {
+	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 *SettingsDatasourcesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsDatasourcesGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.datasources.get" call.
+// Exactly one of *DataSource or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *DataSource.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 *SettingsDatasourcesGetCall) Do(opts ...googleapi.CallOption) (*DataSource, 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 := &DataSource{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a data source.",
+	//   "flatPath": "v1/settings/datasources/{datasourcesId}",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.settings.datasources.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Name of the data source resource.\nFormat: datasources/{source_id}.",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/{+name}",
+	//   "response": {
+	//     "$ref": "DataSource"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.datasources.list":
+
+type SettingsDatasourcesListCall struct {
+	s            *Service
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists data sources.
+func (r *SettingsDatasourcesService) List() *SettingsDatasourcesListCall {
+	c := &SettingsDatasourcesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *SettingsDatasourcesListCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *SettingsDatasourcesListCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum number of
+// data sources to fetch in a request.
+// The max value is 100.
+// <br />The default value is 10
+func (c *SettingsDatasourcesListCall) PageSize(pageSize int64) *SettingsDatasourcesListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Starting index of
+// the results.
+func (c *SettingsDatasourcesListCall) PageToken(pageToken string) *SettingsDatasourcesListCall {
+	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 *SettingsDatasourcesListCall) Fields(s ...googleapi.Field) *SettingsDatasourcesListCall {
+	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 *SettingsDatasourcesListCall) IfNoneMatch(entityTag string) *SettingsDatasourcesListCall {
+	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 *SettingsDatasourcesListCall) Context(ctx context.Context) *SettingsDatasourcesListCall {
+	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 *SettingsDatasourcesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsDatasourcesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/datasources")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.datasources.list" call.
+// Exactly one of *ListDataSourceResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListDataSourceResponse.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 *SettingsDatasourcesListCall) Do(opts ...googleapi.CallOption) (*ListDataSourceResponse, 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 := &ListDataSourceResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists data sources.",
+	//   "flatPath": "v1/settings/datasources",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.settings.datasources.list",
+	//   "parameterOrder": [],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum number of data sources to fetch in a request.\nThe max value is 100.\n\u003cbr /\u003eThe default value is 10",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Starting index of the results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/datasources",
+	//   "response": {
+	//     "$ref": "ListDataSourceResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// 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 *SettingsDatasourcesListCall) Pages(ctx context.Context, f func(*ListDataSourceResponse) 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 "cloudsearch.settings.datasources.update":
+
+type SettingsDatasourcesUpdateCall struct {
+	s                       *Service
+	name                    string
+	updatedatasourcerequest *UpdateDataSourceRequest
+	urlParams_              gensupport.URLParams
+	ctx_                    context.Context
+	header_                 http.Header
+}
+
+// Update: Updates a data source.
+func (r *SettingsDatasourcesService) Update(name string, updatedatasourcerequest *UpdateDataSourceRequest) *SettingsDatasourcesUpdateCall {
+	c := &SettingsDatasourcesUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.updatedatasourcerequest = updatedatasourcerequest
+	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 *SettingsDatasourcesUpdateCall) Fields(s ...googleapi.Field) *SettingsDatasourcesUpdateCall {
+	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 *SettingsDatasourcesUpdateCall) Context(ctx context.Context) *SettingsDatasourcesUpdateCall {
+	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 *SettingsDatasourcesUpdateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsDatasourcesUpdateCall) 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.updatedatasourcerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PUT", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.datasources.update" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *SettingsDatasourcesUpdateCall) 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": "Updates a data source.",
+	//   "flatPath": "v1/settings/datasources/{datasourcesId}",
+	//   "httpMethod": "PUT",
+	//   "id": "cloudsearch.settings.datasources.update",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the data source resource.\nFormat: datasources/{source_id}.\n\u003cbr /\u003eThe name is ignored when creating a data source.",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/{+name}",
+	//   "request": {
+	//     "$ref": "UpdateDataSourceRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.searchapplications.create":
+
+type SettingsSearchapplicationsCreateCall struct {
+	s                 *Service
+	searchapplication *SearchApplication
+	urlParams_        gensupport.URLParams
+	ctx_              context.Context
+	header_           http.Header
+}
+
+// Create: Creates a search application.
+func (r *SettingsSearchapplicationsService) Create(searchapplication *SearchApplication) *SettingsSearchapplicationsCreateCall {
+	c := &SettingsSearchapplicationsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.searchapplication = searchapplication
+	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 *SettingsSearchapplicationsCreateCall) Fields(s ...googleapi.Field) *SettingsSearchapplicationsCreateCall {
+	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 *SettingsSearchapplicationsCreateCall) Context(ctx context.Context) *SettingsSearchapplicationsCreateCall {
+	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 *SettingsSearchapplicationsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsSearchapplicationsCreateCall) 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.searchapplication)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/searchapplications")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.searchapplications.create" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *SettingsSearchapplicationsCreateCall) 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 search application.",
+	//   "flatPath": "v1/settings/searchapplications",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.settings.searchapplications.create",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v1/settings/searchapplications",
+	//   "request": {
+	//     "$ref": "SearchApplication"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.searchapplications.delete":
+
+type SettingsSearchapplicationsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Deletes a search application.
+func (r *SettingsSearchapplicationsService) Delete(name string) *SettingsSearchapplicationsDeleteCall {
+	c := &SettingsSearchapplicationsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *SettingsSearchapplicationsDeleteCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *SettingsSearchapplicationsDeleteCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *SettingsSearchapplicationsDeleteCall) Fields(s ...googleapi.Field) *SettingsSearchapplicationsDeleteCall {
+	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 *SettingsSearchapplicationsDeleteCall) Context(ctx context.Context) *SettingsSearchapplicationsDeleteCall {
+	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 *SettingsSearchapplicationsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsSearchapplicationsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.searchapplications.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 *SettingsSearchapplicationsDeleteCall) 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 a search application.",
+	//   "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "cloudsearch.settings.searchapplications.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "The name of the search application to be deleted.\n\u003cbr /\u003eFormat: applications/{application_id}.",
+	//       "location": "path",
+	//       "pattern": "^searchapplications/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.searchapplications.get":
+
+type SettingsSearchapplicationsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets the specified search application.
+func (r *SettingsSearchapplicationsService) Get(name string) *SettingsSearchapplicationsGetCall {
+	c := &SettingsSearchapplicationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *SettingsSearchapplicationsGetCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *SettingsSearchapplicationsGetCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *SettingsSearchapplicationsGetCall) Fields(s ...googleapi.Field) *SettingsSearchapplicationsGetCall {
+	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 *SettingsSearchapplicationsGetCall) IfNoneMatch(entityTag string) *SettingsSearchapplicationsGetCall {
+	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 *SettingsSearchapplicationsGetCall) Context(ctx context.Context) *SettingsSearchapplicationsGetCall {
+	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 *SettingsSearchapplicationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsSearchapplicationsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.searchapplications.get" call.
+// Exactly one of *SearchApplication or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *SearchApplication.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 *SettingsSearchapplicationsGetCall) Do(opts ...googleapi.CallOption) (*SearchApplication, 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 := &SearchApplication{
+		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 specified search application.",
+	//   "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.settings.searchapplications.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "name": {
+	//       "description": "Name of the search application.\n\u003cbr /\u003eFormat: applications/{application_id}.",
+	//       "location": "path",
+	//       "pattern": "^searchapplications/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/{+name}",
+	//   "response": {
+	//     "$ref": "SearchApplication"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.searchapplications.list":
+
+type SettingsSearchapplicationsListCall struct {
+	s            *Service
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists all search applications.
+func (r *SettingsSearchapplicationsService) List() *SettingsSearchapplicationsListCall {
+	c := &SettingsSearchapplicationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	return c
+}
+
+// DebugOptionsEnableDebugging sets the optional parameter
+// "debugOptions.enableDebugging": If set, the request will enable
+// debugging features of Cloud Search.
+// Only turn on this field, if asked by Google to help with debugging.
+func (c *SettingsSearchapplicationsListCall) DebugOptionsEnableDebugging(debugOptionsEnableDebugging bool) *SettingsSearchapplicationsListCall {
+	c.urlParams_.Set("debugOptions.enableDebugging", fmt.Sprint(debugOptionsEnableDebugging))
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of items to return.
+func (c *SettingsSearchapplicationsListCall) PageSize(pageSize int64) *SettingsSearchapplicationsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token value returned from a previous List request, if
+// any.
+// <br/> The default value is 10
+func (c *SettingsSearchapplicationsListCall) PageToken(pageToken string) *SettingsSearchapplicationsListCall {
+	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 *SettingsSearchapplicationsListCall) Fields(s ...googleapi.Field) *SettingsSearchapplicationsListCall {
+	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 *SettingsSearchapplicationsListCall) IfNoneMatch(entityTag string) *SettingsSearchapplicationsListCall {
+	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 *SettingsSearchapplicationsListCall) Context(ctx context.Context) *SettingsSearchapplicationsListCall {
+	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 *SettingsSearchapplicationsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsSearchapplicationsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/searchapplications")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.searchapplications.list" call.
+// Exactly one of *ListSearchApplicationsResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *ListSearchApplicationsResponse.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 *SettingsSearchapplicationsListCall) Do(opts ...googleapi.CallOption) (*ListSearchApplicationsResponse, 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 := &ListSearchApplicationsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all search applications.",
+	//   "flatPath": "v1/settings/searchapplications",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.settings.searchapplications.list",
+	//   "parameterOrder": [],
+	//   "parameters": {
+	//     "debugOptions.enableDebugging": {
+	//       "description": "If set, the request will enable debugging features of Cloud Search.\nOnly turn on this field, if asked by Google to help with debugging.",
+	//       "location": "query",
+	//       "type": "boolean"
+	//     },
+	//     "pageSize": {
+	//       "description": "The maximum number of items to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token value returned from a previous List request, if any.\n\u003cbr/\u003e The default value is 10",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/searchapplications",
+	//   "response": {
+	//     "$ref": "ListSearchApplicationsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.query"
+	//   ]
+	// }
+
+}
+
+// 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 *SettingsSearchapplicationsListCall) Pages(ctx context.Context, f func(*ListSearchApplicationsResponse) 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 "cloudsearch.settings.searchapplications.reset":
+
+type SettingsSearchapplicationsResetCall struct {
+	s                             *Service
+	name                          string
+	resetsearchapplicationrequest *ResetSearchApplicationRequest
+	urlParams_                    gensupport.URLParams
+	ctx_                          context.Context
+	header_                       http.Header
+}
+
+// Reset: Resets a search application to default settings. This will
+// return an empty
+// response.
+func (r *SettingsSearchapplicationsService) Reset(name string, resetsearchapplicationrequest *ResetSearchApplicationRequest) *SettingsSearchapplicationsResetCall {
+	c := &SettingsSearchapplicationsResetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.resetsearchapplicationrequest = resetsearchapplicationrequest
+	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 *SettingsSearchapplicationsResetCall) Fields(s ...googleapi.Field) *SettingsSearchapplicationsResetCall {
+	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 *SettingsSearchapplicationsResetCall) Context(ctx context.Context) *SettingsSearchapplicationsResetCall {
+	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 *SettingsSearchapplicationsResetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsSearchapplicationsResetCall) 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.resetsearchapplicationrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/{+name}:reset")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.searchapplications.reset" 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 *SettingsSearchapplicationsResetCall) 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": "Resets a search application to default settings. This will return an empty\nresponse.",
+	//   "flatPath": "v1/settings/searchapplications/{searchapplicationsId}:reset",
+	//   "httpMethod": "POST",
+	//   "id": "cloudsearch.settings.searchapplications.reset",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the search application to be reset.\n\u003cbr /\u003eFormat: applications/{application_id}.",
+	//       "location": "path",
+	//       "pattern": "^searchapplications/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/{+name}:reset",
+	//   "request": {
+	//     "$ref": "ResetSearchApplicationRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.settings.searchapplications.update":
+
+type SettingsSearchapplicationsUpdateCall struct {
+	s                 *Service
+	name              string
+	searchapplication *SearchApplication
+	urlParams_        gensupport.URLParams
+	ctx_              context.Context
+	header_           http.Header
+}
+
+// Update: Updates a search application.
+func (r *SettingsSearchapplicationsService) Update(name string, searchapplication *SearchApplication) *SettingsSearchapplicationsUpdateCall {
+	c := &SettingsSearchapplicationsUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.searchapplication = searchapplication
+	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 *SettingsSearchapplicationsUpdateCall) Fields(s ...googleapi.Field) *SettingsSearchapplicationsUpdateCall {
+	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 *SettingsSearchapplicationsUpdateCall) Context(ctx context.Context) *SettingsSearchapplicationsUpdateCall {
+	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 *SettingsSearchapplicationsUpdateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SettingsSearchapplicationsUpdateCall) 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.searchapplication)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/settings/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PUT", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.settings.searchapplications.update" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *SettingsSearchapplicationsUpdateCall) 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": "Updates a search application.",
+	//   "flatPath": "v1/settings/searchapplications/{searchapplicationsId}",
+	//   "httpMethod": "PUT",
+	//   "id": "cloudsearch.settings.searchapplications.update",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Name of the Search Application.\n\u003cbr /\u003eFormat: searchapplications/{application_id}.",
+	//       "location": "path",
+	//       "pattern": "^searchapplications/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/settings/{+name}",
+	//   "request": {
+	//     "$ref": "SearchApplication"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.settings",
+	//     "https://www.googleapis.com/auth/cloud_search.settings.query"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.stats.getIndex":
+
+type StatsGetIndexCall struct {
+	s            *Service
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// GetIndex: Gets indexed item statistics aggreggated across all data
+// sources.
+func (r *StatsService) GetIndex() *StatsGetIndexCall {
+	c := &StatsGetIndexCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	return c
+}
+
+// FromDateDay sets the optional parameter "fromDate.day": Day of month.
+// Must be from 1 to 31 and valid for the year and month.
+func (c *StatsGetIndexCall) FromDateDay(fromDateDay int64) *StatsGetIndexCall {
+	c.urlParams_.Set("fromDate.day", fmt.Sprint(fromDateDay))
+	return c
+}
+
+// FromDateMonth sets the optional parameter "fromDate.month": Month of
+// date. Must be from 1 to 12.
+func (c *StatsGetIndexCall) FromDateMonth(fromDateMonth int64) *StatsGetIndexCall {
+	c.urlParams_.Set("fromDate.month", fmt.Sprint(fromDateMonth))
+	return c
+}
+
+// FromDateYear sets the optional parameter "fromDate.year": Year of
+// date. Must be from 1 to 9999.
+func (c *StatsGetIndexCall) FromDateYear(fromDateYear int64) *StatsGetIndexCall {
+	c.urlParams_.Set("fromDate.year", fmt.Sprint(fromDateYear))
+	return c
+}
+
+// ToDateDay sets the optional parameter "toDate.day": Day of month.
+// Must be from 1 to 31 and valid for the year and month.
+func (c *StatsGetIndexCall) ToDateDay(toDateDay int64) *StatsGetIndexCall {
+	c.urlParams_.Set("toDate.day", fmt.Sprint(toDateDay))
+	return c
+}
+
+// ToDateMonth sets the optional parameter "toDate.month": Month of
+// date. Must be from 1 to 12.
+func (c *StatsGetIndexCall) ToDateMonth(toDateMonth int64) *StatsGetIndexCall {
+	c.urlParams_.Set("toDate.month", fmt.Sprint(toDateMonth))
+	return c
+}
+
+// ToDateYear sets the optional parameter "toDate.year": Year of date.
+// Must be from 1 to 9999.
+func (c *StatsGetIndexCall) ToDateYear(toDateYear int64) *StatsGetIndexCall {
+	c.urlParams_.Set("toDate.year", fmt.Sprint(toDateYear))
+	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 *StatsGetIndexCall) Fields(s ...googleapi.Field) *StatsGetIndexCall {
+	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 *StatsGetIndexCall) IfNoneMatch(entityTag string) *StatsGetIndexCall {
+	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 *StatsGetIndexCall) Context(ctx context.Context) *StatsGetIndexCall {
+	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 *StatsGetIndexCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *StatsGetIndexCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/stats/index")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.stats.getIndex" call.
+// Exactly one of *GetCustomerIndexStatsResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *GetCustomerIndexStatsResponse.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 *StatsGetIndexCall) Do(opts ...googleapi.CallOption) (*GetCustomerIndexStatsResponse, 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 := &GetCustomerIndexStatsResponse{
+		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 indexed item statistics aggreggated across all data sources.",
+	//   "flatPath": "v1/stats/index",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.stats.getIndex",
+	//   "parameterOrder": [],
+	//   "parameters": {
+	//     "fromDate.day": {
+	//       "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "fromDate.month": {
+	//       "description": "Month of date. Must be from 1 to 12.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "fromDate.year": {
+	//       "description": "Year of date. Must be from 1 to 9999.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "toDate.day": {
+	//       "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "toDate.month": {
+	//       "description": "Month of date. Must be from 1 to 12.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "toDate.year": {
+	//       "description": "Year of date. Must be from 1 to 9999.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     }
+	//   },
+	//   "path": "v1/stats/index",
+	//   "response": {
+	//     "$ref": "GetCustomerIndexStatsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.stats",
+	//     "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+	//   ]
+	// }
+
+}
+
+// method id "cloudsearch.stats.index.datasources.get":
+
+type StatsIndexDatasourcesGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets indexed item statistics for a single data source.
+func (r *StatsIndexDatasourcesService) Get(name string) *StatsIndexDatasourcesGetCall {
+	c := &StatsIndexDatasourcesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// FromDateDay sets the optional parameter "fromDate.day": Day of month.
+// Must be from 1 to 31 and valid for the year and month.
+func (c *StatsIndexDatasourcesGetCall) FromDateDay(fromDateDay int64) *StatsIndexDatasourcesGetCall {
+	c.urlParams_.Set("fromDate.day", fmt.Sprint(fromDateDay))
+	return c
+}
+
+// FromDateMonth sets the optional parameter "fromDate.month": Month of
+// date. Must be from 1 to 12.
+func (c *StatsIndexDatasourcesGetCall) FromDateMonth(fromDateMonth int64) *StatsIndexDatasourcesGetCall {
+	c.urlParams_.Set("fromDate.month", fmt.Sprint(fromDateMonth))
+	return c
+}
+
+// FromDateYear sets the optional parameter "fromDate.year": Year of
+// date. Must be from 1 to 9999.
+func (c *StatsIndexDatasourcesGetCall) FromDateYear(fromDateYear int64) *StatsIndexDatasourcesGetCall {
+	c.urlParams_.Set("fromDate.year", fmt.Sprint(fromDateYear))
+	return c
+}
+
+// ToDateDay sets the optional parameter "toDate.day": Day of month.
+// Must be from 1 to 31 and valid for the year and month.
+func (c *StatsIndexDatasourcesGetCall) ToDateDay(toDateDay int64) *StatsIndexDatasourcesGetCall {
+	c.urlParams_.Set("toDate.day", fmt.Sprint(toDateDay))
+	return c
+}
+
+// ToDateMonth sets the optional parameter "toDate.month": Month of
+// date. Must be from 1 to 12.
+func (c *StatsIndexDatasourcesGetCall) ToDateMonth(toDateMonth int64) *StatsIndexDatasourcesGetCall {
+	c.urlParams_.Set("toDate.month", fmt.Sprint(toDateMonth))
+	return c
+}
+
+// ToDateYear sets the optional parameter "toDate.year": Year of date.
+// Must be from 1 to 9999.
+func (c *StatsIndexDatasourcesGetCall) ToDateYear(toDateYear int64) *StatsIndexDatasourcesGetCall {
+	c.urlParams_.Set("toDate.year", fmt.Sprint(toDateYear))
+	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 *StatsIndexDatasourcesGetCall) Fields(s ...googleapi.Field) *StatsIndexDatasourcesGetCall {
+	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 *StatsIndexDatasourcesGetCall) IfNoneMatch(entityTag string) *StatsIndexDatasourcesGetCall {
+	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 *StatsIndexDatasourcesGetCall) Context(ctx context.Context) *StatsIndexDatasourcesGetCall {
+	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 *StatsIndexDatasourcesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *StatsIndexDatasourcesGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/stats/index/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudsearch.stats.index.datasources.get" call.
+// Exactly one of *GetDataSourceIndexStatsResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *GetDataSourceIndexStatsResponse.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 *StatsIndexDatasourcesGetCall) Do(opts ...googleapi.CallOption) (*GetDataSourceIndexStatsResponse, 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 := &GetDataSourceIndexStatsResponse{
+		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 indexed item statistics for a single data source.",
+	//   "flatPath": "v1/stats/index/datasources/{datasourcesId}",
+	//   "httpMethod": "GET",
+	//   "id": "cloudsearch.stats.index.datasources.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "fromDate.day": {
+	//       "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "fromDate.month": {
+	//       "description": "Month of date. Must be from 1 to 12.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "fromDate.year": {
+	//       "description": "Year of date. Must be from 1 to 9999.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "name": {
+	//       "description": "The resource id of the data source to retrieve statistics for,\nin the following format: \"datasources/{source_id}\"",
+	//       "location": "path",
+	//       "pattern": "^datasources/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "toDate.day": {
+	//       "description": "Day of month. Must be from 1 to 31 and valid for the year and month.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "toDate.month": {
+	//       "description": "Month of date. Must be from 1 to 12.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "toDate.year": {
+	//       "description": "Year of date. Must be from 1 to 9999.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     }
+	//   },
+	//   "path": "v1/stats/index/{+name}",
+	//   "response": {
+	//     "$ref": "GetDataSourceIndexStatsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud_search",
+	//     "https://www.googleapis.com/auth/cloud_search.stats",
+	//     "https://www.googleapis.com/auth/cloud_search.stats.indexing"
+	//   ]
+	// }
+
+}
diff --git a/cloudshell/v1/cloudshell-gen.go b/cloudshell/v1/cloudshell-gen.go
index 384a3dd..13e0886 100644
--- a/cloudshell/v1/cloudshell-gen.go
+++ b/cloudshell/v1/cloudshell-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudshell/v1alpha1/cloudshell-gen.go b/cloudshell/v1alpha1/cloudshell-gen.go
index 62d97cb..ceb2d2d 100644
--- a/cloudshell/v1alpha1/cloudshell-gen.go
+++ b/cloudshell/v1alpha1/cloudshell-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudtasks/v2beta2/cloudtasks-gen.go b/cloudtasks/v2beta2/cloudtasks-gen.go
index 616fad1..0024db9 100644
--- a/cloudtasks/v2beta2/cloudtasks-gen.go
+++ b/cloudtasks/v2beta2/cloudtasks-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudtasks/v2beta3/cloudtasks-gen.go b/cloudtasks/v2beta3/cloudtasks-gen.go
index 7432b58..7d0fed0 100644
--- a/cloudtasks/v2beta3/cloudtasks-gen.go
+++ b/cloudtasks/v2beta3/cloudtasks-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudtrace/v1/cloudtrace-gen.go b/cloudtrace/v1/cloudtrace-gen.go
index e1ff45b..3486ec7 100644
--- a/cloudtrace/v1/cloudtrace-gen.go
+++ b/cloudtrace/v1/cloudtrace-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/cloudtrace/v2/cloudtrace-gen.go b/cloudtrace/v2/cloudtrace-gen.go
index 8c56ede..cc0097f 100644
--- a/cloudtrace/v2/cloudtrace-gen.go
+++ b/cloudtrace/v2/cloudtrace-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/composer/v1/composer-gen.go b/composer/v1/composer-gen.go
index 780e530..11f6f08 100644
--- a/composer/v1/composer-gen.go
+++ b/composer/v1/composer-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/composer/v1beta1/composer-gen.go b/composer/v1beta1/composer-gen.go
index 33e73e9..dde5533 100644
--- a/composer/v1beta1/composer-gen.go
+++ b/composer/v1beta1/composer-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/compute/v0.alpha/compute-gen.go b/compute/v0.alpha/compute-gen.go
index 51bcba0..b82289f 100644
--- a/compute/v0.alpha/compute-gen.go
+++ b/compute/v0.alpha/compute-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/compute/v0.beta/compute-gen.go b/compute/v0.beta/compute-gen.go
index 2f85716..b16ed90 100644
--- a/compute/v0.beta/compute-gen.go
+++ b/compute/v0.beta/compute-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/compute/v1/compute-gen.go b/compute/v1/compute-gen.go
index afc9841..80d2c85 100644
--- a/compute/v1/compute-gen.go
+++ b/compute/v1/compute-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/container/v1/container-gen.go b/container/v1/container-gen.go
index 6bdb911..07bf993 100644
--- a/container/v1/container-gen.go
+++ b/container/v1/container-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/container/v1beta1/container-gen.go b/container/v1beta1/container-gen.go
index 52607e6..ddaefd3 100644
--- a/container/v1beta1/container-gen.go
+++ b/container/v1beta1/container-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/content/v2/content-api.json b/content/v2/content-api.json
index 1721e25..e677057 100644
--- a/content/v2/content-api.json
+++ b/content/v2/content-api.json
@@ -15,7 +15,7 @@
   "description": "Manages product items, inventory, and Merchant Center accounts for Google Shopping.",
   "discoveryVersion": "v1",
   "documentationLink": "https://developers.google.com/shopping-content",
-  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/XlIh_rA14oju-Cr_WDQ9UM5jkoQ\"",
+  "etag": "\"J3WqvAcMk4eQjJXvfSI4Yr8VouA/kqiK7ItRiK15mvY7aRI-n1_7sqk\"",
   "icons": {
     "x16": "https://www.gstatic.com/images/branding/product/1x/googleg_16dp.png",
     "x32": "https://www.gstatic.com/images/branding/product/1x/googleg_32dp.png"
@@ -3469,7 +3469,7 @@
       }
     }
   },
-  "revision": "20181023",
+  "revision": "20181029",
   "rootUrl": "https://www.googleapis.com/",
   "schemas": {
     "Account": {
@@ -6403,6 +6403,13 @@
           "description": "The two-letter ISO 639-1 language code for the item.",
           "type": "string"
         },
+        "fees": {
+          "description": "Associated fees at order creation time.",
+          "items": {
+            "$ref": "OrderLineItemProductFee"
+          },
+          "type": "array"
+        },
         "gtin": {
           "description": "Global Trade Item Number (GTIN) of the item.",
           "type": "string"
@@ -6453,6 +6460,24 @@
       },
       "type": "object"
     },
+    "OrderLineItemProductFee": {
+      "id": "OrderLineItemProductFee",
+      "properties": {
+        "amount": {
+          "$ref": "Price",
+          "description": "Amount of the fee."
+        },
+        "id": {
+          "description": "Case-insensitive fee ID.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Name of the fee.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "OrderLineItemProductVariantAttribute": {
       "id": "OrderLineItemProductVariantAttribute",
       "properties": {
diff --git a/content/v2/content-gen.go b/content/v2/content-gen.go
index 76c283d..7ea9fa4 100644
--- a/content/v2/content-gen.go
+++ b/content/v2/content-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -4877,6 +4878,9 @@
 	// ContentLanguage: The two-letter ISO 639-1 language code for the item.
 	ContentLanguage string `json:"contentLanguage,omitempty"`
 
+	// Fees: Associated fees at order creation time.
+	Fees []*OrderLineItemProductFee `json:"fees,omitempty"`
+
 	// Gtin: Global Trade Item Number (GTIN) of the item.
 	Gtin string `json:"gtin,omitempty"`
 
@@ -4938,6 +4942,39 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type OrderLineItemProductFee struct {
+	// Amount: Amount of the fee.
+	Amount *Price `json:"amount,omitempty"`
+
+	// Id: Case-insensitive fee ID.
+	Id string `json:"id,omitempty"`
+
+	// Name: Name of the fee.
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Amount") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "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 []string `json:"-"`
+}
+
+func (s *OrderLineItemProductFee) MarshalJSON() ([]byte, error) {
+	type NoMethod OrderLineItemProductFee
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type OrderLineItemProductVariantAttribute struct {
 	// Dimension: The dimension of the variant.
 	Dimension string `json:"dimension,omitempty"`
diff --git a/customsearch/v1/customsearch-gen.go b/customsearch/v1/customsearch-gen.go
index 3524b86..8557b41 100644
--- a/customsearch/v1/customsearch-gen.go
+++ b/customsearch/v1/customsearch-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dataflow/v1b3/dataflow-gen.go b/dataflow/v1b3/dataflow-gen.go
index f559250..c356fd0 100644
--- a/dataflow/v1b3/dataflow-gen.go
+++ b/dataflow/v1b3/dataflow-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dataproc/v1/dataproc-gen.go b/dataproc/v1/dataproc-gen.go
index bf35160..9d90859 100644
--- a/dataproc/v1/dataproc-gen.go
+++ b/dataproc/v1/dataproc-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dataproc/v1beta2/dataproc-gen.go b/dataproc/v1beta2/dataproc-gen.go
index 79ff625..41f802e 100644
--- a/dataproc/v1beta2/dataproc-gen.go
+++ b/dataproc/v1beta2/dataproc-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/datastore/v1/datastore-gen.go b/datastore/v1/datastore-gen.go
index 970b5d9..ed5c3ac 100644
--- a/datastore/v1/datastore-gen.go
+++ b/datastore/v1/datastore-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/datastore/v1beta1/datastore-gen.go b/datastore/v1beta1/datastore-gen.go
index ecb128b..82d436d 100644
--- a/datastore/v1beta1/datastore-gen.go
+++ b/datastore/v1beta1/datastore-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/datastore/v1beta3/datastore-gen.go b/datastore/v1beta3/datastore-gen.go
index ebfba42..8840f79 100644
--- a/datastore/v1beta3/datastore-gen.go
+++ b/datastore/v1beta3/datastore-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/deploymentmanager/v0.alpha/deploymentmanager-gen.go b/deploymentmanager/v0.alpha/deploymentmanager-gen.go
index 9d6684e..20f4901 100644
--- a/deploymentmanager/v0.alpha/deploymentmanager-gen.go
+++ b/deploymentmanager/v0.alpha/deploymentmanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/deploymentmanager/v2/deploymentmanager-gen.go b/deploymentmanager/v2/deploymentmanager-gen.go
index 2a617ba..f64f576 100644
--- a/deploymentmanager/v2/deploymentmanager-gen.go
+++ b/deploymentmanager/v2/deploymentmanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/deploymentmanager/v2beta/deploymentmanager-gen.go b/deploymentmanager/v2beta/deploymentmanager-gen.go
index 4b7c1a9..ad2b227 100644
--- a/deploymentmanager/v2beta/deploymentmanager-gen.go
+++ b/deploymentmanager/v2beta/deploymentmanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dfareporting/v3.0/dfareporting-gen.go b/dfareporting/v3.0/dfareporting-gen.go
index 4265721..98a4a22 100644
--- a/dfareporting/v3.0/dfareporting-gen.go
+++ b/dfareporting/v3.0/dfareporting-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dfareporting/v3.1/dfareporting-gen.go b/dfareporting/v3.1/dfareporting-gen.go
index 86aed0d..ac3b927 100644
--- a/dfareporting/v3.1/dfareporting-gen.go
+++ b/dfareporting/v3.1/dfareporting-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dfareporting/v3.2/dfareporting-gen.go b/dfareporting/v3.2/dfareporting-gen.go
index 84ca3ff..331a1c4 100644
--- a/dfareporting/v3.2/dfareporting-gen.go
+++ b/dfareporting/v3.2/dfareporting-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dialogflow/v2/dialogflow-gen.go b/dialogflow/v2/dialogflow-gen.go
index ae1b3a2..ac3b9cf 100644
--- a/dialogflow/v2/dialogflow-gen.go
+++ b/dialogflow/v2/dialogflow-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dialogflow/v2beta1/dialogflow-gen.go b/dialogflow/v2beta1/dialogflow-gen.go
index 6f3d69b..4d02fbe 100644
--- a/dialogflow/v2beta1/dialogflow-gen.go
+++ b/dialogflow/v2beta1/dialogflow-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/digitalassetlinks/v1/digitalassetlinks-gen.go b/digitalassetlinks/v1/digitalassetlinks-gen.go
index bda0ecf..ce0e09c 100644
--- a/digitalassetlinks/v1/digitalassetlinks-gen.go
+++ b/digitalassetlinks/v1/digitalassetlinks-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/discovery/v1/discovery-gen.go b/discovery/v1/discovery-gen.go
index 76bf98b..6da0c65 100644
--- a/discovery/v1/discovery-gen.go
+++ b/discovery/v1/discovery-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dlp/v2/dlp-api.json b/dlp/v2/dlp-api.json
index 9690eb8..b9740d8 100644
--- a/dlp/v2/dlp-api.json
+++ b/dlp/v2/dlp-api.json
@@ -1486,7 +1486,7 @@
       }
     }
   },
-  "revision": "20181023",
+  "revision": "20181030",
   "rootUrl": "https://dlp.googleapis.com/",
   "schemas": {
     "GooglePrivacyDlpV2Action": {
@@ -3008,7 +3008,7 @@
       "id": "GooglePrivacyDlpV2InfoType",
       "properties": {
         "name": {
-          "description": "Name of the information type. Either a name of your choosing when\ncreating a CustomInfoType, or one of the names listed\nat https://cloud.google.com/dlp/docs/infotypes-reference when specifying\na built-in type.",
+          "description": "Name of the information type. Either a name of your choosing when\ncreating a CustomInfoType, or one of the names listed\nat https://cloud.google.com/dlp/docs/infotypes-reference when specifying\na built-in type. InfoType names should conform to the pattern\n[a-zA-Z0-9_]{1,64}.",
           "type": "string"
         }
       },
diff --git a/dlp/v2/dlp-gen.go b/dlp/v2/dlp-gen.go
index a9d21da..836da91 100644
--- a/dlp/v2/dlp-gen.go
+++ b/dlp/v2/dlp-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -3372,7 +3373,9 @@
 	// creating a CustomInfoType, or one of the names listed
 	// at https://cloud.google.com/dlp/docs/infotypes-reference when
 	// specifying
-	// a built-in type.
+	// a built-in type. InfoType names should conform to the
+	// pattern
+	// [a-zA-Z0-9_]{1,64}.
 	Name string `json:"name,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Name") to
diff --git a/dns/v1/dns-gen.go b/dns/v1/dns-gen.go
index 7933d9a..3e2e4de 100644
--- a/dns/v1/dns-gen.go
+++ b/dns/v1/dns-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dns/v1beta2/dns-gen.go b/dns/v1beta2/dns-gen.go
index da62607..44531fa 100644
--- a/dns/v1beta2/dns-gen.go
+++ b/dns/v1beta2/dns-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/dns/v2beta1/dns-gen.go b/dns/v2beta1/dns-gen.go
index 84d4a81..7de79cd 100644
--- a/dns/v2beta1/dns-gen.go
+++ b/dns/v2beta1/dns-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go b/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
index b184a13..6ebdb8d 100644
--- a/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
+++ b/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/doubleclicksearch/v2/doubleclicksearch-gen.go b/doubleclicksearch/v2/doubleclicksearch-gen.go
index ac695d9..f09a466 100644
--- a/doubleclicksearch/v2/doubleclicksearch-gen.go
+++ b/doubleclicksearch/v2/doubleclicksearch-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/drive/v2/drive-gen.go b/drive/v2/drive-gen.go
index fd76a4c..c349367 100644
--- a/drive/v2/drive-gen.go
+++ b/drive/v2/drive-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/drive/v3/drive-gen.go b/drive/v3/drive-gen.go
index e88ad71..d0e8a8b 100644
--- a/drive/v3/drive-gen.go
+++ b/drive/v3/drive-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/file/v1beta1/file-gen.go b/file/v1beta1/file-gen.go
index 0d0c871..3708434 100644
--- a/file/v1beta1/file-gen.go
+++ b/file/v1beta1/file-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
index 827d726..f08c77f 100644
--- a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
+++ b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/firebasehosting/v1beta1/firebasehosting-gen.go b/firebasehosting/v1beta1/firebasehosting-gen.go
index 6425f3a..397db40 100644
--- a/firebasehosting/v1beta1/firebasehosting-gen.go
+++ b/firebasehosting/v1beta1/firebasehosting-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/firebaserules/v1/firebaserules-gen.go b/firebaserules/v1/firebaserules-gen.go
index 922396b..3eb069c 100644
--- a/firebaserules/v1/firebaserules-gen.go
+++ b/firebaserules/v1/firebaserules-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/firestore/v1/firestore-api.json b/firestore/v1/firestore-api.json
index 0c21567..c24dc4a 100644
--- a/firestore/v1/firestore-api.json
+++ b/firestore/v1/firestore-api.json
@@ -110,7 +110,305 @@
     "projects": {
       "resources": {
         "databases": {
+          "methods": {
+            "exportDocuments": {
+              "description": "Exports a copy of all or a subset of documents from Google Cloud Firestore\nto another storage system, such as Google Cloud Storage. Recent updates to\ndocuments may not be reflected in the export. The export occurs in the\nbackground and its progress can be monitored and managed via the\nOperation resource that is created. The output of an export may only be\nused once the associated operation is done. If an export operation is\ncancelled before completion it may leave partial data behind in Google\nCloud Storage.",
+              "flatPath": "v1/projects/{projectsId}/databases/{databasesId}:exportDocuments",
+              "httpMethod": "POST",
+              "id": "firestore.projects.databases.exportDocuments",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Database to export. Should be of the form:\n`projects/{project_id}/databases/{database_id}`.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+/databases/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/{+name}:exportDocuments",
+              "request": {
+                "$ref": "GoogleFirestoreAdminV1ExportDocumentsRequest"
+              },
+              "response": {
+                "$ref": "GoogleLongrunningOperation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/datastore"
+              ]
+            },
+            "importDocuments": {
+              "description": "Imports documents into Google Cloud Firestore. Existing documents with the\nsame name are overwritten. The import occurs in the background and its\nprogress can be monitored and managed via the Operation resource that is\ncreated. If an ImportDocuments operation is cancelled, it is possible\nthat a subset of the data has already been imported to Cloud Firestore.",
+              "flatPath": "v1/projects/{projectsId}/databases/{databasesId}:importDocuments",
+              "httpMethod": "POST",
+              "id": "firestore.projects.databases.importDocuments",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "Database to import into. Should be of the form:\n`projects/{project_id}/databases/{database_id}`.",
+                  "location": "path",
+                  "pattern": "^projects/[^/]+/databases/[^/]+$",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "path": "v1/{+name}:importDocuments",
+              "request": {
+                "$ref": "GoogleFirestoreAdminV1ImportDocumentsRequest"
+              },
+              "response": {
+                "$ref": "GoogleLongrunningOperation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/datastore"
+              ]
+            }
+          },
           "resources": {
+            "collectionGroups": {
+              "resources": {
+                "fields": {
+                  "methods": {
+                    "get": {
+                      "description": "Gets the metadata and configuration for a Field.",
+                      "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/fields/{fieldsId}",
+                      "httpMethod": "GET",
+                      "id": "firestore.projects.databases.collectionGroups.fields.get",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "parameters": {
+                        "name": {
+                          "description": "A name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_id}`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/fields/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+name}",
+                      "response": {
+                        "$ref": "GoogleFirestoreAdminV1Field"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/datastore"
+                      ]
+                    },
+                    "list": {
+                      "description": "Lists the field configuration and metadata for this database.\n\nCurrently, FirestoreAdmin.ListFields only supports listing fields\nthat have been explicitly overridden. To issue this query, call\nFirestoreAdmin.ListFields with the filter set to\n`indexConfig.usesAncestorConfig:false`.",
+                      "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/fields",
+                      "httpMethod": "GET",
+                      "id": "firestore.projects.databases.collectionGroups.fields.list",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "filter": {
+                          "description": "The filter to apply to list results. Currently,\nFirestoreAdmin.ListFields only supports listing fields\nthat have been explicitly overridden. To issue this query, call\nFirestoreAdmin.ListFields with the filter set to\n`indexConfig.usesAncestorConfig:false`.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "pageSize": {
+                          "description": "The number of results to return.",
+                          "format": "int32",
+                          "location": "query",
+                          "type": "integer"
+                        },
+                        "pageToken": {
+                          "description": "A page token, returned from a previous call to\nFirestoreAdmin.ListFields, that may be used to get the next\npage of results.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "parent": {
+                          "description": "A parent name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+parent}/fields",
+                      "response": {
+                        "$ref": "GoogleFirestoreAdminV1ListFieldsResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/datastore"
+                      ]
+                    },
+                    "patch": {
+                      "description": "Updates a field configuration. Currently, field updates apply only to\nsingle field index configuration. However, calls to\nFirestoreAdmin.UpdateField should provide a field mask to avoid\nchanging any configuration that the caller isn't aware of. The field mask\nshould be specified as: `{ paths: \"index_config\" }`.\n\nThis call returns a google.longrunning.Operation which may be used to\ntrack the status of the field update. The metadata for\nthe operation will be the type FieldOperationMetadata.\n\nTo configure the default field settings for the database, use\nthe special `Field` with resource name:\n`projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`.",
+                      "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/fields/{fieldsId}",
+                      "httpMethod": "PATCH",
+                      "id": "firestore.projects.databases.collectionGroups.fields.patch",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "parameters": {
+                        "name": {
+                          "description": "A field name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`\n\nA field path may be a simple field name, e.g. `address` or a path to fields\nwithin map_value , e.g. `address.city`,\nor a special field path. The only valid special field is `*`, which\nrepresents any field.\n\nField paths may be quoted using ` (backtick). The only character that needs\nto be escaped within a quoted field path is the backtick character itself,\nescaped using a backslash. Special characters in field paths that\nmust be quoted include: `*`, `.`,\n``` (backtick), `[`, `]`, as well as any ascii symbolic characters.\n\nExamples:\n(Note: Comments here are written in markdown syntax, so there is an\n additional layer of backticks to represent a code block)\n`\\`address.city\\`` represents a field named `address.city`, not the map key\n`city` in the field `address`.\n`\\`*\\`` represents a field named `*`, not any field.\n\nA special `Field` contains the default indexing settings for all fields.\nThis field's resource name is:\n`projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`\nIndexes defined on this `Field` will be applied to all fields which do not\nhave their own `Field` index configuration.",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/fields/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        },
+                        "updateMask": {
+                          "description": "A mask, relative to the field. If specified, only configuration specified\nby this field_mask will be updated in the field.",
+                          "format": "google-fieldmask",
+                          "location": "query",
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+name}",
+                      "request": {
+                        "$ref": "GoogleFirestoreAdminV1Field"
+                      },
+                      "response": {
+                        "$ref": "GoogleLongrunningOperation"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/datastore"
+                      ]
+                    }
+                  }
+                },
+                "indexes": {
+                  "methods": {
+                    "create": {
+                      "description": "Creates a composite index. This returns a google.longrunning.Operation\nwhich may be used to track the status of the creation. The metadata for\nthe operation will be the type IndexOperationMetadata.",
+                      "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes",
+                      "httpMethod": "POST",
+                      "id": "firestore.projects.databases.collectionGroups.indexes.create",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "parent": {
+                          "description": "A parent name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+parent}/indexes",
+                      "request": {
+                        "$ref": "GoogleFirestoreAdminV1Index"
+                      },
+                      "response": {
+                        "$ref": "GoogleLongrunningOperation"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/datastore"
+                      ]
+                    },
+                    "delete": {
+                      "description": "Deletes a composite index.",
+                      "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes/{indexesId}",
+                      "httpMethod": "DELETE",
+                      "id": "firestore.projects.databases.collectionGroups.indexes.delete",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "parameters": {
+                        "name": {
+                          "description": "A name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{index_id}`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/indexes/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+name}",
+                      "response": {
+                        "$ref": "Empty"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/datastore"
+                      ]
+                    },
+                    "get": {
+                      "description": "Gets a composite index.",
+                      "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes/{indexesId}",
+                      "httpMethod": "GET",
+                      "id": "firestore.projects.databases.collectionGroups.indexes.get",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "parameters": {
+                        "name": {
+                          "description": "A name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{index_id}`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/indexes/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+name}",
+                      "response": {
+                        "$ref": "GoogleFirestoreAdminV1Index"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/datastore"
+                      ]
+                    },
+                    "list": {
+                      "description": "Lists composite indexes.",
+                      "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes",
+                      "httpMethod": "GET",
+                      "id": "firestore.projects.databases.collectionGroups.indexes.list",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "filter": {
+                          "description": "The filter to apply to list results.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "pageSize": {
+                          "description": "The number of results to return.",
+                          "format": "int32",
+                          "location": "query",
+                          "type": "integer"
+                        },
+                        "pageToken": {
+                          "description": "A page token, returned from a previous call to\nFirestoreAdmin.ListIndexes, that may be used to get the next\npage of results.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "parent": {
+                          "description": "A parent name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+parent}/indexes",
+                      "response": {
+                        "$ref": "GoogleFirestoreAdminV1ListIndexesResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/datastore"
+                      ]
+                    }
+                  }
+                }
+              }
+            },
             "operations": {
               "methods": {
                 "cancel": {
@@ -315,7 +613,7 @@
       }
     }
   },
-  "revision": "20180814",
+  "revision": "20181020",
   "rootUrl": "https://firestore.googleapis.com/",
   "schemas": {
     "Empty": {
@@ -324,6 +622,494 @@
       "properties": {},
       "type": "object"
     },
+    "GoogleFirestoreAdminV1ExportDocumentsMetadata": {
+      "description": "Metadata for google.longrunning.Operation results from\nFirestoreAdmin.ExportDocuments.",
+      "id": "GoogleFirestoreAdminV1ExportDocumentsMetadata",
+      "properties": {
+        "collectionIds": {
+          "description": "Which collection ids are being exported.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "endTime": {
+          "description": "The time this operation completed. Will be unset if operation still in\nprogress.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "operationState": {
+          "description": "The state of the export operation.",
+          "enum": [
+            "OPERATION_STATE_UNSPECIFIED",
+            "INITIALIZING",
+            "PROCESSING",
+            "CANCELLING",
+            "FINALIZING",
+            "SUCCESSFUL",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "enumDescriptions": [
+            "Unspecified.",
+            "Request is being prepared for processing.",
+            "Request is actively being processed.",
+            "Request is in the process of being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation on the operation.",
+            "Request has been processed and is in its finalization stage.",
+            "Request has completed successfully.",
+            "Request has finished being processed, but encountered an error.",
+            "Request has finished being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation."
+          ],
+          "type": "string"
+        },
+        "outputUriPrefix": {
+          "description": "Where the entities are being exported to.",
+          "type": "string"
+        },
+        "progressBytes": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in bytes, of this operation."
+        },
+        "progressDocuments": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in documents, of this operation."
+        },
+        "startTime": {
+          "description": "The time this operation started.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1ExportDocumentsRequest": {
+      "description": "The request for FirestoreAdmin.ExportDocuments.",
+      "id": "GoogleFirestoreAdminV1ExportDocumentsRequest",
+      "properties": {
+        "collectionIds": {
+          "description": "Which collection ids to export. Unspecified means all collections.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "outputUriPrefix": {
+          "description": "The output URI. Currently only supports Google Cloud Storage URIs of the\nform: `gs://BUCKET_NAME[/NAMESPACE_PATH]`, where `BUCKET_NAME` is the name\nof the Google Cloud Storage bucket and `NAMESPACE_PATH` is an optional\nGoogle Cloud Storage namespace path. When\nchoosing a name, be sure to consider Google Cloud Storage naming\nguidelines: https://cloud.google.com/storage/docs/naming.\nIf the URI is a bucket (without a namespace path), a prefix will be\ngenerated based on the start time.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1ExportDocumentsResponse": {
+      "description": "Returned in the google.longrunning.Operation response field.",
+      "id": "GoogleFirestoreAdminV1ExportDocumentsResponse",
+      "properties": {
+        "outputUriPrefix": {
+          "description": "Location of the output files. This can be used to begin an import\ninto Cloud Firestore (this project or another project) after the operation\ncompletes successfully.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1Field": {
+      "description": "Represents a single field in the database.\n\nFields are grouped by their \"Collection Group\", which represent all\ncollections in the database with the same id.",
+      "id": "GoogleFirestoreAdminV1Field",
+      "properties": {
+        "indexConfig": {
+          "$ref": "GoogleFirestoreAdminV1IndexConfig",
+          "description": "The index configuration for this field. If unset, field indexing will\nrevert to the configuration defined by the `ancestor_field`. To\nexplicitly remove all indexes for this field, specify an index config\nwith an empty list of indexes."
+        },
+        "name": {
+          "description": "A field name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`\n\nA field path may be a simple field name, e.g. `address` or a path to fields\nwithin map_value , e.g. `address.city`,\nor a special field path. The only valid special field is `*`, which\nrepresents any field.\n\nField paths may be quoted using ` (backtick). The only character that needs\nto be escaped within a quoted field path is the backtick character itself,\nescaped using a backslash. Special characters in field paths that\nmust be quoted include: `*`, `.`,\n``` (backtick), `[`, `]`, as well as any ascii symbolic characters.\n\nExamples:\n(Note: Comments here are written in markdown syntax, so there is an\n additional layer of backticks to represent a code block)\n`\\`address.city\\`` represents a field named `address.city`, not the map key\n`city` in the field `address`.\n`\\`*\\`` represents a field named `*`, not any field.\n\nA special `Field` contains the default indexing settings for all fields.\nThis field's resource name is:\n`projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`\nIndexes defined on this `Field` will be applied to all fields which do not\nhave their own `Field` index configuration.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1FieldOperationMetadata": {
+      "description": "Metadata for google.longrunning.Operation results from\nFirestoreAdmin.UpdateField.",
+      "id": "GoogleFirestoreAdminV1FieldOperationMetadata",
+      "properties": {
+        "endTime": {
+          "description": "The time this operation completed. Will be unset if operation still in\nprogress.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "field": {
+          "description": "The field resource that this operation is acting on. For example:\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`",
+          "type": "string"
+        },
+        "indexConfigDeltas": {
+          "description": "A list of IndexConfigDelta, which describe the intent of this\noperation.",
+          "items": {
+            "$ref": "GoogleFirestoreAdminV1IndexConfigDelta"
+          },
+          "type": "array"
+        },
+        "progressBytes": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in bytes, of this operation."
+        },
+        "progressDocuments": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in documents, of this operation."
+        },
+        "startTime": {
+          "description": "The time this operation started.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "description": "The state of the operation.",
+          "enum": [
+            "OPERATION_STATE_UNSPECIFIED",
+            "INITIALIZING",
+            "PROCESSING",
+            "CANCELLING",
+            "FINALIZING",
+            "SUCCESSFUL",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "enumDescriptions": [
+            "Unspecified.",
+            "Request is being prepared for processing.",
+            "Request is actively being processed.",
+            "Request is in the process of being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation on the operation.",
+            "Request has been processed and is in its finalization stage.",
+            "Request has completed successfully.",
+            "Request has finished being processed, but encountered an error.",
+            "Request has finished being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1ImportDocumentsMetadata": {
+      "description": "Metadata for google.longrunning.Operation results from\nFirestoreAdmin.ImportDocuments.",
+      "id": "GoogleFirestoreAdminV1ImportDocumentsMetadata",
+      "properties": {
+        "collectionIds": {
+          "description": "Which collection ids are being imported.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "endTime": {
+          "description": "The time this operation completed. Will be unset if operation still in\nprogress.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "inputUriPrefix": {
+          "description": "The location of the documents being imported.",
+          "type": "string"
+        },
+        "operationState": {
+          "description": "The state of the import operation.",
+          "enum": [
+            "OPERATION_STATE_UNSPECIFIED",
+            "INITIALIZING",
+            "PROCESSING",
+            "CANCELLING",
+            "FINALIZING",
+            "SUCCESSFUL",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "enumDescriptions": [
+            "Unspecified.",
+            "Request is being prepared for processing.",
+            "Request is actively being processed.",
+            "Request is in the process of being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation on the operation.",
+            "Request has been processed and is in its finalization stage.",
+            "Request has completed successfully.",
+            "Request has finished being processed, but encountered an error.",
+            "Request has finished being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation."
+          ],
+          "type": "string"
+        },
+        "progressBytes": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in bytes, of this operation."
+        },
+        "progressDocuments": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in documents, of this operation."
+        },
+        "startTime": {
+          "description": "The time this operation started.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1ImportDocumentsRequest": {
+      "description": "The request for FirestoreAdmin.ImportDocuments.",
+      "id": "GoogleFirestoreAdminV1ImportDocumentsRequest",
+      "properties": {
+        "collectionIds": {
+          "description": "Which collection ids to import. Unspecified means all collections included\nin the import.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "inputUriPrefix": {
+          "description": "Location of the exported files.\nThis must match the output_uri_prefix of an ExportDocumentsResponse from\nan export that has completed successfully.\nSee:\ngoogle.firestore.admin.v1.ExportDocumentsResponse.output_uri_prefix.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1Index": {
+      "description": "Cloud Firestore indexes enable simple and complex queries against\ndocuments in a database.",
+      "id": "GoogleFirestoreAdminV1Index",
+      "properties": {
+        "fields": {
+          "description": "The fields supported by this index.\n\nFor composite indexes, this is always 2 or more fields.\nThe last field entry is always for the field path `__name__`. If, on\ncreation, `__name__` was not specified as the last field, it will be added\nautomatically with the same direction as that of the last field defined. If\nthe final field in a composite index is not directional, the `__name__`\nwill be ordered ASCENDING (unless explicitly specified).\n\nFor single field indexes, this will always be exactly one entry with a\nfield path equal to the field path of the associated field.",
+          "items": {
+            "$ref": "GoogleFirestoreAdminV1IndexField"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "Output only.\nA server defined name for this index.\nThe form of this name for composite indexes will be:\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{composite_index_id}`\nFor single field indexes, this field will be empty.",
+          "type": "string"
+        },
+        "queryScope": {
+          "description": "Indexes with a collection query scope specified allow queries\nagainst a collection that is the child of a specific document, specified at\nquery time, and that has the same collection id.\n\nIndexes with a collection group query scope specified allow queries against\nall collections descended from a specific document, specified at query\ntime, and that have the same collection id as this index.",
+          "enum": [
+            "QUERY_SCOPE_UNSPECIFIED",
+            "COLLECTION"
+          ],
+          "enumDescriptions": [
+            "The query scope is unspecified. Not a valid option.",
+            "Indexes with a collection query scope specified allow queries\nagainst a collection that is the child of a specific document, specified\nat query time, and that has the collection id specified by the index."
+          ],
+          "type": "string"
+        },
+        "state": {
+          "description": "Output only.\nThe serving state of the index.",
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "CREATING",
+            "READY",
+            "NEEDS_REPAIR"
+          ],
+          "enumDescriptions": [
+            "The state is unspecified.",
+            "The index is being created.\nThere is an active long-running operation for the index.\nThe index is updated when writing a document.\nSome index data may exist.",
+            "The index is ready to be used.\nThe index is updated when writing a document.\nThe index is fully populated from all stored documents it applies to.",
+            "The index was being created, but something went wrong.\nThere is no active long-running operation for the index,\nand the most recently finished long-running operation failed.\nThe index is not updated when writing a document.\nSome index data may exist.\nUse the google.longrunning.Operations API to determine why the operation\nthat last attempted to create this index failed, then re-create the\nindex."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1IndexConfig": {
+      "description": "The index configuration for this field.",
+      "id": "GoogleFirestoreAdminV1IndexConfig",
+      "properties": {
+        "ancestorField": {
+          "description": "Output only.\nSpecifies the resource name of the `Field` from which this field's\nindex configuration is set (when `uses_ancestor_config` is true),\nor from which it *would* be set if this field had no index configuration\n(when `uses_ancestor_config` is false).",
+          "type": "string"
+        },
+        "indexes": {
+          "description": "The indexes supported for this field.",
+          "items": {
+            "$ref": "GoogleFirestoreAdminV1Index"
+          },
+          "type": "array"
+        },
+        "reverting": {
+          "description": "Output only\nWhen true, the `Field`'s index configuration is in the process of being\nreverted. Once complete, the index config will transition to the same\nstate as the field specified by `ancestor_field`, at which point\n`uses_ancestor_config` will be `true` and `reverting` will be `false`.",
+          "type": "boolean"
+        },
+        "usesAncestorConfig": {
+          "description": "Output only.\nWhen true, the `Field`'s index configuration is set from the\nconfiguration specified by the `ancestor_field`.\nWhen false, the `Field`'s index configuration is defined explicitly.",
+          "type": "boolean"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1IndexConfigDelta": {
+      "description": "Information about an index configuration change.",
+      "id": "GoogleFirestoreAdminV1IndexConfigDelta",
+      "properties": {
+        "changeType": {
+          "description": "Specifies how the index is changing.",
+          "enum": [
+            "CHANGE_TYPE_UNSPECIFIED",
+            "ADD",
+            "REMOVE"
+          ],
+          "enumDescriptions": [
+            "The type of change is not specified or known.",
+            "The single field index is being added.",
+            "The single field index is being removed."
+          ],
+          "type": "string"
+        },
+        "index": {
+          "$ref": "GoogleFirestoreAdminV1Index",
+          "description": "The index being changed."
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1IndexField": {
+      "description": "A field in an index.\nThe field_path describes which field is indexed, the value_mode describes\nhow the field value is indexed.",
+      "id": "GoogleFirestoreAdminV1IndexField",
+      "properties": {
+        "arrayConfig": {
+          "description": "Indicates that this field supports operations on `array_value`s.",
+          "enum": [
+            "ARRAY_CONFIG_UNSPECIFIED",
+            "CONTAINS"
+          ],
+          "enumDescriptions": [
+            "The index does not support additional array queries.",
+            "The index supports array containment queries."
+          ],
+          "type": "string"
+        },
+        "fieldPath": {
+          "description": "Can be __name__.\nFor single field indexes, this must match the name of the field or may\nbe omitted.",
+          "type": "string"
+        },
+        "order": {
+          "description": "Indicates that this field supports ordering by the specified order or\ncomparing using =, \u003c, \u003c=, \u003e, \u003e=.",
+          "enum": [
+            "ORDER_UNSPECIFIED",
+            "ASCENDING",
+            "DESCENDING"
+          ],
+          "enumDescriptions": [
+            "The ordering is unspecified. Not a valid option.",
+            "The field is ordered by ascending field value.",
+            "The field is ordered by descending field value."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1IndexOperationMetadata": {
+      "description": "Metadata for google.longrunning.Operation results from\nFirestoreAdmin.CreateIndex.",
+      "id": "GoogleFirestoreAdminV1IndexOperationMetadata",
+      "properties": {
+        "endTime": {
+          "description": "The time this operation completed. Will be unset if operation still in\nprogress.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "index": {
+          "description": "The index resource that this operation is acting on. For example:\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{index_id}`",
+          "type": "string"
+        },
+        "progressBytes": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in bytes, of this operation."
+        },
+        "progressDocuments": {
+          "$ref": "GoogleFirestoreAdminV1Progress",
+          "description": "The progress, in documents, of this operation."
+        },
+        "startTime": {
+          "description": "The time this operation started.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "description": "The state of the operation.",
+          "enum": [
+            "OPERATION_STATE_UNSPECIFIED",
+            "INITIALIZING",
+            "PROCESSING",
+            "CANCELLING",
+            "FINALIZING",
+            "SUCCESSFUL",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "enumDescriptions": [
+            "Unspecified.",
+            "Request is being prepared for processing.",
+            "Request is actively being processed.",
+            "Request is in the process of being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation on the operation.",
+            "Request has been processed and is in its finalization stage.",
+            "Request has completed successfully.",
+            "Request has finished being processed, but encountered an error.",
+            "Request has finished being cancelled after user called\ngoogle.longrunning.Operations.CancelOperation."
+          ],
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1ListFieldsResponse": {
+      "description": "The response for FirestoreAdmin.ListFields.",
+      "id": "GoogleFirestoreAdminV1ListFieldsResponse",
+      "properties": {
+        "fields": {
+          "description": "The requested fields.",
+          "items": {
+            "$ref": "GoogleFirestoreAdminV1Field"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "A page token that may be used to request another page of results. If blank,\nthis is the last page.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1ListIndexesResponse": {
+      "description": "The response for FirestoreAdmin.ListIndexes.",
+      "id": "GoogleFirestoreAdminV1ListIndexesResponse",
+      "properties": {
+        "indexes": {
+          "description": "The requested indexes.",
+          "items": {
+            "$ref": "GoogleFirestoreAdminV1Index"
+          },
+          "type": "array"
+        },
+        "nextPageToken": {
+          "description": "A page token that may be used to request another page of results. If blank,\nthis is the last page.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1LocationMetadata": {
+      "description": "The metadata message for google.cloud.location.Location.metadata.",
+      "id": "GoogleFirestoreAdminV1LocationMetadata",
+      "properties": {},
+      "type": "object"
+    },
+    "GoogleFirestoreAdminV1Progress": {
+      "description": "Describes the progress of the operation.\nUnit of work is generic and must be interpreted based on where Progress\nis used.",
+      "id": "GoogleFirestoreAdminV1Progress",
+      "properties": {
+        "completedWork": {
+          "description": "The amount of work completed.",
+          "format": "int64",
+          "type": "string"
+        },
+        "estimatedWork": {
+          "description": "The amount of work estimated.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleLongrunningCancelOperationRequest": {
       "description": "The request message for Operations.CancelOperation.",
       "id": "GoogleLongrunningCancelOperationRequest",
diff --git a/firestore/v1/firestore-gen.go b/firestore/v1/firestore-gen.go
index a927737..c2ac736 100644
--- a/firestore/v1/firestore-gen.go
+++ b/firestore/v1/firestore-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -97,6 +98,7 @@
 
 func NewProjectsDatabasesService(s *Service) *ProjectsDatabasesService {
 	rs := &ProjectsDatabasesService{s: s}
+	rs.CollectionGroups = NewProjectsDatabasesCollectionGroupsService(s)
 	rs.Operations = NewProjectsDatabasesOperationsService(s)
 	return rs
 }
@@ -104,9 +106,44 @@
 type ProjectsDatabasesService struct {
 	s *Service
 
+	CollectionGroups *ProjectsDatabasesCollectionGroupsService
+
 	Operations *ProjectsDatabasesOperationsService
 }
 
+func NewProjectsDatabasesCollectionGroupsService(s *Service) *ProjectsDatabasesCollectionGroupsService {
+	rs := &ProjectsDatabasesCollectionGroupsService{s: s}
+	rs.Fields = NewProjectsDatabasesCollectionGroupsFieldsService(s)
+	rs.Indexes = NewProjectsDatabasesCollectionGroupsIndexesService(s)
+	return rs
+}
+
+type ProjectsDatabasesCollectionGroupsService struct {
+	s *Service
+
+	Fields *ProjectsDatabasesCollectionGroupsFieldsService
+
+	Indexes *ProjectsDatabasesCollectionGroupsIndexesService
+}
+
+func NewProjectsDatabasesCollectionGroupsFieldsService(s *Service) *ProjectsDatabasesCollectionGroupsFieldsService {
+	rs := &ProjectsDatabasesCollectionGroupsFieldsService{s: s}
+	return rs
+}
+
+type ProjectsDatabasesCollectionGroupsFieldsService struct {
+	s *Service
+}
+
+func NewProjectsDatabasesCollectionGroupsIndexesService(s *Service) *ProjectsDatabasesCollectionGroupsIndexesService {
+	rs := &ProjectsDatabasesCollectionGroupsIndexesService{s: s}
+	return rs
+}
+
+type ProjectsDatabasesCollectionGroupsIndexesService struct {
+	s *Service
+}
+
 func NewProjectsDatabasesOperationsService(s *Service) *ProjectsDatabasesOperationsService {
 	rs := &ProjectsDatabasesOperationsService{s: s}
 	return rs
@@ -143,6 +180,851 @@
 	googleapi.ServerResponse `json:"-"`
 }
 
+// GoogleFirestoreAdminV1ExportDocumentsMetadata: Metadata for
+// google.longrunning.Operation results
+// from
+// FirestoreAdmin.ExportDocuments.
+type GoogleFirestoreAdminV1ExportDocumentsMetadata struct {
+	// CollectionIds: Which collection ids are being exported.
+	CollectionIds []string `json:"collectionIds,omitempty"`
+
+	// EndTime: The time this operation completed. Will be unset if
+	// operation still in
+	// progress.
+	EndTime string `json:"endTime,omitempty"`
+
+	// OperationState: The state of the export operation.
+	//
+	// Possible values:
+	//   "OPERATION_STATE_UNSPECIFIED" - Unspecified.
+	//   "INITIALIZING" - Request is being prepared for processing.
+	//   "PROCESSING" - Request is actively being processed.
+	//   "CANCELLING" - Request is in the process of being cancelled after
+	// user called
+	// google.longrunning.Operations.CancelOperation on the operation.
+	//   "FINALIZING" - Request has been processed and is in its
+	// finalization stage.
+	//   "SUCCESSFUL" - Request has completed successfully.
+	//   "FAILED" - Request has finished being processed, but encountered an
+	// error.
+	//   "CANCELLED" - Request has finished being cancelled after user
+	// called
+	// google.longrunning.Operations.CancelOperation.
+	OperationState string `json:"operationState,omitempty"`
+
+	// OutputUriPrefix: Where the entities are being exported to.
+	OutputUriPrefix string `json:"outputUriPrefix,omitempty"`
+
+	// ProgressBytes: The progress, in bytes, of this operation.
+	ProgressBytes *GoogleFirestoreAdminV1Progress `json:"progressBytes,omitempty"`
+
+	// ProgressDocuments: The progress, in documents, of this operation.
+	ProgressDocuments *GoogleFirestoreAdminV1Progress `json:"progressDocuments,omitempty"`
+
+	// StartTime: The time this operation started.
+	StartTime string `json:"startTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CollectionIds") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CollectionIds") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1ExportDocumentsMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1ExportDocumentsMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1ExportDocumentsRequest: The request for
+// FirestoreAdmin.ExportDocuments.
+type GoogleFirestoreAdminV1ExportDocumentsRequest struct {
+	// CollectionIds: Which collection ids to export. Unspecified means all
+	// collections.
+	CollectionIds []string `json:"collectionIds,omitempty"`
+
+	// OutputUriPrefix: The output URI. Currently only supports Google Cloud
+	// Storage URIs of the
+	// form: `gs://BUCKET_NAME[/NAMESPACE_PATH]`, where `BUCKET_NAME` is the
+	// name
+	// of the Google Cloud Storage bucket and `NAMESPACE_PATH` is an
+	// optional
+	// Google Cloud Storage namespace path. When
+	// choosing a name, be sure to consider Google Cloud Storage
+	// naming
+	// guidelines: https://cloud.google.com/storage/docs/naming.
+	// If the URI is a bucket (without a namespace path), a prefix will
+	// be
+	// generated based on the start time.
+	OutputUriPrefix string `json:"outputUriPrefix,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CollectionIds") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CollectionIds") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1ExportDocumentsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1ExportDocumentsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1ExportDocumentsResponse: Returned in the
+// google.longrunning.Operation response field.
+type GoogleFirestoreAdminV1ExportDocumentsResponse struct {
+	// OutputUriPrefix: Location of the output files. This can be used to
+	// begin an import
+	// into Cloud Firestore (this project or another project) after the
+	// operation
+	// completes successfully.
+	OutputUriPrefix string `json:"outputUriPrefix,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OutputUriPrefix") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "OutputUriPrefix") 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 *GoogleFirestoreAdminV1ExportDocumentsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1ExportDocumentsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1Field: Represents a single field in the
+// database.
+//
+// Fields are grouped by their "Collection Group", which represent
+// all
+// collections in the database with the same id.
+type GoogleFirestoreAdminV1Field struct {
+	// IndexConfig: The index configuration for this field. If unset, field
+	// indexing will
+	// revert to the configuration defined by the `ancestor_field`.
+	// To
+	// explicitly remove all indexes for this field, specify an index
+	// config
+	// with an empty list of indexes.
+	IndexConfig *GoogleFirestoreAdminV1IndexConfig `json:"indexConfig,omitempty"`
+
+	// Name: A field name of the
+	// form
+	// `projects/{project_id}/databases/{database_id}/collectionGroups/{
+	// collection_id}/fields/{field_path}`
+	//
+	// A field path may be a simple field name, e.g. `address` or a path to
+	// fields
+	// within map_value , e.g. `address.city`,
+	// or a special field path. The only valid special field is `*`,
+	// which
+	// represents any field.
+	//
+	// Field paths may be quoted using ` (backtick). The only character that
+	// needs
+	// to be escaped within a quoted field path is the backtick character
+	// itself,
+	// escaped using a backslash. Special characters in field paths
+	// that
+	// must be quoted include: `*`, `.`,
+	// ``` (backtick), `[`, `]`, as well as any ascii symbolic
+	// characters.
+	//
+	// Examples:
+	// (Note: Comments here are written in markdown syntax, so there is an
+	//  additional layer of backticks to represent a code
+	// block)
+	// `\`address.city\`` represents a field named `address.city`, not the
+	// map key
+	// `city` in the field `address`.
+	// `\`*\`` represents a field named `*`, not any field.
+	//
+	// A special `Field` contains the default indexing settings for all
+	// fields.
+	// This field's resource name
+	// is:
+	// `projects/{project_id}/databases/{database_id}/collectionGroups/__
+	// default__/fields/*`
+	// Indexes defined on this `Field` will be applied to all fields which
+	// do not
+	// have their own `Field` index configuration.
+	Name string `json:"name,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexConfig") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexConfig") 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 *GoogleFirestoreAdminV1Field) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1Field
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1FieldOperationMetadata: Metadata for
+// google.longrunning.Operation results from
+// FirestoreAdmin.UpdateField.
+type GoogleFirestoreAdminV1FieldOperationMetadata struct {
+	// EndTime: The time this operation completed. Will be unset if
+	// operation still in
+	// progress.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Field: The field resource that this operation is acting on. For
+	// example:
+	// `projects/{project_id}/databases/{database_id}/collectionGrou
+	// ps/{collection_id}/fields/{field_path}`
+	Field string `json:"field,omitempty"`
+
+	// IndexConfigDeltas: A list of IndexConfigDelta, which describe the
+	// intent of this
+	// operation.
+	IndexConfigDeltas []*GoogleFirestoreAdminV1IndexConfigDelta `json:"indexConfigDeltas,omitempty"`
+
+	// ProgressBytes: The progress, in bytes, of this operation.
+	ProgressBytes *GoogleFirestoreAdminV1Progress `json:"progressBytes,omitempty"`
+
+	// ProgressDocuments: The progress, in documents, of this operation.
+	ProgressDocuments *GoogleFirestoreAdminV1Progress `json:"progressDocuments,omitempty"`
+
+	// StartTime: The time this operation started.
+	StartTime string `json:"startTime,omitempty"`
+
+	// State: The state of the operation.
+	//
+	// Possible values:
+	//   "OPERATION_STATE_UNSPECIFIED" - Unspecified.
+	//   "INITIALIZING" - Request is being prepared for processing.
+	//   "PROCESSING" - Request is actively being processed.
+	//   "CANCELLING" - Request is in the process of being cancelled after
+	// user called
+	// google.longrunning.Operations.CancelOperation on the operation.
+	//   "FINALIZING" - Request has been processed and is in its
+	// finalization stage.
+	//   "SUCCESSFUL" - Request has completed successfully.
+	//   "FAILED" - Request has finished being processed, but encountered an
+	// error.
+	//   "CANCELLED" - Request has finished being cancelled after user
+	// called
+	// google.longrunning.Operations.CancelOperation.
+	State string `json:"state,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EndTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EndTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1FieldOperationMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1FieldOperationMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1ImportDocumentsMetadata: Metadata for
+// google.longrunning.Operation results
+// from
+// FirestoreAdmin.ImportDocuments.
+type GoogleFirestoreAdminV1ImportDocumentsMetadata struct {
+	// CollectionIds: Which collection ids are being imported.
+	CollectionIds []string `json:"collectionIds,omitempty"`
+
+	// EndTime: The time this operation completed. Will be unset if
+	// operation still in
+	// progress.
+	EndTime string `json:"endTime,omitempty"`
+
+	// InputUriPrefix: The location of the documents being imported.
+	InputUriPrefix string `json:"inputUriPrefix,omitempty"`
+
+	// OperationState: The state of the import operation.
+	//
+	// Possible values:
+	//   "OPERATION_STATE_UNSPECIFIED" - Unspecified.
+	//   "INITIALIZING" - Request is being prepared for processing.
+	//   "PROCESSING" - Request is actively being processed.
+	//   "CANCELLING" - Request is in the process of being cancelled after
+	// user called
+	// google.longrunning.Operations.CancelOperation on the operation.
+	//   "FINALIZING" - Request has been processed and is in its
+	// finalization stage.
+	//   "SUCCESSFUL" - Request has completed successfully.
+	//   "FAILED" - Request has finished being processed, but encountered an
+	// error.
+	//   "CANCELLED" - Request has finished being cancelled after user
+	// called
+	// google.longrunning.Operations.CancelOperation.
+	OperationState string `json:"operationState,omitempty"`
+
+	// ProgressBytes: The progress, in bytes, of this operation.
+	ProgressBytes *GoogleFirestoreAdminV1Progress `json:"progressBytes,omitempty"`
+
+	// ProgressDocuments: The progress, in documents, of this operation.
+	ProgressDocuments *GoogleFirestoreAdminV1Progress `json:"progressDocuments,omitempty"`
+
+	// StartTime: The time this operation started.
+	StartTime string `json:"startTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CollectionIds") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CollectionIds") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1ImportDocumentsMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1ImportDocumentsMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1ImportDocumentsRequest: The request for
+// FirestoreAdmin.ImportDocuments.
+type GoogleFirestoreAdminV1ImportDocumentsRequest struct {
+	// CollectionIds: Which collection ids to import. Unspecified means all
+	// collections included
+	// in the import.
+	CollectionIds []string `json:"collectionIds,omitempty"`
+
+	// InputUriPrefix: Location of the exported files.
+	// This must match the output_uri_prefix of an ExportDocumentsResponse
+	// from
+	// an export that has completed
+	// successfully.
+	// See:
+	// google.firestore.admin.v1.ExportDocumentsResponse.o
+	// utput_uri_prefix.
+	InputUriPrefix string `json:"inputUriPrefix,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CollectionIds") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CollectionIds") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1ImportDocumentsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1ImportDocumentsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1Index: Cloud Firestore indexes enable simple
+// and complex queries against
+// documents in a database.
+type GoogleFirestoreAdminV1Index struct {
+	// Fields: The fields supported by this index.
+	//
+	// For composite indexes, this is always 2 or more fields.
+	// The last field entry is always for the field path `__name__`. If,
+	// on
+	// creation, `__name__` was not specified as the last field, it will be
+	// added
+	// automatically with the same direction as that of the last field
+	// defined. If
+	// the final field in a composite index is not directional, the
+	// `__name__`
+	// will be ordered ASCENDING (unless explicitly specified).
+	//
+	// For single field indexes, this will always be exactly one entry with
+	// a
+	// field path equal to the field path of the associated field.
+	Fields []*GoogleFirestoreAdminV1IndexField `json:"fields,omitempty"`
+
+	// Name: Output only.
+	// A server defined name for this index.
+	// The form of this name for composite indexes will
+	// be:
+	// `projects/{project_id}/databases/{database_id}/collectionGroups/{c
+	// ollection_id}/indexes/{composite_index_id}`
+	// For single field indexes, this field will be empty.
+	Name string `json:"name,omitempty"`
+
+	// QueryScope: Indexes with a collection query scope specified allow
+	// queries
+	// against a collection that is the child of a specific document,
+	// specified at
+	// query time, and that has the same collection id.
+	//
+	// Indexes with a collection group query scope specified allow queries
+	// against
+	// all collections descended from a specific document, specified at
+	// query
+	// time, and that have the same collection id as this index.
+	//
+	// Possible values:
+	//   "QUERY_SCOPE_UNSPECIFIED" - The query scope is unspecified. Not a
+	// valid option.
+	//   "COLLECTION" - Indexes with a collection query scope specified
+	// allow queries
+	// against a collection that is the child of a specific document,
+	// specified
+	// at query time, and that has the collection id specified by the index.
+	QueryScope string `json:"queryScope,omitempty"`
+
+	// State: Output only.
+	// The serving state of the index.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - The state is unspecified.
+	//   "CREATING" - The index is being created.
+	// There is an active long-running operation for the index.
+	// The index is updated when writing a document.
+	// Some index data may exist.
+	//   "READY" - The index is ready to be used.
+	// The index is updated when writing a document.
+	// The index is fully populated from all stored documents it applies to.
+	//   "NEEDS_REPAIR" - The index was being created, but something went
+	// wrong.
+	// There is no active long-running operation for the index,
+	// and the most recently finished long-running operation failed.
+	// The index is not updated when writing a document.
+	// Some index data may exist.
+	// Use the google.longrunning.Operations API to determine why the
+	// operation
+	// that last attempted to create this index failed, then re-create
+	// the
+	// index.
+	State string `json:"state,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Fields") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Fields") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1Index) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1Index
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1IndexConfig: The index configuration for this
+// field.
+type GoogleFirestoreAdminV1IndexConfig struct {
+	// AncestorField: Output only.
+	// Specifies the resource name of the `Field` from which this
+	// field's
+	// index configuration is set (when `uses_ancestor_config` is true),
+	// or from which it *would* be set if this field had no index
+	// configuration
+	// (when `uses_ancestor_config` is false).
+	AncestorField string `json:"ancestorField,omitempty"`
+
+	// Indexes: The indexes supported for this field.
+	Indexes []*GoogleFirestoreAdminV1Index `json:"indexes,omitempty"`
+
+	// Reverting: Output only
+	// When true, the `Field`'s index configuration is in the process of
+	// being
+	// reverted. Once complete, the index config will transition to the
+	// same
+	// state as the field specified by `ancestor_field`, at which
+	// point
+	// `uses_ancestor_config` will be `true` and `reverting` will be
+	// `false`.
+	Reverting bool `json:"reverting,omitempty"`
+
+	// UsesAncestorConfig: Output only.
+	// When true, the `Field`'s index configuration is set from
+	// the
+	// configuration specified by the `ancestor_field`.
+	// When false, the `Field`'s index configuration is defined explicitly.
+	UsesAncestorConfig bool `json:"usesAncestorConfig,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AncestorField") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "AncestorField") 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 *GoogleFirestoreAdminV1IndexConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1IndexConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1IndexConfigDelta: Information about an index
+// configuration change.
+type GoogleFirestoreAdminV1IndexConfigDelta struct {
+	// ChangeType: Specifies how the index is changing.
+	//
+	// Possible values:
+	//   "CHANGE_TYPE_UNSPECIFIED" - The type of change is not specified or
+	// known.
+	//   "ADD" - The single field index is being added.
+	//   "REMOVE" - The single field index is being removed.
+	ChangeType string `json:"changeType,omitempty"`
+
+	// Index: The index being changed.
+	Index *GoogleFirestoreAdminV1Index `json:"index,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChangeType") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ChangeType") 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 *GoogleFirestoreAdminV1IndexConfigDelta) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1IndexConfigDelta
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1IndexField: A field in an index.
+// The field_path describes which field is indexed, the value_mode
+// describes
+// how the field value is indexed.
+type GoogleFirestoreAdminV1IndexField struct {
+	// ArrayConfig: Indicates that this field supports operations on
+	// `array_value`s.
+	//
+	// Possible values:
+	//   "ARRAY_CONFIG_UNSPECIFIED" - The index does not support additional
+	// array queries.
+	//   "CONTAINS" - The index supports array containment queries.
+	ArrayConfig string `json:"arrayConfig,omitempty"`
+
+	// FieldPath: Can be __name__.
+	// For single field indexes, this must match the name of the field or
+	// may
+	// be omitted.
+	FieldPath string `json:"fieldPath,omitempty"`
+
+	// Order: Indicates that this field supports ordering by the specified
+	// order or
+	// comparing using =, <, <=, >, >=.
+	//
+	// Possible values:
+	//   "ORDER_UNSPECIFIED" - The ordering is unspecified. Not a valid
+	// option.
+	//   "ASCENDING" - The field is ordered by ascending field value.
+	//   "DESCENDING" - The field is ordered by descending field value.
+	Order string `json:"order,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ArrayConfig") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ArrayConfig") 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 *GoogleFirestoreAdminV1IndexField) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1IndexField
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1IndexOperationMetadata: Metadata for
+// google.longrunning.Operation results from
+// FirestoreAdmin.CreateIndex.
+type GoogleFirestoreAdminV1IndexOperationMetadata struct {
+	// EndTime: The time this operation completed. Will be unset if
+	// operation still in
+	// progress.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Index: The index resource that this operation is acting on. For
+	// example:
+	// `projects/{project_id}/databases/{database_id}/collectionGrou
+	// ps/{collection_id}/indexes/{index_id}`
+	Index string `json:"index,omitempty"`
+
+	// ProgressBytes: The progress, in bytes, of this operation.
+	ProgressBytes *GoogleFirestoreAdminV1Progress `json:"progressBytes,omitempty"`
+
+	// ProgressDocuments: The progress, in documents, of this operation.
+	ProgressDocuments *GoogleFirestoreAdminV1Progress `json:"progressDocuments,omitempty"`
+
+	// StartTime: The time this operation started.
+	StartTime string `json:"startTime,omitempty"`
+
+	// State: The state of the operation.
+	//
+	// Possible values:
+	//   "OPERATION_STATE_UNSPECIFIED" - Unspecified.
+	//   "INITIALIZING" - Request is being prepared for processing.
+	//   "PROCESSING" - Request is actively being processed.
+	//   "CANCELLING" - Request is in the process of being cancelled after
+	// user called
+	// google.longrunning.Operations.CancelOperation on the operation.
+	//   "FINALIZING" - Request has been processed and is in its
+	// finalization stage.
+	//   "SUCCESSFUL" - Request has completed successfully.
+	//   "FAILED" - Request has finished being processed, but encountered an
+	// error.
+	//   "CANCELLED" - Request has finished being cancelled after user
+	// called
+	// google.longrunning.Operations.CancelOperation.
+	State string `json:"state,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EndTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EndTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1IndexOperationMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1IndexOperationMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1ListFieldsResponse: The response for
+// FirestoreAdmin.ListFields.
+type GoogleFirestoreAdminV1ListFieldsResponse struct {
+	// Fields: The requested fields.
+	Fields []*GoogleFirestoreAdminV1Field `json:"fields,omitempty"`
+
+	// NextPageToken: A page token that may be used to request another page
+	// of results. If blank,
+	// this is the last page.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Fields") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Fields") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleFirestoreAdminV1ListFieldsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1ListFieldsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1ListIndexesResponse: The response for
+// FirestoreAdmin.ListIndexes.
+type GoogleFirestoreAdminV1ListIndexesResponse struct {
+	// Indexes: The requested indexes.
+	Indexes []*GoogleFirestoreAdminV1Index `json:"indexes,omitempty"`
+
+	// NextPageToken: A page token that may be used to request another page
+	// of results. If blank,
+	// this is the last page.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Indexes") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Indexes") 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 *GoogleFirestoreAdminV1ListIndexesResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1ListIndexesResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleFirestoreAdminV1LocationMetadata: The metadata message for
+// google.cloud.location.Location.metadata.
+type GoogleFirestoreAdminV1LocationMetadata struct {
+}
+
+// GoogleFirestoreAdminV1Progress: Describes the progress of the
+// operation.
+// Unit of work is generic and must be interpreted based on where
+// Progress
+// is used.
+type GoogleFirestoreAdminV1Progress struct {
+	// CompletedWork: The amount of work completed.
+	CompletedWork int64 `json:"completedWork,omitempty,string"`
+
+	// EstimatedWork: The amount of work estimated.
+	EstimatedWork int64 `json:"estimatedWork,omitempty,string"`
+
+	// ForceSendFields is a list of field names (e.g. "CompletedWork") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "CompletedWork") 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 *GoogleFirestoreAdminV1Progress) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleFirestoreAdminV1Progress
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleLongrunningCancelOperationRequest: The request message for
 // Operations.CancelOperation.
 type GoogleLongrunningCancelOperationRequest struct {
@@ -469,6 +1351,1471 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// method id "firestore.projects.databases.exportDocuments":
+
+type ProjectsDatabasesExportDocumentsCall struct {
+	s                                            *Service
+	name                                         string
+	googlefirestoreadminv1exportdocumentsrequest *GoogleFirestoreAdminV1ExportDocumentsRequest
+	urlParams_                                   gensupport.URLParams
+	ctx_                                         context.Context
+	header_                                      http.Header
+}
+
+// ExportDocuments: Exports a copy of all or a subset of documents from
+// Google Cloud Firestore
+// to another storage system, such as Google Cloud Storage. Recent
+// updates to
+// documents may not be reflected in the export. The export occurs in
+// the
+// background and its progress can be monitored and managed via
+// the
+// Operation resource that is created. The output of an export may only
+// be
+// used once the associated operation is done. If an export operation
+// is
+// cancelled before completion it may leave partial data behind in
+// Google
+// Cloud Storage.
+func (r *ProjectsDatabasesService) ExportDocuments(name string, googlefirestoreadminv1exportdocumentsrequest *GoogleFirestoreAdminV1ExportDocumentsRequest) *ProjectsDatabasesExportDocumentsCall {
+	c := &ProjectsDatabasesExportDocumentsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.googlefirestoreadminv1exportdocumentsrequest = googlefirestoreadminv1exportdocumentsrequest
+	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 *ProjectsDatabasesExportDocumentsCall) Fields(s ...googleapi.Field) *ProjectsDatabasesExportDocumentsCall {
+	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 *ProjectsDatabasesExportDocumentsCall) Context(ctx context.Context) *ProjectsDatabasesExportDocumentsCall {
+	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 *ProjectsDatabasesExportDocumentsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesExportDocumentsCall) 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.googlefirestoreadminv1exportdocumentsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:exportDocuments")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.exportDocuments" call.
+// Exactly one of *GoogleLongrunningOperation or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *GoogleLongrunningOperation.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 *ProjectsDatabasesExportDocumentsCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, 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 := &GoogleLongrunningOperation{
+		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": "Exports a copy of all or a subset of documents from Google Cloud Firestore\nto another storage system, such as Google Cloud Storage. Recent updates to\ndocuments may not be reflected in the export. The export occurs in the\nbackground and its progress can be monitored and managed via the\nOperation resource that is created. The output of an export may only be\nused once the associated operation is done. If an export operation is\ncancelled before completion it may leave partial data behind in Google\nCloud Storage.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}:exportDocuments",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.exportDocuments",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Database to export. Should be of the form:\n`projects/{project_id}/databases/{database_id}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:exportDocuments",
+	//   "request": {
+	//     "$ref": "GoogleFirestoreAdminV1ExportDocumentsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "GoogleLongrunningOperation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.importDocuments":
+
+type ProjectsDatabasesImportDocumentsCall struct {
+	s                                            *Service
+	name                                         string
+	googlefirestoreadminv1importdocumentsrequest *GoogleFirestoreAdminV1ImportDocumentsRequest
+	urlParams_                                   gensupport.URLParams
+	ctx_                                         context.Context
+	header_                                      http.Header
+}
+
+// ImportDocuments: Imports documents into Google Cloud Firestore.
+// Existing documents with the
+// same name are overwritten. The import occurs in the background and
+// its
+// progress can be monitored and managed via the Operation resource that
+// is
+// created. If an ImportDocuments operation is cancelled, it is
+// possible
+// that a subset of the data has already been imported to Cloud
+// Firestore.
+func (r *ProjectsDatabasesService) ImportDocuments(name string, googlefirestoreadminv1importdocumentsrequest *GoogleFirestoreAdminV1ImportDocumentsRequest) *ProjectsDatabasesImportDocumentsCall {
+	c := &ProjectsDatabasesImportDocumentsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.googlefirestoreadminv1importdocumentsrequest = googlefirestoreadminv1importdocumentsrequest
+	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 *ProjectsDatabasesImportDocumentsCall) Fields(s ...googleapi.Field) *ProjectsDatabasesImportDocumentsCall {
+	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 *ProjectsDatabasesImportDocumentsCall) Context(ctx context.Context) *ProjectsDatabasesImportDocumentsCall {
+	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 *ProjectsDatabasesImportDocumentsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesImportDocumentsCall) 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.googlefirestoreadminv1importdocumentsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:importDocuments")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.importDocuments" call.
+// Exactly one of *GoogleLongrunningOperation or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *GoogleLongrunningOperation.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 *ProjectsDatabasesImportDocumentsCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, 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 := &GoogleLongrunningOperation{
+		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": "Imports documents into Google Cloud Firestore. Existing documents with the\nsame name are overwritten. The import occurs in the background and its\nprogress can be monitored and managed via the Operation resource that is\ncreated. If an ImportDocuments operation is cancelled, it is possible\nthat a subset of the data has already been imported to Cloud Firestore.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}:importDocuments",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.importDocuments",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Database to import into. Should be of the form:\n`projects/{project_id}/databases/{database_id}`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:importDocuments",
+	//   "request": {
+	//     "$ref": "GoogleFirestoreAdminV1ImportDocumentsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "GoogleLongrunningOperation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.collectionGroups.fields.get":
+
+type ProjectsDatabasesCollectionGroupsFieldsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets the metadata and configuration for a Field.
+func (r *ProjectsDatabasesCollectionGroupsFieldsService) Get(name string) *ProjectsDatabasesCollectionGroupsFieldsGetCall {
+	c := &ProjectsDatabasesCollectionGroupsFieldsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsDatabasesCollectionGroupsFieldsGetCall) Fields(s ...googleapi.Field) *ProjectsDatabasesCollectionGroupsFieldsGetCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsGetCall) IfNoneMatch(entityTag string) *ProjectsDatabasesCollectionGroupsFieldsGetCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsGetCall) Context(ctx context.Context) *ProjectsDatabasesCollectionGroupsFieldsGetCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesCollectionGroupsFieldsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.collectionGroups.fields.get" call.
+// Exactly one of *GoogleFirestoreAdminV1Field or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *GoogleFirestoreAdminV1Field.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 *ProjectsDatabasesCollectionGroupsFieldsGetCall) Do(opts ...googleapi.CallOption) (*GoogleFirestoreAdminV1Field, 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 := &GoogleFirestoreAdminV1Field{
+		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 metadata and configuration for a Field.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/fields/{fieldsId}",
+	//   "httpMethod": "GET",
+	//   "id": "firestore.projects.databases.collectionGroups.fields.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "A name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_id}`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/fields/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "GoogleFirestoreAdminV1Field"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.collectionGroups.fields.list":
+
+type ProjectsDatabasesCollectionGroupsFieldsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists the field configuration and metadata for this
+// database.
+//
+// Currently, FirestoreAdmin.ListFields only supports listing
+// fields
+// that have been explicitly overridden. To issue this query,
+// call
+// FirestoreAdmin.ListFields with the filter set
+// to
+// `indexConfig.usesAncestorConfig:false`.
+func (r *ProjectsDatabasesCollectionGroupsFieldsService) List(parent string) *ProjectsDatabasesCollectionGroupsFieldsListCall {
+	c := &ProjectsDatabasesCollectionGroupsFieldsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// Filter sets the optional parameter "filter": The filter to apply to
+// list results. Currently,
+// FirestoreAdmin.ListFields only supports listing fields
+// that have been explicitly overridden. To issue this query,
+// call
+// FirestoreAdmin.ListFields with the filter set
+// to
+// `indexConfig.usesAncestorConfig:false`.
+func (c *ProjectsDatabasesCollectionGroupsFieldsListCall) Filter(filter string) *ProjectsDatabasesCollectionGroupsFieldsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The number of
+// results to return.
+func (c *ProjectsDatabasesCollectionGroupsFieldsListCall) PageSize(pageSize int64) *ProjectsDatabasesCollectionGroupsFieldsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A page token,
+// returned from a previous call to
+// FirestoreAdmin.ListFields, that may be used to get the next
+// page of results.
+func (c *ProjectsDatabasesCollectionGroupsFieldsListCall) PageToken(pageToken string) *ProjectsDatabasesCollectionGroupsFieldsListCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsListCall) Fields(s ...googleapi.Field) *ProjectsDatabasesCollectionGroupsFieldsListCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsListCall) IfNoneMatch(entityTag string) *ProjectsDatabasesCollectionGroupsFieldsListCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsListCall) Context(ctx context.Context) *ProjectsDatabasesCollectionGroupsFieldsListCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesCollectionGroupsFieldsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/fields")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.collectionGroups.fields.list" call.
+// Exactly one of *GoogleFirestoreAdminV1ListFieldsResponse or error
+// will be non-nil. Any non-2xx status code is an error. Response
+// headers are in either
+// *GoogleFirestoreAdminV1ListFieldsResponse.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 *ProjectsDatabasesCollectionGroupsFieldsListCall) Do(opts ...googleapi.CallOption) (*GoogleFirestoreAdminV1ListFieldsResponse, 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 := &GoogleFirestoreAdminV1ListFieldsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists the field configuration and metadata for this database.\n\nCurrently, FirestoreAdmin.ListFields only supports listing fields\nthat have been explicitly overridden. To issue this query, call\nFirestoreAdmin.ListFields with the filter set to\n`indexConfig.usesAncestorConfig:false`.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/fields",
+	//   "httpMethod": "GET",
+	//   "id": "firestore.projects.databases.collectionGroups.fields.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "The filter to apply to list results. Currently,\nFirestoreAdmin.ListFields only supports listing fields\nthat have been explicitly overridden. To issue this query, call\nFirestoreAdmin.ListFields with the filter set to\n`indexConfig.usesAncestorConfig:false`.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "The number of results to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A page token, returned from a previous call to\nFirestoreAdmin.ListFields, that may be used to get the next\npage of results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "A parent name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/fields",
+	//   "response": {
+	//     "$ref": "GoogleFirestoreAdminV1ListFieldsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsDatabasesCollectionGroupsFieldsListCall) Pages(ctx context.Context, f func(*GoogleFirestoreAdminV1ListFieldsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "firestore.projects.databases.collectionGroups.fields.patch":
+
+type ProjectsDatabasesCollectionGroupsFieldsPatchCall struct {
+	s                           *Service
+	name                        string
+	googlefirestoreadminv1field *GoogleFirestoreAdminV1Field
+	urlParams_                  gensupport.URLParams
+	ctx_                        context.Context
+	header_                     http.Header
+}
+
+// Patch: Updates a field configuration. Currently, field updates apply
+// only to
+// single field index configuration. However, calls
+// to
+// FirestoreAdmin.UpdateField should provide a field mask to
+// avoid
+// changing any configuration that the caller isn't aware of. The field
+// mask
+// should be specified as: `{ paths: "index_config" }`.
+//
+// This call returns a google.longrunning.Operation which may be used
+// to
+// track the status of the field update. The metadata for
+// the operation will be the type FieldOperationMetadata.
+//
+// To configure the default field settings for the database, use
+// the special `Field` with resource
+// name:
+// `projects/{project_id}/databases/{database_id}/collectionGroups/
+// __default__/fields/*`.
+func (r *ProjectsDatabasesCollectionGroupsFieldsService) Patch(name string, googlefirestoreadminv1field *GoogleFirestoreAdminV1Field) *ProjectsDatabasesCollectionGroupsFieldsPatchCall {
+	c := &ProjectsDatabasesCollectionGroupsFieldsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.googlefirestoreadminv1field = googlefirestoreadminv1field
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": A mask, relative
+// to the field. If specified, only configuration specified
+// by this field_mask will be updated in the field.
+func (c *ProjectsDatabasesCollectionGroupsFieldsPatchCall) UpdateMask(updateMask string) *ProjectsDatabasesCollectionGroupsFieldsPatchCall {
+	c.urlParams_.Set("updateMask", updateMask)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsDatabasesCollectionGroupsFieldsPatchCall) Fields(s ...googleapi.Field) *ProjectsDatabasesCollectionGroupsFieldsPatchCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsPatchCall) Context(ctx context.Context) *ProjectsDatabasesCollectionGroupsFieldsPatchCall {
+	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 *ProjectsDatabasesCollectionGroupsFieldsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesCollectionGroupsFieldsPatchCall) 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.googlefirestoreadminv1field)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.collectionGroups.fields.patch" call.
+// Exactly one of *GoogleLongrunningOperation or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *GoogleLongrunningOperation.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 *ProjectsDatabasesCollectionGroupsFieldsPatchCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, 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 := &GoogleLongrunningOperation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates a field configuration. Currently, field updates apply only to\nsingle field index configuration. However, calls to\nFirestoreAdmin.UpdateField should provide a field mask to avoid\nchanging any configuration that the caller isn't aware of. The field mask\nshould be specified as: `{ paths: \"index_config\" }`.\n\nThis call returns a google.longrunning.Operation which may be used to\ntrack the status of the field update. The metadata for\nthe operation will be the type FieldOperationMetadata.\n\nTo configure the default field settings for the database, use\nthe special `Field` with resource name:\n`projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/fields/{fieldsId}",
+	//   "httpMethod": "PATCH",
+	//   "id": "firestore.projects.databases.collectionGroups.fields.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "A field name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/fields/{field_path}`\n\nA field path may be a simple field name, e.g. `address` or a path to fields\nwithin map_value , e.g. `address.city`,\nor a special field path. The only valid special field is `*`, which\nrepresents any field.\n\nField paths may be quoted using ` (backtick). The only character that needs\nto be escaped within a quoted field path is the backtick character itself,\nescaped using a backslash. Special characters in field paths that\nmust be quoted include: `*`, `.`,\n``` (backtick), `[`, `]`, as well as any ascii symbolic characters.\n\nExamples:\n(Note: Comments here are written in markdown syntax, so there is an\n additional layer of backticks to represent a code block)\n`\\`address.city\\`` represents a field named `address.city`, not the map key\n`city` in the field `address`.\n`\\`*\\`` represents a field named `*`, not any field.\n\nA special `Field` contains the default indexing settings for all fields.\nThis field's resource name is:\n`projects/{project_id}/databases/{database_id}/collectionGroups/__default__/fields/*`\nIndexes defined on this `Field` will be applied to all fields which do not\nhave their own `Field` index configuration.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/fields/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "A mask, relative to the field. If specified, only configuration specified\nby this field_mask will be updated in the field.",
+	//       "format": "google-fieldmask",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "request": {
+	//     "$ref": "GoogleFirestoreAdminV1Field"
+	//   },
+	//   "response": {
+	//     "$ref": "GoogleLongrunningOperation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.collectionGroups.indexes.create":
+
+type ProjectsDatabasesCollectionGroupsIndexesCreateCall struct {
+	s                           *Service
+	parent                      string
+	googlefirestoreadminv1index *GoogleFirestoreAdminV1Index
+	urlParams_                  gensupport.URLParams
+	ctx_                        context.Context
+	header_                     http.Header
+}
+
+// Create: Creates a composite index. This returns a
+// google.longrunning.Operation
+// which may be used to track the status of the creation. The metadata
+// for
+// the operation will be the type IndexOperationMetadata.
+func (r *ProjectsDatabasesCollectionGroupsIndexesService) Create(parent string, googlefirestoreadminv1index *GoogleFirestoreAdminV1Index) *ProjectsDatabasesCollectionGroupsIndexesCreateCall {
+	c := &ProjectsDatabasesCollectionGroupsIndexesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.googlefirestoreadminv1index = googlefirestoreadminv1index
+	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 *ProjectsDatabasesCollectionGroupsIndexesCreateCall) Fields(s ...googleapi.Field) *ProjectsDatabasesCollectionGroupsIndexesCreateCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesCreateCall) Context(ctx context.Context) *ProjectsDatabasesCollectionGroupsIndexesCreateCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesCollectionGroupsIndexesCreateCall) 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.googlefirestoreadminv1index)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/indexes")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.collectionGroups.indexes.create" call.
+// Exactly one of *GoogleLongrunningOperation or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *GoogleLongrunningOperation.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 *ProjectsDatabasesCollectionGroupsIndexesCreateCall) Do(opts ...googleapi.CallOption) (*GoogleLongrunningOperation, 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 := &GoogleLongrunningOperation{
+		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 composite index. This returns a google.longrunning.Operation\nwhich may be used to track the status of the creation. The metadata for\nthe operation will be the type IndexOperationMetadata.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes",
+	//   "httpMethod": "POST",
+	//   "id": "firestore.projects.databases.collectionGroups.indexes.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "A parent name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/indexes",
+	//   "request": {
+	//     "$ref": "GoogleFirestoreAdminV1Index"
+	//   },
+	//   "response": {
+	//     "$ref": "GoogleLongrunningOperation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.collectionGroups.indexes.delete":
+
+type ProjectsDatabasesCollectionGroupsIndexesDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Deletes a composite index.
+func (r *ProjectsDatabasesCollectionGroupsIndexesService) Delete(name string) *ProjectsDatabasesCollectionGroupsIndexesDeleteCall {
+	c := &ProjectsDatabasesCollectionGroupsIndexesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsDatabasesCollectionGroupsIndexesDeleteCall) Fields(s ...googleapi.Field) *ProjectsDatabasesCollectionGroupsIndexesDeleteCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesDeleteCall) Context(ctx context.Context) *ProjectsDatabasesCollectionGroupsIndexesDeleteCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesCollectionGroupsIndexesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.collectionGroups.indexes.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsDatabasesCollectionGroupsIndexesDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes a composite index.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes/{indexesId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "firestore.projects.databases.collectionGroups.indexes.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "A name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{index_id}`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/indexes/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.collectionGroups.indexes.get":
+
+type ProjectsDatabasesCollectionGroupsIndexesGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets a composite index.
+func (r *ProjectsDatabasesCollectionGroupsIndexesService) Get(name string) *ProjectsDatabasesCollectionGroupsIndexesGetCall {
+	c := &ProjectsDatabasesCollectionGroupsIndexesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsDatabasesCollectionGroupsIndexesGetCall) Fields(s ...googleapi.Field) *ProjectsDatabasesCollectionGroupsIndexesGetCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesGetCall) IfNoneMatch(entityTag string) *ProjectsDatabasesCollectionGroupsIndexesGetCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesGetCall) Context(ctx context.Context) *ProjectsDatabasesCollectionGroupsIndexesGetCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesCollectionGroupsIndexesGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.collectionGroups.indexes.get" call.
+// Exactly one of *GoogleFirestoreAdminV1Index or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *GoogleFirestoreAdminV1Index.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 *ProjectsDatabasesCollectionGroupsIndexesGetCall) Do(opts ...googleapi.CallOption) (*GoogleFirestoreAdminV1Index, 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 := &GoogleFirestoreAdminV1Index{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a composite index.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes/{indexesId}",
+	//   "httpMethod": "GET",
+	//   "id": "firestore.projects.databases.collectionGroups.indexes.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "A name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}/indexes/{index_id}`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+/indexes/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "GoogleFirestoreAdminV1Index"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// method id "firestore.projects.databases.collectionGroups.indexes.list":
+
+type ProjectsDatabasesCollectionGroupsIndexesListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists composite indexes.
+func (r *ProjectsDatabasesCollectionGroupsIndexesService) List(parent string) *ProjectsDatabasesCollectionGroupsIndexesListCall {
+	c := &ProjectsDatabasesCollectionGroupsIndexesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// Filter sets the optional parameter "filter": The filter to apply to
+// list results.
+func (c *ProjectsDatabasesCollectionGroupsIndexesListCall) Filter(filter string) *ProjectsDatabasesCollectionGroupsIndexesListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The number of
+// results to return.
+func (c *ProjectsDatabasesCollectionGroupsIndexesListCall) PageSize(pageSize int64) *ProjectsDatabasesCollectionGroupsIndexesListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A page token,
+// returned from a previous call to
+// FirestoreAdmin.ListIndexes, that may be used to get the next
+// page of results.
+func (c *ProjectsDatabasesCollectionGroupsIndexesListCall) PageToken(pageToken string) *ProjectsDatabasesCollectionGroupsIndexesListCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesListCall) Fields(s ...googleapi.Field) *ProjectsDatabasesCollectionGroupsIndexesListCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesListCall) IfNoneMatch(entityTag string) *ProjectsDatabasesCollectionGroupsIndexesListCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesListCall) Context(ctx context.Context) *ProjectsDatabasesCollectionGroupsIndexesListCall {
+	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 *ProjectsDatabasesCollectionGroupsIndexesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsDatabasesCollectionGroupsIndexesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/indexes")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "firestore.projects.databases.collectionGroups.indexes.list" call.
+// Exactly one of *GoogleFirestoreAdminV1ListIndexesResponse or error
+// will be non-nil. Any non-2xx status code is an error. Response
+// headers are in either
+// *GoogleFirestoreAdminV1ListIndexesResponse.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 *ProjectsDatabasesCollectionGroupsIndexesListCall) Do(opts ...googleapi.CallOption) (*GoogleFirestoreAdminV1ListIndexesResponse, 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 := &GoogleFirestoreAdminV1ListIndexesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists composite indexes.",
+	//   "flatPath": "v1/projects/{projectsId}/databases/{databasesId}/collectionGroups/{collectionGroupsId}/indexes",
+	//   "httpMethod": "GET",
+	//   "id": "firestore.projects.databases.collectionGroups.indexes.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "The filter to apply to list results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "The number of results to return.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A page token, returned from a previous call to\nFirestoreAdmin.ListIndexes, that may be used to get the next\npage of results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "A parent name of the form\n`projects/{project_id}/databases/{database_id}/collectionGroups/{collection_id}`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/databases/[^/]+/collectionGroups/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/indexes",
+	//   "response": {
+	//     "$ref": "GoogleFirestoreAdminV1ListIndexesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/datastore"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsDatabasesCollectionGroupsIndexesListCall) Pages(ctx context.Context, f func(*GoogleFirestoreAdminV1ListIndexesResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
 // method id "firestore.projects.databases.operations.cancel":
 
 type ProjectsDatabasesOperationsCancelCall struct {
diff --git a/firestore/v1beta1/firestore-gen.go b/firestore/v1beta1/firestore-gen.go
index b4b4452..d4958ea 100644
--- a/firestore/v1beta1/firestore-gen.go
+++ b/firestore/v1beta1/firestore-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/firestore/v1beta2/firestore-gen.go b/firestore/v1beta2/firestore-gen.go
index 750a218..ed863fc 100644
--- a/firestore/v1beta2/firestore-gen.go
+++ b/firestore/v1beta2/firestore-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/fitness/v1/fitness-gen.go b/fitness/v1/fitness-gen.go
index e68bff4..4626f86 100644
--- a/fitness/v1/fitness-gen.go
+++ b/fitness/v1/fitness-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/fusiontables/v1/fusiontables-gen.go b/fusiontables/v1/fusiontables-gen.go
index 9302dc4..24fcf50 100644
--- a/fusiontables/v1/fusiontables-gen.go
+++ b/fusiontables/v1/fusiontables-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/fusiontables/v2/fusiontables-gen.go b/fusiontables/v2/fusiontables-gen.go
index 58aaf78..51e7152 100644
--- a/fusiontables/v2/fusiontables-gen.go
+++ b/fusiontables/v2/fusiontables-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/games/v1/games-gen.go b/games/v1/games-gen.go
index 453be0c..87f6557 100644
--- a/games/v1/games-gen.go
+++ b/games/v1/games-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/gamesconfiguration/v1configuration/gamesconfiguration-gen.go b/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
index 8d16d63..f24f7d1 100644
--- a/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
+++ b/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/gamesmanagement/v1management/gamesmanagement-gen.go b/gamesmanagement/v1management/gamesmanagement-gen.go
index 908dcdc..fdd5214 100644
--- a/gamesmanagement/v1management/gamesmanagement-gen.go
+++ b/gamesmanagement/v1management/gamesmanagement-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/genomics/v1/genomics-gen.go b/genomics/v1/genomics-gen.go
index 5477882..665bc38 100644
--- a/genomics/v1/genomics-gen.go
+++ b/genomics/v1/genomics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/genomics/v1alpha2/genomics-gen.go b/genomics/v1alpha2/genomics-gen.go
index 777018c..450276b 100644
--- a/genomics/v1alpha2/genomics-gen.go
+++ b/genomics/v1alpha2/genomics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/genomics/v2alpha1/genomics-gen.go b/genomics/v2alpha1/genomics-gen.go
index c809699..270aa98 100644
--- a/genomics/v2alpha1/genomics-gen.go
+++ b/genomics/v2alpha1/genomics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/gmail/v1/gmail-gen.go b/gmail/v1/gmail-gen.go
index 126f740..30d4693 100644
--- a/gmail/v1/gmail-gen.go
+++ b/gmail/v1/gmail-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/groupsmigration/v1/groupsmigration-gen.go b/groupsmigration/v1/groupsmigration-gen.go
index 766998b..062f491 100644
--- a/groupsmigration/v1/groupsmigration-gen.go
+++ b/groupsmigration/v1/groupsmigration-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/groupssettings/v1/groupssettings-gen.go b/groupssettings/v1/groupssettings-gen.go
index b2b477f..59730fd 100644
--- a/groupssettings/v1/groupssettings-gen.go
+++ b/groupssettings/v1/groupssettings-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/iam/v1/iam-gen.go b/iam/v1/iam-gen.go
index 1c08253..02e96cd 100644
--- a/iam/v1/iam-gen.go
+++ b/iam/v1/iam-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/iamcredentials/v1/iamcredentials-gen.go b/iamcredentials/v1/iamcredentials-gen.go
index bf54e2c..7de6e10 100644
--- a/iamcredentials/v1/iamcredentials-gen.go
+++ b/iamcredentials/v1/iamcredentials-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/iap/v1beta1/iap-gen.go b/iap/v1beta1/iap-gen.go
index 233a0fb..96d834c 100644
--- a/iap/v1beta1/iap-gen.go
+++ b/iap/v1beta1/iap-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/identitytoolkit/v3/identitytoolkit-gen.go b/identitytoolkit/v3/identitytoolkit-gen.go
index 705562c..a4b6dbd 100644
--- a/identitytoolkit/v3/identitytoolkit-gen.go
+++ b/identitytoolkit/v3/identitytoolkit-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/indexing/v3/indexing-gen.go b/indexing/v3/indexing-gen.go
index de0e34f..7224bb0 100644
--- a/indexing/v3/indexing-gen.go
+++ b/indexing/v3/indexing-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/jobs/v2/jobs-gen.go b/jobs/v2/jobs-gen.go
index 40dd136..a5f3b29 100644
--- a/jobs/v2/jobs-gen.go
+++ b/jobs/v2/jobs-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/jobs/v3/jobs-gen.go b/jobs/v3/jobs-gen.go
index d724d8b..293baa2 100644
--- a/jobs/v3/jobs-gen.go
+++ b/jobs/v3/jobs-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/jobs/v3p1beta1/jobs-gen.go b/jobs/v3p1beta1/jobs-gen.go
index d879701..5ad52c4 100644
--- a/jobs/v3p1beta1/jobs-gen.go
+++ b/jobs/v3p1beta1/jobs-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/kgsearch/v1/kgsearch-gen.go b/kgsearch/v1/kgsearch-gen.go
index 9ffc8e1..fcbdf2c 100644
--- a/kgsearch/v1/kgsearch-gen.go
+++ b/kgsearch/v1/kgsearch-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/language/v1/language-gen.go b/language/v1/language-gen.go
index 75c0b4b..53dba7e 100644
--- a/language/v1/language-gen.go
+++ b/language/v1/language-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/language/v1beta1/language-gen.go b/language/v1beta1/language-gen.go
index 8e8599f..5e78443 100644
--- a/language/v1beta1/language-gen.go
+++ b/language/v1beta1/language-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/language/v1beta2/language-gen.go b/language/v1beta2/language-gen.go
index 524d11a..a2f1cd5 100644
--- a/language/v1beta2/language-gen.go
+++ b/language/v1beta2/language-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/licensing/v1/licensing-gen.go b/licensing/v1/licensing-gen.go
index 813fcab..b23cdb0 100644
--- a/licensing/v1/licensing-gen.go
+++ b/licensing/v1/licensing-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/logging/v2/logging-gen.go b/logging/v2/logging-gen.go
index b4b90a4..f535dbe 100644
--- a/logging/v2/logging-gen.go
+++ b/logging/v2/logging-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/logging/v2beta1/logging-gen.go b/logging/v2beta1/logging-gen.go
index f078b86..0b87631 100644
--- a/logging/v2beta1/logging-gen.go
+++ b/logging/v2beta1/logging-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/manufacturers/v1/manufacturers-gen.go b/manufacturers/v1/manufacturers-gen.go
index a99e4c7..ab301be 100644
--- a/manufacturers/v1/manufacturers-gen.go
+++ b/manufacturers/v1/manufacturers-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/mirror/v1/mirror-gen.go b/mirror/v1/mirror-gen.go
index 043250b..81633e9 100644
--- a/mirror/v1/mirror-gen.go
+++ b/mirror/v1/mirror-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/ml/v1/ml-gen.go b/ml/v1/ml-gen.go
index e9dbe2a..e09f490 100644
--- a/ml/v1/ml-gen.go
+++ b/ml/v1/ml-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/monitoring/v3/monitoring-gen.go b/monitoring/v3/monitoring-gen.go
index 7dcd08e..d95b1d0 100644
--- a/monitoring/v3/monitoring-gen.go
+++ b/monitoring/v3/monitoring-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/oauth2/v1/oauth2-gen.go b/oauth2/v1/oauth2-gen.go
index a9cc327..cbdd6e4 100644
--- a/oauth2/v1/oauth2-gen.go
+++ b/oauth2/v1/oauth2-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/oauth2/v2/oauth2-gen.go b/oauth2/v2/oauth2-gen.go
index e1154e9..e8ace8a 100644
--- a/oauth2/v2/oauth2-gen.go
+++ b/oauth2/v2/oauth2-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/oslogin/v1/oslogin-gen.go b/oslogin/v1/oslogin-gen.go
index 70ce001..c6bd966 100644
--- a/oslogin/v1/oslogin-gen.go
+++ b/oslogin/v1/oslogin-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/oslogin/v1alpha/oslogin-gen.go b/oslogin/v1alpha/oslogin-gen.go
index 6c8e8bd..87142ce 100644
--- a/oslogin/v1alpha/oslogin-gen.go
+++ b/oslogin/v1alpha/oslogin-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/oslogin/v1beta/oslogin-gen.go b/oslogin/v1beta/oslogin-gen.go
index 83183b3..c97b770 100644
--- a/oslogin/v1beta/oslogin-gen.go
+++ b/oslogin/v1beta/oslogin-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/pagespeedonline/v1/pagespeedonline-gen.go b/pagespeedonline/v1/pagespeedonline-gen.go
index 2aa844b..122acee 100644
--- a/pagespeedonline/v1/pagespeedonline-gen.go
+++ b/pagespeedonline/v1/pagespeedonline-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/pagespeedonline/v2/pagespeedonline-gen.go b/pagespeedonline/v2/pagespeedonline-gen.go
index 221bdc0..61b0436 100644
--- a/pagespeedonline/v2/pagespeedonline-gen.go
+++ b/pagespeedonline/v2/pagespeedonline-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/pagespeedonline/v4/pagespeedonline-gen.go b/pagespeedonline/v4/pagespeedonline-gen.go
index f53d0ad..759b4ac 100644
--- a/pagespeedonline/v4/pagespeedonline-gen.go
+++ b/pagespeedonline/v4/pagespeedonline-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/partners/v2/partners-gen.go b/partners/v2/partners-gen.go
index 3081bd7..17b8e53 100644
--- a/partners/v2/partners-gen.go
+++ b/partners/v2/partners-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/people/v1/people-gen.go b/people/v1/people-gen.go
index fbee9e4..49a0fcc 100644
--- a/people/v1/people-gen.go
+++ b/people/v1/people-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/playcustomapp/v1/playcustomapp-gen.go b/playcustomapp/v1/playcustomapp-gen.go
index 2c2bdd1..5760a86 100644
--- a/playcustomapp/v1/playcustomapp-gen.go
+++ b/playcustomapp/v1/playcustomapp-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/plus/v1/plus-gen.go b/plus/v1/plus-gen.go
index 7904566..1f9fa9c 100644
--- a/plus/v1/plus-gen.go
+++ b/plus/v1/plus-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/plusdomains/v1/plusdomains-gen.go b/plusdomains/v1/plusdomains-gen.go
index c81f510..819a1d8 100644
--- a/plusdomains/v1/plusdomains-gen.go
+++ b/plusdomains/v1/plusdomains-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/poly/v1/poly-gen.go b/poly/v1/poly-gen.go
index 16da72d..a0d48f1 100644
--- a/poly/v1/poly-gen.go
+++ b/poly/v1/poly-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/proximitybeacon/v1beta1/proximitybeacon-gen.go b/proximitybeacon/v1beta1/proximitybeacon-gen.go
index d7c161f..93abce1 100644
--- a/proximitybeacon/v1beta1/proximitybeacon-gen.go
+++ b/proximitybeacon/v1beta1/proximitybeacon-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/pubsub/v1/pubsub-gen.go b/pubsub/v1/pubsub-gen.go
index b364be4..9d235b1 100644
--- a/pubsub/v1/pubsub-gen.go
+++ b/pubsub/v1/pubsub-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/pubsub/v1beta1a/pubsub-gen.go b/pubsub/v1beta1a/pubsub-gen.go
index aa432a0..45c097a 100644
--- a/pubsub/v1beta1a/pubsub-gen.go
+++ b/pubsub/v1beta1a/pubsub-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/pubsub/v1beta2/pubsub-gen.go b/pubsub/v1beta2/pubsub-gen.go
index 8161da3..d638ba3 100644
--- a/pubsub/v1beta2/pubsub-gen.go
+++ b/pubsub/v1beta2/pubsub-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/redis/v1/redis-api.json b/redis/v1/redis-api.json
index 12a4091..f40deef 100644
--- a/redis/v1/redis-api.json
+++ b/redis/v1/redis-api.json
@@ -458,7 +458,7 @@
       }
     }
   },
-  "revision": "20180927",
+  "revision": "20181031",
   "rootUrl": "https://redis.googleapis.com/",
   "schemas": {
     "Empty": {
@@ -650,6 +650,13 @@
         "nextPageToken": {
           "description": "Token to retrieve the next page of results, or empty if there are no more\nresults in the list.",
           "type": "string"
+        },
+        "unreachable": {
+          "description": "Locations that could not be reached.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
         }
       },
       "type": "object"
diff --git a/redis/v1/redis-gen.go b/redis/v1/redis-gen.go
index e312c1c..01c259d 100644
--- a/redis/v1/redis-gen.go
+++ b/redis/v1/redis-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -427,6 +428,9 @@
 	// results in the list.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
+	// Unreachable: Locations that could not be reached.
+	Unreachable []string `json:"unreachable,omitempty"`
+
 	// ServerResponse contains the HTTP response code and headers from the
 	// server.
 	googleapi.ServerResponse `json:"-"`
diff --git a/redis/v1beta1/redis-api.json b/redis/v1beta1/redis-api.json
index 8fd752b..e05984e 100644
--- a/redis/v1beta1/redis-api.json
+++ b/redis/v1beta1/redis-api.json
@@ -458,7 +458,7 @@
       }
     }
   },
-  "revision": "20180830",
+  "revision": "20181031",
   "rootUrl": "https://redis.googleapis.com/",
   "schemas": {
     "Empty": {
@@ -656,6 +656,13 @@
         "nextPageToken": {
           "description": "Token to retrieve the next page of results, or empty if there are no more\nresults in the list.",
           "type": "string"
+        },
+        "unreachable": {
+          "description": "Locations that could not be reached.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
         }
       },
       "type": "object"
diff --git a/redis/v1beta1/redis-gen.go b/redis/v1beta1/redis-gen.go
index 943d409..9dcf1a0 100644
--- a/redis/v1beta1/redis-gen.go
+++ b/redis/v1beta1/redis-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -445,6 +446,9 @@
 	// results in the list.
 	NextPageToken string `json:"nextPageToken,omitempty"`
 
+	// Unreachable: Locations that could not be reached.
+	Unreachable []string `json:"unreachable,omitempty"`
+
 	// ServerResponse contains the HTTP response code and headers from the
 	// server.
 	googleapi.ServerResponse `json:"-"`
diff --git a/replicapool/v1beta1/replicapool-gen.go b/replicapool/v1beta1/replicapool-gen.go
index 9ff418b..5452438 100644
--- a/replicapool/v1beta1/replicapool-gen.go
+++ b/replicapool/v1beta1/replicapool-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/replicapoolupdater/v1beta1/replicapoolupdater-gen.go b/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
index ad48efa..bf467b1 100644
--- a/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
+++ b/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/reseller/v1/reseller-gen.go b/reseller/v1/reseller-gen.go
index 596788a..48bd71b 100644
--- a/reseller/v1/reseller-gen.go
+++ b/reseller/v1/reseller-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/runtimeconfig/v1/runtimeconfig-gen.go b/runtimeconfig/v1/runtimeconfig-gen.go
index f322a7f..1ad3f1c 100644
--- a/runtimeconfig/v1/runtimeconfig-gen.go
+++ b/runtimeconfig/v1/runtimeconfig-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/runtimeconfig/v1beta1/runtimeconfig-gen.go b/runtimeconfig/v1beta1/runtimeconfig-gen.go
index e0119f9..841d14c 100644
--- a/runtimeconfig/v1beta1/runtimeconfig-gen.go
+++ b/runtimeconfig/v1beta1/runtimeconfig-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/safebrowsing/v4/safebrowsing-gen.go b/safebrowsing/v4/safebrowsing-gen.go
index b56cf4f..e37aa2d 100644
--- a/safebrowsing/v4/safebrowsing-gen.go
+++ b/safebrowsing/v4/safebrowsing-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/script/v1/script-gen.go b/script/v1/script-gen.go
index d80f1d8..50ce98e 100644
--- a/script/v1/script-gen.go
+++ b/script/v1/script-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/searchconsole/v1/searchconsole-gen.go b/searchconsole/v1/searchconsole-gen.go
index 0435d36..38bcae1 100644
--- a/searchconsole/v1/searchconsole-gen.go
+++ b/searchconsole/v1/searchconsole-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/servicebroker/v1/servicebroker-gen.go b/servicebroker/v1/servicebroker-gen.go
index 79295d6..81fe0a2 100644
--- a/servicebroker/v1/servicebroker-gen.go
+++ b/servicebroker/v1/servicebroker-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/servicebroker/v1alpha1/servicebroker-gen.go b/servicebroker/v1alpha1/servicebroker-gen.go
index a04e945..6f36c6f 100644
--- a/servicebroker/v1alpha1/servicebroker-gen.go
+++ b/servicebroker/v1alpha1/servicebroker-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/servicebroker/v1beta1/servicebroker-gen.go b/servicebroker/v1beta1/servicebroker-gen.go
index 3dcf744..8429d32 100644
--- a/servicebroker/v1beta1/servicebroker-gen.go
+++ b/servicebroker/v1beta1/servicebroker-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go b/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go
index 2514fad..290f7ee 100644
--- a/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go
+++ b/serviceconsumermanagement/v1/serviceconsumermanagement-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/servicecontrol/v1/servicecontrol-gen.go b/servicecontrol/v1/servicecontrol-gen.go
index 131cf00..708c42c 100644
--- a/servicecontrol/v1/servicecontrol-gen.go
+++ b/servicecontrol/v1/servicecontrol-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/servicemanagement/v1/servicemanagement-gen.go b/servicemanagement/v1/servicemanagement-gen.go
index c020e4c..32499e7 100644
--- a/servicemanagement/v1/servicemanagement-gen.go
+++ b/servicemanagement/v1/servicemanagement-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/servicenetworking/v1beta/servicenetworking-api.json b/servicenetworking/v1beta/servicenetworking-api.json
index fdc4492..9e071f4 100644
--- a/servicenetworking/v1beta/servicenetworking-api.json
+++ b/servicenetworking/v1beta/servicenetworking-api.json
@@ -237,7 +237,7 @@
       }
     }
   },
-  "revision": "20181018",
+  "revision": "20181026",
   "rootUrl": "https://servicenetworking.googleapis.com/",
   "schemas": {
     "AddSubnetworkRequest": {
@@ -1720,6 +1720,10 @@
         "name": {
           "description": "Subnetwork name.\nSee https://cloud.google.com/compute/docs/vpc/",
           "type": "string"
+        },
+        "network": {
+          "description": "Shared VPC host project network peered with consumer network.\nFor example: projects/1234321/global/networks/host-network",
+          "type": "string"
         }
       },
       "type": "object"
diff --git a/servicenetworking/v1beta/servicenetworking-gen.go b/servicenetworking/v1beta/servicenetworking-gen.go
index fa9a87e..fcfefde 100644
--- a/servicenetworking/v1beta/servicenetworking-gen.go
+++ b/servicenetworking/v1beta/servicenetworking-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -3821,6 +3822,11 @@
 	// See https://cloud.google.com/compute/docs/vpc/
 	Name string `json:"name,omitempty"`
 
+	// Network: Shared VPC host project network peered with consumer
+	// network.
+	// For example: projects/1234321/global/networks/host-network
+	Network string `json:"network,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "IpCidrRange") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
diff --git a/serviceusage/v1/serviceusage-gen.go b/serviceusage/v1/serviceusage-gen.go
index 6b956bb..6826e94 100644
--- a/serviceusage/v1/serviceusage-gen.go
+++ b/serviceusage/v1/serviceusage-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/serviceusage/v1beta1/serviceusage-gen.go b/serviceusage/v1beta1/serviceusage-gen.go
index cfc78f8..fc37ccb 100644
--- a/serviceusage/v1beta1/serviceusage-gen.go
+++ b/serviceusage/v1beta1/serviceusage-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/sheets/v4/sheets-gen.go b/sheets/v4/sheets-gen.go
index 2e3172d..675997e 100644
--- a/sheets/v4/sheets-gen.go
+++ b/sheets/v4/sheets-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/siteverification/v1/siteverification-gen.go b/siteverification/v1/siteverification-gen.go
index fc723c5..950ac22 100644
--- a/siteverification/v1/siteverification-gen.go
+++ b/siteverification/v1/siteverification-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/slides/v1/slides-gen.go b/slides/v1/slides-gen.go
index 8a97594..fbee460 100644
--- a/slides/v1/slides-gen.go
+++ b/slides/v1/slides-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/sourcerepo/v1/sourcerepo-gen.go b/sourcerepo/v1/sourcerepo-gen.go
index 5241078..2dd8c73 100644
--- a/sourcerepo/v1/sourcerepo-gen.go
+++ b/sourcerepo/v1/sourcerepo-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/spanner/v1/spanner-gen.go b/spanner/v1/spanner-gen.go
index 1da4a53..4ac22b6 100644
--- a/spanner/v1/spanner-gen.go
+++ b/spanner/v1/spanner-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/speech/v1/speech-gen.go b/speech/v1/speech-gen.go
index 5bbd15c..68e7faf 100644
--- a/speech/v1/speech-gen.go
+++ b/speech/v1/speech-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/speech/v1beta1/speech-gen.go b/speech/v1beta1/speech-gen.go
index d60c8c8..38ef5de 100644
--- a/speech/v1beta1/speech-gen.go
+++ b/speech/v1beta1/speech-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/sqladmin/v1beta4/sqladmin-gen.go b/sqladmin/v1beta4/sqladmin-gen.go
index 12cb89c..24f67b6 100644
--- a/sqladmin/v1beta4/sqladmin-gen.go
+++ b/sqladmin/v1beta4/sqladmin-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/storage/v1/storage-gen.go b/storage/v1/storage-gen.go
index 5f7b91c..fa5e4e2 100644
--- a/storage/v1/storage-gen.go
+++ b/storage/v1/storage-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/storage/v1beta1/storage-gen.go b/storage/v1beta1/storage-gen.go
index 424df9f..f15c671 100644
--- a/storage/v1beta1/storage-gen.go
+++ b/storage/v1beta1/storage-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/storage/v1beta2/storage-gen.go b/storage/v1beta2/storage-gen.go
index 6b4c64f..8695a20 100644
--- a/storage/v1beta2/storage-gen.go
+++ b/storage/v1beta2/storage-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/storagetransfer/v1/storagetransfer-gen.go b/storagetransfer/v1/storagetransfer-gen.go
index aab9734..9f3e70a 100644
--- a/storagetransfer/v1/storagetransfer-gen.go
+++ b/storagetransfer/v1/storagetransfer-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/streetviewpublish/v1/streetviewpublish-gen.go b/streetviewpublish/v1/streetviewpublish-gen.go
index 7bdf3e1..c9bdfb4 100644
--- a/streetviewpublish/v1/streetviewpublish-gen.go
+++ b/streetviewpublish/v1/streetviewpublish-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/surveys/v2/surveys-gen.go b/surveys/v2/surveys-gen.go
index 716574c..a7a853e 100644
--- a/surveys/v2/surveys-gen.go
+++ b/surveys/v2/surveys-gen.go
@@ -12,15 +12,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/tagmanager/v1/tagmanager-gen.go b/tagmanager/v1/tagmanager-gen.go
index 8627519..0ece204 100644
--- a/tagmanager/v1/tagmanager-gen.go
+++ b/tagmanager/v1/tagmanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/tagmanager/v2/tagmanager-gen.go b/tagmanager/v2/tagmanager-gen.go
index abe42fc..f4ae9a2 100644
--- a/tagmanager/v2/tagmanager-gen.go
+++ b/tagmanager/v2/tagmanager-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/tasks/v1/tasks-gen.go b/tasks/v1/tasks-gen.go
index 3548fea..bab5bf8 100644
--- a/tasks/v1/tasks-gen.go
+++ b/tasks/v1/tasks-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/testing/v1/testing-gen.go b/testing/v1/testing-gen.go
index 440862d..d672346 100644
--- a/testing/v1/testing-gen.go
+++ b/testing/v1/testing-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/texttospeech/v1/texttospeech-gen.go b/texttospeech/v1/texttospeech-gen.go
index e715121..fe86724 100644
--- a/texttospeech/v1/texttospeech-gen.go
+++ b/texttospeech/v1/texttospeech-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/texttospeech/v1beta1/texttospeech-gen.go b/texttospeech/v1beta1/texttospeech-gen.go
index ea6e8be..2b5766c 100644
--- a/texttospeech/v1beta1/texttospeech-gen.go
+++ b/texttospeech/v1beta1/texttospeech-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/toolresults/v1beta3/toolresults-gen.go b/toolresults/v1beta3/toolresults-gen.go
index c80b294..fba9c91 100644
--- a/toolresults/v1beta3/toolresults-gen.go
+++ b/toolresults/v1beta3/toolresults-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/tpu/v1/tpu-gen.go b/tpu/v1/tpu-gen.go
index 5845c2f..99db76f 100644
--- a/tpu/v1/tpu-gen.go
+++ b/tpu/v1/tpu-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/tpu/v1alpha1/tpu-gen.go b/tpu/v1alpha1/tpu-gen.go
index 690a18f..d1146b1 100644
--- a/tpu/v1alpha1/tpu-gen.go
+++ b/tpu/v1alpha1/tpu-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/translate/v2/translate-gen.go b/translate/v2/translate-gen.go
index 2e9d878..11f1c31 100644
--- a/translate/v2/translate-gen.go
+++ b/translate/v2/translate-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/urlshortener/v1/urlshortener-gen.go b/urlshortener/v1/urlshortener-gen.go
index 41164f5..89841d7 100644
--- a/urlshortener/v1/urlshortener-gen.go
+++ b/urlshortener/v1/urlshortener-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/vault/v1/vault-gen.go b/vault/v1/vault-gen.go
index c782621..4d6dedc 100644
--- a/vault/v1/vault-gen.go
+++ b/vault/v1/vault-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/videointelligence/v1/videointelligence-api.json b/videointelligence/v1/videointelligence-api.json
index e45bd4a..340da18 100644
--- a/videointelligence/v1/videointelligence-api.json
+++ b/videointelligence/v1/videointelligence-api.json
@@ -12,7 +12,7 @@
   "baseUrl": "https://videointelligence.googleapis.com/",
   "batchPath": "batch",
   "canonicalName": "Cloud Video Intelligence",
-  "description": "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.",
   "discoveryVersion": "v1",
   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
   "fullyEncodeReservedExpansion": true,
@@ -246,7 +246,7 @@
       }
     }
   },
-  "revision": "20181003",
+  "revision": "20181027",
   "rootUrl": "https://videointelligence.googleapis.com/",
   "schemas": {
     "GoogleCloudVideointelligenceV1_AnnotateVideoProgress": {
@@ -273,14 +273,16 @@
             "Unspecified.",
             "Label detection. Detect objects, such as dog or flower.",
             "Shot change detection.",
-            "Explicit content detection."
+            "Explicit content detection.",
+            "Speech transcription."
           ],
           "items": {
             "enum": [
               "FEATURE_UNSPECIFIED",
               "LABEL_DETECTION",
               "SHOT_CHANGE_DETECTION",
-              "EXPLICIT_CONTENT_DETECTION"
+              "EXPLICIT_CONTENT_DETECTION",
+              "SPEECH_TRANSCRIPTION"
             ],
             "type": "string"
           },
@@ -507,6 +509,113 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1_SpeechContext": {
+      "description": "Provides \"hints\" to the speech recognizer to favor specific words and phrases\nin the results.",
+      "id": "GoogleCloudVideointelligenceV1_SpeechContext",
+      "properties": {
+        "phrases": {
+          "description": "*Optional* A list of strings containing words and phrases \"hints\" so that\nthe speech recognition is more likely to recognize them. This can be used\nto improve the accuracy for specific words and phrases, for example, if\nspecific commands are typically spoken by the user. This can also be used\nto add additional words to the vocabulary of the recognizer. See\n[usage limits](https://cloud.google.com/speech/limits#content).",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1_SpeechTranscriptionConfig": {
+      "description": "Config for SPEECH_TRANSCRIPTION.",
+      "id": "GoogleCloudVideointelligenceV1_SpeechTranscriptionConfig",
+      "properties": {
+        "audioTracks": {
+          "description": "*Optional* For file formats, such as MXF or MKV, supporting multiple audio\ntracks, specify up to two tracks. Default: track 0.",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          },
+          "type": "array"
+        },
+        "diarizationSpeakerCount": {
+          "description": "*Optional*\nIf set, specifies the estimated number of speakers in the conversation.\nIf not set, defaults to '2'.\nIgnored unless enable_speaker_diarization is set to true.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "enableAutomaticPunctuation": {
+          "description": "*Optional* If 'true', adds punctuation to recognition result hypotheses.\nThis feature is only available in select languages. Setting this for\nrequests in other languages has no effect at all. The default 'false' value\ndoes not add punctuation to result hypotheses. NOTE: \"This is currently\noffered as an experimental service, complimentary to all users. In the\nfuture this may be exclusively available as a premium feature.\"",
+          "type": "boolean"
+        },
+        "enableSpeakerDiarization": {
+          "description": "*Optional* If 'true', enables speaker detection for each recognized word in\nthe top alternative of the recognition result using a speaker_tag provided\nin the WordInfo.\nNote: When this is true, we send all the words from the beginning of the\naudio for the top alternative in every consecutive responses.\nThis is done in order to improve our speaker tags as our models learn to\nidentify the speakers in the conversation over time.",
+          "type": "boolean"
+        },
+        "enableWordConfidence": {
+          "description": "*Optional* If `true`, the top result includes a list of words and the\nconfidence for those words. If `false`, no word-level confidence\ninformation is returned. The default is `false`.",
+          "type": "boolean"
+        },
+        "filterProfanity": {
+          "description": "*Optional* If set to `true`, the server will attempt to filter out\nprofanities, replacing all but the initial character in each filtered word\nwith asterisks, e.g. \"f***\". If set to `false` or omitted, profanities\nwon't be filtered out.",
+          "type": "boolean"
+        },
+        "languageCode": {
+          "description": "*Required* The language of the supplied audio as a\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag.\nExample: \"en-US\".\nSee [Language Support](https://cloud.google.com/speech/docs/languages)\nfor a list of the currently supported language codes.",
+          "type": "string"
+        },
+        "maxAlternatives": {
+          "description": "*Optional* Maximum number of recognition hypotheses to be returned.\nSpecifically, the maximum number of `SpeechRecognitionAlternative` messages\nwithin each `SpeechTranscription`. The server may return fewer than\n`max_alternatives`. Valid values are `0`-`30`. A value of `0` or `1` will\nreturn a maximum of one. If omitted, will return a maximum of one.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "speechContexts": {
+          "description": "*Optional* A means to provide context to assist the speech recognition.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_SpeechContext"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1_VideoAnnotationProgress": {
       "description": "Annotation progress for a single video.",
       "id": "GoogleCloudVideointelligenceV1_VideoAnnotationProgress",
@@ -576,6 +685,13 @@
             "$ref": "GoogleCloudVideointelligenceV1_LabelAnnotation"
           },
           "type": "array"
+        },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_SpeechTranscription"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -602,6 +718,10 @@
         "shotChangeDetectionConfig": {
           "$ref": "GoogleCloudVideointelligenceV1_ShotChangeDetectionConfig",
           "description": "Config for SHOT_CHANGE_DETECTION."
+        },
+        "speechTranscriptionConfig": {
+          "$ref": "GoogleCloudVideointelligenceV1_SpeechTranscriptionConfig",
+          "description": "Config for SPEECH_TRANSCRIPTION."
         }
       },
       "type": "object"
@@ -623,6 +743,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1beta2_AnnotateVideoProgress": {
       "description": "Video annotation progress. Included in the `metadata`\nfield of the `Operation` returned by the `GetOperation`\ncall of the `google::longrunning::Operations` service.",
       "id": "GoogleCloudVideointelligenceV1beta2_AnnotateVideoProgress",
@@ -781,6 +932,47 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1beta2_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1beta2_VideoAnnotationProgress": {
       "description": "Annotation progress for a single video.",
       "id": "GoogleCloudVideointelligenceV1beta2_VideoAnnotationProgress",
@@ -850,6 +1042,13 @@
             "$ref": "GoogleCloudVideointelligenceV1beta2_LabelAnnotation"
           },
           "type": "array"
+        },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechTranscription"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -871,6 +1070,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1beta2_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1beta2_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1p1beta1_AnnotateVideoProgress": {
       "description": "Video annotation progress. Included in the `metadata`\nfield of the `Operation` returned by the `GetOperation`\ncall of the `google::longrunning::Operations` service.",
       "id": "GoogleCloudVideointelligenceV1p1beta1_AnnotateVideoProgress",
@@ -1457,6 +1687,47 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1p2beta1_TextAnnotation": {
       "description": "Annotations related to one detected OCR text snippet. This will contain the\ncorresponding text, confidence value, and frame level information for each\ndetection.",
       "id": "GoogleCloudVideointelligenceV1p2beta1_TextAnnotation",
@@ -1591,6 +1862,13 @@
           },
           "type": "array"
         },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription"
+          },
+          "type": "array"
+        },
         "textAnnotations": {
           "description": "OCR text detection and tracking.\nAnnotations for list of detected text snippets. Each will have list of\nframe information associated with it.",
           "items": {
@@ -1618,6 +1896,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1p2beta1_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleLongrunning_CancelOperationRequest": {
       "description": "The request message for Operations.CancelOperation.",
       "id": "GoogleLongrunning_CancelOperationRequest",
diff --git a/videointelligence/v1/videointelligence-gen.go b/videointelligence/v1/videointelligence-gen.go
index ecd50f9..7c4a23f 100644
--- a/videointelligence/v1/videointelligence-gen.go
+++ b/videointelligence/v1/videointelligence-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -142,6 +143,7 @@
 	// flower.
 	//   "SHOT_CHANGE_DETECTION" - Shot change detection.
 	//   "EXPLICIT_CONTENT_DETECTION" - Explicit content detection.
+	//   "SPEECH_TRANSCRIPTION" - Speech transcription.
 	Features []string `json:"features,omitempty"`
 
 	// InputContent: The video data bytes.
@@ -616,6 +618,256 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1SpeechContext: Provides "hints" to the
+// speech recognizer to favor specific words and phrases
+// in the results.
+type GoogleCloudVideointelligenceV1SpeechContext struct {
+	// Phrases: *Optional* A list of strings containing words and phrases
+	// "hints" so that
+	// the speech recognition is more likely to recognize them. This can be
+	// used
+	// to improve the accuracy for specific words and phrases, for example,
+	// if
+	// specific commands are typically spoken by the user. This can also be
+	// used
+	// to add additional words to the vocabulary of the recognizer.
+	// See
+	// [usage limits](https://cloud.google.com/speech/limits#content).
+	Phrases []string `json:"phrases,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Phrases") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Phrases") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechContext) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechContext
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVideointelligenceV1SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVideointelligenceV1SpeechTranscriptionConfig: Config for
+// SPEECH_TRANSCRIPTION.
+type GoogleCloudVideointelligenceV1SpeechTranscriptionConfig struct {
+	// AudioTracks: *Optional* For file formats, such as MXF or MKV,
+	// supporting multiple audio
+	// tracks, specify up to two tracks. Default: track 0.
+	AudioTracks []int64 `json:"audioTracks,omitempty"`
+
+	// DiarizationSpeakerCount: *Optional*
+	// If set, specifies the estimated number of speakers in the
+	// conversation.
+	// If not set, defaults to '2'.
+	// Ignored unless enable_speaker_diarization is set to true.
+	DiarizationSpeakerCount int64 `json:"diarizationSpeakerCount,omitempty"`
+
+	// EnableAutomaticPunctuation: *Optional* If 'true', adds punctuation to
+	// recognition result hypotheses.
+	// This feature is only available in select languages. Setting this
+	// for
+	// requests in other languages has no effect at all. The default 'false'
+	// value
+	// does not add punctuation to result hypotheses. NOTE: "This is
+	// currently
+	// offered as an experimental service, complimentary to all users. In
+	// the
+	// future this may be exclusively available as a premium feature."
+	EnableAutomaticPunctuation bool `json:"enableAutomaticPunctuation,omitempty"`
+
+	// EnableSpeakerDiarization: *Optional* If 'true', enables speaker
+	// detection for each recognized word in
+	// the top alternative of the recognition result using a speaker_tag
+	// provided
+	// in the WordInfo.
+	// Note: When this is true, we send all the words from the beginning of
+	// the
+	// audio for the top alternative in every consecutive responses.
+	// This is done in order to improve our speaker tags as our models learn
+	// to
+	// identify the speakers in the conversation over time.
+	EnableSpeakerDiarization bool `json:"enableSpeakerDiarization,omitempty"`
+
+	// EnableWordConfidence: *Optional* If `true`, the top result includes a
+	// list of words and the
+	// confidence for those words. If `false`, no word-level
+	// confidence
+	// information is returned. The default is `false`.
+	EnableWordConfidence bool `json:"enableWordConfidence,omitempty"`
+
+	// FilterProfanity: *Optional* If set to `true`, the server will attempt
+	// to filter out
+	// profanities, replacing all but the initial character in each filtered
+	// word
+	// with asterisks, e.g. "f***". If set to `false` or omitted,
+	// profanities
+	// won't be filtered out.
+	FilterProfanity bool `json:"filterProfanity,omitempty"`
+
+	// LanguageCode: *Required* The language of the supplied audio as
+	// a
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language
+	// tag.
+	// Example: "en-US".
+	// See [Language
+	// Support](https://cloud.google.com/speech/docs/languages)
+	// for a list of the currently supported language codes.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// MaxAlternatives: *Optional* Maximum number of recognition hypotheses
+	// to be returned.
+	// Specifically, the maximum number of `SpeechRecognitionAlternative`
+	// messages
+	// within each `SpeechTranscription`. The server may return fewer
+	// than
+	// `max_alternatives`. Valid values are `0`-`30`. A value of `0` or `1`
+	// will
+	// return a maximum of one. If omitted, will return a maximum of one.
+	MaxAlternatives int64 `json:"maxAlternatives,omitempty"`
+
+	// SpeechContexts: *Optional* A means to provide context to assist the
+	// speech recognition.
+	SpeechContexts []*GoogleCloudVideointelligenceV1SpeechContext `json:"speechContexts,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AudioTracks") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "AudioTracks") 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 *GoogleCloudVideointelligenceV1SpeechTranscriptionConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechTranscriptionConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1VideoAnnotationProgress: Annotation
 // progress for a single video.
 type GoogleCloudVideointelligenceV1VideoAnnotationProgress struct {
@@ -689,6 +941,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Error") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -732,6 +987,9 @@
 	// ShotChangeDetectionConfig: Config for SHOT_CHANGE_DETECTION.
 	ShotChangeDetectionConfig *GoogleCloudVideointelligenceV1ShotChangeDetectionConfig `json:"shotChangeDetectionConfig,omitempty"`
 
+	// SpeechTranscriptionConfig: Config for SPEECH_TRANSCRIPTION.
+	SpeechTranscriptionConfig *GoogleCloudVideointelligenceV1SpeechTranscriptionConfig `json:"speechTranscriptionConfig,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g.
 	// "ExplicitContentDetectionConfig") to unconditionally include in API
 	// requests. By default, fields with empty values are omitted from API
@@ -792,6 +1050,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1WordInfo: Word-specific information for
+// recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleCloudVideointelligenceV1beta2AnnotateVideoProgress: Video
 // annotation progress. Included in the `metadata`
 // field of the `Operation` returned by the `GetOperation`
@@ -1110,6 +1453,111 @@
 	return nil
 }
 
+// GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1beta2WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1beta2SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1beta2SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1beta2VideoAnnotationProgress:
 // Annotation progress for a single video.
 type GoogleCloudVideointelligenceV1beta2VideoAnnotationProgress struct {
@@ -1183,6 +1631,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1beta2LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1beta2SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Error") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1241,6 +1692,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1beta2WordInfo: Word-specific
+// information for recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1beta2WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1beta2WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleCloudVideointelligenceV1p1beta1AnnotateVideoProgress: Video
 // annotation progress. Included in the `metadata`
 // field of the `Operation` returned by the `GetOperation`
@@ -2457,6 +2993,111 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1p2beta1WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1p2beta1SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1p2beta1SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1p2beta1TextAnnotation: Annotations
 // related to one detected OCR text snippet. This will contain
 // the
@@ -2659,6 +3300,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1p2beta1LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1p2beta1SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// TextAnnotations: OCR text detection and tracking.
 	// Annotations for list of detected text snippets. Each will have list
 	// of
@@ -2723,6 +3367,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1p2beta1WordInfo: Word-specific
+// information for recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1p2beta1WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleLongrunningCancelOperationRequest: The request message for
 // Operations.CancelOperation.
 type GoogleLongrunningCancelOperationRequest struct {
diff --git a/videointelligence/v1beta2/videointelligence-api.json b/videointelligence/v1beta2/videointelligence-api.json
index 4dee910..31218e5 100644
--- a/videointelligence/v1beta2/videointelligence-api.json
+++ b/videointelligence/v1beta2/videointelligence-api.json
@@ -12,7 +12,7 @@
   "baseUrl": "https://videointelligence.googleapis.com/",
   "batchPath": "batch",
   "canonicalName": "Cloud Video Intelligence",
-  "description": "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.",
   "discoveryVersion": "v1",
   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
   "fullyEncodeReservedExpansion": true,
@@ -127,7 +127,7 @@
       }
     }
   },
-  "revision": "20181003",
+  "revision": "20181027",
   "rootUrl": "https://videointelligence.googleapis.com/",
   "schemas": {
     "GoogleCloudVideointelligenceV1_AnnotateVideoProgress": {
@@ -288,6 +288,47 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1_VideoAnnotationProgress": {
       "description": "Annotation progress for a single video.",
       "id": "GoogleCloudVideointelligenceV1_VideoAnnotationProgress",
@@ -357,6 +398,13 @@
             "$ref": "GoogleCloudVideointelligenceV1_LabelAnnotation"
           },
           "type": "array"
+        },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_SpeechTranscription"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -378,6 +426,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1beta2_AnnotateVideoProgress": {
       "description": "Video annotation progress. Included in the `metadata`\nfield of the `Operation` returned by the `GetOperation`\ncall of the `google::longrunning::Operations` service.",
       "id": "GoogleCloudVideointelligenceV1beta2_AnnotateVideoProgress",
@@ -402,14 +481,16 @@
             "Unspecified.",
             "Label detection. Detect objects, such as dog or flower.",
             "Shot change detection.",
-            "Explicit content detection."
+            "Explicit content detection.",
+            "Speech transcription."
           ],
           "items": {
             "enum": [
               "FEATURE_UNSPECIFIED",
               "LABEL_DETECTION",
               "SHOT_CHANGE_DETECTION",
-              "EXPLICIT_CONTENT_DETECTION"
+              "EXPLICIT_CONTENT_DETECTION",
+              "SPEECH_TRANSCRIPTION"
             ],
             "type": "string"
           },
@@ -636,6 +717,113 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1beta2_SpeechContext": {
+      "description": "Provides \"hints\" to the speech recognizer to favor specific words and phrases\nin the results.",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechContext",
+      "properties": {
+        "phrases": {
+          "description": "*Optional* A list of strings containing words and phrases \"hints\" so that\nthe speech recognition is more likely to recognize them. This can be used\nto improve the accuracy for specific words and phrases, for example, if\nspecific commands are typically spoken by the user. This can also be used\nto add additional words to the vocabulary of the recognizer. See\n[usage limits](https://cloud.google.com/speech/limits#content).",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1beta2_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1beta2_SpeechTranscriptionConfig": {
+      "description": "Config for SPEECH_TRANSCRIPTION.",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechTranscriptionConfig",
+      "properties": {
+        "audioTracks": {
+          "description": "*Optional* For file formats, such as MXF or MKV, supporting multiple audio\ntracks, specify up to two tracks. Default: track 0.",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          },
+          "type": "array"
+        },
+        "diarizationSpeakerCount": {
+          "description": "*Optional*\nIf set, specifies the estimated number of speakers in the conversation.\nIf not set, defaults to '2'.\nIgnored unless enable_speaker_diarization is set to true.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "enableAutomaticPunctuation": {
+          "description": "*Optional* If 'true', adds punctuation to recognition result hypotheses.\nThis feature is only available in select languages. Setting this for\nrequests in other languages has no effect at all. The default 'false' value\ndoes not add punctuation to result hypotheses. NOTE: \"This is currently\noffered as an experimental service, complimentary to all users. In the\nfuture this may be exclusively available as a premium feature.\"",
+          "type": "boolean"
+        },
+        "enableSpeakerDiarization": {
+          "description": "*Optional* If 'true', enables speaker detection for each recognized word in\nthe top alternative of the recognition result using a speaker_tag provided\nin the WordInfo.\nNote: When this is true, we send all the words from the beginning of the\naudio for the top alternative in every consecutive responses.\nThis is done in order to improve our speaker tags as our models learn to\nidentify the speakers in the conversation over time.",
+          "type": "boolean"
+        },
+        "enableWordConfidence": {
+          "description": "*Optional* If `true`, the top result includes a list of words and the\nconfidence for those words. If `false`, no word-level confidence\ninformation is returned. The default is `false`.",
+          "type": "boolean"
+        },
+        "filterProfanity": {
+          "description": "*Optional* If set to `true`, the server will attempt to filter out\nprofanities, replacing all but the initial character in each filtered word\nwith asterisks, e.g. \"f***\". If set to `false` or omitted, profanities\nwon't be filtered out.",
+          "type": "boolean"
+        },
+        "languageCode": {
+          "description": "*Required* The language of the supplied audio as a\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag.\nExample: \"en-US\".\nSee [Language Support](https://cloud.google.com/speech/docs/languages)\nfor a list of the currently supported language codes.",
+          "type": "string"
+        },
+        "maxAlternatives": {
+          "description": "*Optional* Maximum number of recognition hypotheses to be returned.\nSpecifically, the maximum number of `SpeechRecognitionAlternative` messages\nwithin each `SpeechTranscription`. The server may return fewer than\n`max_alternatives`. Valid values are `0`-`30`. A value of `0` or `1` will\nreturn a maximum of one. If omitted, will return a maximum of one.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "speechContexts": {
+          "description": "*Optional* A means to provide context to assist the speech recognition.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechContext"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1beta2_VideoAnnotationProgress": {
       "description": "Annotation progress for a single video.",
       "id": "GoogleCloudVideointelligenceV1beta2_VideoAnnotationProgress",
@@ -705,6 +893,13 @@
             "$ref": "GoogleCloudVideointelligenceV1beta2_LabelAnnotation"
           },
           "type": "array"
+        },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechTranscription"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -731,6 +926,10 @@
         "shotChangeDetectionConfig": {
           "$ref": "GoogleCloudVideointelligenceV1beta2_ShotChangeDetectionConfig",
           "description": "Config for SHOT_CHANGE_DETECTION."
+        },
+        "speechTranscriptionConfig": {
+          "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechTranscriptionConfig",
+          "description": "Config for SPEECH_TRANSCRIPTION."
         }
       },
       "type": "object"
@@ -752,6 +951,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1beta2_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1beta2_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1p1beta1_AnnotateVideoProgress": {
       "description": "Video annotation progress. Included in the `metadata`\nfield of the `Operation` returned by the `GetOperation`\ncall of the `google::longrunning::Operations` service.",
       "id": "GoogleCloudVideointelligenceV1p1beta1_AnnotateVideoProgress",
@@ -1338,6 +1568,47 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1p2beta1_TextAnnotation": {
       "description": "Annotations related to one detected OCR text snippet. This will contain the\ncorresponding text, confidence value, and frame level information for each\ndetection.",
       "id": "GoogleCloudVideointelligenceV1p2beta1_TextAnnotation",
@@ -1472,6 +1743,13 @@
           },
           "type": "array"
         },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription"
+          },
+          "type": "array"
+        },
         "textAnnotations": {
           "description": "OCR text detection and tracking.\nAnnotations for list of detected text snippets. Each will have list of\nframe information associated with it.",
           "items": {
@@ -1499,6 +1777,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1p2beta1_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleLongrunning_Operation": {
       "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
       "id": "GoogleLongrunning_Operation",
diff --git a/videointelligence/v1beta2/videointelligence-gen.go b/videointelligence/v1beta2/videointelligence-gen.go
index 5da05d0..24a64dd 100644
--- a/videointelligence/v1beta2/videointelligence-gen.go
+++ b/videointelligence/v1beta2/videointelligence-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -403,6 +404,111 @@
 	return nil
 }
 
+// GoogleCloudVideointelligenceV1SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1VideoAnnotationProgress: Annotation
 // progress for a single video.
 type GoogleCloudVideointelligenceV1VideoAnnotationProgress struct {
@@ -476,6 +582,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Error") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -534,6 +643,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1WordInfo: Word-specific information for
+// recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleCloudVideointelligenceV1beta2AnnotateVideoProgress: Video
 // annotation progress. Included in the `metadata`
 // field of the `Operation` returned by the `GetOperation`
@@ -578,6 +772,7 @@
 	// flower.
 	//   "SHOT_CHANGE_DETECTION" - Shot change detection.
 	//   "EXPLICIT_CONTENT_DETECTION" - Explicit content detection.
+	//   "SPEECH_TRANSCRIPTION" - Speech transcription.
 	Features []string `json:"features,omitempty"`
 
 	// InputContent: The video data bytes.
@@ -1053,6 +1248,256 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1beta2SpeechContext: Provides "hints" to
+// the speech recognizer to favor specific words and phrases
+// in the results.
+type GoogleCloudVideointelligenceV1beta2SpeechContext struct {
+	// Phrases: *Optional* A list of strings containing words and phrases
+	// "hints" so that
+	// the speech recognition is more likely to recognize them. This can be
+	// used
+	// to improve the accuracy for specific words and phrases, for example,
+	// if
+	// specific commands are typically spoken by the user. This can also be
+	// used
+	// to add additional words to the vocabulary of the recognizer.
+	// See
+	// [usage limits](https://cloud.google.com/speech/limits#content).
+	Phrases []string `json:"phrases,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Phrases") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Phrases") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechContext) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechContext
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1beta2WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1beta2SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1beta2SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVideointelligenceV1beta2SpeechTranscriptionConfig: Config
+// for SPEECH_TRANSCRIPTION.
+type GoogleCloudVideointelligenceV1beta2SpeechTranscriptionConfig struct {
+	// AudioTracks: *Optional* For file formats, such as MXF or MKV,
+	// supporting multiple audio
+	// tracks, specify up to two tracks. Default: track 0.
+	AudioTracks []int64 `json:"audioTracks,omitempty"`
+
+	// DiarizationSpeakerCount: *Optional*
+	// If set, specifies the estimated number of speakers in the
+	// conversation.
+	// If not set, defaults to '2'.
+	// Ignored unless enable_speaker_diarization is set to true.
+	DiarizationSpeakerCount int64 `json:"diarizationSpeakerCount,omitempty"`
+
+	// EnableAutomaticPunctuation: *Optional* If 'true', adds punctuation to
+	// recognition result hypotheses.
+	// This feature is only available in select languages. Setting this
+	// for
+	// requests in other languages has no effect at all. The default 'false'
+	// value
+	// does not add punctuation to result hypotheses. NOTE: "This is
+	// currently
+	// offered as an experimental service, complimentary to all users. In
+	// the
+	// future this may be exclusively available as a premium feature."
+	EnableAutomaticPunctuation bool `json:"enableAutomaticPunctuation,omitempty"`
+
+	// EnableSpeakerDiarization: *Optional* If 'true', enables speaker
+	// detection for each recognized word in
+	// the top alternative of the recognition result using a speaker_tag
+	// provided
+	// in the WordInfo.
+	// Note: When this is true, we send all the words from the beginning of
+	// the
+	// audio for the top alternative in every consecutive responses.
+	// This is done in order to improve our speaker tags as our models learn
+	// to
+	// identify the speakers in the conversation over time.
+	EnableSpeakerDiarization bool `json:"enableSpeakerDiarization,omitempty"`
+
+	// EnableWordConfidence: *Optional* If `true`, the top result includes a
+	// list of words and the
+	// confidence for those words. If `false`, no word-level
+	// confidence
+	// information is returned. The default is `false`.
+	EnableWordConfidence bool `json:"enableWordConfidence,omitempty"`
+
+	// FilterProfanity: *Optional* If set to `true`, the server will attempt
+	// to filter out
+	// profanities, replacing all but the initial character in each filtered
+	// word
+	// with asterisks, e.g. "f***". If set to `false` or omitted,
+	// profanities
+	// won't be filtered out.
+	FilterProfanity bool `json:"filterProfanity,omitempty"`
+
+	// LanguageCode: *Required* The language of the supplied audio as
+	// a
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language
+	// tag.
+	// Example: "en-US".
+	// See [Language
+	// Support](https://cloud.google.com/speech/docs/languages)
+	// for a list of the currently supported language codes.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// MaxAlternatives: *Optional* Maximum number of recognition hypotheses
+	// to be returned.
+	// Specifically, the maximum number of `SpeechRecognitionAlternative`
+	// messages
+	// within each `SpeechTranscription`. The server may return fewer
+	// than
+	// `max_alternatives`. Valid values are `0`-`30`. A value of `0` or `1`
+	// will
+	// return a maximum of one. If omitted, will return a maximum of one.
+	MaxAlternatives int64 `json:"maxAlternatives,omitempty"`
+
+	// SpeechContexts: *Optional* A means to provide context to assist the
+	// speech recognition.
+	SpeechContexts []*GoogleCloudVideointelligenceV1beta2SpeechContext `json:"speechContexts,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AudioTracks") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "AudioTracks") 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 *GoogleCloudVideointelligenceV1beta2SpeechTranscriptionConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechTranscriptionConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1beta2VideoAnnotationProgress:
 // Annotation progress for a single video.
 type GoogleCloudVideointelligenceV1beta2VideoAnnotationProgress struct {
@@ -1126,6 +1571,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1beta2LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1beta2SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Error") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1169,6 +1617,9 @@
 	// ShotChangeDetectionConfig: Config for SHOT_CHANGE_DETECTION.
 	ShotChangeDetectionConfig *GoogleCloudVideointelligenceV1beta2ShotChangeDetectionConfig `json:"shotChangeDetectionConfig,omitempty"`
 
+	// SpeechTranscriptionConfig: Config for SPEECH_TRANSCRIPTION.
+	SpeechTranscriptionConfig *GoogleCloudVideointelligenceV1beta2SpeechTranscriptionConfig `json:"speechTranscriptionConfig,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g.
 	// "ExplicitContentDetectionConfig") to unconditionally include in API
 	// requests. By default, fields with empty values are omitted from API
@@ -1229,6 +1680,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1beta2WordInfo: Word-specific
+// information for recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1beta2WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1beta2WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleCloudVideointelligenceV1p1beta1AnnotateVideoProgress: Video
 // annotation progress. Included in the `metadata`
 // field of the `Operation` returned by the `GetOperation`
@@ -2445,6 +2981,111 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1p2beta1WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1p2beta1SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1p2beta1SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1p2beta1TextAnnotation: Annotations
 // related to one detected OCR text snippet. This will contain
 // the
@@ -2647,6 +3288,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1p2beta1LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1p2beta1SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// TextAnnotations: OCR text detection and tracking.
 	// Annotations for list of detected text snippets. Each will have list
 	// of
@@ -2711,6 +3355,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1p2beta1WordInfo: Word-specific
+// information for recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1p2beta1WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleLongrunningOperation: This resource represents a long-running
 // operation that is the result of a
 // network API call.
diff --git a/videointelligence/v1p1beta1/videointelligence-api.json b/videointelligence/v1p1beta1/videointelligence-api.json
index fd4ded7..6c6fc35 100644
--- a/videointelligence/v1p1beta1/videointelligence-api.json
+++ b/videointelligence/v1p1beta1/videointelligence-api.json
@@ -12,7 +12,7 @@
   "baseUrl": "https://videointelligence.googleapis.com/",
   "batchPath": "batch",
   "canonicalName": "Cloud Video Intelligence",
-  "description": "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.",
   "discoveryVersion": "v1",
   "documentationLink": "https://cloud.google.com/video-intelligence/docs/",
   "fullyEncodeReservedExpansion": true,
@@ -127,7 +127,7 @@
       }
     }
   },
-  "revision": "20181003",
+  "revision": "20181027",
   "rootUrl": "https://videointelligence.googleapis.com/",
   "schemas": {
     "GoogleCloudVideointelligenceV1_AnnotateVideoProgress": {
@@ -288,6 +288,47 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1_VideoAnnotationProgress": {
       "description": "Annotation progress for a single video.",
       "id": "GoogleCloudVideointelligenceV1_VideoAnnotationProgress",
@@ -357,6 +398,13 @@
             "$ref": "GoogleCloudVideointelligenceV1_LabelAnnotation"
           },
           "type": "array"
+        },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1_SpeechTranscription"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -378,6 +426,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1beta2_AnnotateVideoProgress": {
       "description": "Video annotation progress. Included in the `metadata`\nfield of the `Operation` returned by the `GetOperation`\ncall of the `google::longrunning::Operations` service.",
       "id": "GoogleCloudVideointelligenceV1beta2_AnnotateVideoProgress",
@@ -536,6 +615,47 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1beta2_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1beta2_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1beta2_VideoAnnotationProgress": {
       "description": "Annotation progress for a single video.",
       "id": "GoogleCloudVideointelligenceV1beta2_VideoAnnotationProgress",
@@ -605,6 +725,13 @@
             "$ref": "GoogleCloudVideointelligenceV1beta2_LabelAnnotation"
           },
           "type": "array"
+        },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1beta2_SpeechTranscription"
+          },
+          "type": "array"
         }
       },
       "type": "object"
@@ -626,6 +753,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1beta2_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1beta2_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1p1beta1_AnnotateVideoProgress": {
       "description": "Video annotation progress. Included in the `metadata`\nfield of the `Operation` returned by the `GetOperation`\ncall of the `google::longrunning::Operations` service.",
       "id": "GoogleCloudVideointelligenceV1p1beta1_AnnotateVideoProgress",
@@ -945,13 +1103,6 @@
       "description": "Config for SPEECH_TRANSCRIPTION.",
       "id": "GoogleCloudVideointelligenceV1p1beta1_SpeechTranscriptionConfig",
       "properties": {
-        "alternativeLanguageCodes": {
-          "description": "*Optional* A list of up to 3 additional\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tags,\nlisting possible alternative languages of the supplied video.\nSee [Language Support](/speech-to-text/docs/languages)\nfor a list of the currently supported language codes.\nIf alternative languages are listed, transcription result will contain\ntranscription in the most likely language detected, including the main\nlanguage_code. The transcription result will include the language tag\nof the language detected in the video.\nNote: This feature is only supported for Voice Command and Voice Search\nuse cases and performance may vary for other use cases (e.g., phone call\ntranscription).",
-          "items": {
-            "type": "string"
-          },
-          "type": "array"
-        },
         "audioTracks": {
           "description": "*Optional* For file formats, such as MXF or MKV, supporting multiple audio\ntracks, specify up to two tracks. Default: track 0.",
           "items": {
@@ -1417,6 +1568,47 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative",
+      "properties": {
+        "confidence": {
+          "description": "The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate or consistent.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "Transcript text representing the words that the user spoke.",
+          "type": "string"
+        },
+        "words": {
+          "description": "A list of word-specific information for each recognized word.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_WordInfo"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription": {
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription",
+      "properties": {
+        "alternatives": {
+          "description": "May contain one or more recognition hypotheses (up to the maximum specified\nin `max_alternatives`).  These alternatives are ordered in terms of\naccuracy, with the top (first) alternative being the most probable, as\nranked by the recognizer.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_SpeechRecognitionAlternative"
+          },
+          "type": "array"
+        },
+        "languageCode": {
+          "description": "Output only. The\n[BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag of the\nlanguage in this result. This language code was detected to have the most\nlikelihood of being spoken in the audio.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVideointelligenceV1p2beta1_TextAnnotation": {
       "description": "Annotations related to one detected OCR text snippet. This will contain the\ncorresponding text, confidence value, and frame level information for each\ndetection.",
       "id": "GoogleCloudVideointelligenceV1p2beta1_TextAnnotation",
@@ -1551,6 +1743,13 @@
           },
           "type": "array"
         },
+        "speechTranscriptions": {
+          "description": "Speech transcription.",
+          "items": {
+            "$ref": "GoogleCloudVideointelligenceV1p2beta1_SpeechTranscription"
+          },
+          "type": "array"
+        },
         "textAnnotations": {
           "description": "OCR text detection and tracking.\nAnnotations for list of detected text snippets. Each will have list of\nframe information associated with it.",
           "items": {
@@ -1578,6 +1777,37 @@
       },
       "type": "object"
     },
+    "GoogleCloudVideointelligenceV1p2beta1_WordInfo": {
+      "description": "Word-specific information for recognized words. Word information is only\nincluded in the response when certain request parameters are set, such\nas `enable_word_time_offsets`.",
+      "id": "GoogleCloudVideointelligenceV1p2beta1_WordInfo",
+      "properties": {
+        "confidence": {
+          "description": "Output only. The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is set only for the top alternative.\nThis field is not guaranteed to be accurate and users should not rely on it\nto be always provided.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "endTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the end of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "speakerTag": {
+          "description": "Output only. A distinct integer value is assigned for every speaker within\nthe audio. This field specifies which one of those speakers was detected to\nhave spoken this word. Value ranges from 1 up to diarization_speaker_count,\nand is only set if speaker diarization is enabled.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "startTime": {
+          "description": "Time offset relative to the beginning of the audio, and\ncorresponding to the start of the spoken word. This field is only set if\n`enable_word_time_offsets=true` and only in the top hypothesis. This is an\nexperimental feature and the accuracy of the time offset can vary.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "word": {
+          "description": "The word corresponding to this set of information.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "GoogleLongrunning_Operation": {
       "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
       "id": "GoogleLongrunning_Operation",
diff --git a/videointelligence/v1p1beta1/videointelligence-gen.go b/videointelligence/v1p1beta1/videointelligence-gen.go
index 65936e9..0e91b5f 100644
--- a/videointelligence/v1p1beta1/videointelligence-gen.go
+++ b/videointelligence/v1p1beta1/videointelligence-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -403,6 +404,111 @@
 	return nil
 }
 
+// GoogleCloudVideointelligenceV1SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1VideoAnnotationProgress: Annotation
 // progress for a single video.
 type GoogleCloudVideointelligenceV1VideoAnnotationProgress struct {
@@ -476,6 +582,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Error") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -534,6 +643,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1WordInfo: Word-specific information for
+// recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleCloudVideointelligenceV1beta2AnnotateVideoProgress: Video
 // annotation progress. Included in the `metadata`
 // field of the `Operation` returned by the `GetOperation`
@@ -852,6 +1046,111 @@
 	return nil
 }
 
+// GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1beta2WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1beta2SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1beta2SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1beta2SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1beta2VideoAnnotationProgress:
 // Annotation progress for a single video.
 type GoogleCloudVideointelligenceV1beta2VideoAnnotationProgress struct {
@@ -925,6 +1224,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1beta2LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1beta2SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Error") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -983,6 +1285,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1beta2WordInfo: Word-specific
+// information for recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1beta2WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1beta2WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1beta2WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1beta2WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleCloudVideointelligenceV1p1beta1AnnotateVideoProgress: Video
 // annotation progress. Included in the `metadata`
 // field of the `Operation` returned by the `GetOperation`
@@ -1652,27 +2039,6 @@
 // GoogleCloudVideointelligenceV1p1beta1SpeechTranscriptionConfig:
 // Config for SPEECH_TRANSCRIPTION.
 type GoogleCloudVideointelligenceV1p1beta1SpeechTranscriptionConfig struct {
-	// AlternativeLanguageCodes: *Optional* A list of up to 3
-	// additional
-	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language
-	// tags,
-	// listing possible alternative languages of the supplied video.
-	// See [Language Support](/speech-to-text/docs/languages)
-	// for a list of the currently supported language codes.
-	// If alternative languages are listed, transcription result will
-	// contain
-	// transcription in the most likely language detected, including the
-	// main
-	// language_code. The transcription result will include the language
-	// tag
-	// of the language detected in the video.
-	// Note: This feature is only supported for Voice Command and Voice
-	// Search
-	// use cases and performance may vary for other use cases (e.g., phone
-	// call
-	// transcription).
-	AlternativeLanguageCodes []string `json:"alternativeLanguageCodes,omitempty"`
-
 	// AudioTracks: *Optional* For file formats, such as MXF or MKV,
 	// supporting multiple audio
 	// tracks, specify up to two tracks. Default: track 0.
@@ -1752,22 +2118,20 @@
 	// speech recognition.
 	SpeechContexts []*GoogleCloudVideointelligenceV1p1beta1SpeechContext `json:"speechContexts,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g.
-	// "AlternativeLanguageCodes") to unconditionally include in API
-	// requests. By default, fields with empty values are omitted from API
-	// requests. However, any non-pointer, non-interface field appearing in
-	// ForceSendFields will be sent to the server regardless of whether the
-	// field is empty or not. This may be used to include empty fields in
-	// Patch requests.
+	// ForceSendFields is a list of field names (e.g. "AudioTracks") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "AlternativeLanguageCodes")
-	// to include in API requests with the JSON null value. By default,
-	// fields with empty values are omitted from API requests. However, any
-	// field with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
+	// NullFields is a list of field names (e.g. "AudioTracks") 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:"-"`
 }
 
@@ -2617,6 +2981,111 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative:
+// Alternative hypotheses (a.k.a. n-best list).
+type GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative struct {
+	// Confidence: The confidence estimate between 0.0 and 1.0. A higher
+	// number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is typically provided only for the top
+	// hypothesis, and
+	// only for `is_final=true` results. Clients should not rely on
+	// the
+	// `confidence` field as it is not guaranteed to be accurate or
+	// consistent.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// Transcript: Transcript text representing the words that the user
+	// spoke.
+	Transcript string `json:"transcript,omitempty"`
+
+	// Words: A list of word-specific information for each recognized word.
+	Words []*GoogleCloudVideointelligenceV1p2beta1WordInfo `json:"words,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
+// GoogleCloudVideointelligenceV1p2beta1SpeechTranscription: A speech
+// recognition result corresponding to a portion of the audio.
+type GoogleCloudVideointelligenceV1p2beta1SpeechTranscription struct {
+	// Alternatives: May contain one or more recognition hypotheses (up to
+	// the maximum specified
+	// in `max_alternatives`).  These alternatives are ordered in terms
+	// of
+	// accuracy, with the top (first) alternative being the most probable,
+	// as
+	// ranked by the recognizer.
+	Alternatives []*GoogleCloudVideointelligenceV1p2beta1SpeechRecognitionAlternative `json:"alternatives,omitempty"`
+
+	// LanguageCode: Output only.
+	// The
+	// [BCP-47](https://www.rfc-editor.org/rfc/bcp/bcp47.txt) language tag
+	// of the
+	// language in this result. This language code was detected to have the
+	// most
+	// likelihood of being spoken in the audio.
+	LanguageCode string `json:"languageCode,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Alternatives") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Alternatives") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1SpeechTranscription) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1SpeechTranscription
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVideointelligenceV1p2beta1TextAnnotation: Annotations
 // related to one detected OCR text snippet. This will contain
 // the
@@ -2819,6 +3288,9 @@
 	// There is exactly one element for each unique label.
 	ShotLabelAnnotations []*GoogleCloudVideointelligenceV1p2beta1LabelAnnotation `json:"shotLabelAnnotations,omitempty"`
 
+	// SpeechTranscriptions: Speech transcription.
+	SpeechTranscriptions []*GoogleCloudVideointelligenceV1p2beta1SpeechTranscription `json:"speechTranscriptions,omitempty"`
+
 	// TextAnnotations: OCR text detection and tracking.
 	// Annotations for list of detected text snippets. Each will have list
 	// of
@@ -2883,6 +3355,91 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVideointelligenceV1p2beta1WordInfo: Word-specific
+// information for recognized words. Word information is only
+// included in the response when certain request parameters are set,
+// such
+// as `enable_word_time_offsets`.
+type GoogleCloudVideointelligenceV1p2beta1WordInfo struct {
+	// Confidence: Output only. The confidence estimate between 0.0 and 1.0.
+	// A higher number
+	// indicates an estimated greater likelihood that the recognized words
+	// are
+	// correct. This field is set only for the top alternative.
+	// This field is not guaranteed to be accurate and users should not rely
+	// on it
+	// to be always provided.
+	// The default of 0.0 is a sentinel value indicating `confidence` was
+	// not set.
+	Confidence float64 `json:"confidence,omitempty"`
+
+	// EndTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the end of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	EndTime string `json:"endTime,omitempty"`
+
+	// SpeakerTag: Output only. A distinct integer value is assigned for
+	// every speaker within
+	// the audio. This field specifies which one of those speakers was
+	// detected to
+	// have spoken this word. Value ranges from 1 up to
+	// diarization_speaker_count,
+	// and is only set if speaker diarization is enabled.
+	SpeakerTag int64 `json:"speakerTag,omitempty"`
+
+	// StartTime: Time offset relative to the beginning of the audio,
+	// and
+	// corresponding to the start of the spoken word. This field is only set
+	// if
+	// `enable_word_time_offsets=true` and only in the top hypothesis. This
+	// is an
+	// experimental feature and the accuracy of the time offset can vary.
+	StartTime string `json:"startTime,omitempty"`
+
+	// Word: The word corresponding to this set of information.
+	Word string `json:"word,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Confidence") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Confidence") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1WordInfo) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1WordInfo
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVideointelligenceV1p2beta1WordInfo) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVideointelligenceV1p2beta1WordInfo
+	var s1 struct {
+		Confidence gensupport.JSONFloat64 `json:"confidence"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Confidence = float64(s1.Confidence)
+	return nil
+}
+
 // GoogleLongrunningOperation: This resource represents a long-running
 // operation that is the result of a
 // network API call.
diff --git a/vision/v1/vision-api.json b/vision/v1/vision-api.json
index bfbc7b7..509b2b2 100644
--- a/vision/v1/vision-api.json
+++ b/vision/v1/vision-api.json
@@ -313,11 +313,613 @@
           ]
         }
       }
+    },
+    "projects": {
+      "resources": {
+        "locations": {
+          "resources": {
+            "productSets": {
+              "methods": {
+                "addProduct": {
+                  "description": "Adds a Product to the specified ProductSet. If the Product is already\npresent, no change is made.\n\nOne Product can be added to at most 100 ProductSets.\n\nPossible errors:\n\n* Returns NOT_FOUND if the Product or the ProductSet doesn't exist.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}:addProduct",
+                  "httpMethod": "POST",
+                  "id": "vision.projects.locations.productSets.addProduct",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "The resource name for the ProductSet to modify.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}:addProduct",
+                  "request": {
+                    "$ref": "AddProductToProductSetRequest"
+                  },
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "create": {
+                  "description": "Creates and returns a new ProductSet resource.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if display_name is missing, or is longer than\n  4096 characters.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets",
+                  "httpMethod": "POST",
+                  "id": "vision.projects.locations.productSets.create",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "The project in which the ProductSet should be created.\n\nFormat is `projects/PROJECT_ID/locations/LOC_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "productSetId": {
+                      "description": "A user-supplied resource id for this ProductSet. If set, the server will\nattempt to use this value as the resource id. If it is already in use, an\nerror is returned with code ALREADY_EXISTS. Must be at most 128 characters\nlong. It cannot contain the character `/`.",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/productSets",
+                  "request": {
+                    "$ref": "ProductSet"
+                  },
+                  "response": {
+                    "$ref": "ProductSet"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "delete": {
+                  "description": "Permanently deletes a ProductSet. All Products and ReferenceImages in the\nProductSet will be deleted.\n\nThe actual image files are not deleted from Google Cloud Storage.\n\nPossible errors:\n\n* Returns NOT_FOUND if the ProductSet does not exist.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}",
+                  "httpMethod": "DELETE",
+                  "id": "vision.projects.locations.productSets.delete",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Resource name of the ProductSet to delete.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "get": {
+                  "description": "Gets information associated with a ProductSet.\n\nPossible errors:\n\n* Returns NOT_FOUND if the ProductSet does not exist.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}",
+                  "httpMethod": "GET",
+                  "id": "vision.projects.locations.productSets.get",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Resource name of the ProductSet to get.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOG_ID/productSets/PRODUCT_SET_ID`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "ProductSet"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "import": {
+                  "description": "Asynchronous API that imports a list of reference images to specified\nproduct sets based on a list of image information.\n\nThe google.longrunning.Operation API can be used to keep track of the\nprogress and results of the request.\n`Operation.metadata` contains `BatchOperationMetadata`. (progress)\n`Operation.response` contains `ImportProductSetsResponse`. (results)\n\nThe input source of this method is a csv file on Google Cloud Storage.\nFor the format of the csv file please see\nImportProductSetsGcsSource.csv_file_uri.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets:import",
+                  "httpMethod": "POST",
+                  "id": "vision.projects.locations.productSets.import",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "The project in which the ProductSets should be imported.\n\nFormat is `projects/PROJECT_ID/locations/LOC_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/productSets:import",
+                  "request": {
+                    "$ref": "ImportProductSetsRequest"
+                  },
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "list": {
+                  "description": "Lists ProductSets in an unspecified order.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if page_size is greater than 100, or less\n  than 1.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets",
+                  "httpMethod": "GET",
+                  "id": "vision.projects.locations.productSets.list",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "pageSize": {
+                      "description": "The maximum number of items to return. Default 10, maximum 100.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The next_page_token returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "The project from which ProductSets should be listed.\n\nFormat is `projects/PROJECT_ID/locations/LOC_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/productSets",
+                  "response": {
+                    "$ref": "ListProductSetsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "patch": {
+                  "description": "Makes changes to a ProductSet resource.\nOnly display_name can be updated currently.\n\nPossible errors:\n\n* Returns NOT_FOUND if the ProductSet does not exist.\n* Returns INVALID_ARGUMENT if display_name is present in update_mask but\n  missing from the request or longer than 4096 characters.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}",
+                  "httpMethod": "PATCH",
+                  "id": "vision.projects.locations.productSets.patch",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "The resource name of the ProductSet.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.\n\nThis field is ignored when creating a ProductSet.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "updateMask": {
+                      "description": "The FieldMask that specifies which fields to\nupdate.\nIf update_mask isn't specified, all mutable fields are to be updated.\nValid mask path is `display_name`.",
+                      "format": "google-fieldmask",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "request": {
+                    "$ref": "ProductSet"
+                  },
+                  "response": {
+                    "$ref": "ProductSet"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "removeProduct": {
+                  "description": "Removes a Product from the specified ProductSet.\n\nPossible errors:\n\n* Returns NOT_FOUND If the Product is not found under the ProductSet.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}:removeProduct",
+                  "httpMethod": "POST",
+                  "id": "vision.projects.locations.productSets.removeProduct",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "The resource name for the ProductSet to modify.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}:removeProduct",
+                  "request": {
+                    "$ref": "RemoveProductFromProductSetRequest"
+                  },
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                }
+              },
+              "resources": {
+                "products": {
+                  "methods": {
+                    "list": {
+                      "description": "Lists the Products in a ProductSet, in an unspecified order. If the\nProductSet does not exist, the products field of the response will be\nempty.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if page_size is greater than 100 or less than 1.",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}/products",
+                      "httpMethod": "GET",
+                      "id": "vision.projects.locations.productSets.products.list",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "parameters": {
+                        "name": {
+                          "description": "The ProductSet resource for which to retrieve Products.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        },
+                        "pageSize": {
+                          "description": "The maximum number of items to return. Default 10, maximum 100.",
+                          "format": "int32",
+                          "location": "query",
+                          "type": "integer"
+                        },
+                        "pageToken": {
+                          "description": "The next_page_token returned from a previous List request, if any.",
+                          "location": "query",
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+name}/products",
+                      "response": {
+                        "$ref": "ListProductsInProductSetResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-vision"
+                      ]
+                    }
+                  }
+                }
+              }
+            },
+            "products": {
+              "methods": {
+                "create": {
+                  "description": "Creates and returns a new product resource.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if display_name is missing or longer than 4096\n  characters.\n* Returns INVALID_ARGUMENT if description is longer than 4096 characters.\n* Returns INVALID_ARGUMENT if product_category is missing or invalid.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products",
+                  "httpMethod": "POST",
+                  "id": "vision.projects.locations.products.create",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "description": "The project in which the Product should be created.\n\nFormat is\n`projects/PROJECT_ID/locations/LOC_ID`.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "productId": {
+                      "description": "A user-supplied resource id for this Product. If set, the server will\nattempt to use this value as the resource id. If it is already in use, an\nerror is returned with code ALREADY_EXISTS. Must be at most 128 characters\nlong. It cannot contain the character `/`.",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/products",
+                  "request": {
+                    "$ref": "Product"
+                  },
+                  "response": {
+                    "$ref": "Product"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "delete": {
+                  "description": "Permanently deletes a product and its reference images.\n\nMetadata of the product and all its images will be deleted right away, but\nsearch queries against ProductSets containing the product may still work\nuntil all related caches are refreshed.\n\nPossible errors:\n\n* Returns NOT_FOUND if the product does not exist.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}",
+                  "httpMethod": "DELETE",
+                  "id": "vision.projects.locations.products.delete",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Resource name of product to delete.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "get": {
+                  "description": "Gets information associated with a Product.\n\nPossible errors:\n\n* Returns NOT_FOUND if the Product does not exist.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}",
+                  "httpMethod": "GET",
+                  "id": "vision.projects.locations.products.get",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "Resource name of the Product to get.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "response": {
+                    "$ref": "Product"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "list": {
+                  "description": "Lists products in an unspecified order.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if page_size is greater than 100 or less than 1.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products",
+                  "httpMethod": "GET",
+                  "id": "vision.projects.locations.products.list",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "parameters": {
+                    "pageSize": {
+                      "description": "The maximum number of items to return. Default 10, maximum 100.",
+                      "format": "int32",
+                      "location": "query",
+                      "type": "integer"
+                    },
+                    "pageToken": {
+                      "description": "The next_page_token returned from a previous List request, if any.",
+                      "location": "query",
+                      "type": "string"
+                    },
+                    "parent": {
+                      "description": "The project OR ProductSet from which Products should be listed.\n\nFormat:\n`projects/PROJECT_ID/locations/LOC_ID`",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+parent}/products",
+                  "response": {
+                    "$ref": "ListProductsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                },
+                "patch": {
+                  "description": "Makes changes to a Product resource.\nOnly the `display_name`, `description`, and `labels` fields can be updated\nright now.\n\nIf labels are updated, the change will not be reflected in queries until\nthe next index time.\n\nPossible errors:\n\n* Returns NOT_FOUND if the Product does not exist.\n* Returns INVALID_ARGUMENT if display_name is present in update_mask but is\n  missing from the request or longer than 4096 characters.\n* Returns INVALID_ARGUMENT if description is present in update_mask but is\n  longer than 4096 characters.\n* Returns INVALID_ARGUMENT if product_category is present in update_mask.",
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}",
+                  "httpMethod": "PATCH",
+                  "id": "vision.projects.locations.products.patch",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+                      "location": "path",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "updateMask": {
+                      "description": "The FieldMask that specifies which fields\nto update.\nIf update_mask isn't specified, all mutable fields are to be updated.\nValid mask paths include `product_labels`, `display_name`, and\n`description`.",
+                      "format": "google-fieldmask",
+                      "location": "query",
+                      "type": "string"
+                    }
+                  },
+                  "path": "v1/{+name}",
+                  "request": {
+                    "$ref": "Product"
+                  },
+                  "response": {
+                    "$ref": "Product"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud-vision"
+                  ]
+                }
+              },
+              "resources": {
+                "referenceImages": {
+                  "methods": {
+                    "create": {
+                      "description": "Creates and returns a new ReferenceImage resource.\n\nThe `bounding_poly` field is optional. If `bounding_poly` is not specified,\nthe system will try to detect regions of interest in the image that are\ncompatible with the product_category on the parent product. If it is\nspecified, detection is ALWAYS skipped. The system converts polygons into\nnon-rotated rectangles.\n\nNote that the pipeline will resize the image if the image resolution is too\nlarge to process (above 50MP).\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if the image_uri is missing or longer than 4096\n  characters.\n* Returns INVALID_ARGUMENT if the product does not exist.\n* Returns INVALID_ARGUMENT if bounding_poly is not provided, and nothing\n  compatible with the parent product's product_category is detected.\n* Returns INVALID_ARGUMENT if bounding_poly contains more than 10 polygons.",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages",
+                      "httpMethod": "POST",
+                      "id": "vision.projects.locations.products.referenceImages.create",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "parent": {
+                          "description": "Resource name of the product in which to create the reference image.\n\nFormat is\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        },
+                        "referenceImageId": {
+                          "description": "A user-supplied resource id for the ReferenceImage to be added. If set,\nthe server will attempt to use this value as the resource id. If it is\nalready in use, an error is returned with code ALREADY_EXISTS. Must be at\nmost 128 characters long. It cannot contain the character `/`.",
+                          "location": "query",
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+parent}/referenceImages",
+                      "request": {
+                        "$ref": "ReferenceImage"
+                      },
+                      "response": {
+                        "$ref": "ReferenceImage"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-vision"
+                      ]
+                    },
+                    "delete": {
+                      "description": "Permanently deletes a reference image.\n\nThe image metadata will be deleted right away, but search queries\nagainst ProductSets containing the image may still work until all related\ncaches are refreshed.\n\nThe actual image files are not deleted from Google Cloud Storage.\n\nPossible errors:\n\n* Returns NOT_FOUND if the reference image does not exist.",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages/{referenceImagesId}",
+                      "httpMethod": "DELETE",
+                      "id": "vision.projects.locations.products.referenceImages.delete",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "parameters": {
+                        "name": {
+                          "description": "The resource name of the reference image to delete.\n\nFormat is:\n\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referenceImages/IMAGE_ID`",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+/referenceImages/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+name}",
+                      "response": {
+                        "$ref": "Empty"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-vision"
+                      ]
+                    },
+                    "get": {
+                      "description": "Gets information associated with a ReferenceImage.\n\nPossible errors:\n\n* Returns NOT_FOUND if the specified image does not exist.",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages/{referenceImagesId}",
+                      "httpMethod": "GET",
+                      "id": "vision.projects.locations.products.referenceImages.get",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "parameters": {
+                        "name": {
+                          "description": "The resource name of the ReferenceImage to get.\n\nFormat is:\n\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referenceImages/IMAGE_ID`.",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+/referenceImages/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+name}",
+                      "response": {
+                        "$ref": "ReferenceImage"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-vision"
+                      ]
+                    },
+                    "list": {
+                      "description": "Lists reference images.\n\nPossible errors:\n\n* Returns NOT_FOUND if the parent product does not exist.\n* Returns INVALID_ARGUMENT if the page_size is greater than 100, or less\n  than 1.",
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages",
+                      "httpMethod": "GET",
+                      "id": "vision.projects.locations.products.referenceImages.list",
+                      "parameterOrder": [
+                        "parent"
+                      ],
+                      "parameters": {
+                        "pageSize": {
+                          "description": "The maximum number of items to return. Default 10, maximum 100.",
+                          "format": "int32",
+                          "location": "query",
+                          "type": "integer"
+                        },
+                        "pageToken": {
+                          "description": "A token identifying a page of results to be returned. This is the value\nof `nextPageToken` returned in a previous reference image list request.\n\nDefaults to the first page if not specified.",
+                          "location": "query",
+                          "type": "string"
+                        },
+                        "parent": {
+                          "description": "Resource name of the product containing the reference images.\n\nFormat is\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.",
+                          "location": "path",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "path": "v1/{+parent}/referenceImages",
+                      "response": {
+                        "$ref": "ListReferenceImagesResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/cloud-vision"
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
     }
   },
-  "revision": "20180928",
+  "revision": "20181031",
   "rootUrl": "https://vision.googleapis.com/",
   "schemas": {
+    "AddProductToProductSetRequest": {
+      "description": "Request message for the `AddProductToProductSet` method.",
+      "id": "AddProductToProductSetRequest",
+      "properties": {
+        "product": {
+          "description": "The resource name for the Product to be added to this ProductSet.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "AnnotateFileResponse": {
       "description": "Response to a single file annotation request. A file may contain one or more\nimages, which individually have their own responses.",
       "id": "AnnotateFileResponse",
@@ -417,6 +1019,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -528,6 +1134,41 @@
       },
       "type": "object"
     },
+    "BatchOperationMetadata": {
+      "description": "Metadata for the batch operations such as the current state.\n\nThis is included in the `metadata` field of the `Operation` returned by the\n`GetOperation` call of the `google::longrunning::Operations` service.",
+      "id": "BatchOperationMetadata",
+      "properties": {
+        "endTime": {
+          "description": "The time when the batch request is finished and\ngoogle.longrunning.Operation.done is set to true.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "description": "The current state of the batch operation.",
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "PROCESSING",
+            "SUCCESSFUL",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "enumDescriptions": [
+            "Invalid.",
+            "Request is actively being processed.",
+            "The request is done and at least one item has been successfully\nprocessed.",
+            "The request is done and no item has been successfully processed.",
+            "The request is done after the longrunning.Operations.CancelOperation has\nbeen called by the user.  Any records that were processed before the\ncancel command are output as specified in the request."
+          ],
+          "type": "string"
+        },
+        "submitTime": {
+          "description": "The time when the batch request was submitted to the server.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Block": {
       "description": "Logical element on the page.",
       "id": "Block",
@@ -1033,6 +1674,7 @@
             "IMAGE_PROPERTIES",
             "CROP_HINTS",
             "WEB_DETECTION",
+            "PRODUCT_SEARCH",
             "OBJECT_LOCALIZATION"
           ],
           "enumDescriptions": [
@@ -1047,6 +1689,7 @@
             "Compute a set of image properties, such as the\nimage's dominant colors.",
             "Run crop hints.",
             "Run web detection.",
+            "Run Product Search.",
             "Run localizer for object detection."
           ],
           "type": "string"
@@ -1153,6 +1796,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "GoogleCloudVisionV1p1beta1SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -1891,6 +2538,115 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p1beta1Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "GoogleCloudVisionV1p1beta1Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductKeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductKeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "GoogleCloudVisionV1p1beta1ProductKeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResultsResult": {
+      "description": "Information about a product.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "GoogleCloudVisionV1p1beta1Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p1beta1Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "GoogleCloudVisionV1p1beta1Property",
@@ -2380,6 +3136,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "GoogleCloudVisionV1p2beta1SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -3142,6 +3902,115 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p2beta1Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "GoogleCloudVisionV1p2beta1Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductKeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductKeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "GoogleCloudVisionV1p2beta1ProductKeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResultsResult": {
+      "description": "Information about a product.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "GoogleCloudVisionV1p2beta1Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p2beta1Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "GoogleCloudVisionV1p2beta1Property",
@@ -4507,6 +5376,31 @@
           "format": "google-datetime",
           "type": "string"
         },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p3beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
         "results": {
           "description": "List of results, one for each product match.",
           "items": {
@@ -4971,6 +5865,24 @@
       },
       "type": "object"
     },
+    "GroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "Result"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "Image": {
       "description": "Client image to perform Google Cloud Vision API tasks over.",
       "id": "Image",
@@ -5022,6 +5934,10 @@
           "$ref": "LatLongRect",
           "description": "Not used."
         },
+        "productSearchParams": {
+          "$ref": "ProductSearchParams",
+          "description": "Parameters for product search."
+        },
         "webDetectionParams": {
           "$ref": "WebDetectionParams",
           "description": "Parameters for web detection."
@@ -5055,6 +5971,60 @@
       },
       "type": "object"
     },
+    "ImportProductSetsGcsSource": {
+      "description": "The Google Cloud Storage location for a csv file which preserves a list of\nImportProductSetRequests in each line.",
+      "id": "ImportProductSetsGcsSource",
+      "properties": {
+        "csvFileUri": {
+          "description": "The Google Cloud Storage URI of the input csv file.\n\nThe URI must start with `gs://`.\n\nThe format of the input csv file should be one image per line.\nIn each line, there are 8 columns.\n\n1.  image-uri\n2.  image-id\n3.  product-set-id\n4.  product-id\n5.  product-category\n6.  product-display-name\n7.  labels\n8.  bounding-poly\n\nThe `image-uri`, `product-set-id`, `product-id`, and `product-category`\ncolumns are required. All other columns are optional.\n\nIf the `ProductSet` or `Product` specified by the `product-set-id` and\n`product-id` values does not exist, then the system will create a new\n`ProductSet` or `Product` for the image. In this case, the\n`product-display-name` column refers to\ndisplay_name, the\n`product-category` column refers to\nproduct_category, and the\n`labels` column refers to product_labels.\n\nThe `image-id` column is optional but must be unique if provided. If it is\nempty, the system will automatically assign a unique id to the image.\n\nThe `product-display-name` column is optional. If it is empty, the system\nsets the display_name field for the product to a\nspace (\" \"). You can update the `display_name` later by using the API.\n\nIf a `Product` with the specified `product-id` already exists, then the\nsystem ignores the `product-display-name`, `product-category`, and `labels`\ncolumns.\n\nThe `labels` column (optional) is a line containing a list of\ncomma-separated key-value pairs, in the following format:\n\n    \"key_1=value_1,key_2=value_2,...,key_n=value_n\"\n\nThe `bounding-poly` column (optional) identifies one region of\ninterest from the image in the same manner as `CreateReferenceImage`. If\nyou do not specify the `bounding-poly` column, then the system will try to\ndetect regions of interest automatically.\n\nAt most one `bounding-poly` column is allowed per line. If the image\ncontains multiple regions of interest, add a line to the CSV file that\nincludes the same product information, and the `bounding-poly` values for\neach region of interest.\n\nThe `bounding-poly` column must contain an even number of comma-separated\nnumbers, in the format \"p1_x,p1_y,p2_x,p2_y,...,pn_x,pn_y\". Use\nnon-negative integers for absolute bounding polygons, and float values\nin [0, 1] for normalized bounding polygons.\n\nThe system will resize the image if the image resolution is too\nlarge to process (larger than 20MP).",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ImportProductSetsInputConfig": {
+      "description": "The input content for the `ImportProductSets` method.",
+      "id": "ImportProductSetsInputConfig",
+      "properties": {
+        "gcsSource": {
+          "$ref": "ImportProductSetsGcsSource",
+          "description": "The Google Cloud Storage location for a csv file which preserves a list\nof ImportProductSetRequests in each line."
+        }
+      },
+      "type": "object"
+    },
+    "ImportProductSetsRequest": {
+      "description": "Request message for the `ImportProductSets` method.",
+      "id": "ImportProductSetsRequest",
+      "properties": {
+        "inputConfig": {
+          "$ref": "ImportProductSetsInputConfig",
+          "description": "The input content for the list of requests."
+        }
+      },
+      "type": "object"
+    },
+    "ImportProductSetsResponse": {
+      "description": "Response message for the `ImportProductSets` method.\n\nThis message is returned by the\ngoogle.longrunning.Operations.GetOperation method in the returned\ngoogle.longrunning.Operation.response field.",
+      "id": "ImportProductSetsResponse",
+      "properties": {
+        "referenceImages": {
+          "description": "The list of reference_images that are imported successfully.",
+          "items": {
+            "$ref": "ReferenceImage"
+          },
+          "type": "array"
+        },
+        "statuses": {
+          "description": "The rpc status for each ImportProductSet request, including both successes\nand errors.\n\nThe number of statuses here matches the number of lines in the csv file,\nand statuses[i] stores the success or failure status of processing the i-th\nline of the csv, starting from line 0.",
+          "items": {
+            "$ref": "Status"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "InputConfig": {
       "description": "The desired input location and metadata.",
       "id": "InputConfig",
@@ -5070,6 +6040,21 @@
       },
       "type": "object"
     },
+    "KeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "KeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Landmark": {
       "description": "A face-specific landmark (for example, a face feature).",
       "id": "Landmark",
@@ -5209,6 +6194,83 @@
       },
       "type": "object"
     },
+    "ListProductSetsResponse": {
+      "description": "Response message for the `ListProductSets` method.",
+      "id": "ListProductSetsResponse",
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no more\nresults in the list.",
+          "type": "string"
+        },
+        "productSets": {
+          "description": "List of ProductSets.",
+          "items": {
+            "$ref": "ProductSet"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ListProductsInProductSetResponse": {
+      "description": "Response message for the `ListProductsInProductSet` method.",
+      "id": "ListProductsInProductSetResponse",
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no more\nresults in the list.",
+          "type": "string"
+        },
+        "products": {
+          "description": "The list of Products.",
+          "items": {
+            "$ref": "Product"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ListProductsResponse": {
+      "description": "Response message for the `ListProducts` method.",
+      "id": "ListProductsResponse",
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no more\nresults in the list.",
+          "type": "string"
+        },
+        "products": {
+          "description": "List of products.",
+          "items": {
+            "$ref": "Product"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ListReferenceImagesResponse": {
+      "description": "Response message for the `ListReferenceImages` method.",
+      "id": "ListReferenceImagesResponse",
+      "properties": {
+        "nextPageToken": {
+          "description": "The next_page_token returned from a previous List request, if any.",
+          "type": "string"
+        },
+        "pageSize": {
+          "description": "The maximum number of items to return. Default 10, maximum 100.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "referenceImages": {
+          "description": "The list of reference images.",
+          "items": {
+            "$ref": "ReferenceImage"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "LocalizedObjectAnnotation": {
       "description": "Set of detected objects with bounding boxes.",
       "id": "LocalizedObjectAnnotation",
@@ -5433,6 +6495,112 @@
       },
       "type": "object"
     },
+    "Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "KeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ProductSearchParams": {
+      "description": "Parameters for a product search request.",
+      "id": "ProductSearchParams",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "BoundingPoly",
+          "description": "The bounding polygon around the area of interest in the image.\nOptional. If it is not specified, system discretion will be applied."
+        },
+        "filter": {
+          "description": "The filtering expression. This can be used to restrict search results based\non Product labels. We currently support an AND of OR of key-value\nexpressions, where each expression within an OR must have the same key.\n\nFor example, \"(color = red OR color = blue) AND brand = Google\" is\nacceptable, but not \"(color = red OR brand = Google)\" or \"color: red\".",
+          "type": "string"
+        },
+        "productCategories": {
+          "description": "The list of product categories to search in. Currently, we only consider\nthe first category, and either \"homegoods\", \"apparel\", or \"toys\" should be\nspecified.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "productSet": {
+          "description": "The resource name of a ProductSet to be searched for similar images.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "Result"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ProductSet": {
+      "description": "A ProductSet contains Products. A ProductSet can contain a maximum of 1\nmillion reference images. If the limit is exceeded, periodic indexing will\nfail.",
+      "id": "ProductSet",
+      "properties": {
+        "displayName": {
+          "description": "The user-provided name for this ProductSet. Must not be empty. Must be at\nmost 4096 characters long.",
+          "type": "string"
+        },
+        "indexError": {
+          "$ref": "Status",
+          "description": "Output only. If there was an error with indexing the product set, the field\nis populated.\n\nThis field is ignored when creating a ProductSet."
+        },
+        "indexTime": {
+          "description": "Output only. The time at which this ProductSet was last indexed. Query\nresults will reflect all updates before this time. If this ProductSet has\nnever been indexed, this field is 0.\n\nThis field is ignored when creating a ProductSet.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the ProductSet.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.\n\nThis field is ignored when creating a ProductSet.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "Property",
@@ -5453,6 +6621,59 @@
       },
       "type": "object"
     },
+    "ReferenceImage": {
+      "description": "A `ReferenceImage` represents a product image and its associated metadata,\nsuch as bounding boxes.",
+      "id": "ReferenceImage",
+      "properties": {
+        "boundingPolys": {
+          "description": "Bounding polygons around the areas of interest in the reference image.\nOptional. If this field is empty, the system will try to detect regions of\ninterest. At most 10 bounding polygons will be used.\n\nThe provided shape is converted into a non-rotated rectangle. Once\nconverted, the small edge of the rectangle must be greater than or equal\nto 300 pixels. The aspect ratio must be 1:4 or less (i.e. 1:3 is ok; 1:5\nis not).",
+          "items": {
+            "$ref": "BoundingPoly"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "The resource name of the reference image.\n\nFormat is:\n\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referenceImages/IMAGE_ID`.\n\nThis field is ignored when creating a reference image.",
+          "type": "string"
+        },
+        "uri": {
+          "description": "The Google Cloud Storage URI of the reference image.\n\nThe URI must start with `gs://`.\n\nRequired.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "RemoveProductFromProductSetRequest": {
+      "description": "Request message for the `RemoveProductFromProductSet` method.",
+      "id": "RemoveProductFromProductSetRequest",
+      "properties": {
+        "product": {
+          "description": "The resource name for the Product to be removed from this ProductSet.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Result": {
+      "description": "Information about a product.",
+      "id": "Result",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "SafeSearchAnnotation": {
       "description": "Set of features pertaining to the image, computed by computer vision\nmethods over safe-search verticals (for example, adult, spoof, medical,\nviolence).",
       "id": "SafeSearchAnnotation",
diff --git a/vision/v1/vision-gen.go b/vision/v1/vision-gen.go
index 9d6903c..4cdb4c4 100644
--- a/vision/v1/vision-gen.go
+++ b/vision/v1/vision-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -65,6 +66,7 @@
 	s.Images = NewImagesService(s)
 	s.Locations = NewLocationsService(s)
 	s.Operations = NewOperationsService(s)
+	s.Projects = NewProjectsService(s)
 	return s, nil
 }
 
@@ -80,6 +82,8 @@
 	Locations *LocationsService
 
 	Operations *OperationsService
+
+	Projects *ProjectsService
 }
 
 func (s *Service) userAgent() string {
@@ -137,6 +141,108 @@
 	s *Service
 }
 
+func NewProjectsService(s *Service) *ProjectsService {
+	rs := &ProjectsService{s: s}
+	rs.Locations = NewProjectsLocationsService(s)
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+
+	Locations *ProjectsLocationsService
+}
+
+func NewProjectsLocationsService(s *Service) *ProjectsLocationsService {
+	rs := &ProjectsLocationsService{s: s}
+	rs.ProductSets = NewProjectsLocationsProductSetsService(s)
+	rs.Products = NewProjectsLocationsProductsService(s)
+	return rs
+}
+
+type ProjectsLocationsService struct {
+	s *Service
+
+	ProductSets *ProjectsLocationsProductSetsService
+
+	Products *ProjectsLocationsProductsService
+}
+
+func NewProjectsLocationsProductSetsService(s *Service) *ProjectsLocationsProductSetsService {
+	rs := &ProjectsLocationsProductSetsService{s: s}
+	rs.Products = NewProjectsLocationsProductSetsProductsService(s)
+	return rs
+}
+
+type ProjectsLocationsProductSetsService struct {
+	s *Service
+
+	Products *ProjectsLocationsProductSetsProductsService
+}
+
+func NewProjectsLocationsProductSetsProductsService(s *Service) *ProjectsLocationsProductSetsProductsService {
+	rs := &ProjectsLocationsProductSetsProductsService{s: s}
+	return rs
+}
+
+type ProjectsLocationsProductSetsProductsService struct {
+	s *Service
+}
+
+func NewProjectsLocationsProductsService(s *Service) *ProjectsLocationsProductsService {
+	rs := &ProjectsLocationsProductsService{s: s}
+	rs.ReferenceImages = NewProjectsLocationsProductsReferenceImagesService(s)
+	return rs
+}
+
+type ProjectsLocationsProductsService struct {
+	s *Service
+
+	ReferenceImages *ProjectsLocationsProductsReferenceImagesService
+}
+
+func NewProjectsLocationsProductsReferenceImagesService(s *Service) *ProjectsLocationsProductsReferenceImagesService {
+	rs := &ProjectsLocationsProductsReferenceImagesService{s: s}
+	return rs
+}
+
+type ProjectsLocationsProductsReferenceImagesService struct {
+	s *Service
+}
+
+// AddProductToProductSetRequest: Request message for the
+// `AddProductToProductSet` method.
+type AddProductToProductSetRequest struct {
+	// Product: The resource name for the Product to be added to this
+	// ProductSet.
+	//
+	// Format is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`
+	Product string `json:"product,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Product") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Product") 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 *AddProductToProductSetRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod AddProductToProductSetRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // AnnotateFileResponse: Response to a single file annotation request. A
 // file may contain one or more
 // images, which individually have their own responses.
@@ -256,6 +362,10 @@
 	// successfully.
 	LogoAnnotations []*EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -483,6 +593,62 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// BatchOperationMetadata: Metadata for the batch operations such as the
+// current state.
+//
+// This is included in the `metadata` field of the `Operation` returned
+// by the
+// `GetOperation` call of the `google::longrunning::Operations` service.
+type BatchOperationMetadata struct {
+	// EndTime: The time when the batch request is finished
+	// and
+	// google.longrunning.Operation.done is set to true.
+	EndTime string `json:"endTime,omitempty"`
+
+	// State: The current state of the batch operation.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - Invalid.
+	//   "PROCESSING" - Request is actively being processed.
+	//   "SUCCESSFUL" - The request is done and at least one item has been
+	// successfully
+	// processed.
+	//   "FAILED" - The request is done and no item has been successfully
+	// processed.
+	//   "CANCELLED" - The request is done after the
+	// longrunning.Operations.CancelOperation has
+	// been called by the user.  Any records that were processed before
+	// the
+	// cancel command are output as specified in the request.
+	State string `json:"state,omitempty"`
+
+	// SubmitTime: The time when the batch request was submitted to the
+	// server.
+	SubmitTime string `json:"submitTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EndTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EndTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *BatchOperationMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod BatchOperationMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Block: Logical element on the page.
 type Block struct {
 	// BlockType: Detected block type (text, image etc) for this block.
@@ -1475,6 +1641,7 @@
 	// image's dominant colors.
 	//   "CROP_HINTS" - Run crop hints.
 	//   "WEB_DETECTION" - Run web detection.
+	//   "PRODUCT_SEARCH" - Run Product Search.
 	//   "OBJECT_LOCALIZATION" - Run localizer for object detection.
 	Type string `json:"type,omitempty"`
 
@@ -1665,6 +1832,10 @@
 	// successfully.
 	LogoAnnotations []*GoogleCloudVisionV1p1beta1EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *GoogleCloudVisionV1p1beta1ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *GoogleCloudVisionV1p1beta1SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -2971,6 +3142,240 @@
 	return nil
 }
 
+// GoogleCloudVisionV1p1beta1Product: A Product contains
+// ReferenceImages.
+type GoogleCloudVisionV1p1beta1Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*GoogleCloudVisionV1p1beta1ProductKeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVisionV1p1beta1Product) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductKeyValue: A product label
+// represented as a key-value pair.
+type GoogleCloudVisionV1p1beta1ProductKeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *GoogleCloudVisionV1p1beta1ProductKeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductKeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResults: Results for a product
+// search request.
+type GoogleCloudVisionV1p1beta1ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p1beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *GoogleCloudVisionV1p1beta1ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p1beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResultsResult: Information
+// about a product.
+type GoogleCloudVisionV1p1beta1ProductSearchResultsResult struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *GoogleCloudVisionV1p1beta1Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *GoogleCloudVisionV1p1beta1ProductSearchResultsResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p1beta1ProductSearchResultsResult) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsResult
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // GoogleCloudVisionV1p1beta1Property: A `Property` consists of a
 // user-supplied name/value pair.
 type GoogleCloudVisionV1p1beta1Property struct {
@@ -3800,6 +4205,10 @@
 	// successfully.
 	LogoAnnotations []*GoogleCloudVisionV1p2beta1EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *GoogleCloudVisionV1p2beta1ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *GoogleCloudVisionV1p2beta1SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -5161,6 +5570,240 @@
 	return nil
 }
 
+// GoogleCloudVisionV1p2beta1Product: A Product contains
+// ReferenceImages.
+type GoogleCloudVisionV1p2beta1Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*GoogleCloudVisionV1p2beta1ProductKeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVisionV1p2beta1Product) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductKeyValue: A product label
+// represented as a key-value pair.
+type GoogleCloudVisionV1p2beta1ProductKeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *GoogleCloudVisionV1p2beta1ProductKeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductKeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResults: Results for a product
+// search request.
+type GoogleCloudVisionV1p2beta1ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p2beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *GoogleCloudVisionV1p2beta1ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p2beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResultsResult: Information
+// about a product.
+type GoogleCloudVisionV1p2beta1ProductSearchResultsResult struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *GoogleCloudVisionV1p2beta1Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *GoogleCloudVisionV1p2beta1ProductSearchResultsResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p2beta1ProductSearchResultsResult) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsResult
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // GoogleCloudVisionV1p2beta1Property: A `Property` consists of a
 // user-supplied name/value pair.
 type GoogleCloudVisionV1p2beta1Property struct {
@@ -7570,6 +8213,15 @@
 	// this time are not reflected in the current results.
 	IndexTime string `json:"indexTime,omitempty"`
 
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
 	// Results: List of results, one for each product match.
 	Results []*GoogleCloudVisionV1p3beta1ProductSearchResultsResult `json:"results,omitempty"`
 
@@ -7596,6 +8248,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p3beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVisionV1p3beta1ProductSearchResultsResult: Information
 // about a product.
 type GoogleCloudVisionV1p3beta1ProductSearchResultsResult struct {
@@ -8454,6 +9141,40 @@
 	return nil
 }
 
+// GroupedResult: Information about the products similar to a single
+// product in a query
+// image.
+type GroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*Result `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Image: Client image to perform Google Cloud Vision API tasks over.
 type Image struct {
 	// Content: Image content, represented as a stream of bytes.
@@ -8552,6 +9273,9 @@
 	// LatLongRect: Not used.
 	LatLongRect *LatLongRect `json:"latLongRect,omitempty"`
 
+	// ProductSearchParams: Parameters for product search.
+	ProductSearchParams *ProductSearchParams `json:"productSearchParams,omitempty"`
+
 	// WebDetectionParams: Parameters for web detection.
 	WebDetectionParams *WebDetectionParams `json:"webDetectionParams,omitempty"`
 
@@ -8672,6 +9396,224 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ImportProductSetsGcsSource: The Google Cloud Storage location for a
+// csv file which preserves a list of
+// ImportProductSetRequests in each line.
+type ImportProductSetsGcsSource struct {
+	// CsvFileUri: The Google Cloud Storage URI of the input csv file.
+	//
+	// The URI must start with `gs://`.
+	//
+	// The format of the input csv file should be one image per line.
+	// In each line, there are 8 columns.
+	//
+	// 1.  image-uri
+	// 2.  image-id
+	// 3.  product-set-id
+	// 4.  product-id
+	// 5.  product-category
+	// 6.  product-display-name
+	// 7.  labels
+	// 8.  bounding-poly
+	//
+	// The `image-uri`, `product-set-id`, `product-id`, and
+	// `product-category`
+	// columns are required. All other columns are optional.
+	//
+	// If the `ProductSet` or `Product` specified by the `product-set-id`
+	// and
+	// `product-id` values does not exist, then the system will create a
+	// new
+	// `ProductSet` or `Product` for the image. In this case,
+	// the
+	// `product-display-name` column refers to
+	// display_name, the
+	// `product-category` column refers to
+	// product_category, and the
+	// `labels` column refers to product_labels.
+	//
+	// The `image-id` column is optional but must be unique if provided. If
+	// it is
+	// empty, the system will automatically assign a unique id to the
+	// image.
+	//
+	// The `product-display-name` column is optional. If it is empty, the
+	// system
+	// sets the display_name field for the product to a
+	// space (" "). You can update the `display_name` later by using the
+	// API.
+	//
+	// If a `Product` with the specified `product-id` already exists, then
+	// the
+	// system ignores the `product-display-name`, `product-category`, and
+	// `labels`
+	// columns.
+	//
+	// The `labels` column (optional) is a line containing a list
+	// of
+	// comma-separated key-value pairs, in the following format:
+	//
+	//     "key_1=value_1,key_2=value_2,...,key_n=value_n"
+	//
+	// The `bounding-poly` column (optional) identifies one region
+	// of
+	// interest from the image in the same manner as `CreateReferenceImage`.
+	// If
+	// you do not specify the `bounding-poly` column, then the system will
+	// try to
+	// detect regions of interest automatically.
+	//
+	// At most one `bounding-poly` column is allowed per line. If the
+	// image
+	// contains multiple regions of interest, add a line to the CSV file
+	// that
+	// includes the same product information, and the `bounding-poly` values
+	// for
+	// each region of interest.
+	//
+	// The `bounding-poly` column must contain an even number of
+	// comma-separated
+	// numbers, in the format "p1_x,p1_y,p2_x,p2_y,...,pn_x,pn_y".
+	// Use
+	// non-negative integers for absolute bounding polygons, and float
+	// values
+	// in [0, 1] for normalized bounding polygons.
+	//
+	// The system will resize the image if the image resolution is too
+	// large to process (larger than 20MP).
+	CsvFileUri string `json:"csvFileUri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CsvFileUri") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "CsvFileUri") 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 *ImportProductSetsGcsSource) MarshalJSON() ([]byte, error) {
+	type NoMethod ImportProductSetsGcsSource
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ImportProductSetsInputConfig: The input content for the
+// `ImportProductSets` method.
+type ImportProductSetsInputConfig struct {
+	// GcsSource: The Google Cloud Storage location for a csv file which
+	// preserves a list
+	// of ImportProductSetRequests in each line.
+	GcsSource *ImportProductSetsGcsSource `json:"gcsSource,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "GcsSource") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "GcsSource") 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 *ImportProductSetsInputConfig) MarshalJSON() ([]byte, error) {
+	type NoMethod ImportProductSetsInputConfig
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ImportProductSetsRequest: Request message for the `ImportProductSets`
+// method.
+type ImportProductSetsRequest struct {
+	// InputConfig: The input content for the list of requests.
+	InputConfig *ImportProductSetsInputConfig `json:"inputConfig,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InputConfig") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "InputConfig") 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 *ImportProductSetsRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod ImportProductSetsRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ImportProductSetsResponse: Response message for the
+// `ImportProductSets` method.
+//
+// This message is returned by
+// the
+// google.longrunning.Operations.GetOperation method in the
+// returned
+// google.longrunning.Operation.response field.
+type ImportProductSetsResponse struct {
+	// ReferenceImages: The list of reference_images that are imported
+	// successfully.
+	ReferenceImages []*ReferenceImage `json:"referenceImages,omitempty"`
+
+	// Statuses: The rpc status for each ImportProductSet request, including
+	// both successes
+	// and errors.
+	//
+	// The number of statuses here matches the number of lines in the csv
+	// file,
+	// and statuses[i] stores the success or failure status of processing
+	// the i-th
+	// line of the csv, starting from line 0.
+	Statuses []*Status `json:"statuses,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ReferenceImages") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ReferenceImages") 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 *ImportProductSetsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ImportProductSetsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // InputConfig: The desired input location and metadata.
 type InputConfig struct {
 	// GcsSource: The Google Cloud Storage location to read the input from.
@@ -8705,6 +9647,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// KeyValue: A product label represented as a key-value pair.
+type KeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *KeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod KeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Landmark: A face-specific landmark (for example, a face feature).
 type Landmark struct {
 	// Position: Face landmark position.
@@ -8899,6 +9876,160 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ListProductSetsResponse: Response message for the `ListProductSets`
+// method.
+type ListProductSetsResponse struct {
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no more
+	// results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ProductSets: List of ProductSets.
+	ProductSets []*ProductSet `json:"productSets,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListProductSetsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListProductSetsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListProductsInProductSetResponse: Response message for the
+// `ListProductsInProductSet` method.
+type ListProductsInProductSetResponse struct {
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no more
+	// results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Products: The list of Products.
+	Products []*Product `json:"products,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListProductsInProductSetResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListProductsInProductSetResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListProductsResponse: Response message for the `ListProducts` method.
+type ListProductsResponse struct {
+	// NextPageToken: Token to retrieve the next page of results, or empty
+	// if there are no more
+	// results in the list.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Products: List of products.
+	Products []*Product `json:"products,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListProductsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListProductsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListReferenceImagesResponse: Response message for the
+// `ListReferenceImages` method.
+type ListReferenceImagesResponse struct {
+	// NextPageToken: The next_page_token returned from a previous List
+	// request, if any.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// PageSize: The maximum number of items to return. Default 10, maximum
+	// 100.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// ReferenceImages: The list of reference images.
+	ReferenceImages []*ReferenceImage `json:"referenceImages,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") 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 *ListReferenceImagesResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ListReferenceImagesResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // LocalizedObjectAnnotation: Set of detected objects with bounding
 // boxes.
 type LocalizedObjectAnnotation struct {
@@ -9385,6 +10516,240 @@
 	return nil
 }
 
+// Product: A Product contains ReferenceImages.
+type Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*KeyValue `json:"productLabels,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Product) MarshalJSON() ([]byte, error) {
+	type NoMethod Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ProductSearchParams: Parameters for a product search request.
+type ProductSearchParams struct {
+	// BoundingPoly: The bounding polygon around the area of interest in the
+	// image.
+	// Optional. If it is not specified, system discretion will be applied.
+	BoundingPoly *BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Filter: The filtering expression. This can be used to restrict search
+	// results based
+	// on Product labels. We currently support an AND of OR of
+	// key-value
+	// expressions, where each expression within an OR must have the same
+	// key.
+	//
+	// For example, "(color = red OR color = blue) AND brand = Google"
+	// is
+	// acceptable, but not "(color = red OR brand = Google)" or "color:
+	// red".
+	Filter string `json:"filter,omitempty"`
+
+	// ProductCategories: The list of product categories to search in.
+	// Currently, we only consider
+	// the first category, and either "homegoods", "apparel", or "toys"
+	// should be
+	// specified.
+	ProductCategories []string `json:"productCategories,omitempty"`
+
+	// ProductSet: The resource name of a ProductSet to be searched for
+	// similar images.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.
+	ProductSet string `json:"productSet,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *ProductSearchParams) MarshalJSON() ([]byte, error) {
+	type NoMethod ProductSearchParams
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ProductSearchResults: Results for a product search request.
+type ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*Result `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ProductSet: A ProductSet contains Products. A ProductSet can contain
+// a maximum of 1
+// million reference images. If the limit is exceeded, periodic indexing
+// will
+// fail.
+type ProductSet struct {
+	// DisplayName: The user-provided name for this ProductSet. Must not be
+	// empty. Must be at
+	// most 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// IndexError: Output only. If there was an error with indexing the
+	// product set, the field
+	// is populated.
+	//
+	// This field is ignored when creating a ProductSet.
+	IndexError *Status `json:"indexError,omitempty"`
+
+	// IndexTime: Output only. The time at which this ProductSet was last
+	// indexed. Query
+	// results will reflect all updates before this time. If this ProductSet
+	// has
+	// never been indexed, this field is 0.
+	//
+	// This field is ignored when creating a ProductSet.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// Name: The resource name of the ProductSet.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.
+	//
+	//
+	// This field is ignored when creating a ProductSet.
+	Name string `json:"name,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DisplayName") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ProductSet) MarshalJSON() ([]byte, error) {
+	type NoMethod ProductSet
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Property: A `Property` consists of a user-supplied name/value pair.
 type Property struct {
 	// Name: Name of the property.
@@ -9419,6 +10784,155 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ReferenceImage: A `ReferenceImage` represents a product image and its
+// associated metadata,
+// such as bounding boxes.
+type ReferenceImage struct {
+	// BoundingPolys: Bounding polygons around the areas of interest in the
+	// reference image.
+	// Optional. If this field is empty, the system will try to detect
+	// regions of
+	// interest. At most 10 bounding polygons will be used.
+	//
+	// The provided shape is converted into a non-rotated rectangle.
+	// Once
+	// converted, the small edge of the rectangle must be greater than or
+	// equal
+	// to 300 pixels. The aspect ratio must be 1:4 or less (i.e. 1:3 is ok;
+	// 1:5
+	// is not).
+	BoundingPolys []*BoundingPoly `json:"boundingPolys,omitempty"`
+
+	// Name: The resource name of the reference image.
+	//
+	// Format
+	// is:
+	//
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referen
+	// ceImages/IMAGE_ID`.
+	//
+	// This field is ignored when creating a reference image.
+	Name string `json:"name,omitempty"`
+
+	// Uri: The Google Cloud Storage URI of the reference image.
+	//
+	// The URI must start with `gs://`.
+	//
+	// Required.
+	Uri string `json:"uri,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPolys") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPolys") 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 *ReferenceImage) MarshalJSON() ([]byte, error) {
+	type NoMethod ReferenceImage
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RemoveProductFromProductSetRequest: Request message for the
+// `RemoveProductFromProductSet` method.
+type RemoveProductFromProductSetRequest struct {
+	// Product: The resource name for the Product to be removed from this
+	// ProductSet.
+	//
+	// Format is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`
+	Product string `json:"product,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Product") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Product") 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 *RemoveProductFromProductSetRequest) MarshalJSON() ([]byte, error) {
+	type NoMethod RemoveProductFromProductSetRequest
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Result: Information about a product.
+type Result struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *Result) MarshalJSON() ([]byte, error) {
+	type NoMethod Result
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *Result) UnmarshalJSON(data []byte) error {
+	type NoMethod Result
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // SafeSearchAnnotation: Set of features pertaining to the image,
 // computed by computer vision
 // methods over safe-search verticals (for example, adult, spoof,
@@ -11246,3 +12760,2967 @@
 		c.PageToken(x.NextPageToken)
 	}
 }
+
+// method id "vision.projects.locations.productSets.addProduct":
+
+type ProjectsLocationsProductSetsAddProductCall struct {
+	s                             *Service
+	name                          string
+	addproducttoproductsetrequest *AddProductToProductSetRequest
+	urlParams_                    gensupport.URLParams
+	ctx_                          context.Context
+	header_                       http.Header
+}
+
+// AddProduct: Adds a Product to the specified ProductSet. If the
+// Product is already
+// present, no change is made.
+//
+// One Product can be added to at most 100 ProductSets.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the Product or the ProductSet doesn't exist.
+func (r *ProjectsLocationsProductSetsService) AddProduct(name string, addproducttoproductsetrequest *AddProductToProductSetRequest) *ProjectsLocationsProductSetsAddProductCall {
+	c := &ProjectsLocationsProductSetsAddProductCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.addproducttoproductsetrequest = addproducttoproductsetrequest
+	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 *ProjectsLocationsProductSetsAddProductCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsAddProductCall {
+	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 *ProjectsLocationsProductSetsAddProductCall) Context(ctx context.Context) *ProjectsLocationsProductSetsAddProductCall {
+	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 *ProjectsLocationsProductSetsAddProductCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsAddProductCall) 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.addproducttoproductsetrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:addProduct")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.addProduct" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsLocationsProductSetsAddProductCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Adds a Product to the specified ProductSet. If the Product is already\npresent, no change is made.\n\nOne Product can be added to at most 100 ProductSets.\n\nPossible errors:\n\n* Returns NOT_FOUND if the Product or the ProductSet doesn't exist.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}:addProduct",
+	//   "httpMethod": "POST",
+	//   "id": "vision.projects.locations.productSets.addProduct",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The resource name for the ProductSet to modify.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:addProduct",
+	//   "request": {
+	//     "$ref": "AddProductToProductSetRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.productSets.create":
+
+type ProjectsLocationsProductSetsCreateCall struct {
+	s          *Service
+	parent     string
+	productset *ProductSet
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Creates and returns a new ProductSet resource.
+//
+// Possible errors:
+//
+// * Returns INVALID_ARGUMENT if display_name is missing, or is longer
+// than
+//   4096 characters.
+func (r *ProjectsLocationsProductSetsService) Create(parent string, productset *ProductSet) *ProjectsLocationsProductSetsCreateCall {
+	c := &ProjectsLocationsProductSetsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.productset = productset
+	return c
+}
+
+// ProductSetId sets the optional parameter "productSetId": A
+// user-supplied resource id for this ProductSet. If set, the server
+// will
+// attempt to use this value as the resource id. If it is already in
+// use, an
+// error is returned with code ALREADY_EXISTS. Must be at most 128
+// characters
+// long. It cannot contain the character `/`.
+func (c *ProjectsLocationsProductSetsCreateCall) ProductSetId(productSetId string) *ProjectsLocationsProductSetsCreateCall {
+	c.urlParams_.Set("productSetId", productSetId)
+	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 *ProjectsLocationsProductSetsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsCreateCall {
+	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 *ProjectsLocationsProductSetsCreateCall) Context(ctx context.Context) *ProjectsLocationsProductSetsCreateCall {
+	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 *ProjectsLocationsProductSetsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsCreateCall) 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.productset)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/productSets")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.create" call.
+// Exactly one of *ProductSet or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ProductSet.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 *ProjectsLocationsProductSetsCreateCall) Do(opts ...googleapi.CallOption) (*ProductSet, 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 := &ProductSet{
+		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 and returns a new ProductSet resource.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if display_name is missing, or is longer than\n  4096 characters.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets",
+	//   "httpMethod": "POST",
+	//   "id": "vision.projects.locations.productSets.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The project in which the ProductSet should be created.\n\nFormat is `projects/PROJECT_ID/locations/LOC_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "productSetId": {
+	//       "description": "A user-supplied resource id for this ProductSet. If set, the server will\nattempt to use this value as the resource id. If it is already in use, an\nerror is returned with code ALREADY_EXISTS. Must be at most 128 characters\nlong. It cannot contain the character `/`.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/productSets",
+	//   "request": {
+	//     "$ref": "ProductSet"
+	//   },
+	//   "response": {
+	//     "$ref": "ProductSet"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.productSets.delete":
+
+type ProjectsLocationsProductSetsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Permanently deletes a ProductSet. All Products and
+// ReferenceImages in the
+// ProductSet will be deleted.
+//
+// The actual image files are not deleted from Google Cloud
+// Storage.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the ProductSet does not exist.
+func (r *ProjectsLocationsProductSetsService) Delete(name string) *ProjectsLocationsProductSetsDeleteCall {
+	c := &ProjectsLocationsProductSetsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductSetsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsDeleteCall {
+	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 *ProjectsLocationsProductSetsDeleteCall) Context(ctx context.Context) *ProjectsLocationsProductSetsDeleteCall {
+	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 *ProjectsLocationsProductSetsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsLocationsProductSetsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Permanently deletes a ProductSet. All Products and ReferenceImages in the\nProductSet will be deleted.\n\nThe actual image files are not deleted from Google Cloud Storage.\n\nPossible errors:\n\n* Returns NOT_FOUND if the ProductSet does not exist.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "vision.projects.locations.productSets.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Resource name of the ProductSet to delete.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.productSets.get":
+
+type ProjectsLocationsProductSetsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets information associated with a ProductSet.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the ProductSet does not exist.
+func (r *ProjectsLocationsProductSetsService) Get(name string) *ProjectsLocationsProductSetsGetCall {
+	c := &ProjectsLocationsProductSetsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductSetsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsGetCall {
+	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 *ProjectsLocationsProductSetsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsProductSetsGetCall {
+	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 *ProjectsLocationsProductSetsGetCall) Context(ctx context.Context) *ProjectsLocationsProductSetsGetCall {
+	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 *ProjectsLocationsProductSetsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.get" call.
+// Exactly one of *ProductSet or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ProductSet.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 *ProjectsLocationsProductSetsGetCall) Do(opts ...googleapi.CallOption) (*ProductSet, 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 := &ProductSet{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets information associated with a ProductSet.\n\nPossible errors:\n\n* Returns NOT_FOUND if the ProductSet does not exist.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}",
+	//   "httpMethod": "GET",
+	//   "id": "vision.projects.locations.productSets.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Resource name of the ProductSet to get.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOG_ID/productSets/PRODUCT_SET_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "ProductSet"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.productSets.import":
+
+type ProjectsLocationsProductSetsImportCall struct {
+	s                        *Service
+	parent                   string
+	importproductsetsrequest *ImportProductSetsRequest
+	urlParams_               gensupport.URLParams
+	ctx_                     context.Context
+	header_                  http.Header
+}
+
+// Import: Asynchronous API that imports a list of reference images to
+// specified
+// product sets based on a list of image information.
+//
+// The google.longrunning.Operation API can be used to keep track of
+// the
+// progress and results of the request.
+// `Operation.metadata` contains `BatchOperationMetadata`.
+// (progress)
+// `Operation.response` contains `ImportProductSetsResponse`.
+// (results)
+//
+// The input source of this method is a csv file on Google Cloud
+// Storage.
+// For the format of the csv file please
+// see
+// ImportProductSetsGcsSource.csv_file_uri.
+func (r *ProjectsLocationsProductSetsService) Import(parent string, importproductsetsrequest *ImportProductSetsRequest) *ProjectsLocationsProductSetsImportCall {
+	c := &ProjectsLocationsProductSetsImportCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.importproductsetsrequest = importproductsetsrequest
+	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 *ProjectsLocationsProductSetsImportCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsImportCall {
+	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 *ProjectsLocationsProductSetsImportCall) Context(ctx context.Context) *ProjectsLocationsProductSetsImportCall {
+	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 *ProjectsLocationsProductSetsImportCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsImportCall) 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.importproductsetsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/productSets:import")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.import" 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 *ProjectsLocationsProductSetsImportCall) 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": "Asynchronous API that imports a list of reference images to specified\nproduct sets based on a list of image information.\n\nThe google.longrunning.Operation API can be used to keep track of the\nprogress and results of the request.\n`Operation.metadata` contains `BatchOperationMetadata`. (progress)\n`Operation.response` contains `ImportProductSetsResponse`. (results)\n\nThe input source of this method is a csv file on Google Cloud Storage.\nFor the format of the csv file please see\nImportProductSetsGcsSource.csv_file_uri.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets:import",
+	//   "httpMethod": "POST",
+	//   "id": "vision.projects.locations.productSets.import",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The project in which the ProductSets should be imported.\n\nFormat is `projects/PROJECT_ID/locations/LOC_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/productSets:import",
+	//   "request": {
+	//     "$ref": "ImportProductSetsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.productSets.list":
+
+type ProjectsLocationsProductSetsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists ProductSets in an unspecified order.
+//
+// Possible errors:
+//
+// * Returns INVALID_ARGUMENT if page_size is greater than 100, or less
+//   than 1.
+func (r *ProjectsLocationsProductSetsService) List(parent string) *ProjectsLocationsProductSetsListCall {
+	c := &ProjectsLocationsProductSetsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of items to return. Default 10, maximum 100.
+func (c *ProjectsLocationsProductSetsListCall) PageSize(pageSize int64) *ProjectsLocationsProductSetsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token returned from a previous List request, if any.
+func (c *ProjectsLocationsProductSetsListCall) PageToken(pageToken string) *ProjectsLocationsProductSetsListCall {
+	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 *ProjectsLocationsProductSetsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsListCall {
+	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 *ProjectsLocationsProductSetsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsProductSetsListCall {
+	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 *ProjectsLocationsProductSetsListCall) Context(ctx context.Context) *ProjectsLocationsProductSetsListCall {
+	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 *ProjectsLocationsProductSetsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/productSets")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.list" call.
+// Exactly one of *ListProductSetsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListProductSetsResponse.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 *ProjectsLocationsProductSetsListCall) Do(opts ...googleapi.CallOption) (*ListProductSetsResponse, 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 := &ListProductSetsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists ProductSets in an unspecified order.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if page_size is greater than 100, or less\n  than 1.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets",
+	//   "httpMethod": "GET",
+	//   "id": "vision.projects.locations.productSets.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "The maximum number of items to return. Default 10, maximum 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "The project from which ProductSets should be listed.\n\nFormat is `projects/PROJECT_ID/locations/LOC_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/productSets",
+	//   "response": {
+	//     "$ref": "ListProductSetsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// 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 *ProjectsLocationsProductSetsListCall) Pages(ctx context.Context, f func(*ListProductSetsResponse) 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 "vision.projects.locations.productSets.patch":
+
+type ProjectsLocationsProductSetsPatchCall struct {
+	s          *Service
+	name       string
+	productset *ProductSet
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Patch: Makes changes to a ProductSet resource.
+// Only display_name can be updated currently.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the ProductSet does not exist.
+// * Returns INVALID_ARGUMENT if display_name is present in update_mask
+// but
+//   missing from the request or longer than 4096 characters.
+func (r *ProjectsLocationsProductSetsService) Patch(name string, productset *ProductSet) *ProjectsLocationsProductSetsPatchCall {
+	c := &ProjectsLocationsProductSetsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.productset = productset
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": The FieldMask
+// that specifies which fields to
+// update.
+// If update_mask isn't specified, all mutable fields are to be
+// updated.
+// Valid mask path is `display_name`.
+func (c *ProjectsLocationsProductSetsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsProductSetsPatchCall {
+	c.urlParams_.Set("updateMask", updateMask)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductSetsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsPatchCall {
+	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 *ProjectsLocationsProductSetsPatchCall) Context(ctx context.Context) *ProjectsLocationsProductSetsPatchCall {
+	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 *ProjectsLocationsProductSetsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsPatchCall) 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.productset)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.patch" call.
+// Exactly one of *ProductSet or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ProductSet.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 *ProjectsLocationsProductSetsPatchCall) Do(opts ...googleapi.CallOption) (*ProductSet, 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 := &ProductSet{
+		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": "Makes changes to a ProductSet resource.\nOnly display_name can be updated currently.\n\nPossible errors:\n\n* Returns NOT_FOUND if the ProductSet does not exist.\n* Returns INVALID_ARGUMENT if display_name is present in update_mask but\n  missing from the request or longer than 4096 characters.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}",
+	//   "httpMethod": "PATCH",
+	//   "id": "vision.projects.locations.productSets.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The resource name of the ProductSet.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.\n\nThis field is ignored when creating a ProductSet.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "The FieldMask that specifies which fields to\nupdate.\nIf update_mask isn't specified, all mutable fields are to be updated.\nValid mask path is `display_name`.",
+	//       "format": "google-fieldmask",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "request": {
+	//     "$ref": "ProductSet"
+	//   },
+	//   "response": {
+	//     "$ref": "ProductSet"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.productSets.removeProduct":
+
+type ProjectsLocationsProductSetsRemoveProductCall struct {
+	s                                  *Service
+	name                               string
+	removeproductfromproductsetrequest *RemoveProductFromProductSetRequest
+	urlParams_                         gensupport.URLParams
+	ctx_                               context.Context
+	header_                            http.Header
+}
+
+// RemoveProduct: Removes a Product from the specified
+// ProductSet.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND If the Product is not found under the ProductSet.
+func (r *ProjectsLocationsProductSetsService) RemoveProduct(name string, removeproductfromproductsetrequest *RemoveProductFromProductSetRequest) *ProjectsLocationsProductSetsRemoveProductCall {
+	c := &ProjectsLocationsProductSetsRemoveProductCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.removeproductfromproductsetrequest = removeproductfromproductsetrequest
+	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 *ProjectsLocationsProductSetsRemoveProductCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsRemoveProductCall {
+	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 *ProjectsLocationsProductSetsRemoveProductCall) Context(ctx context.Context) *ProjectsLocationsProductSetsRemoveProductCall {
+	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 *ProjectsLocationsProductSetsRemoveProductCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsRemoveProductCall) 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.removeproductfromproductsetrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:removeProduct")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.removeProduct" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsLocationsProductSetsRemoveProductCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Removes a Product from the specified ProductSet.\n\nPossible errors:\n\n* Returns NOT_FOUND If the Product is not found under the ProductSet.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}:removeProduct",
+	//   "httpMethod": "POST",
+	//   "id": "vision.projects.locations.productSets.removeProduct",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The resource name for the ProductSet to modify.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:removeProduct",
+	//   "request": {
+	//     "$ref": "RemoveProductFromProductSetRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.productSets.products.list":
+
+type ProjectsLocationsProductSetsProductsListCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists the Products in a ProductSet, in an unspecified order. If
+// the
+// ProductSet does not exist, the products field of the response will
+// be
+// empty.
+//
+// Possible errors:
+//
+// * Returns INVALID_ARGUMENT if page_size is greater than 100 or less
+// than 1.
+func (r *ProjectsLocationsProductSetsProductsService) List(name string) *ProjectsLocationsProductSetsProductsListCall {
+	c := &ProjectsLocationsProductSetsProductsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of items to return. Default 10, maximum 100.
+func (c *ProjectsLocationsProductSetsProductsListCall) PageSize(pageSize int64) *ProjectsLocationsProductSetsProductsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token returned from a previous List request, if any.
+func (c *ProjectsLocationsProductSetsProductsListCall) PageToken(pageToken string) *ProjectsLocationsProductSetsProductsListCall {
+	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 *ProjectsLocationsProductSetsProductsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductSetsProductsListCall {
+	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 *ProjectsLocationsProductSetsProductsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsProductSetsProductsListCall {
+	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 *ProjectsLocationsProductSetsProductsListCall) Context(ctx context.Context) *ProjectsLocationsProductSetsProductsListCall {
+	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 *ProjectsLocationsProductSetsProductsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductSetsProductsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}/products")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.productSets.products.list" call.
+// Exactly one of *ListProductsInProductSetResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *ListProductsInProductSetResponse.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 *ProjectsLocationsProductSetsProductsListCall) Do(opts ...googleapi.CallOption) (*ListProductsInProductSetResponse, 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 := &ListProductsInProductSetResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists the Products in a ProductSet, in an unspecified order. If the\nProductSet does not exist, the products field of the response will be\nempty.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if page_size is greater than 100 or less than 1.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/productSets/{productSetsId}/products",
+	//   "httpMethod": "GET",
+	//   "id": "vision.projects.locations.productSets.products.list",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The ProductSet resource for which to retrieve Products.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/productSets/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "The maximum number of items to return. Default 10, maximum 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}/products",
+	//   "response": {
+	//     "$ref": "ListProductsInProductSetResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// 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 *ProjectsLocationsProductSetsProductsListCall) Pages(ctx context.Context, f func(*ListProductsInProductSetResponse) 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 "vision.projects.locations.products.create":
+
+type ProjectsLocationsProductsCreateCall struct {
+	s          *Service
+	parent     string
+	product    *Product
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Creates and returns a new product resource.
+//
+// Possible errors:
+//
+// * Returns INVALID_ARGUMENT if display_name is missing or longer than
+// 4096
+//   characters.
+// * Returns INVALID_ARGUMENT if description is longer than 4096
+// characters.
+// * Returns INVALID_ARGUMENT if product_category is missing or invalid.
+func (r *ProjectsLocationsProductsService) Create(parent string, product *Product) *ProjectsLocationsProductsCreateCall {
+	c := &ProjectsLocationsProductsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.product = product
+	return c
+}
+
+// ProductId sets the optional parameter "productId": A user-supplied
+// resource id for this Product. If set, the server will
+// attempt to use this value as the resource id. If it is already in
+// use, an
+// error is returned with code ALREADY_EXISTS. Must be at most 128
+// characters
+// long. It cannot contain the character `/`.
+func (c *ProjectsLocationsProductsCreateCall) ProductId(productId string) *ProjectsLocationsProductsCreateCall {
+	c.urlParams_.Set("productId", productId)
+	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 *ProjectsLocationsProductsCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsCreateCall {
+	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 *ProjectsLocationsProductsCreateCall) Context(ctx context.Context) *ProjectsLocationsProductsCreateCall {
+	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 *ProjectsLocationsProductsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsCreateCall) 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.product)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/products")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.create" call.
+// Exactly one of *Product or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Product.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 *ProjectsLocationsProductsCreateCall) Do(opts ...googleapi.CallOption) (*Product, 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 := &Product{
+		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 and returns a new product resource.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if display_name is missing or longer than 4096\n  characters.\n* Returns INVALID_ARGUMENT if description is longer than 4096 characters.\n* Returns INVALID_ARGUMENT if product_category is missing or invalid.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products",
+	//   "httpMethod": "POST",
+	//   "id": "vision.projects.locations.products.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "The project in which the Product should be created.\n\nFormat is\n`projects/PROJECT_ID/locations/LOC_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "productId": {
+	//       "description": "A user-supplied resource id for this Product. If set, the server will\nattempt to use this value as the resource id. If it is already in use, an\nerror is returned with code ALREADY_EXISTS. Must be at most 128 characters\nlong. It cannot contain the character `/`.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/products",
+	//   "request": {
+	//     "$ref": "Product"
+	//   },
+	//   "response": {
+	//     "$ref": "Product"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.products.delete":
+
+type ProjectsLocationsProductsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Permanently deletes a product and its reference
+// images.
+//
+// Metadata of the product and all its images will be deleted right
+// away, but
+// search queries against ProductSets containing the product may still
+// work
+// until all related caches are refreshed.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the product does not exist.
+func (r *ProjectsLocationsProductsService) Delete(name string) *ProjectsLocationsProductsDeleteCall {
+	c := &ProjectsLocationsProductsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductsDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsDeleteCall {
+	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 *ProjectsLocationsProductsDeleteCall) Context(ctx context.Context) *ProjectsLocationsProductsDeleteCall {
+	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 *ProjectsLocationsProductsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsLocationsProductsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Permanently deletes a product and its reference images.\n\nMetadata of the product and all its images will be deleted right away, but\nsearch queries against ProductSets containing the product may still work\nuntil all related caches are refreshed.\n\nPossible errors:\n\n* Returns NOT_FOUND if the product does not exist.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "vision.projects.locations.products.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Resource name of product to delete.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.products.get":
+
+type ProjectsLocationsProductsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets information associated with a Product.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the Product does not exist.
+func (r *ProjectsLocationsProductsService) Get(name string) *ProjectsLocationsProductsGetCall {
+	c := &ProjectsLocationsProductsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductsGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsGetCall {
+	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 *ProjectsLocationsProductsGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsProductsGetCall {
+	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 *ProjectsLocationsProductsGetCall) Context(ctx context.Context) *ProjectsLocationsProductsGetCall {
+	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 *ProjectsLocationsProductsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.get" call.
+// Exactly one of *Product or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Product.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 *ProjectsLocationsProductsGetCall) Do(opts ...googleapi.CallOption) (*Product, 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 := &Product{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets information associated with a Product.\n\nPossible errors:\n\n* Returns NOT_FOUND if the Product does not exist.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}",
+	//   "httpMethod": "GET",
+	//   "id": "vision.projects.locations.products.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Resource name of the Product to get.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Product"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.products.list":
+
+type ProjectsLocationsProductsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists products in an unspecified order.
+//
+// Possible errors:
+//
+// * Returns INVALID_ARGUMENT if page_size is greater than 100 or less
+// than 1.
+func (r *ProjectsLocationsProductsService) List(parent string) *ProjectsLocationsProductsListCall {
+	c := &ProjectsLocationsProductsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of items to return. Default 10, maximum 100.
+func (c *ProjectsLocationsProductsListCall) PageSize(pageSize int64) *ProjectsLocationsProductsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The
+// next_page_token returned from a previous List request, if any.
+func (c *ProjectsLocationsProductsListCall) PageToken(pageToken string) *ProjectsLocationsProductsListCall {
+	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 *ProjectsLocationsProductsListCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsListCall {
+	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 *ProjectsLocationsProductsListCall) IfNoneMatch(entityTag string) *ProjectsLocationsProductsListCall {
+	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 *ProjectsLocationsProductsListCall) Context(ctx context.Context) *ProjectsLocationsProductsListCall {
+	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 *ProjectsLocationsProductsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/products")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.list" call.
+// Exactly one of *ListProductsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListProductsResponse.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 *ProjectsLocationsProductsListCall) Do(opts ...googleapi.CallOption) (*ListProductsResponse, 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 := &ListProductsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists products in an unspecified order.\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if page_size is greater than 100 or less than 1.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products",
+	//   "httpMethod": "GET",
+	//   "id": "vision.projects.locations.products.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "The maximum number of items to return. Default 10, maximum 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The next_page_token returned from a previous List request, if any.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "The project OR ProductSet from which Products should be listed.\n\nFormat:\n`projects/PROJECT_ID/locations/LOC_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/products",
+	//   "response": {
+	//     "$ref": "ListProductsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// 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 *ProjectsLocationsProductsListCall) Pages(ctx context.Context, f func(*ListProductsResponse) 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 "vision.projects.locations.products.patch":
+
+type ProjectsLocationsProductsPatchCall struct {
+	s          *Service
+	name       string
+	product    *Product
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Patch: Makes changes to a Product resource.
+// Only the `display_name`, `description`, and `labels` fields can be
+// updated
+// right now.
+//
+// If labels are updated, the change will not be reflected in queries
+// until
+// the next index time.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the Product does not exist.
+// * Returns INVALID_ARGUMENT if display_name is present in update_mask
+// but is
+//   missing from the request or longer than 4096 characters.
+// * Returns INVALID_ARGUMENT if description is present in update_mask
+// but is
+//   longer than 4096 characters.
+// * Returns INVALID_ARGUMENT if product_category is present in
+// update_mask.
+func (r *ProjectsLocationsProductsService) Patch(name string, product *Product) *ProjectsLocationsProductsPatchCall {
+	c := &ProjectsLocationsProductsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.product = product
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": The FieldMask
+// that specifies which fields
+// to update.
+// If update_mask isn't specified, all mutable fields are to be
+// updated.
+// Valid mask paths include `product_labels`, `display_name`,
+// and
+// `description`.
+func (c *ProjectsLocationsProductsPatchCall) UpdateMask(updateMask string) *ProjectsLocationsProductsPatchCall {
+	c.urlParams_.Set("updateMask", updateMask)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductsPatchCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsPatchCall {
+	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 *ProjectsLocationsProductsPatchCall) Context(ctx context.Context) *ProjectsLocationsProductsPatchCall {
+	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 *ProjectsLocationsProductsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsPatchCall) 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.product)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("PATCH", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.patch" call.
+// Exactly one of *Product or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Product.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 *ProjectsLocationsProductsPatchCall) Do(opts ...googleapi.CallOption) (*Product, 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 := &Product{
+		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": "Makes changes to a Product resource.\nOnly the `display_name`, `description`, and `labels` fields can be updated\nright now.\n\nIf labels are updated, the change will not be reflected in queries until\nthe next index time.\n\nPossible errors:\n\n* Returns NOT_FOUND if the Product does not exist.\n* Returns INVALID_ARGUMENT if display_name is present in update_mask but is\n  missing from the request or longer than 4096 characters.\n* Returns INVALID_ARGUMENT if description is present in update_mask but is\n  longer than 4096 characters.\n* Returns INVALID_ARGUMENT if product_category is present in update_mask.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}",
+	//   "httpMethod": "PATCH",
+	//   "id": "vision.projects.locations.products.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "The FieldMask that specifies which fields\nto update.\nIf update_mask isn't specified, all mutable fields are to be updated.\nValid mask paths include `product_labels`, `display_name`, and\n`description`.",
+	//       "format": "google-fieldmask",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "request": {
+	//     "$ref": "Product"
+	//   },
+	//   "response": {
+	//     "$ref": "Product"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.products.referenceImages.create":
+
+type ProjectsLocationsProductsReferenceImagesCreateCall struct {
+	s              *Service
+	parent         string
+	referenceimage *ReferenceImage
+	urlParams_     gensupport.URLParams
+	ctx_           context.Context
+	header_        http.Header
+}
+
+// Create: Creates and returns a new ReferenceImage resource.
+//
+// The `bounding_poly` field is optional. If `bounding_poly` is not
+// specified,
+// the system will try to detect regions of interest in the image that
+// are
+// compatible with the product_category on the parent product. If it
+// is
+// specified, detection is ALWAYS skipped. The system converts polygons
+// into
+// non-rotated rectangles.
+//
+// Note that the pipeline will resize the image if the image resolution
+// is too
+// large to process (above 50MP).
+//
+// Possible errors:
+//
+// * Returns INVALID_ARGUMENT if the image_uri is missing or longer than
+// 4096
+//   characters.
+// * Returns INVALID_ARGUMENT if the product does not exist.
+// * Returns INVALID_ARGUMENT if bounding_poly is not provided, and
+// nothing
+//   compatible with the parent product's product_category is
+// detected.
+// * Returns INVALID_ARGUMENT if bounding_poly contains more than 10
+// polygons.
+func (r *ProjectsLocationsProductsReferenceImagesService) Create(parent string, referenceimage *ReferenceImage) *ProjectsLocationsProductsReferenceImagesCreateCall {
+	c := &ProjectsLocationsProductsReferenceImagesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.referenceimage = referenceimage
+	return c
+}
+
+// ReferenceImageId sets the optional parameter "referenceImageId": A
+// user-supplied resource id for the ReferenceImage to be added. If
+// set,
+// the server will attempt to use this value as the resource id. If it
+// is
+// already in use, an error is returned with code ALREADY_EXISTS. Must
+// be at
+// most 128 characters long. It cannot contain the character `/`.
+func (c *ProjectsLocationsProductsReferenceImagesCreateCall) ReferenceImageId(referenceImageId string) *ProjectsLocationsProductsReferenceImagesCreateCall {
+	c.urlParams_.Set("referenceImageId", referenceImageId)
+	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 *ProjectsLocationsProductsReferenceImagesCreateCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsReferenceImagesCreateCall {
+	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 *ProjectsLocationsProductsReferenceImagesCreateCall) Context(ctx context.Context) *ProjectsLocationsProductsReferenceImagesCreateCall {
+	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 *ProjectsLocationsProductsReferenceImagesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsReferenceImagesCreateCall) 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.referenceimage)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/referenceImages")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("POST", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.referenceImages.create" call.
+// Exactly one of *ReferenceImage or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ReferenceImage.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 *ProjectsLocationsProductsReferenceImagesCreateCall) Do(opts ...googleapi.CallOption) (*ReferenceImage, 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 := &ReferenceImage{
+		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 and returns a new ReferenceImage resource.\n\nThe `bounding_poly` field is optional. If `bounding_poly` is not specified,\nthe system will try to detect regions of interest in the image that are\ncompatible with the product_category on the parent product. If it is\nspecified, detection is ALWAYS skipped. The system converts polygons into\nnon-rotated rectangles.\n\nNote that the pipeline will resize the image if the image resolution is too\nlarge to process (above 50MP).\n\nPossible errors:\n\n* Returns INVALID_ARGUMENT if the image_uri is missing or longer than 4096\n  characters.\n* Returns INVALID_ARGUMENT if the product does not exist.\n* Returns INVALID_ARGUMENT if bounding_poly is not provided, and nothing\n  compatible with the parent product's product_category is detected.\n* Returns INVALID_ARGUMENT if bounding_poly contains more than 10 polygons.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages",
+	//   "httpMethod": "POST",
+	//   "id": "vision.projects.locations.products.referenceImages.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Resource name of the product in which to create the reference image.\n\nFormat is\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "referenceImageId": {
+	//       "description": "A user-supplied resource id for the ReferenceImage to be added. If set,\nthe server will attempt to use this value as the resource id. If it is\nalready in use, an error is returned with code ALREADY_EXISTS. Must be at\nmost 128 characters long. It cannot contain the character `/`.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/referenceImages",
+	//   "request": {
+	//     "$ref": "ReferenceImage"
+	//   },
+	//   "response": {
+	//     "$ref": "ReferenceImage"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.products.referenceImages.delete":
+
+type ProjectsLocationsProductsReferenceImagesDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Permanently deletes a reference image.
+//
+// The image metadata will be deleted right away, but search
+// queries
+// against ProductSets containing the image may still work until all
+// related
+// caches are refreshed.
+//
+// The actual image files are not deleted from Google Cloud
+// Storage.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the reference image does not exist.
+func (r *ProjectsLocationsProductsReferenceImagesService) Delete(name string) *ProjectsLocationsProductsReferenceImagesDeleteCall {
+	c := &ProjectsLocationsProductsReferenceImagesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductsReferenceImagesDeleteCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsReferenceImagesDeleteCall {
+	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 *ProjectsLocationsProductsReferenceImagesDeleteCall) Context(ctx context.Context) *ProjectsLocationsProductsReferenceImagesDeleteCall {
+	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 *ProjectsLocationsProductsReferenceImagesDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsReferenceImagesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("DELETE", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.referenceImages.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsLocationsProductsReferenceImagesDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Permanently deletes a reference image.\n\nThe image metadata will be deleted right away, but search queries\nagainst ProductSets containing the image may still work until all related\ncaches are refreshed.\n\nThe actual image files are not deleted from Google Cloud Storage.\n\nPossible errors:\n\n* Returns NOT_FOUND if the reference image does not exist.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages/{referenceImagesId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "vision.projects.locations.products.referenceImages.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The resource name of the reference image to delete.\n\nFormat is:\n\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referenceImages/IMAGE_ID`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+/referenceImages/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.products.referenceImages.get":
+
+type ProjectsLocationsProductsReferenceImagesGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets information associated with a ReferenceImage.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the specified image does not exist.
+func (r *ProjectsLocationsProductsReferenceImagesService) Get(name string) *ProjectsLocationsProductsReferenceImagesGetCall {
+	c := &ProjectsLocationsProductsReferenceImagesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsLocationsProductsReferenceImagesGetCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsReferenceImagesGetCall {
+	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 *ProjectsLocationsProductsReferenceImagesGetCall) IfNoneMatch(entityTag string) *ProjectsLocationsProductsReferenceImagesGetCall {
+	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 *ProjectsLocationsProductsReferenceImagesGetCall) Context(ctx context.Context) *ProjectsLocationsProductsReferenceImagesGetCall {
+	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 *ProjectsLocationsProductsReferenceImagesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsReferenceImagesGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.referenceImages.get" call.
+// Exactly one of *ReferenceImage or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ReferenceImage.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 *ProjectsLocationsProductsReferenceImagesGetCall) Do(opts ...googleapi.CallOption) (*ReferenceImage, 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 := &ReferenceImage{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets information associated with a ReferenceImage.\n\nPossible errors:\n\n* Returns NOT_FOUND if the specified image does not exist.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages/{referenceImagesId}",
+	//   "httpMethod": "GET",
+	//   "id": "vision.projects.locations.products.referenceImages.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The resource name of the ReferenceImage to get.\n\nFormat is:\n\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referenceImages/IMAGE_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+/referenceImages/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "ReferenceImage"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// method id "vision.projects.locations.products.referenceImages.list":
+
+type ProjectsLocationsProductsReferenceImagesListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists reference images.
+//
+// Possible errors:
+//
+// * Returns NOT_FOUND if the parent product does not exist.
+// * Returns INVALID_ARGUMENT if the page_size is greater than 100, or
+// less
+//   than 1.
+func (r *ProjectsLocationsProductsReferenceImagesService) List(parent string) *ProjectsLocationsProductsReferenceImagesListCall {
+	c := &ProjectsLocationsProductsReferenceImagesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of items to return. Default 10, maximum 100.
+func (c *ProjectsLocationsProductsReferenceImagesListCall) PageSize(pageSize int64) *ProjectsLocationsProductsReferenceImagesListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": A token
+// identifying a page of results to be returned. This is the value
+// of `nextPageToken` returned in a previous reference image list
+// request.
+//
+// Defaults to the first page if not specified.
+func (c *ProjectsLocationsProductsReferenceImagesListCall) PageToken(pageToken string) *ProjectsLocationsProductsReferenceImagesListCall {
+	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 *ProjectsLocationsProductsReferenceImagesListCall) Fields(s ...googleapi.Field) *ProjectsLocationsProductsReferenceImagesListCall {
+	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 *ProjectsLocationsProductsReferenceImagesListCall) IfNoneMatch(entityTag string) *ProjectsLocationsProductsReferenceImagesListCall {
+	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 *ProjectsLocationsProductsReferenceImagesListCall) Context(ctx context.Context) *ProjectsLocationsProductsReferenceImagesListCall {
+	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 *ProjectsLocationsProductsReferenceImagesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsLocationsProductsReferenceImagesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	c.urlParams_.Set("prettyPrint", "false")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/referenceImages")
+	urls += "?" + c.urlParams_.Encode()
+	req, err := http.NewRequest("GET", urls, body)
+	if err != nil {
+		return nil, err
+	}
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "vision.projects.locations.products.referenceImages.list" call.
+// Exactly one of *ListReferenceImagesResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListReferenceImagesResponse.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 *ProjectsLocationsProductsReferenceImagesListCall) Do(opts ...googleapi.CallOption) (*ListReferenceImagesResponse, 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 := &ListReferenceImagesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := gensupport.DecodeResponse(target, res); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists reference images.\n\nPossible errors:\n\n* Returns NOT_FOUND if the parent product does not exist.\n* Returns INVALID_ARGUMENT if the page_size is greater than 100, or less\n  than 1.",
+	//   "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/products/{productsId}/referenceImages",
+	//   "httpMethod": "GET",
+	//   "id": "vision.projects.locations.products.referenceImages.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "The maximum number of items to return. Default 10, maximum 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "A token identifying a page of results to be returned. This is the value\nof `nextPageToken` returned in a previous reference image list request.\n\nDefaults to the first page if not specified.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Resource name of the product containing the reference images.\n\nFormat is\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/locations/[^/]+/products/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/referenceImages",
+	//   "response": {
+	//     "$ref": "ListReferenceImagesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-vision"
+	//   ]
+	// }
+
+}
+
+// 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 *ProjectsLocationsProductsReferenceImagesListCall) Pages(ctx context.Context, f func(*ListReferenceImagesResponse) 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)
+	}
+}
diff --git a/vision/v1p1beta1/vision-api.json b/vision/v1p1beta1/vision-api.json
index a37ea99..3d9ea5b 100644
--- a/vision/v1p1beta1/vision-api.json
+++ b/vision/v1p1beta1/vision-api.json
@@ -154,7 +154,7 @@
       }
     }
   },
-  "revision": "20180928",
+  "revision": "20181031",
   "rootUrl": "https://vision.googleapis.com/",
   "schemas": {
     "AnnotateFileResponse": {
@@ -234,6 +234,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -277,6 +281,41 @@
       },
       "type": "object"
     },
+    "BatchOperationMetadata": {
+      "description": "Metadata for the batch operations such as the current state.\n\nThis is included in the `metadata` field of the `Operation` returned by the\n`GetOperation` call of the `google::longrunning::Operations` service.",
+      "id": "BatchOperationMetadata",
+      "properties": {
+        "endTime": {
+          "description": "The time when the batch request is finished and\ngoogle.longrunning.Operation.done is set to true.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "description": "The current state of the batch operation.",
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "PROCESSING",
+            "SUCCESSFUL",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "enumDescriptions": [
+            "Invalid.",
+            "Request is actively being processed.",
+            "The request is done and at least one item has been successfully\nprocessed.",
+            "The request is done and no item has been successfully processed.",
+            "The request is done after the longrunning.Operations.CancelOperation has\nbeen called by the user.  Any records that were processed before the\ncancel command are output as specified in the request."
+          ],
+          "type": "string"
+        },
+        "submitTime": {
+          "description": "The time when the batch request was submitted to the server.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Block": {
       "description": "Logical element on the page.",
       "id": "Block",
@@ -849,6 +888,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "GoogleCloudVisionV1p1beta1SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -1461,6 +1504,7 @@
             "IMAGE_PROPERTIES",
             "CROP_HINTS",
             "WEB_DETECTION",
+            "PRODUCT_SEARCH",
             "OBJECT_LOCALIZATION"
           ],
           "enumDescriptions": [
@@ -1475,6 +1519,7 @@
             "Compute a set of image properties, such as the\nimage's dominant colors.",
             "Run crop hints.",
             "Run web detection.",
+            "Run Product Search.",
             "Run localizer for object detection."
           ],
           "type": "string"
@@ -1555,6 +1600,10 @@
           "$ref": "GoogleCloudVisionV1p1beta1LatLongRect",
           "description": "Not used."
         },
+        "productSearchParams": {
+          "$ref": "GoogleCloudVisionV1p1beta1ProductSearchParams",
+          "description": "Parameters for product search."
+        },
         "webDetectionParams": {
           "$ref": "GoogleCloudVisionV1p1beta1WebDetectionParams",
           "description": "Parameters for web detection."
@@ -1790,6 +1839,141 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p1beta1Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "GoogleCloudVisionV1p1beta1Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductKeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductKeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "GoogleCloudVisionV1p1beta1ProductKeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchParams": {
+      "description": "Parameters for a product search request.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchParams",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
+          "description": "The bounding polygon around the area of interest in the image.\nOptional. If it is not specified, system discretion will be applied."
+        },
+        "filter": {
+          "description": "The filtering expression. This can be used to restrict search results based\non Product labels. We currently support an AND of OR of key-value\nexpressions, where each expression within an OR must have the same key.\n\nFor example, \"(color = red OR color = blue) AND brand = Google\" is\nacceptable, but not \"(color = red OR brand = Google)\" or \"color: red\".",
+          "type": "string"
+        },
+        "productCategories": {
+          "description": "The list of product categories to search in. Currently, we only consider\nthe first category, and either \"homegoods\", \"apparel\", or \"toys\" should be\nspecified.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "productSet": {
+          "description": "The resource name of a ProductSet to be searched for similar images.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResultsResult": {
+      "description": "Information about a product.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "GoogleCloudVisionV1p1beta1Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p1beta1Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "GoogleCloudVisionV1p1beta1Property",
@@ -2290,6 +2474,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "GoogleCloudVisionV1p2beta1SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -3052,6 +3240,115 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p2beta1Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "GoogleCloudVisionV1p2beta1Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductKeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductKeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "GoogleCloudVisionV1p2beta1ProductKeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResultsResult": {
+      "description": "Information about a product.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "GoogleCloudVisionV1p2beta1Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p2beta1Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "GoogleCloudVisionV1p2beta1Property",
@@ -4417,6 +4714,31 @@
           "format": "google-datetime",
           "type": "string"
         },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p3beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
         "results": {
           "description": "List of results, one for each product match.",
           "items": {
@@ -4881,6 +5203,24 @@
       },
       "type": "object"
     },
+    "GroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "Result"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "ImageAnnotationContext": {
       "description": "If an image was produced from a file (e.g. a PDF), this message gives\ninformation about the source of that image.",
       "id": "ImageAnnotationContext",
@@ -4908,6 +5248,27 @@
       },
       "type": "object"
     },
+    "ImportProductSetsResponse": {
+      "description": "Response message for the `ImportProductSets` method.\n\nThis message is returned by the\ngoogle.longrunning.Operations.GetOperation method in the returned\ngoogle.longrunning.Operation.response field.",
+      "id": "ImportProductSetsResponse",
+      "properties": {
+        "referenceImages": {
+          "description": "The list of reference_images that are imported successfully.",
+          "items": {
+            "$ref": "ReferenceImage"
+          },
+          "type": "array"
+        },
+        "statuses": {
+          "description": "The rpc status for each ImportProductSet request, including both successes\nand errors.\n\nThe number of statuses here matches the number of lines in the csv file,\nand statuses[i] stores the success or failure status of processing the i-th\nline of the csv, starting from line 0.",
+          "items": {
+            "$ref": "Status"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "InputConfig": {
       "description": "The desired input location and metadata.",
       "id": "InputConfig",
@@ -4923,6 +5284,21 @@
       },
       "type": "object"
     },
+    "KeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "KeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Landmark": {
       "description": "A face-specific landmark (for example, a face feature).",
       "id": "Landmark",
@@ -5253,6 +5629,62 @@
       },
       "type": "object"
     },
+    "Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "KeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "Result"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "Property",
@@ -5273,6 +5705,48 @@
       },
       "type": "object"
     },
+    "ReferenceImage": {
+      "description": "A `ReferenceImage` represents a product image and its associated metadata,\nsuch as bounding boxes.",
+      "id": "ReferenceImage",
+      "properties": {
+        "boundingPolys": {
+          "description": "Bounding polygons around the areas of interest in the reference image.\nOptional. If this field is empty, the system will try to detect regions of\ninterest. At most 10 bounding polygons will be used.\n\nThe provided shape is converted into a non-rotated rectangle. Once\nconverted, the small edge of the rectangle must be greater than or equal\nto 300 pixels. The aspect ratio must be 1:4 or less (i.e. 1:3 is ok; 1:5\nis not).",
+          "items": {
+            "$ref": "BoundingPoly"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "The resource name of the reference image.\n\nFormat is:\n\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referenceImages/IMAGE_ID`.\n\nThis field is ignored when creating a reference image.",
+          "type": "string"
+        },
+        "uri": {
+          "description": "The Google Cloud Storage URI of the reference image.\n\nThe URI must start with `gs://`.\n\nRequired.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Result": {
+      "description": "Information about a product.",
+      "id": "Result",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "SafeSearchAnnotation": {
       "description": "Set of features pertaining to the image, computed by computer vision\nmethods over safe-search verticals (for example, adult, spoof, medical,\nviolence).",
       "id": "SafeSearchAnnotation",
diff --git a/vision/v1p1beta1/vision-gen.go b/vision/v1p1beta1/vision-gen.go
index 7301747..c08ca77 100644
--- a/vision/v1p1beta1/vision-gen.go
+++ b/vision/v1p1beta1/vision-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -184,6 +185,10 @@
 	// successfully.
 	LogoAnnotations []*EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -279,6 +284,62 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// BatchOperationMetadata: Metadata for the batch operations such as the
+// current state.
+//
+// This is included in the `metadata` field of the `Operation` returned
+// by the
+// `GetOperation` call of the `google::longrunning::Operations` service.
+type BatchOperationMetadata struct {
+	// EndTime: The time when the batch request is finished
+	// and
+	// google.longrunning.Operation.done is set to true.
+	EndTime string `json:"endTime,omitempty"`
+
+	// State: The current state of the batch operation.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - Invalid.
+	//   "PROCESSING" - Request is actively being processed.
+	//   "SUCCESSFUL" - The request is done and at least one item has been
+	// successfully
+	// processed.
+	//   "FAILED" - The request is done and no item has been successfully
+	// processed.
+	//   "CANCELLED" - The request is done after the
+	// longrunning.Operations.CancelOperation has
+	// been called by the user.  Any records that were processed before
+	// the
+	// cancel command are output as specified in the request.
+	State string `json:"state,omitempty"`
+
+	// SubmitTime: The time when the batch request was submitted to the
+	// server.
+	SubmitTime string `json:"submitTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EndTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EndTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *BatchOperationMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod BatchOperationMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Block: Logical element on the page.
 type Block struct {
 	// BlockType: Detected block type (text, image etc) for this block.
@@ -1369,6 +1430,10 @@
 	// successfully.
 	LogoAnnotations []*GoogleCloudVisionV1p1beta1EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *GoogleCloudVisionV1p1beta1ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *GoogleCloudVisionV1p1beta1SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -2347,6 +2412,7 @@
 	// image's dominant colors.
 	//   "CROP_HINTS" - Run crop hints.
 	//   "WEB_DETECTION" - Run web detection.
+	//   "PRODUCT_SEARCH" - Run Product Search.
 	//   "OBJECT_LOCALIZATION" - Run localizer for object detection.
 	Type string `json:"type,omitempty"`
 
@@ -2553,6 +2619,9 @@
 	// LatLongRect: Not used.
 	LatLongRect *GoogleCloudVisionV1p1beta1LatLongRect `json:"latLongRect,omitempty"`
 
+	// ProductSearchParams: Parameters for product search.
+	ProductSearchParams *GoogleCloudVisionV1p1beta1ProductSearchParams `json:"productSearchParams,omitempty"`
+
 	// WebDetectionParams: Parameters for web detection.
 	WebDetectionParams *GoogleCloudVisionV1p1beta1WebDetectionParams `json:"webDetectionParams,omitempty"`
 
@@ -3103,6 +3172,299 @@
 	return nil
 }
 
+// GoogleCloudVisionV1p1beta1Product: A Product contains
+// ReferenceImages.
+type GoogleCloudVisionV1p1beta1Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*GoogleCloudVisionV1p1beta1ProductKeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVisionV1p1beta1Product) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductKeyValue: A product label
+// represented as a key-value pair.
+type GoogleCloudVisionV1p1beta1ProductKeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *GoogleCloudVisionV1p1beta1ProductKeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductKeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchParams: Parameters for a
+// product search request.
+type GoogleCloudVisionV1p1beta1ProductSearchParams struct {
+	// BoundingPoly: The bounding polygon around the area of interest in the
+	// image.
+	// Optional. If it is not specified, system discretion will be applied.
+	BoundingPoly *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Filter: The filtering expression. This can be used to restrict search
+	// results based
+	// on Product labels. We currently support an AND of OR of
+	// key-value
+	// expressions, where each expression within an OR must have the same
+	// key.
+	//
+	// For example, "(color = red OR color = blue) AND brand = Google"
+	// is
+	// acceptable, but not "(color = red OR brand = Google)" or "color:
+	// red".
+	Filter string `json:"filter,omitempty"`
+
+	// ProductCategories: The list of product categories to search in.
+	// Currently, we only consider
+	// the first category, and either "homegoods", "apparel", or "toys"
+	// should be
+	// specified.
+	ProductCategories []string `json:"productCategories,omitempty"`
+
+	// ProductSet: The resource name of a ProductSet to be searched for
+	// similar images.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.
+	ProductSet string `json:"productSet,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p1beta1ProductSearchParams) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchParams
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResults: Results for a product
+// search request.
+type GoogleCloudVisionV1p1beta1ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p1beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *GoogleCloudVisionV1p1beta1ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p1beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResultsResult: Information
+// about a product.
+type GoogleCloudVisionV1p1beta1ProductSearchResultsResult struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *GoogleCloudVisionV1p1beta1Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *GoogleCloudVisionV1p1beta1ProductSearchResultsResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p1beta1ProductSearchResultsResult) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsResult
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // GoogleCloudVisionV1p1beta1Property: A `Property` consists of a
 // user-supplied name/value pair.
 type GoogleCloudVisionV1p1beta1Property struct {
@@ -3963,6 +4325,10 @@
 	// successfully.
 	LogoAnnotations []*GoogleCloudVisionV1p2beta1EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *GoogleCloudVisionV1p2beta1ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *GoogleCloudVisionV1p2beta1SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -5324,6 +5690,240 @@
 	return nil
 }
 
+// GoogleCloudVisionV1p2beta1Product: A Product contains
+// ReferenceImages.
+type GoogleCloudVisionV1p2beta1Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*GoogleCloudVisionV1p2beta1ProductKeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVisionV1p2beta1Product) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductKeyValue: A product label
+// represented as a key-value pair.
+type GoogleCloudVisionV1p2beta1ProductKeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *GoogleCloudVisionV1p2beta1ProductKeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductKeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResults: Results for a product
+// search request.
+type GoogleCloudVisionV1p2beta1ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p2beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *GoogleCloudVisionV1p2beta1ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p2beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResultsResult: Information
+// about a product.
+type GoogleCloudVisionV1p2beta1ProductSearchResultsResult struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *GoogleCloudVisionV1p2beta1Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *GoogleCloudVisionV1p2beta1ProductSearchResultsResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p2beta1ProductSearchResultsResult) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsResult
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // GoogleCloudVisionV1p2beta1Property: A `Property` consists of a
 // user-supplied name/value pair.
 type GoogleCloudVisionV1p2beta1Property struct {
@@ -7733,6 +8333,15 @@
 	// this time are not reflected in the current results.
 	IndexTime string `json:"indexTime,omitempty"`
 
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
 	// Results: List of results, one for each product match.
 	Results []*GoogleCloudVisionV1p3beta1ProductSearchResultsResult `json:"results,omitempty"`
 
@@ -7759,6 +8368,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p3beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVisionV1p3beta1ProductSearchResultsResult: Information
 // about a product.
 type GoogleCloudVisionV1p3beta1ProductSearchResultsResult struct {
@@ -8617,6 +9261,40 @@
 	return nil
 }
 
+// GroupedResult: Information about the products similar to a single
+// product in a query
+// image.
+type GroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*Result `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ImageAnnotationContext: If an image was produced from a file (e.g. a
 // PDF), this message gives
 // information about the source of that image.
@@ -8681,6 +9359,54 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ImportProductSetsResponse: Response message for the
+// `ImportProductSets` method.
+//
+// This message is returned by
+// the
+// google.longrunning.Operations.GetOperation method in the
+// returned
+// google.longrunning.Operation.response field.
+type ImportProductSetsResponse struct {
+	// ReferenceImages: The list of reference_images that are imported
+	// successfully.
+	ReferenceImages []*ReferenceImage `json:"referenceImages,omitempty"`
+
+	// Statuses: The rpc status for each ImportProductSet request, including
+	// both successes
+	// and errors.
+	//
+	// The number of statuses here matches the number of lines in the csv
+	// file,
+	// and statuses[i] stores the success or failure status of processing
+	// the i-th
+	// line of the csv, starting from line 0.
+	Statuses []*Status `json:"statuses,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ReferenceImages") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ReferenceImages") 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 *ImportProductSetsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ImportProductSetsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // InputConfig: The desired input location and metadata.
 type InputConfig struct {
 	// GcsSource: The Google Cloud Storage location to read the input from.
@@ -8714,6 +9440,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// KeyValue: A product label represented as a key-value pair.
+type KeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *KeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod KeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Landmark: A face-specific landmark (for example, a face feature).
 type Landmark struct {
 	// Position: Face landmark position.
@@ -9326,6 +10087,114 @@
 	return nil
 }
 
+// Product: A Product contains ReferenceImages.
+type Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*KeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Product) MarshalJSON() ([]byte, error) {
+	type NoMethod Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ProductSearchResults: Results for a product search request.
+type ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*Result `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Property: A `Property` consists of a user-supplied name/value pair.
 type Property struct {
 	// Name: Name of the property.
@@ -9360,6 +10229,118 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ReferenceImage: A `ReferenceImage` represents a product image and its
+// associated metadata,
+// such as bounding boxes.
+type ReferenceImage struct {
+	// BoundingPolys: Bounding polygons around the areas of interest in the
+	// reference image.
+	// Optional. If this field is empty, the system will try to detect
+	// regions of
+	// interest. At most 10 bounding polygons will be used.
+	//
+	// The provided shape is converted into a non-rotated rectangle.
+	// Once
+	// converted, the small edge of the rectangle must be greater than or
+	// equal
+	// to 300 pixels. The aspect ratio must be 1:4 or less (i.e. 1:3 is ok;
+	// 1:5
+	// is not).
+	BoundingPolys []*BoundingPoly `json:"boundingPolys,omitempty"`
+
+	// Name: The resource name of the reference image.
+	//
+	// Format
+	// is:
+	//
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referen
+	// ceImages/IMAGE_ID`.
+	//
+	// This field is ignored when creating a reference image.
+	Name string `json:"name,omitempty"`
+
+	// Uri: The Google Cloud Storage URI of the reference image.
+	//
+	// The URI must start with `gs://`.
+	//
+	// Required.
+	Uri string `json:"uri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPolys") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPolys") 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 *ReferenceImage) MarshalJSON() ([]byte, error) {
+	type NoMethod ReferenceImage
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Result: Information about a product.
+type Result struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *Result) MarshalJSON() ([]byte, error) {
+	type NoMethod Result
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *Result) UnmarshalJSON(data []byte) error {
+	type NoMethod Result
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // SafeSearchAnnotation: Set of features pertaining to the image,
 // computed by computer vision
 // methods over safe-search verticals (for example, adult, spoof,
diff --git a/vision/v1p2beta1/vision-api.json b/vision/v1p2beta1/vision-api.json
index 738ca88..9d5f3ce 100644
--- a/vision/v1p2beta1/vision-api.json
+++ b/vision/v1p2beta1/vision-api.json
@@ -154,7 +154,7 @@
       }
     }
   },
-  "revision": "20180928",
+  "revision": "20181031",
   "rootUrl": "https://vision.googleapis.com/",
   "schemas": {
     "AnnotateFileResponse": {
@@ -234,6 +234,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -277,6 +281,41 @@
       },
       "type": "object"
     },
+    "BatchOperationMetadata": {
+      "description": "Metadata for the batch operations such as the current state.\n\nThis is included in the `metadata` field of the `Operation` returned by the\n`GetOperation` call of the `google::longrunning::Operations` service.",
+      "id": "BatchOperationMetadata",
+      "properties": {
+        "endTime": {
+          "description": "The time when the batch request is finished and\ngoogle.longrunning.Operation.done is set to true.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "description": "The current state of the batch operation.",
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "PROCESSING",
+            "SUCCESSFUL",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "enumDescriptions": [
+            "Invalid.",
+            "Request is actively being processed.",
+            "The request is done and at least one item has been successfully\nprocessed.",
+            "The request is done and no item has been successfully processed.",
+            "The request is done after the longrunning.Operations.CancelOperation has\nbeen called by the user.  Any records that were processed before the\ncancel command are output as specified in the request."
+          ],
+          "type": "string"
+        },
+        "submitTime": {
+          "description": "The time when the batch request was submitted to the server.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Block": {
       "description": "Logical element on the page.",
       "id": "Block",
@@ -827,6 +866,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "GoogleCloudVisionV1p1beta1SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -1565,6 +1608,115 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p1beta1Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "GoogleCloudVisionV1p1beta1Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductKeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductKeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "GoogleCloudVisionV1p1beta1ProductKeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p1beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p1beta1ProductSearchResultsResult": {
+      "description": "Information about a product.",
+      "id": "GoogleCloudVisionV1p1beta1ProductSearchResultsResult",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "GoogleCloudVisionV1p1beta1Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p1beta1Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "GoogleCloudVisionV1p1beta1Property",
@@ -2076,6 +2228,10 @@
           },
           "type": "array"
         },
+        "productSearchResults": {
+          "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResults",
+          "description": "If present, product search has completed successfully."
+        },
         "safeSearchAnnotation": {
           "$ref": "GoogleCloudVisionV1p2beta1SafeSearchAnnotation",
           "description": "If present, safe-search annotation has completed successfully."
@@ -2695,6 +2851,7 @@
             "IMAGE_PROPERTIES",
             "CROP_HINTS",
             "WEB_DETECTION",
+            "PRODUCT_SEARCH",
             "OBJECT_LOCALIZATION"
           ],
           "enumDescriptions": [
@@ -2709,6 +2866,7 @@
             "Compute a set of image properties, such as the\nimage's dominant colors.",
             "Run crop hints.",
             "Run web detection.",
+            "Run Product Search.",
             "Run localizer for object detection."
           ],
           "type": "string"
@@ -2789,6 +2947,10 @@
           "$ref": "GoogleCloudVisionV1p2beta1LatLongRect",
           "description": "Not used."
         },
+        "productSearchParams": {
+          "$ref": "GoogleCloudVisionV1p2beta1ProductSearchParams",
+          "description": "Parameters for product search."
+        },
         "webDetectionParams": {
           "$ref": "GoogleCloudVisionV1p2beta1WebDetectionParams",
           "description": "Parameters for web detection."
@@ -3041,6 +3203,141 @@
       },
       "type": "object"
     },
+    "GoogleCloudVisionV1p2beta1Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "GoogleCloudVisionV1p2beta1Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductKeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductKeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "GoogleCloudVisionV1p2beta1ProductKeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchParams": {
+      "description": "Parameters for a product search request.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchParams",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
+          "description": "The bounding polygon around the area of interest in the image.\nOptional. If it is not specified, system discretion will be applied."
+        },
+        "filter": {
+          "description": "The filtering expression. This can be used to restrict search results based\non Product labels. We currently support an AND of OR of key-value\nexpressions, where each expression within an OR must have the same key.\n\nFor example, \"(color = red OR color = blue) AND brand = Google\" is\nacceptable, but not \"(color = red OR brand = Google)\" or \"color: red\".",
+          "type": "string"
+        },
+        "productCategories": {
+          "description": "The list of product categories to search in. Currently, we only consider\nthe first category, and either \"homegoods\", \"apparel\", or \"toys\" should be\nspecified.",
+          "items": {
+            "type": "string"
+          },
+          "type": "array"
+        },
+        "productSet": {
+          "description": "The resource name of a ProductSet to be searched for similar images.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p2beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p2beta1ProductSearchResultsResult": {
+      "description": "Information about a product.",
+      "id": "GoogleCloudVisionV1p2beta1ProductSearchResultsResult",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "GoogleCloudVisionV1p2beta1Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "GoogleCloudVisionV1p2beta1Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "GoogleCloudVisionV1p2beta1Property",
@@ -4417,6 +4714,31 @@
           "format": "google-datetime",
           "type": "string"
         },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "GoogleCloudVisionV1p3beta1ProductSearchResultsResult"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "GoogleCloudVisionV1p3beta1BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
         "results": {
           "description": "List of results, one for each product match.",
           "items": {
@@ -4881,6 +5203,24 @@
       },
       "type": "object"
     },
+    "GroupedResult": {
+      "description": "Information about the products similar to a single product in a query\nimage.",
+      "id": "GroupedResult",
+      "properties": {
+        "boundingPoly": {
+          "$ref": "BoundingPoly",
+          "description": "The bounding polygon around the product detected in the query image."
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "Result"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "ImageAnnotationContext": {
       "description": "If an image was produced from a file (e.g. a PDF), this message gives\ninformation about the source of that image.",
       "id": "ImageAnnotationContext",
@@ -4908,6 +5248,27 @@
       },
       "type": "object"
     },
+    "ImportProductSetsResponse": {
+      "description": "Response message for the `ImportProductSets` method.\n\nThis message is returned by the\ngoogle.longrunning.Operations.GetOperation method in the returned\ngoogle.longrunning.Operation.response field.",
+      "id": "ImportProductSetsResponse",
+      "properties": {
+        "referenceImages": {
+          "description": "The list of reference_images that are imported successfully.",
+          "items": {
+            "$ref": "ReferenceImage"
+          },
+          "type": "array"
+        },
+        "statuses": {
+          "description": "The rpc status for each ImportProductSet request, including both successes\nand errors.\n\nThe number of statuses here matches the number of lines in the csv file,\nand statuses[i] stores the success or failure status of processing the i-th\nline of the csv, starting from line 0.",
+          "items": {
+            "$ref": "Status"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "InputConfig": {
       "description": "The desired input location and metadata.",
       "id": "InputConfig",
@@ -4923,6 +5284,21 @@
       },
       "type": "object"
     },
+    "KeyValue": {
+      "description": "A product label represented as a key-value pair.",
+      "id": "KeyValue",
+      "properties": {
+        "key": {
+          "description": "The key of the label attached to the product. Cannot be empty and cannot\nexceed 128 bytes.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value of the label attached to the product. Cannot be empty and\ncannot exceed 128 bytes.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
     "Landmark": {
       "description": "A face-specific landmark (for example, a face feature).",
       "id": "Landmark",
@@ -5253,6 +5629,62 @@
       },
       "type": "object"
     },
+    "Product": {
+      "description": "A Product contains ReferenceImages.",
+      "id": "Product",
+      "properties": {
+        "description": {
+          "description": "User-provided metadata to be stored with this product. Must be at most 4096\ncharacters long.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The user-provided name for this Product. Must not be empty. Must be at most\n4096 characters long.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The resource name of the product.\n\nFormat is:\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.\n\nThis field is ignored when creating a product.",
+          "type": "string"
+        },
+        "productCategory": {
+          "description": "The category for the product identified by the reference image. This should\nbe either \"homegoods\", \"apparel\", or \"toys\".\n\nThis field is immutable.",
+          "type": "string"
+        },
+        "productLabels": {
+          "description": "Key-value pairs that can be attached to a product. At query time,\nconstraints can be specified based on the product_labels.\n\nNote that integer values can be provided as strings, e.g. \"1199\". Only\nstrings with integer values can match a range-based restriction which is\nto be supported soon.\n\nMultiple values can be assigned to the same key. One product may have up to\n100 product_labels.",
+          "items": {
+            "$ref": "KeyValue"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
+    "ProductSearchResults": {
+      "description": "Results for a product search request.",
+      "id": "ProductSearchResults",
+      "properties": {
+        "indexTime": {
+          "description": "Timestamp of the index which provided these results. Changes made after\nthis time are not reflected in the current results.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "productGroupedResults": {
+          "description": "List of results grouped by products detected in the query image. Each entry\ncorresponds to one bounding polygon in the query image, and contains the\nmatching products specific to that region. There may be duplicate product\nmatches in the union of all the per-product results.",
+          "items": {
+            "$ref": "GroupedResult"
+          },
+          "type": "array"
+        },
+        "results": {
+          "description": "List of results, one for each product match.",
+          "items": {
+            "$ref": "Result"
+          },
+          "type": "array"
+        }
+      },
+      "type": "object"
+    },
     "Property": {
       "description": "A `Property` consists of a user-supplied name/value pair.",
       "id": "Property",
@@ -5273,6 +5705,48 @@
       },
       "type": "object"
     },
+    "ReferenceImage": {
+      "description": "A `ReferenceImage` represents a product image and its associated metadata,\nsuch as bounding boxes.",
+      "id": "ReferenceImage",
+      "properties": {
+        "boundingPolys": {
+          "description": "Bounding polygons around the areas of interest in the reference image.\nOptional. If this field is empty, the system will try to detect regions of\ninterest. At most 10 bounding polygons will be used.\n\nThe provided shape is converted into a non-rotated rectangle. Once\nconverted, the small edge of the rectangle must be greater than or equal\nto 300 pixels. The aspect ratio must be 1:4 or less (i.e. 1:3 is ok; 1:5\nis not).",
+          "items": {
+            "$ref": "BoundingPoly"
+          },
+          "type": "array"
+        },
+        "name": {
+          "description": "The resource name of the reference image.\n\nFormat is:\n\n`projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referenceImages/IMAGE_ID`.\n\nThis field is ignored when creating a reference image.",
+          "type": "string"
+        },
+        "uri": {
+          "description": "The Google Cloud Storage URI of the reference image.\n\nThe URI must start with `gs://`.\n\nRequired.",
+          "type": "string"
+        }
+      },
+      "type": "object"
+    },
+    "Result": {
+      "description": "Information about a product.",
+      "id": "Result",
+      "properties": {
+        "image": {
+          "description": "The resource name of the image from the product that is the closest match\nto the query.",
+          "type": "string"
+        },
+        "product": {
+          "$ref": "Product",
+          "description": "The Product."
+        },
+        "score": {
+          "description": "A confidence level on the match, ranging from 0 (no confidence) to\n1 (full confidence).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "type": "object"
+    },
     "SafeSearchAnnotation": {
       "description": "Set of features pertaining to the image, computed by computer vision\nmethods over safe-search verticals (for example, adult, spoof, medical,\nviolence).",
       "id": "SafeSearchAnnotation",
diff --git a/vision/v1p2beta1/vision-gen.go b/vision/v1p2beta1/vision-gen.go
index e87447c..83200c0 100644
--- a/vision/v1p2beta1/vision-gen.go
+++ b/vision/v1p2beta1/vision-gen.go
@@ -16,15 +16,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
@@ -184,6 +185,10 @@
 	// successfully.
 	LogoAnnotations []*EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -279,6 +284,62 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// BatchOperationMetadata: Metadata for the batch operations such as the
+// current state.
+//
+// This is included in the `metadata` field of the `Operation` returned
+// by the
+// `GetOperation` call of the `google::longrunning::Operations` service.
+type BatchOperationMetadata struct {
+	// EndTime: The time when the batch request is finished
+	// and
+	// google.longrunning.Operation.done is set to true.
+	EndTime string `json:"endTime,omitempty"`
+
+	// State: The current state of the batch operation.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - Invalid.
+	//   "PROCESSING" - Request is actively being processed.
+	//   "SUCCESSFUL" - The request is done and at least one item has been
+	// successfully
+	// processed.
+	//   "FAILED" - The request is done and no item has been successfully
+	// processed.
+	//   "CANCELLED" - The request is done after the
+	// longrunning.Operations.CancelOperation has
+	// been called by the user.  Any records that were processed before
+	// the
+	// cancel command are output as specified in the request.
+	State string `json:"state,omitempty"`
+
+	// SubmitTime: The time when the batch request was submitted to the
+	// server.
+	SubmitTime string `json:"submitTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EndTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EndTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *BatchOperationMetadata) MarshalJSON() ([]byte, error) {
+	type NoMethod BatchOperationMetadata
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Block: Logical element on the page.
 type Block struct {
 	// BlockType: Detected block type (text, image etc) for this block.
@@ -1333,6 +1394,10 @@
 	// successfully.
 	LogoAnnotations []*GoogleCloudVisionV1p1beta1EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *GoogleCloudVisionV1p1beta1ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *GoogleCloudVisionV1p1beta1SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -2639,6 +2704,240 @@
 	return nil
 }
 
+// GoogleCloudVisionV1p1beta1Product: A Product contains
+// ReferenceImages.
+type GoogleCloudVisionV1p1beta1Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*GoogleCloudVisionV1p1beta1ProductKeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVisionV1p1beta1Product) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductKeyValue: A product label
+// represented as a key-value pair.
+type GoogleCloudVisionV1p1beta1ProductKeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *GoogleCloudVisionV1p1beta1ProductKeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductKeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResults: Results for a product
+// search request.
+type GoogleCloudVisionV1p1beta1ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p1beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *GoogleCloudVisionV1p1beta1ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p1beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p1beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p1beta1ProductSearchResultsResult: Information
+// about a product.
+type GoogleCloudVisionV1p1beta1ProductSearchResultsResult struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *GoogleCloudVisionV1p1beta1Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *GoogleCloudVisionV1p1beta1ProductSearchResultsResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p1beta1ProductSearchResultsResult) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p1beta1ProductSearchResultsResult
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // GoogleCloudVisionV1p1beta1Property: A `Property` consists of a
 // user-supplied name/value pair.
 type GoogleCloudVisionV1p1beta1Property struct {
@@ -3504,6 +3803,10 @@
 	// successfully.
 	LogoAnnotations []*GoogleCloudVisionV1p2beta1EntityAnnotation `json:"logoAnnotations,omitempty"`
 
+	// ProductSearchResults: If present, product search has completed
+	// successfully.
+	ProductSearchResults *GoogleCloudVisionV1p2beta1ProductSearchResults `json:"productSearchResults,omitempty"`
+
 	// SafeSearchAnnotation: If present, safe-search annotation has
 	// completed successfully.
 	SafeSearchAnnotation *GoogleCloudVisionV1p2beta1SafeSearchAnnotation `json:"safeSearchAnnotation,omitempty"`
@@ -4486,6 +4789,7 @@
 	// image's dominant colors.
 	//   "CROP_HINTS" - Run crop hints.
 	//   "WEB_DETECTION" - Run web detection.
+	//   "PRODUCT_SEARCH" - Run Product Search.
 	//   "OBJECT_LOCALIZATION" - Run localizer for object detection.
 	Type string `json:"type,omitempty"`
 
@@ -4692,6 +4996,9 @@
 	// LatLongRect: Not used.
 	LatLongRect *GoogleCloudVisionV1p2beta1LatLongRect `json:"latLongRect,omitempty"`
 
+	// ProductSearchParams: Parameters for product search.
+	ProductSearchParams *GoogleCloudVisionV1p2beta1ProductSearchParams `json:"productSearchParams,omitempty"`
+
 	// WebDetectionParams: Parameters for web detection.
 	WebDetectionParams *GoogleCloudVisionV1p2beta1WebDetectionParams `json:"webDetectionParams,omitempty"`
 
@@ -5293,6 +5600,299 @@
 	return nil
 }
 
+// GoogleCloudVisionV1p2beta1Product: A Product contains
+// ReferenceImages.
+type GoogleCloudVisionV1p2beta1Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*GoogleCloudVisionV1p2beta1ProductKeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GoogleCloudVisionV1p2beta1Product) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductKeyValue: A product label
+// represented as a key-value pair.
+type GoogleCloudVisionV1p2beta1ProductKeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *GoogleCloudVisionV1p2beta1ProductKeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductKeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchParams: Parameters for a
+// product search request.
+type GoogleCloudVisionV1p2beta1ProductSearchParams struct {
+	// BoundingPoly: The bounding polygon around the area of interest in the
+	// image.
+	// Optional. If it is not specified, system discretion will be applied.
+	BoundingPoly *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Filter: The filtering expression. This can be used to restrict search
+	// results based
+	// on Product labels. We currently support an AND of OR of
+	// key-value
+	// expressions, where each expression within an OR must have the same
+	// key.
+	//
+	// For example, "(color = red OR color = blue) AND brand = Google"
+	// is
+	// acceptable, but not "(color = red OR brand = Google)" or "color:
+	// red".
+	Filter string `json:"filter,omitempty"`
+
+	// ProductCategories: The list of product categories to search in.
+	// Currently, we only consider
+	// the first category, and either "homegoods", "apparel", or "toys"
+	// should be
+	// specified.
+	ProductCategories []string `json:"productCategories,omitempty"`
+
+	// ProductSet: The resource name of a ProductSet to be searched for
+	// similar images.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/productSets/PRODUCT_SET_ID`.
+	ProductSet string `json:"productSet,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p2beta1ProductSearchParams) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchParams
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResults: Results for a product
+// search request.
+type GoogleCloudVisionV1p2beta1ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p2beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *GoogleCloudVisionV1p2beta1ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p2beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p2beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GoogleCloudVisionV1p2beta1ProductSearchResultsResult: Information
+// about a product.
+type GoogleCloudVisionV1p2beta1ProductSearchResultsResult struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *GoogleCloudVisionV1p2beta1Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *GoogleCloudVisionV1p2beta1ProductSearchResultsResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *GoogleCloudVisionV1p2beta1ProductSearchResultsResult) UnmarshalJSON(data []byte) error {
+	type NoMethod GoogleCloudVisionV1p2beta1ProductSearchResultsResult
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // GoogleCloudVisionV1p2beta1Property: A `Property` consists of a
 // user-supplied name/value pair.
 type GoogleCloudVisionV1p2beta1Property struct {
@@ -7733,6 +8333,15 @@
 	// this time are not reflected in the current results.
 	IndexTime string `json:"indexTime,omitempty"`
 
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult `json:"productGroupedResults,omitempty"`
+
 	// Results: List of results, one for each product match.
 	Results []*GoogleCloudVisionV1p3beta1ProductSearchResultsResult `json:"results,omitempty"`
 
@@ -7759,6 +8368,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult:
+// Information about the products similar to a single product in a
+// query
+// image.
+type GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *GoogleCloudVisionV1p3beta1BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*GoogleCloudVisionV1p3beta1ProductSearchResultsResult `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GoogleCloudVisionV1p3beta1ProductSearchResultsGroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GoogleCloudVisionV1p3beta1ProductSearchResultsResult: Information
 // about a product.
 type GoogleCloudVisionV1p3beta1ProductSearchResultsResult struct {
@@ -8617,6 +9261,40 @@
 	return nil
 }
 
+// GroupedResult: Information about the products similar to a single
+// product in a query
+// image.
+type GroupedResult struct {
+	// BoundingPoly: The bounding polygon around the product detected in the
+	// query image.
+	BoundingPoly *BoundingPoly `json:"boundingPoly,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*Result `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPoly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPoly") 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 *GroupedResult) MarshalJSON() ([]byte, error) {
+	type NoMethod GroupedResult
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ImageAnnotationContext: If an image was produced from a file (e.g. a
 // PDF), this message gives
 // information about the source of that image.
@@ -8681,6 +9359,54 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ImportProductSetsResponse: Response message for the
+// `ImportProductSets` method.
+//
+// This message is returned by
+// the
+// google.longrunning.Operations.GetOperation method in the
+// returned
+// google.longrunning.Operation.response field.
+type ImportProductSetsResponse struct {
+	// ReferenceImages: The list of reference_images that are imported
+	// successfully.
+	ReferenceImages []*ReferenceImage `json:"referenceImages,omitempty"`
+
+	// Statuses: The rpc status for each ImportProductSet request, including
+	// both successes
+	// and errors.
+	//
+	// The number of statuses here matches the number of lines in the csv
+	// file,
+	// and statuses[i] stores the success or failure status of processing
+	// the i-th
+	// line of the csv, starting from line 0.
+	Statuses []*Status `json:"statuses,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ReferenceImages") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "ReferenceImages") 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 *ImportProductSetsResponse) MarshalJSON() ([]byte, error) {
+	type NoMethod ImportProductSetsResponse
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // InputConfig: The desired input location and metadata.
 type InputConfig struct {
 	// GcsSource: The Google Cloud Storage location to read the input from.
@@ -8714,6 +9440,41 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// KeyValue: A product label represented as a key-value pair.
+type KeyValue struct {
+	// Key: The key of the label attached to the product. Cannot be empty
+	// and cannot
+	// exceed 128 bytes.
+	Key string `json:"key,omitempty"`
+
+	// Value: The value of the label attached to the product. Cannot be
+	// empty and
+	// cannot exceed 128 bytes.
+	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 *KeyValue) MarshalJSON() ([]byte, error) {
+	type NoMethod KeyValue
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Landmark: A face-specific landmark (for example, a face feature).
 type Landmark struct {
 	// Position: Face landmark position.
@@ -9326,6 +10087,114 @@
 	return nil
 }
 
+// Product: A Product contains ReferenceImages.
+type Product struct {
+	// Description: User-provided metadata to be stored with this product.
+	// Must be at most 4096
+	// characters long.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The user-provided name for this Product. Must not be
+	// empty. Must be at most
+	// 4096 characters long.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: The resource name of the product.
+	//
+	// Format
+	// is:
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID`.
+	//
+	// This field is ignored when creating a product.
+	Name string `json:"name,omitempty"`
+
+	// ProductCategory: The category for the product identified by the
+	// reference image. This should
+	// be either "homegoods", "apparel", or "toys".
+	//
+	// This field is immutable.
+	ProductCategory string `json:"productCategory,omitempty"`
+
+	// ProductLabels: Key-value pairs that can be attached to a product. At
+	// query time,
+	// constraints can be specified based on the product_labels.
+	//
+	// Note that integer values can be provided as strings, e.g. "1199".
+	// Only
+	// strings with integer values can match a range-based restriction which
+	// is
+	// to be supported soon.
+	//
+	// Multiple values can be assigned to the same key. One product may have
+	// up to
+	// 100 product_labels.
+	ProductLabels []*KeyValue `json:"productLabels,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Product) MarshalJSON() ([]byte, error) {
+	type NoMethod Product
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ProductSearchResults: Results for a product search request.
+type ProductSearchResults struct {
+	// IndexTime: Timestamp of the index which provided these results.
+	// Changes made after
+	// this time are not reflected in the current results.
+	IndexTime string `json:"indexTime,omitempty"`
+
+	// ProductGroupedResults: List of results grouped by products detected
+	// in the query image. Each entry
+	// corresponds to one bounding polygon in the query image, and contains
+	// the
+	// matching products specific to that region. There may be duplicate
+	// product
+	// matches in the union of all the per-product results.
+	ProductGroupedResults []*GroupedResult `json:"productGroupedResults,omitempty"`
+
+	// Results: List of results, one for each product match.
+	Results []*Result `json:"results,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IndexTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "IndexTime") 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 *ProductSearchResults) MarshalJSON() ([]byte, error) {
+	type NoMethod ProductSearchResults
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Property: A `Property` consists of a user-supplied name/value pair.
 type Property struct {
 	// Name: Name of the property.
@@ -9360,6 +10229,118 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ReferenceImage: A `ReferenceImage` represents a product image and its
+// associated metadata,
+// such as bounding boxes.
+type ReferenceImage struct {
+	// BoundingPolys: Bounding polygons around the areas of interest in the
+	// reference image.
+	// Optional. If this field is empty, the system will try to detect
+	// regions of
+	// interest. At most 10 bounding polygons will be used.
+	//
+	// The provided shape is converted into a non-rotated rectangle.
+	// Once
+	// converted, the small edge of the rectangle must be greater than or
+	// equal
+	// to 300 pixels. The aspect ratio must be 1:4 or less (i.e. 1:3 is ok;
+	// 1:5
+	// is not).
+	BoundingPolys []*BoundingPoly `json:"boundingPolys,omitempty"`
+
+	// Name: The resource name of the reference image.
+	//
+	// Format
+	// is:
+	//
+	// `projects/PROJECT_ID/locations/LOC_ID/products/PRODUCT_ID/referen
+	// ceImages/IMAGE_ID`.
+	//
+	// This field is ignored when creating a reference image.
+	Name string `json:"name,omitempty"`
+
+	// Uri: The Google Cloud Storage URI of the reference image.
+	//
+	// The URI must start with `gs://`.
+	//
+	// Required.
+	Uri string `json:"uri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BoundingPolys") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "BoundingPolys") 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 *ReferenceImage) MarshalJSON() ([]byte, error) {
+	type NoMethod ReferenceImage
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Result: Information about a product.
+type Result struct {
+	// Image: The resource name of the image from the product that is the
+	// closest match
+	// to the query.
+	Image string `json:"image,omitempty"`
+
+	// Product: The Product.
+	Product *Product `json:"product,omitempty"`
+
+	// Score: A confidence level on the match, ranging from 0 (no
+	// confidence) to
+	// 1 (full confidence).
+	Score float64 `json:"score,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Image") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// 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. "Image") 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 *Result) MarshalJSON() ([]byte, error) {
+	type NoMethod Result
+	raw := NoMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+func (s *Result) UnmarshalJSON(data []byte) error {
+	type NoMethod Result
+	var s1 struct {
+		Score gensupport.JSONFloat64 `json:"score"`
+		*NoMethod
+	}
+	s1.NoMethod = (*NoMethod)(s)
+	if err := json.Unmarshal(data, &s1); err != nil {
+		return err
+	}
+	s.Score = float64(s1.Score)
+	return nil
+}
+
 // SafeSearchAnnotation: Set of features pertaining to the image,
 // computed by computer vision
 // methods over safe-search verticals (for example, adult, spoof,
diff --git a/webfonts/v1/webfonts-gen.go b/webfonts/v1/webfonts-gen.go
index 963d865..b4f094e 100644
--- a/webfonts/v1/webfonts-gen.go
+++ b/webfonts/v1/webfonts-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/webmasters/v3/webmasters-gen.go b/webmasters/v3/webmasters-gen.go
index de77d17..64121e8 100644
--- a/webmasters/v3/webmasters-gen.go
+++ b/webmasters/v3/webmasters-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/websecurityscanner/v1alpha/websecurityscanner-gen.go b/websecurityscanner/v1alpha/websecurityscanner-gen.go
index 920dbeb..2e26b71 100644
--- a/websecurityscanner/v1alpha/websecurityscanner-gen.go
+++ b/websecurityscanner/v1alpha/websecurityscanner-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/youtube/v3/youtube-gen.go b/youtube/v3/youtube-gen.go
index 0bea3c2..f714799 100644
--- a/youtube/v3/youtube-gen.go
+++ b/youtube/v3/youtube-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/youtubeanalytics/v1/youtubeanalytics-gen.go b/youtubeanalytics/v1/youtubeanalytics-gen.go
index 27bda06..8d2721c 100644
--- a/youtubeanalytics/v1/youtubeanalytics-gen.go
+++ b/youtubeanalytics/v1/youtubeanalytics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/youtubeanalytics/v1beta1/youtubeanalytics-gen.go b/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
index 042a0f8..5692ac5 100644
--- a/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
+++ b/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/youtubeanalytics/v2/youtubeanalytics-gen.go b/youtubeanalytics/v2/youtubeanalytics-gen.go
index eb405ce..521dd8e 100644
--- a/youtubeanalytics/v2/youtubeanalytics-gen.go
+++ b/youtubeanalytics/v2/youtubeanalytics-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code
diff --git a/youtubereporting/v1/youtubereporting-gen.go b/youtubereporting/v1/youtubereporting-gen.go
index 40e04e9..d9af692 100644
--- a/youtubereporting/v1/youtubereporting-gen.go
+++ b/youtubereporting/v1/youtubereporting-gen.go
@@ -14,15 +14,16 @@
 	"encoding/json"
 	"errors"
 	"fmt"
-	context "golang.org/x/net/context"
-	ctxhttp "golang.org/x/net/context/ctxhttp"
-	gensupport "google.golang.org/api/gensupport"
-	googleapi "google.golang.org/api/googleapi"
 	"io"
 	"net/http"
 	"net/url"
 	"strconv"
 	"strings"
+
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
 )
 
 // Always reference these packages, just in case the auto-generated code