<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_v3p1beta1.html">Cloud Talent Solution API</a> . <a href="jobs_v3p1beta1.projects.html">projects</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="jobs_v3p1beta1.projects.clientEvents.html">clientEvents()</a></code>
</p>
<p class="firstline">Returns the clientEvents Resource.</p>

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

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

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

<p class="toc_element">
  <code><a href="#complete">complete(name, languageCode=None, pageSize=None, languageCodes=None, query=None, x__xgafv=None, scope=None, type=None, companyName=None)</a></code></p>
<p class="firstline">Completes the specified prefix with keyword suggestions.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="complete">complete(name, languageCode=None, pageSize=None, languageCodes=None, query=None, x__xgafv=None, scope=None, type=None, companyName=None)</code>
  <pre>Completes the specified prefix with keyword suggestions.
Intended for use by a job search auto-complete search box.

Args:
  name: string, Required.

Resource name of project the completion is performed within.

The format is "projects/{project_id}", for example,
"projects/api-test-project". (required)
  languageCode: string, Deprecated. Use language_codes instead.

Optional.

The language of the query. This is
the BCP-47 language code, such as "en-US" or "sr-Latn".
For more information, see
[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).

For CompletionType.JOB_TITLE type, only open jobs with the same
language_code are returned.

For CompletionType.COMPANY_NAME type,
only companies having open jobs with the same language_code are
returned.

For CompletionType.COMBINED type, only open jobs with the same
language_code or companies having open jobs with the same
language_code are returned.

The maximum number of allowed characters is 255.
  pageSize: integer, Required.

Completion result count.

The maximum allowed page size is 10.
  languageCodes: string, Optional.

The list of languages of the query. This is
the BCP-47 language code, such as "en-US" or "sr-Latn".
For more information, see
[Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).

For CompletionType.JOB_TITLE type, only open jobs with the same
language_codes are returned.

For CompletionType.COMPANY_NAME type,
only companies having open jobs with the same language_codes are
returned.

For CompletionType.COMBINED type, only open jobs with the same
language_codes or companies having open jobs with the same
language_codes are returned.

The maximum number of allowed characters is 255. (repeated)
  query: string, Required.

The query used to generate suggestions.

The maximum number of allowed characters is 255.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  scope: string, Optional.

The scope of the completion. The defaults is CompletionScope.PUBLIC.
  type: string, Optional.

The completion topic. The default is CompletionType.COMBINED.
  companyName: string, Optional.

If provided, restricts completion to specified company.

The format is "projects/{project_id}/companies/{company_id}", for example,
"projects/api-test-project/companies/foo".

Returns:
  An object of the form:

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

</body></html>