<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="jobs_v4.html">Cloud Talent Solution API</a> . <a href="jobs_v4.projects.html">projects</a> . <a href="jobs_v4.projects.tenants.html">tenants</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="jobs_v4.projects.tenants.clientEvents.html">clientEvents()</a></code>
</p>
<p class="firstline">Returns the clientEvents Resource.</p>

<p class="toc_element">
  <code><a href="jobs_v4.projects.tenants.companies.html">companies()</a></code>
</p>
<p class="firstline">Returns the companies Resource.</p>

<p class="toc_element">
  <code><a href="jobs_v4.projects.tenants.jobs.html">jobs()</a></code>
</p>
<p class="firstline">Returns the jobs Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#completeQuery">completeQuery(tenant, company=None, languageCodes=None, pageSize=None, query=None, scope=None, type=None, x__xgafv=None)</a></code></p>
<p class="firstline">Completes the specified prefix with keyword suggestions. Intended for use by a job search auto-complete search box.</p>
<p class="toc_element">
  <code><a href="#create">create(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new tenant entity.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes specified tenant.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves specified tenant.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all tenants associated with the project.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates specified tenant.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="completeQuery">completeQuery(tenant, company=None, languageCodes=None, pageSize=None, query=None, scope=None, type=None, x__xgafv=None)</code>
  <pre>Completes the specified prefix with keyword suggestions. Intended for use by a job search auto-complete search box.

Args:
  tenant: string, Required. Resource name of tenant the completion is performed within. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;. (required)
  company: string, If provided, restricts completion to specified company. The format is &quot;projects/{project_id}/tenants/{tenant_id}/companies/{company_id}&quot;, for example, &quot;projects/foo/tenants/bar/companies/baz&quot;.
  languageCodes: string, The list of languages of the query. This is the BCP-47 language code, such as &quot;en-US&quot; or &quot;sr-Latn&quot;. For more information, see [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47). The maximum number of allowed characters is 255. (repeated)
  pageSize: integer, Required. Completion result count. The maximum allowed page size is 10.
  query: string, Required. The query used to generate suggestions. The maximum number of allowed characters is 255.
  scope: string, The scope of the completion. The defaults is CompletionScope.PUBLIC.
    Allowed values
      COMPLETION_SCOPE_UNSPECIFIED - Default value.
      TENANT - Suggestions are based only on the data provided by the client.
      PUBLIC - Suggestions are based on all jobs data in the system that&#x27;s visible to the client
  type: string, The completion topic. The default is CompletionType.COMBINED.
    Allowed values
      COMPLETION_TYPE_UNSPECIFIED - Default value.
      JOB_TITLE - Suggest job titles for jobs autocomplete. For CompletionType.JOB_TITLE type, only open jobs with the same language_codes are returned.
      COMPANY_NAME - Suggest company names for jobs autocomplete. For CompletionType.COMPANY_NAME type, only companies having open jobs with the same language_codes are returned.
      COMBINED - Suggest both job titles and company names for jobs autocomplete. For CompletionType.COMBINED type, only open jobs with the same language_codes or companies having open jobs with the same language_codes are returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response of auto-complete query.
  &quot;completionResults&quot;: [ # Results of the matching job/company candidates.
    { # Resource that represents completion results.
      &quot;imageUri&quot;: &quot;A String&quot;, # The URI of the company image for COMPANY_NAME.
      &quot;suggestion&quot;: &quot;A String&quot;, # The suggestion for the query.
      &quot;type&quot;: &quot;A String&quot;, # The completion topic.
    },
  ],
  &quot;metadata&quot;: { # Additional information returned to client, such as debugging information. # Additional information for the API invocation, such as the request tracking id.
    &quot;requestId&quot;: &quot;A String&quot;, # A unique id associated with this call. This id is logged for tracking purposes.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="create">create(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new tenant entity.

Args:
  parent: string, Required. Resource name of the project under which the tenant is created. The format is &quot;projects/{project_id}&quot;, for example, &quot;projects/foo&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Tenant resource represents a tenant in the service. A tenant is a group or entity that shares common access with specific privileges for resources like jobs. Customer may create multiple tenants to provide data isolation for different groups.
  &quot;externalId&quot;: &quot;A String&quot;, # Required. Client side tenant identifier, used to uniquely identify the tenant. The maximum number of allowed characters is 255.
  &quot;name&quot;: &quot;A String&quot;, # Required during tenant update. The resource name for a tenant. This is generated by the service when a tenant is created. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Tenant resource represents a tenant in the service. A tenant is a group or entity that shares common access with specific privileges for resources like jobs. Customer may create multiple tenants to provide data isolation for different groups.
  &quot;externalId&quot;: &quot;A String&quot;, # Required. Client side tenant identifier, used to uniquely identify the tenant. The maximum number of allowed characters is 255.
  &quot;name&quot;: &quot;A String&quot;, # Required during tenant update. The resource name for a tenant. This is generated by the service when a tenant is created. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes specified tenant.

Args:
  name: string, Required. The resource name of the tenant to be deleted. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Retrieves specified tenant.

Args:
  name: string, Required. The resource name of the tenant to be retrieved. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Tenant resource represents a tenant in the service. A tenant is a group or entity that shares common access with specific privileges for resources like jobs. Customer may create multiple tenants to provide data isolation for different groups.
  &quot;externalId&quot;: &quot;A String&quot;, # Required. Client side tenant identifier, used to uniquely identify the tenant. The maximum number of allowed characters is 255.
  &quot;name&quot;: &quot;A String&quot;, # Required during tenant update. The resource name for a tenant. This is generated by the service when a tenant is created. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists all tenants associated with the project.

Args:
  parent: string, Required. Resource name of the project under which the tenant is created. The format is &quot;projects/{project_id}&quot;, for example, &quot;projects/foo&quot;. (required)
  pageSize: integer, The maximum number of tenants to be returned, at most 100. Default is 100 if a non-positive number is provided.
  pageToken: string, The starting indicator from which to return results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The List tenants response object.
  &quot;metadata&quot;: { # Additional information returned to client, such as debugging information. # Additional information for the API invocation, such as the request tracking id.
    &quot;requestId&quot;: &quot;A String&quot;, # A unique id associated with this call. This id is logged for tracking purposes.
  },
  &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results.
  &quot;tenants&quot;: [ # Tenants for the current client.
    { # A Tenant resource represents a tenant in the service. A tenant is a group or entity that shares common access with specific privileges for resources like jobs. Customer may create multiple tenants to provide data isolation for different groups.
      &quot;externalId&quot;: &quot;A String&quot;, # Required. Client side tenant identifier, used to uniquely identify the tenant. The maximum number of allowed characters is 255.
      &quot;name&quot;: &quot;A String&quot;, # Required during tenant update. The resource name for a tenant. This is generated by the service when a tenant is created. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;.
    },
  ],
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates specified tenant.

Args:
  name: string, Required during tenant update. The resource name for a tenant. This is generated by the service when a tenant is created. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Tenant resource represents a tenant in the service. A tenant is a group or entity that shares common access with specific privileges for resources like jobs. Customer may create multiple tenants to provide data isolation for different groups.
  &quot;externalId&quot;: &quot;A String&quot;, # Required. Client side tenant identifier, used to uniquely identify the tenant. The maximum number of allowed characters is 255.
  &quot;name&quot;: &quot;A String&quot;, # Required during tenant update. The resource name for a tenant. This is generated by the service when a tenant is created. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;.
}

  updateMask: string, Strongly recommended for the best service experience. If update_mask is provided, only the specified fields in tenant are updated. Otherwise all the fields are updated. A field mask to specify the tenant fields to be updated. Only top level fields of Tenant are supported.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Tenant resource represents a tenant in the service. A tenant is a group or entity that shares common access with specific privileges for resources like jobs. Customer may create multiple tenants to provide data isolation for different groups.
  &quot;externalId&quot;: &quot;A String&quot;, # Required. Client side tenant identifier, used to uniquely identify the tenant. The maximum number of allowed characters is 255.
  &quot;name&quot;: &quot;A String&quot;, # Required during tenant update. The resource name for a tenant. This is generated by the service when a tenant is created. The format is &quot;projects/{project_id}/tenants/{tenant_id}&quot;, for example, &quot;projects/foo/tenants/bar&quot;.
}</pre>
</div>

</body></html>