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

<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new company entity.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified company.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specified company.</p>
<p class="toc_element">
  <code><a href="#list">list(pageToken=None, pageSize=None, mustHaveOpenJobs=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists all companies associated with a Cloud Talent Solution account.</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, updateCompanyFields=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified company. Company names can't be updated. To update a</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a new company entity.

Args:
  body: object, The request body.
    The object takes the form of:

{ # A Company resource represents a company in the service. A company is the
      # entity that owns job listings, that is, the hiring entity responsible for
      # employing applicants for the job position.
    &quot;website&quot;: &quot;A String&quot;, # Optional. The URL representing the company&#x27;s primary web site or home page,
        # such as, &quot;www.google.com&quot;.
    &quot;hqLocation&quot;: &quot;A String&quot;, # Optional. The street address of the company&#x27;s main headquarters, which may be
        # different from the job location. The service attempts
        # to geolocate the provided address, and populates a more specific
        # location wherever possible in structured_company_hq_location.
    &quot;companyInfoSources&quot;: [ # Optional. Identifiers external to the application that help to further identify
        # the employer.
      { # A resource that represents an external  Google identifier for a company,
          # for example, a Google+ business page or a Google Maps business page.
          # For unsupported types, use `unknown_type_id`.
        &quot;mapsCid&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s headquarters on Google Maps,
            # namely, the Google Maps CID (cell id).
        &quot;freebaseMid&quot;: &quot;A String&quot;, # Optional. The Google&#x27;s Knowledge Graph value for the employer&#x27;s company.
        &quot;unknownTypeId&quot;: &quot;A String&quot;, # Optional. A Google identifier that does not match any of the other types.
        &quot;gplusId&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s Google+ business page.
      },
    ],
    &quot;keywordSearchableCustomAttributes&quot;: [ # Optional. A list of keys of filterable Job.custom_attributes, whose
        # corresponding `string_values` are used in keyword search. Jobs with
        # `string_values` under these specified field keys are returned if any
        # of the values matches the search keyword. Custom field values with
        # parenthesis, brackets and special symbols might not be properly searchable,
        # and those keyword queries need to be surrounded by quotes.
      &quot;A String&quot;,
    ],
    &quot;suspended&quot;: True or False, # Output only. Indicates whether a company is flagged to be suspended from public
        # availability by the service when job content appears suspicious,
        # abusive, or spammy.
    &quot;imageUrl&quot;: &quot;A String&quot;, # Optional. A URL that hosts the employer&#x27;s company logo. If provided,
        # the logo image should be squared at 80x80 pixels.
        # 
        # The url must be a Google Photos or Google Album url.
        # Only images in these Google sub-domains are accepted.
    &quot;distributorBillingCompanyId&quot;: &quot;A String&quot;, # Optional. The unique company identifier provided by the client to identify an
        # employer for billing purposes. Recommended practice is to use
        # the distributor_company_id.
        # 
        # Defaults to same value as distributor_company_id when a value
        # is not provided.
    &quot;careerPageLink&quot;: &quot;A String&quot;, # Optional. The URL to employer&#x27;s career site or careers page on the employer&#x27;s web
        # site.
    &quot;keywordSearchableCustomFields&quot;: [ # Deprecated. Use keyword_searchable_custom_attributes instead.
        # 
        # Optional.
        # 
        # A list of filterable custom fields that should be used in keyword
        # search. The jobs of this company are returned if any of these custom
        # fields matches the search keyword. Custom field values with parenthesis,
        # brackets and special symbols might not be properly searchable, and those
        # keyword queries need to be surrounded by quotes.
      42,
    ],
    &quot;disableLocationOptimization&quot;: True or False, # Deprecated. Do not use this field.
        # 
        # Optional.
        # 
        # This field is no longer used. Any value set to it is ignored.
    &quot;companySize&quot;: &quot;A String&quot;, # Optional. The employer&#x27;s company size.
    &quot;eeoText&quot;: &quot;A String&quot;, # Optional. Equal Employment Opportunity legal disclaimer text to be
        # associated with all jobs, and typically to be displayed in all
        # roles.
        # 
        # The maximum number of allowed characters is 500.
    &quot;name&quot;: &quot;A String&quot;, # Required during company update.
        # 
        # The resource name for a company. This is generated by the service when a
        # company is created, for example,
        # &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&quot;.
    &quot;distributorCompanyId&quot;: &quot;A String&quot;, # Required. A client&#x27;s company identifier, used to uniquely identify the
        # company. If an employer has a subsidiary or sub-brand, such as &quot;Alphabet&quot;
        # and &quot;Google&quot;, which the client wishes to use as the company displayed on
        # the job. Best practice is to create a distinct company identifier for each
        # distinct brand displayed.
        # 
        # The maximum number of allowed characters is 255.
    &quot;structuredCompanyHqLocation&quot;: { # Output only. # Output only. A structured headquarters location of the company,
        # resolved from hq_location if possible.
        #
        # A resource that represents a location with full geographic
        # information.
      &quot;postalAddress&quot;: { # Represents a postal address, e.g. for postal delivery or payments addresses. # Postal address of the location that includes human readable information,
          # such as postal delivery and payments addresses. Given a postal address,
          # a postal service can deliver items to a premises, P.O. Box, or other
          # delivery location.
          # Given a postal address, a postal service can deliver items to a premise, P.O.
          # Box or similar.
          # It is not intended to model geographical locations (roads, towns,
          # mountains).
          #
          # In typical usage an address would be created via user input or from importing
          # existing data, depending on the type of process.
          #
          # Advice on address input / editing:
          #  - Use an i18n-ready address widget such as
          #    https://github.com/google/libaddressinput)
          # - Users should not be presented with UI elements for input or editing of
          #   fields outside countries where that field is used.
          #
          # For more guidance on how to use this schema, please see:
          # https://support.google.com/business/answer/6397478
        &quot;locality&quot;: &quot;A String&quot;, # Optional. Generally refers to the city/town portion of the address.
            # Examples: US city, IT comune, UK post town.
            # In regions of the world where localities are not well defined or do not fit
            # into this structure well, leave locality empty and use address_lines.
        &quot;administrativeArea&quot;: &quot;A String&quot;, # Optional. Highest administrative subdivision which is used for postal
            # addresses of a country or region.
            # For example, this can be a state, a province, an oblast, or a prefecture.
            # Specifically, for Spain this is the province and not the autonomous
            # community (e.g. &quot;Barcelona&quot; and not &quot;Catalonia&quot;).
            # Many countries don&#x27;t use an administrative area in postal addresses. E.g.
            # in Switzerland this should be left unpopulated.
        &quot;organization&quot;: &quot;A String&quot;, # Optional. The name of the organization at the address.
        &quot;addressLines&quot;: [ # Unstructured address lines describing the lower levels of an address.
            #
            # Because values in address_lines do not have type information and may
            # sometimes contain multiple values in a single field (e.g.
            # &quot;Austin, TX&quot;), it is important that the line order is clear. The order of
            # address lines should be &quot;envelope order&quot; for the country/region of the
            # address. In places where this can vary (e.g. Japan), address_language is
            # used to make it explicit (e.g. &quot;ja&quot; for large-to-small ordering and
            # &quot;ja-Latn&quot; or &quot;en&quot; for small-to-large). This way, the most specific line of
            # an address can be selected based on the language.
            #
            # The minimum permitted structural representation of an address consists
            # of a region_code with all remaining information placed in the
            # address_lines. It would be possible to format such an address very
            # approximately without geocoding, but no semantic reasoning could be
            # made about any of the address components until it was at least
            # partially resolved.
            #
            # Creating an address only containing a region_code and address_lines, and
            # then geocoding is the recommended way to handle completely unstructured
            # addresses (as opposed to guessing which parts of the address should be
            # localities or administrative areas).
          &quot;A String&quot;,
        ],
        &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR region code of the country/region of the address. This
            # is never inferred and it is up to the user to ensure the value is
            # correct. See http://cldr.unicode.org/ and
            # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
            # for details. Example: &quot;CH&quot; for Switzerland.
        &quot;postalCode&quot;: &quot;A String&quot;, # Optional. Postal code of the address. Not all countries use or require
            # postal codes to be present, but where they are used, they may trigger
            # additional validation with other parts of the address (e.g. state/zip
            # validation in the U.S.A.).
        &quot;sortingCode&quot;: &quot;A String&quot;, # Optional. Additional, country-specific, sorting code. This is not used
            # in most regions. Where it is used, the value is either a string like
            # &quot;CEDEX&quot;, optionally followed by a number (e.g. &quot;CEDEX 7&quot;), or just a number
            # alone, representing the &quot;sector code&quot; (Jamaica), &quot;delivery area indicator&quot;
            # (Malawi) or &quot;post office indicator&quot; (e.g. Côte d&#x27;Ivoire).
        &quot;languageCode&quot;: &quot;A String&quot;, # Optional. BCP-47 language code of the contents of this address (if
            # known). This is often the UI language of the input form or is expected
            # to match one of the languages used in the address&#x27; country/region, or their
            # transliterated equivalents.
            # This can affect formatting in certain countries, but is not critical
            # to the correctness of the data and will never affect any validation or
            # other non-formatting related operations.
            #
            # If this value is not known, it should be omitted (rather than specifying a
            # possibly incorrect default).
            #
            # Examples: &quot;zh-Hant&quot;, &quot;ja&quot;, &quot;ja-Latn&quot;, &quot;en&quot;.
        &quot;recipients&quot;: [ # Optional. The recipient at the address.
            # This field may, under certain circumstances, contain multiline information.
            # For example, it might contain &quot;care of&quot; information.
          &quot;A String&quot;,
        ],
        &quot;sublocality&quot;: &quot;A String&quot;, # Optional. Sublocality of the address.
            # For example, this can be neighborhoods, boroughs, districts.
        &quot;revision&quot;: 42, # The schema revision of the `PostalAddress`. This must be set to 0, which is
            # the latest revision.
            #
            # All new revisions **must** be backward compatible with old revisions.
      },
      &quot;locationType&quot;: &quot;A String&quot;, # The type of a location, which corresponds to the address lines field of
          # PostalAddress. For example, &quot;Downtown, Atlanta, GA, USA&quot; has a type of
          # LocationType#NEIGHBORHOOD, and &quot;Kansas City, KS, USA&quot; has a type of
          # LocationType#LOCALITY.
      &quot;radiusMeters&quot;: 3.14, # Radius in meters of the job location. This value is derived from the
          # location bounding box in which a circle with the specified radius
          # centered from LatLng coves the area associated with the job location.
          # For example, currently, &quot;Mountain View, CA, USA&quot; has a radius of
          # 7885.79 meters.
      &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # An object representing a latitude/longitude pair.
          # of doubles representing degrees latitude and degrees longitude. Unless
          # specified otherwise, this must conform to the
          # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
          # standard&lt;/a&gt;. Values must be within normalized ranges.
        &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
    },
    &quot;hiringAgency&quot;: True or False, # Optional. Set to true if it is the hiring agency that post jobs for other
        # employers.
        # 
        # Defaults to false if not provided.
    &quot;title&quot;: &quot;A String&quot;, # Deprecated. Use display_name instead.
        # 
        # Required.
        # 
        # The name of the employer to be displayed with the job,
        # for example, &quot;Google, LLC.&quot;.
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of the employer to be displayed with the job,
        # for example, &quot;Google, LLC.&quot;.
  }

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

Returns:
  An object of the form:

    { # A Company resource represents a company in the service. A company is the
        # entity that owns job listings, that is, the hiring entity responsible for
        # employing applicants for the job position.
      &quot;website&quot;: &quot;A String&quot;, # Optional. The URL representing the company&#x27;s primary web site or home page,
          # such as, &quot;www.google.com&quot;.
      &quot;hqLocation&quot;: &quot;A String&quot;, # Optional. The street address of the company&#x27;s main headquarters, which may be
          # different from the job location. The service attempts
          # to geolocate the provided address, and populates a more specific
          # location wherever possible in structured_company_hq_location.
      &quot;companyInfoSources&quot;: [ # Optional. Identifiers external to the application that help to further identify
          # the employer.
        { # A resource that represents an external  Google identifier for a company,
            # for example, a Google+ business page or a Google Maps business page.
            # For unsupported types, use `unknown_type_id`.
          &quot;mapsCid&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s headquarters on Google Maps,
              # namely, the Google Maps CID (cell id).
          &quot;freebaseMid&quot;: &quot;A String&quot;, # Optional. The Google&#x27;s Knowledge Graph value for the employer&#x27;s company.
          &quot;unknownTypeId&quot;: &quot;A String&quot;, # Optional. A Google identifier that does not match any of the other types.
          &quot;gplusId&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s Google+ business page.
        },
      ],
      &quot;keywordSearchableCustomAttributes&quot;: [ # Optional. A list of keys of filterable Job.custom_attributes, whose
          # corresponding `string_values` are used in keyword search. Jobs with
          # `string_values` under these specified field keys are returned if any
          # of the values matches the search keyword. Custom field values with
          # parenthesis, brackets and special symbols might not be properly searchable,
          # and those keyword queries need to be surrounded by quotes.
        &quot;A String&quot;,
      ],
      &quot;suspended&quot;: True or False, # Output only. Indicates whether a company is flagged to be suspended from public
          # availability by the service when job content appears suspicious,
          # abusive, or spammy.
      &quot;imageUrl&quot;: &quot;A String&quot;, # Optional. A URL that hosts the employer&#x27;s company logo. If provided,
          # the logo image should be squared at 80x80 pixels.
          #
          # The url must be a Google Photos or Google Album url.
          # Only images in these Google sub-domains are accepted.
      &quot;distributorBillingCompanyId&quot;: &quot;A String&quot;, # Optional. The unique company identifier provided by the client to identify an
          # employer for billing purposes. Recommended practice is to use
          # the distributor_company_id.
          #
          # Defaults to same value as distributor_company_id when a value
          # is not provided.
      &quot;careerPageLink&quot;: &quot;A String&quot;, # Optional. The URL to employer&#x27;s career site or careers page on the employer&#x27;s web
          # site.
      &quot;keywordSearchableCustomFields&quot;: [ # Deprecated. Use keyword_searchable_custom_attributes instead.
          #
          # Optional.
          #
          # A list of filterable custom fields that should be used in keyword
          # search. The jobs of this company are returned if any of these custom
          # fields matches the search keyword. Custom field values with parenthesis,
          # brackets and special symbols might not be properly searchable, and those
          # keyword queries need to be surrounded by quotes.
        42,
      ],
      &quot;disableLocationOptimization&quot;: True or False, # Deprecated. Do not use this field.
          #
          # Optional.
          #
          # This field is no longer used. Any value set to it is ignored.
      &quot;companySize&quot;: &quot;A String&quot;, # Optional. The employer&#x27;s company size.
      &quot;eeoText&quot;: &quot;A String&quot;, # Optional. Equal Employment Opportunity legal disclaimer text to be
          # associated with all jobs, and typically to be displayed in all
          # roles.
          #
          # The maximum number of allowed characters is 500.
      &quot;name&quot;: &quot;A String&quot;, # Required during company update.
          #
          # The resource name for a company. This is generated by the service when a
          # company is created, for example,
          # &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&quot;.
      &quot;distributorCompanyId&quot;: &quot;A String&quot;, # Required. A client&#x27;s company identifier, used to uniquely identify the
          # company. If an employer has a subsidiary or sub-brand, such as &quot;Alphabet&quot;
          # and &quot;Google&quot;, which the client wishes to use as the company displayed on
          # the job. Best practice is to create a distinct company identifier for each
          # distinct brand displayed.
          #
          # The maximum number of allowed characters is 255.
      &quot;structuredCompanyHqLocation&quot;: { # Output only. # Output only. A structured headquarters location of the company,
          # resolved from hq_location if possible.
          #
          # A resource that represents a location with full geographic
          # information.
        &quot;postalAddress&quot;: { # Represents a postal address, e.g. for postal delivery or payments addresses. # Postal address of the location that includes human readable information,
            # such as postal delivery and payments addresses. Given a postal address,
            # a postal service can deliver items to a premises, P.O. Box, or other
            # delivery location.
            # Given a postal address, a postal service can deliver items to a premise, P.O.
            # Box or similar.
            # It is not intended to model geographical locations (roads, towns,
            # mountains).
            #
            # In typical usage an address would be created via user input or from importing
            # existing data, depending on the type of process.
            #
            # Advice on address input / editing:
            #  - Use an i18n-ready address widget such as
            #    https://github.com/google/libaddressinput)
            # - Users should not be presented with UI elements for input or editing of
            #   fields outside countries where that field is used.
            #
            # For more guidance on how to use this schema, please see:
            # https://support.google.com/business/answer/6397478
          &quot;locality&quot;: &quot;A String&quot;, # Optional. Generally refers to the city/town portion of the address.
              # Examples: US city, IT comune, UK post town.
              # In regions of the world where localities are not well defined or do not fit
              # into this structure well, leave locality empty and use address_lines.
          &quot;administrativeArea&quot;: &quot;A String&quot;, # Optional. Highest administrative subdivision which is used for postal
              # addresses of a country or region.
              # For example, this can be a state, a province, an oblast, or a prefecture.
              # Specifically, for Spain this is the province and not the autonomous
              # community (e.g. &quot;Barcelona&quot; and not &quot;Catalonia&quot;).
              # Many countries don&#x27;t use an administrative area in postal addresses. E.g.
              # in Switzerland this should be left unpopulated.
          &quot;organization&quot;: &quot;A String&quot;, # Optional. The name of the organization at the address.
          &quot;addressLines&quot;: [ # Unstructured address lines describing the lower levels of an address.
              #
              # Because values in address_lines do not have type information and may
              # sometimes contain multiple values in a single field (e.g.
              # &quot;Austin, TX&quot;), it is important that the line order is clear. The order of
              # address lines should be &quot;envelope order&quot; for the country/region of the
              # address. In places where this can vary (e.g. Japan), address_language is
              # used to make it explicit (e.g. &quot;ja&quot; for large-to-small ordering and
              # &quot;ja-Latn&quot; or &quot;en&quot; for small-to-large). This way, the most specific line of
              # an address can be selected based on the language.
              #
              # The minimum permitted structural representation of an address consists
              # of a region_code with all remaining information placed in the
              # address_lines. It would be possible to format such an address very
              # approximately without geocoding, but no semantic reasoning could be
              # made about any of the address components until it was at least
              # partially resolved.
              #
              # Creating an address only containing a region_code and address_lines, and
              # then geocoding is the recommended way to handle completely unstructured
              # addresses (as opposed to guessing which parts of the address should be
              # localities or administrative areas).
            &quot;A String&quot;,
          ],
          &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR region code of the country/region of the address. This
              # is never inferred and it is up to the user to ensure the value is
              # correct. See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: &quot;CH&quot; for Switzerland.
          &quot;postalCode&quot;: &quot;A String&quot;, # Optional. Postal code of the address. Not all countries use or require
              # postal codes to be present, but where they are used, they may trigger
              # additional validation with other parts of the address (e.g. state/zip
              # validation in the U.S.A.).
          &quot;sortingCode&quot;: &quot;A String&quot;, # Optional. Additional, country-specific, sorting code. This is not used
              # in most regions. Where it is used, the value is either a string like
              # &quot;CEDEX&quot;, optionally followed by a number (e.g. &quot;CEDEX 7&quot;), or just a number
              # alone, representing the &quot;sector code&quot; (Jamaica), &quot;delivery area indicator&quot;
              # (Malawi) or &quot;post office indicator&quot; (e.g. Côte d&#x27;Ivoire).
          &quot;languageCode&quot;: &quot;A String&quot;, # Optional. BCP-47 language code of the contents of this address (if
              # known). This is often the UI language of the input form or is expected
              # to match one of the languages used in the address&#x27; country/region, or their
              # transliterated equivalents.
              # This can affect formatting in certain countries, but is not critical
              # to the correctness of the data and will never affect any validation or
              # other non-formatting related operations.
              #
              # If this value is not known, it should be omitted (rather than specifying a
              # possibly incorrect default).
              #
              # Examples: &quot;zh-Hant&quot;, &quot;ja&quot;, &quot;ja-Latn&quot;, &quot;en&quot;.
          &quot;recipients&quot;: [ # Optional. The recipient at the address.
              # This field may, under certain circumstances, contain multiline information.
              # For example, it might contain &quot;care of&quot; information.
            &quot;A String&quot;,
          ],
          &quot;sublocality&quot;: &quot;A String&quot;, # Optional. Sublocality of the address.
              # For example, this can be neighborhoods, boroughs, districts.
          &quot;revision&quot;: 42, # The schema revision of the `PostalAddress`. This must be set to 0, which is
              # the latest revision.
              #
              # All new revisions **must** be backward compatible with old revisions.
        },
        &quot;locationType&quot;: &quot;A String&quot;, # The type of a location, which corresponds to the address lines field of
            # PostalAddress. For example, &quot;Downtown, Atlanta, GA, USA&quot; has a type of
            # LocationType#NEIGHBORHOOD, and &quot;Kansas City, KS, USA&quot; has a type of
            # LocationType#LOCALITY.
        &quot;radiusMeters&quot;: 3.14, # Radius in meters of the job location. This value is derived from the
            # location bounding box in which a circle with the specified radius
            # centered from LatLng coves the area associated with the job location.
            # For example, currently, &quot;Mountain View, CA, USA&quot; has a radius of
            # 7885.79 meters.
        &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # An object representing a latitude/longitude pair.
            # of doubles representing degrees latitude and degrees longitude. Unless
            # specified otherwise, this must conform to the
            # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
            # standard&lt;/a&gt;. Values must be within normalized ranges.
          &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
      &quot;hiringAgency&quot;: True or False, # Optional. Set to true if it is the hiring agency that post jobs for other
          # employers.
          #
          # Defaults to false if not provided.
      &quot;title&quot;: &quot;A String&quot;, # Deprecated. Use display_name instead.
          #
          # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, &quot;Google, LLC.&quot;.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of the employer to be displayed with the job,
          # for example, &quot;Google, LLC.&quot;.
    }</pre>
</div>

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

Args:
  name: string, Required. The resource name of the company to be deleted,
such as, &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&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 the specified company.

Args:
  name: string, Required. Resource name of the company to retrieve,
such as &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&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 Company resource represents a company in the service. A company is the
        # entity that owns job listings, that is, the hiring entity responsible for
        # employing applicants for the job position.
      &quot;website&quot;: &quot;A String&quot;, # Optional. The URL representing the company&#x27;s primary web site or home page,
          # such as, &quot;www.google.com&quot;.
      &quot;hqLocation&quot;: &quot;A String&quot;, # Optional. The street address of the company&#x27;s main headquarters, which may be
          # different from the job location. The service attempts
          # to geolocate the provided address, and populates a more specific
          # location wherever possible in structured_company_hq_location.
      &quot;companyInfoSources&quot;: [ # Optional. Identifiers external to the application that help to further identify
          # the employer.
        { # A resource that represents an external  Google identifier for a company,
            # for example, a Google+ business page or a Google Maps business page.
            # For unsupported types, use `unknown_type_id`.
          &quot;mapsCid&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s headquarters on Google Maps,
              # namely, the Google Maps CID (cell id).
          &quot;freebaseMid&quot;: &quot;A String&quot;, # Optional. The Google&#x27;s Knowledge Graph value for the employer&#x27;s company.
          &quot;unknownTypeId&quot;: &quot;A String&quot;, # Optional. A Google identifier that does not match any of the other types.
          &quot;gplusId&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s Google+ business page.
        },
      ],
      &quot;keywordSearchableCustomAttributes&quot;: [ # Optional. A list of keys of filterable Job.custom_attributes, whose
          # corresponding `string_values` are used in keyword search. Jobs with
          # `string_values` under these specified field keys are returned if any
          # of the values matches the search keyword. Custom field values with
          # parenthesis, brackets and special symbols might not be properly searchable,
          # and those keyword queries need to be surrounded by quotes.
        &quot;A String&quot;,
      ],
      &quot;suspended&quot;: True or False, # Output only. Indicates whether a company is flagged to be suspended from public
          # availability by the service when job content appears suspicious,
          # abusive, or spammy.
      &quot;imageUrl&quot;: &quot;A String&quot;, # Optional. A URL that hosts the employer&#x27;s company logo. If provided,
          # the logo image should be squared at 80x80 pixels.
          #
          # The url must be a Google Photos or Google Album url.
          # Only images in these Google sub-domains are accepted.
      &quot;distributorBillingCompanyId&quot;: &quot;A String&quot;, # Optional. The unique company identifier provided by the client to identify an
          # employer for billing purposes. Recommended practice is to use
          # the distributor_company_id.
          #
          # Defaults to same value as distributor_company_id when a value
          # is not provided.
      &quot;careerPageLink&quot;: &quot;A String&quot;, # Optional. The URL to employer&#x27;s career site or careers page on the employer&#x27;s web
          # site.
      &quot;keywordSearchableCustomFields&quot;: [ # Deprecated. Use keyword_searchable_custom_attributes instead.
          #
          # Optional.
          #
          # A list of filterable custom fields that should be used in keyword
          # search. The jobs of this company are returned if any of these custom
          # fields matches the search keyword. Custom field values with parenthesis,
          # brackets and special symbols might not be properly searchable, and those
          # keyword queries need to be surrounded by quotes.
        42,
      ],
      &quot;disableLocationOptimization&quot;: True or False, # Deprecated. Do not use this field.
          #
          # Optional.
          #
          # This field is no longer used. Any value set to it is ignored.
      &quot;companySize&quot;: &quot;A String&quot;, # Optional. The employer&#x27;s company size.
      &quot;eeoText&quot;: &quot;A String&quot;, # Optional. Equal Employment Opportunity legal disclaimer text to be
          # associated with all jobs, and typically to be displayed in all
          # roles.
          #
          # The maximum number of allowed characters is 500.
      &quot;name&quot;: &quot;A String&quot;, # Required during company update.
          #
          # The resource name for a company. This is generated by the service when a
          # company is created, for example,
          # &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&quot;.
      &quot;distributorCompanyId&quot;: &quot;A String&quot;, # Required. A client&#x27;s company identifier, used to uniquely identify the
          # company. If an employer has a subsidiary or sub-brand, such as &quot;Alphabet&quot;
          # and &quot;Google&quot;, which the client wishes to use as the company displayed on
          # the job. Best practice is to create a distinct company identifier for each
          # distinct brand displayed.
          #
          # The maximum number of allowed characters is 255.
      &quot;structuredCompanyHqLocation&quot;: { # Output only. # Output only. A structured headquarters location of the company,
          # resolved from hq_location if possible.
          #
          # A resource that represents a location with full geographic
          # information.
        &quot;postalAddress&quot;: { # Represents a postal address, e.g. for postal delivery or payments addresses. # Postal address of the location that includes human readable information,
            # such as postal delivery and payments addresses. Given a postal address,
            # a postal service can deliver items to a premises, P.O. Box, or other
            # delivery location.
            # Given a postal address, a postal service can deliver items to a premise, P.O.
            # Box or similar.
            # It is not intended to model geographical locations (roads, towns,
            # mountains).
            #
            # In typical usage an address would be created via user input or from importing
            # existing data, depending on the type of process.
            #
            # Advice on address input / editing:
            #  - Use an i18n-ready address widget such as
            #    https://github.com/google/libaddressinput)
            # - Users should not be presented with UI elements for input or editing of
            #   fields outside countries where that field is used.
            #
            # For more guidance on how to use this schema, please see:
            # https://support.google.com/business/answer/6397478
          &quot;locality&quot;: &quot;A String&quot;, # Optional. Generally refers to the city/town portion of the address.
              # Examples: US city, IT comune, UK post town.
              # In regions of the world where localities are not well defined or do not fit
              # into this structure well, leave locality empty and use address_lines.
          &quot;administrativeArea&quot;: &quot;A String&quot;, # Optional. Highest administrative subdivision which is used for postal
              # addresses of a country or region.
              # For example, this can be a state, a province, an oblast, or a prefecture.
              # Specifically, for Spain this is the province and not the autonomous
              # community (e.g. &quot;Barcelona&quot; and not &quot;Catalonia&quot;).
              # Many countries don&#x27;t use an administrative area in postal addresses. E.g.
              # in Switzerland this should be left unpopulated.
          &quot;organization&quot;: &quot;A String&quot;, # Optional. The name of the organization at the address.
          &quot;addressLines&quot;: [ # Unstructured address lines describing the lower levels of an address.
              #
              # Because values in address_lines do not have type information and may
              # sometimes contain multiple values in a single field (e.g.
              # &quot;Austin, TX&quot;), it is important that the line order is clear. The order of
              # address lines should be &quot;envelope order&quot; for the country/region of the
              # address. In places where this can vary (e.g. Japan), address_language is
              # used to make it explicit (e.g. &quot;ja&quot; for large-to-small ordering and
              # &quot;ja-Latn&quot; or &quot;en&quot; for small-to-large). This way, the most specific line of
              # an address can be selected based on the language.
              #
              # The minimum permitted structural representation of an address consists
              # of a region_code with all remaining information placed in the
              # address_lines. It would be possible to format such an address very
              # approximately without geocoding, but no semantic reasoning could be
              # made about any of the address components until it was at least
              # partially resolved.
              #
              # Creating an address only containing a region_code and address_lines, and
              # then geocoding is the recommended way to handle completely unstructured
              # addresses (as opposed to guessing which parts of the address should be
              # localities or administrative areas).
            &quot;A String&quot;,
          ],
          &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR region code of the country/region of the address. This
              # is never inferred and it is up to the user to ensure the value is
              # correct. See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: &quot;CH&quot; for Switzerland.
          &quot;postalCode&quot;: &quot;A String&quot;, # Optional. Postal code of the address. Not all countries use or require
              # postal codes to be present, but where they are used, they may trigger
              # additional validation with other parts of the address (e.g. state/zip
              # validation in the U.S.A.).
          &quot;sortingCode&quot;: &quot;A String&quot;, # Optional. Additional, country-specific, sorting code. This is not used
              # in most regions. Where it is used, the value is either a string like
              # &quot;CEDEX&quot;, optionally followed by a number (e.g. &quot;CEDEX 7&quot;), or just a number
              # alone, representing the &quot;sector code&quot; (Jamaica), &quot;delivery area indicator&quot;
              # (Malawi) or &quot;post office indicator&quot; (e.g. Côte d&#x27;Ivoire).
          &quot;languageCode&quot;: &quot;A String&quot;, # Optional. BCP-47 language code of the contents of this address (if
              # known). This is often the UI language of the input form or is expected
              # to match one of the languages used in the address&#x27; country/region, or their
              # transliterated equivalents.
              # This can affect formatting in certain countries, but is not critical
              # to the correctness of the data and will never affect any validation or
              # other non-formatting related operations.
              #
              # If this value is not known, it should be omitted (rather than specifying a
              # possibly incorrect default).
              #
              # Examples: &quot;zh-Hant&quot;, &quot;ja&quot;, &quot;ja-Latn&quot;, &quot;en&quot;.
          &quot;recipients&quot;: [ # Optional. The recipient at the address.
              # This field may, under certain circumstances, contain multiline information.
              # For example, it might contain &quot;care of&quot; information.
            &quot;A String&quot;,
          ],
          &quot;sublocality&quot;: &quot;A String&quot;, # Optional. Sublocality of the address.
              # For example, this can be neighborhoods, boroughs, districts.
          &quot;revision&quot;: 42, # The schema revision of the `PostalAddress`. This must be set to 0, which is
              # the latest revision.
              #
              # All new revisions **must** be backward compatible with old revisions.
        },
        &quot;locationType&quot;: &quot;A String&quot;, # The type of a location, which corresponds to the address lines field of
            # PostalAddress. For example, &quot;Downtown, Atlanta, GA, USA&quot; has a type of
            # LocationType#NEIGHBORHOOD, and &quot;Kansas City, KS, USA&quot; has a type of
            # LocationType#LOCALITY.
        &quot;radiusMeters&quot;: 3.14, # Radius in meters of the job location. This value is derived from the
            # location bounding box in which a circle with the specified radius
            # centered from LatLng coves the area associated with the job location.
            # For example, currently, &quot;Mountain View, CA, USA&quot; has a radius of
            # 7885.79 meters.
        &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # An object representing a latitude/longitude pair.
            # of doubles representing degrees latitude and degrees longitude. Unless
            # specified otherwise, this must conform to the
            # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
            # standard&lt;/a&gt;. Values must be within normalized ranges.
          &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
      &quot;hiringAgency&quot;: True or False, # Optional. Set to true if it is the hiring agency that post jobs for other
          # employers.
          #
          # Defaults to false if not provided.
      &quot;title&quot;: &quot;A String&quot;, # Deprecated. Use display_name instead.
          #
          # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, &quot;Google, LLC.&quot;.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of the employer to be displayed with the job,
          # for example, &quot;Google, LLC.&quot;.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageToken=None, pageSize=None, mustHaveOpenJobs=None, x__xgafv=None)</code>
  <pre>Lists all companies associated with a Cloud Talent Solution account.

Args:
  pageToken: string, Optional. The starting indicator from which to return results.
  pageSize: integer, Optional. The maximum number of companies to be returned, at most 100.
Default is 100 if a non-positive number is provided.
  mustHaveOpenJobs: boolean, Optional. Set to true if the companies request must have open jobs.

Defaults to false.

If true, at most page_size of companies are fetched, among which
only those with open jobs are returned.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Output only.
      #
      # The List companies response object.
    &quot;nextPageToken&quot;: &quot;A String&quot;, # A token to retrieve the next page of results.
    &quot;companies&quot;: [ # Companies for the current client.
      { # A Company resource represents a company in the service. A company is the
            # entity that owns job listings, that is, the hiring entity responsible for
            # employing applicants for the job position.
          &quot;website&quot;: &quot;A String&quot;, # Optional. The URL representing the company&#x27;s primary web site or home page,
              # such as, &quot;www.google.com&quot;.
          &quot;hqLocation&quot;: &quot;A String&quot;, # Optional. The street address of the company&#x27;s main headquarters, which may be
              # different from the job location. The service attempts
              # to geolocate the provided address, and populates a more specific
              # location wherever possible in structured_company_hq_location.
          &quot;companyInfoSources&quot;: [ # Optional. Identifiers external to the application that help to further identify
              # the employer.
            { # A resource that represents an external  Google identifier for a company,
                # for example, a Google+ business page or a Google Maps business page.
                # For unsupported types, use `unknown_type_id`.
              &quot;mapsCid&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s headquarters on Google Maps,
                  # namely, the Google Maps CID (cell id).
              &quot;freebaseMid&quot;: &quot;A String&quot;, # Optional. The Google&#x27;s Knowledge Graph value for the employer&#x27;s company.
              &quot;unknownTypeId&quot;: &quot;A String&quot;, # Optional. A Google identifier that does not match any of the other types.
              &quot;gplusId&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s Google+ business page.
            },
          ],
          &quot;keywordSearchableCustomAttributes&quot;: [ # Optional. A list of keys of filterable Job.custom_attributes, whose
              # corresponding `string_values` are used in keyword search. Jobs with
              # `string_values` under these specified field keys are returned if any
              # of the values matches the search keyword. Custom field values with
              # parenthesis, brackets and special symbols might not be properly searchable,
              # and those keyword queries need to be surrounded by quotes.
            &quot;A String&quot;,
          ],
          &quot;suspended&quot;: True or False, # Output only. Indicates whether a company is flagged to be suspended from public
              # availability by the service when job content appears suspicious,
              # abusive, or spammy.
          &quot;imageUrl&quot;: &quot;A String&quot;, # Optional. A URL that hosts the employer&#x27;s company logo. If provided,
              # the logo image should be squared at 80x80 pixels.
              #
              # The url must be a Google Photos or Google Album url.
              # Only images in these Google sub-domains are accepted.
          &quot;distributorBillingCompanyId&quot;: &quot;A String&quot;, # Optional. The unique company identifier provided by the client to identify an
              # employer for billing purposes. Recommended practice is to use
              # the distributor_company_id.
              #
              # Defaults to same value as distributor_company_id when a value
              # is not provided.
          &quot;careerPageLink&quot;: &quot;A String&quot;, # Optional. The URL to employer&#x27;s career site or careers page on the employer&#x27;s web
              # site.
          &quot;keywordSearchableCustomFields&quot;: [ # Deprecated. Use keyword_searchable_custom_attributes instead.
              #
              # Optional.
              #
              # A list of filterable custom fields that should be used in keyword
              # search. The jobs of this company are returned if any of these custom
              # fields matches the search keyword. Custom field values with parenthesis,
              # brackets and special symbols might not be properly searchable, and those
              # keyword queries need to be surrounded by quotes.
            42,
          ],
          &quot;disableLocationOptimization&quot;: True or False, # Deprecated. Do not use this field.
              #
              # Optional.
              #
              # This field is no longer used. Any value set to it is ignored.
          &quot;companySize&quot;: &quot;A String&quot;, # Optional. The employer&#x27;s company size.
          &quot;eeoText&quot;: &quot;A String&quot;, # Optional. Equal Employment Opportunity legal disclaimer text to be
              # associated with all jobs, and typically to be displayed in all
              # roles.
              #
              # The maximum number of allowed characters is 500.
          &quot;name&quot;: &quot;A String&quot;, # Required during company update.
              #
              # The resource name for a company. This is generated by the service when a
              # company is created, for example,
              # &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&quot;.
          &quot;distributorCompanyId&quot;: &quot;A String&quot;, # Required. A client&#x27;s company identifier, used to uniquely identify the
              # company. If an employer has a subsidiary or sub-brand, such as &quot;Alphabet&quot;
              # and &quot;Google&quot;, which the client wishes to use as the company displayed on
              # the job. Best practice is to create a distinct company identifier for each
              # distinct brand displayed.
              #
              # The maximum number of allowed characters is 255.
          &quot;structuredCompanyHqLocation&quot;: { # Output only. # Output only. A structured headquarters location of the company,
              # resolved from hq_location if possible.
              #
              # A resource that represents a location with full geographic
              # information.
            &quot;postalAddress&quot;: { # Represents a postal address, e.g. for postal delivery or payments addresses. # Postal address of the location that includes human readable information,
                # such as postal delivery and payments addresses. Given a postal address,
                # a postal service can deliver items to a premises, P.O. Box, or other
                # delivery location.
                # Given a postal address, a postal service can deliver items to a premise, P.O.
                # Box or similar.
                # It is not intended to model geographical locations (roads, towns,
                # mountains).
                #
                # In typical usage an address would be created via user input or from importing
                # existing data, depending on the type of process.
                #
                # Advice on address input / editing:
                #  - Use an i18n-ready address widget such as
                #    https://github.com/google/libaddressinput)
                # - Users should not be presented with UI elements for input or editing of
                #   fields outside countries where that field is used.
                #
                # For more guidance on how to use this schema, please see:
                # https://support.google.com/business/answer/6397478
              &quot;locality&quot;: &quot;A String&quot;, # Optional. Generally refers to the city/town portion of the address.
                  # Examples: US city, IT comune, UK post town.
                  # In regions of the world where localities are not well defined or do not fit
                  # into this structure well, leave locality empty and use address_lines.
              &quot;administrativeArea&quot;: &quot;A String&quot;, # Optional. Highest administrative subdivision which is used for postal
                  # addresses of a country or region.
                  # For example, this can be a state, a province, an oblast, or a prefecture.
                  # Specifically, for Spain this is the province and not the autonomous
                  # community (e.g. &quot;Barcelona&quot; and not &quot;Catalonia&quot;).
                  # Many countries don&#x27;t use an administrative area in postal addresses. E.g.
                  # in Switzerland this should be left unpopulated.
              &quot;organization&quot;: &quot;A String&quot;, # Optional. The name of the organization at the address.
              &quot;addressLines&quot;: [ # Unstructured address lines describing the lower levels of an address.
                  #
                  # Because values in address_lines do not have type information and may
                  # sometimes contain multiple values in a single field (e.g.
                  # &quot;Austin, TX&quot;), it is important that the line order is clear. The order of
                  # address lines should be &quot;envelope order&quot; for the country/region of the
                  # address. In places where this can vary (e.g. Japan), address_language is
                  # used to make it explicit (e.g. &quot;ja&quot; for large-to-small ordering and
                  # &quot;ja-Latn&quot; or &quot;en&quot; for small-to-large). This way, the most specific line of
                  # an address can be selected based on the language.
                  #
                  # The minimum permitted structural representation of an address consists
                  # of a region_code with all remaining information placed in the
                  # address_lines. It would be possible to format such an address very
                  # approximately without geocoding, but no semantic reasoning could be
                  # made about any of the address components until it was at least
                  # partially resolved.
                  #
                  # Creating an address only containing a region_code and address_lines, and
                  # then geocoding is the recommended way to handle completely unstructured
                  # addresses (as opposed to guessing which parts of the address should be
                  # localities or administrative areas).
                &quot;A String&quot;,
              ],
              &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR region code of the country/region of the address. This
                  # is never inferred and it is up to the user to ensure the value is
                  # correct. See http://cldr.unicode.org/ and
                  # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
                  # for details. Example: &quot;CH&quot; for Switzerland.
              &quot;postalCode&quot;: &quot;A String&quot;, # Optional. Postal code of the address. Not all countries use or require
                  # postal codes to be present, but where they are used, they may trigger
                  # additional validation with other parts of the address (e.g. state/zip
                  # validation in the U.S.A.).
              &quot;sortingCode&quot;: &quot;A String&quot;, # Optional. Additional, country-specific, sorting code. This is not used
                  # in most regions. Where it is used, the value is either a string like
                  # &quot;CEDEX&quot;, optionally followed by a number (e.g. &quot;CEDEX 7&quot;), or just a number
                  # alone, representing the &quot;sector code&quot; (Jamaica), &quot;delivery area indicator&quot;
                  # (Malawi) or &quot;post office indicator&quot; (e.g. Côte d&#x27;Ivoire).
              &quot;languageCode&quot;: &quot;A String&quot;, # Optional. BCP-47 language code of the contents of this address (if
                  # known). This is often the UI language of the input form or is expected
                  # to match one of the languages used in the address&#x27; country/region, or their
                  # transliterated equivalents.
                  # This can affect formatting in certain countries, but is not critical
                  # to the correctness of the data and will never affect any validation or
                  # other non-formatting related operations.
                  #
                  # If this value is not known, it should be omitted (rather than specifying a
                  # possibly incorrect default).
                  #
                  # Examples: &quot;zh-Hant&quot;, &quot;ja&quot;, &quot;ja-Latn&quot;, &quot;en&quot;.
              &quot;recipients&quot;: [ # Optional. The recipient at the address.
                  # This field may, under certain circumstances, contain multiline information.
                  # For example, it might contain &quot;care of&quot; information.
                &quot;A String&quot;,
              ],
              &quot;sublocality&quot;: &quot;A String&quot;, # Optional. Sublocality of the address.
                  # For example, this can be neighborhoods, boroughs, districts.
              &quot;revision&quot;: 42, # The schema revision of the `PostalAddress`. This must be set to 0, which is
                  # the latest revision.
                  #
                  # All new revisions **must** be backward compatible with old revisions.
            },
            &quot;locationType&quot;: &quot;A String&quot;, # The type of a location, which corresponds to the address lines field of
                # PostalAddress. For example, &quot;Downtown, Atlanta, GA, USA&quot; has a type of
                # LocationType#NEIGHBORHOOD, and &quot;Kansas City, KS, USA&quot; has a type of
                # LocationType#LOCALITY.
            &quot;radiusMeters&quot;: 3.14, # Radius in meters of the job location. This value is derived from the
                # location bounding box in which a circle with the specified radius
                # centered from LatLng coves the area associated with the job location.
                # For example, currently, &quot;Mountain View, CA, USA&quot; has a radius of
                # 7885.79 meters.
            &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # An object representing a latitude/longitude pair.
                # of doubles representing degrees latitude and degrees longitude. Unless
                # specified otherwise, this must conform to the
                # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
                # standard&lt;/a&gt;. Values must be within normalized ranges.
              &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
          &quot;hiringAgency&quot;: True or False, # Optional. Set to true if it is the hiring agency that post jobs for other
              # employers.
              #
              # Defaults to false if not provided.
          &quot;title&quot;: &quot;A String&quot;, # Deprecated. Use display_name instead.
              #
              # Required.
              #
              # The name of the employer to be displayed with the job,
              # for example, &quot;Google, LLC.&quot;.
          &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of the employer to be displayed with the job,
              # for example, &quot;Google, LLC.&quot;.
        },
    ],
    &quot;metadata&quot;: { # Output only. # Additional information for the API invocation, such as the request
        # tracking id.
        #
        # Additional information returned to client, such as debugging
        # information.
      &quot;requestId&quot;: &quot;A String&quot;, # A unique id associated with this call.
          # This id is logged for tracking purposes.
      &quot;mode&quot;: &quot;A String&quot;, # For search response only. Indicates the mode of a performed search.
      &quot;experimentIdList&quot;: [ # Identifiers for the versions of the search algorithm used during
          # this API invocation if multiple algorithms are used.
          # The default value is empty.
          # For search response only.
        42,
      ],
    },
  }</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, updateCompanyFields=None, x__xgafv=None)</code>
  <pre>Updates the specified company. Company names can&#x27;t be updated. To update a
company name, delete the company and all jobs associated with it, and only
then re-create them.

Args:
  name: string, Required during company update.

The resource name for a company. This is generated by the service when a
company is created, for example,
&quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&quot;. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Company resource represents a company in the service. A company is the
      # entity that owns job listings, that is, the hiring entity responsible for
      # employing applicants for the job position.
    &quot;website&quot;: &quot;A String&quot;, # Optional. The URL representing the company&#x27;s primary web site or home page,
        # such as, &quot;www.google.com&quot;.
    &quot;hqLocation&quot;: &quot;A String&quot;, # Optional. The street address of the company&#x27;s main headquarters, which may be
        # different from the job location. The service attempts
        # to geolocate the provided address, and populates a more specific
        # location wherever possible in structured_company_hq_location.
    &quot;companyInfoSources&quot;: [ # Optional. Identifiers external to the application that help to further identify
        # the employer.
      { # A resource that represents an external  Google identifier for a company,
          # for example, a Google+ business page or a Google Maps business page.
          # For unsupported types, use `unknown_type_id`.
        &quot;mapsCid&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s headquarters on Google Maps,
            # namely, the Google Maps CID (cell id).
        &quot;freebaseMid&quot;: &quot;A String&quot;, # Optional. The Google&#x27;s Knowledge Graph value for the employer&#x27;s company.
        &quot;unknownTypeId&quot;: &quot;A String&quot;, # Optional. A Google identifier that does not match any of the other types.
        &quot;gplusId&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s Google+ business page.
      },
    ],
    &quot;keywordSearchableCustomAttributes&quot;: [ # Optional. A list of keys of filterable Job.custom_attributes, whose
        # corresponding `string_values` are used in keyword search. Jobs with
        # `string_values` under these specified field keys are returned if any
        # of the values matches the search keyword. Custom field values with
        # parenthesis, brackets and special symbols might not be properly searchable,
        # and those keyword queries need to be surrounded by quotes.
      &quot;A String&quot;,
    ],
    &quot;suspended&quot;: True or False, # Output only. Indicates whether a company is flagged to be suspended from public
        # availability by the service when job content appears suspicious,
        # abusive, or spammy.
    &quot;imageUrl&quot;: &quot;A String&quot;, # Optional. A URL that hosts the employer&#x27;s company logo. If provided,
        # the logo image should be squared at 80x80 pixels.
        # 
        # The url must be a Google Photos or Google Album url.
        # Only images in these Google sub-domains are accepted.
    &quot;distributorBillingCompanyId&quot;: &quot;A String&quot;, # Optional. The unique company identifier provided by the client to identify an
        # employer for billing purposes. Recommended practice is to use
        # the distributor_company_id.
        # 
        # Defaults to same value as distributor_company_id when a value
        # is not provided.
    &quot;careerPageLink&quot;: &quot;A String&quot;, # Optional. The URL to employer&#x27;s career site or careers page on the employer&#x27;s web
        # site.
    &quot;keywordSearchableCustomFields&quot;: [ # Deprecated. Use keyword_searchable_custom_attributes instead.
        # 
        # Optional.
        # 
        # A list of filterable custom fields that should be used in keyword
        # search. The jobs of this company are returned if any of these custom
        # fields matches the search keyword. Custom field values with parenthesis,
        # brackets and special symbols might not be properly searchable, and those
        # keyword queries need to be surrounded by quotes.
      42,
    ],
    &quot;disableLocationOptimization&quot;: True or False, # Deprecated. Do not use this field.
        # 
        # Optional.
        # 
        # This field is no longer used. Any value set to it is ignored.
    &quot;companySize&quot;: &quot;A String&quot;, # Optional. The employer&#x27;s company size.
    &quot;eeoText&quot;: &quot;A String&quot;, # Optional. Equal Employment Opportunity legal disclaimer text to be
        # associated with all jobs, and typically to be displayed in all
        # roles.
        # 
        # The maximum number of allowed characters is 500.
    &quot;name&quot;: &quot;A String&quot;, # Required during company update.
        # 
        # The resource name for a company. This is generated by the service when a
        # company is created, for example,
        # &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&quot;.
    &quot;distributorCompanyId&quot;: &quot;A String&quot;, # Required. A client&#x27;s company identifier, used to uniquely identify the
        # company. If an employer has a subsidiary or sub-brand, such as &quot;Alphabet&quot;
        # and &quot;Google&quot;, which the client wishes to use as the company displayed on
        # the job. Best practice is to create a distinct company identifier for each
        # distinct brand displayed.
        # 
        # The maximum number of allowed characters is 255.
    &quot;structuredCompanyHqLocation&quot;: { # Output only. # Output only. A structured headquarters location of the company,
        # resolved from hq_location if possible.
        #
        # A resource that represents a location with full geographic
        # information.
      &quot;postalAddress&quot;: { # Represents a postal address, e.g. for postal delivery or payments addresses. # Postal address of the location that includes human readable information,
          # such as postal delivery and payments addresses. Given a postal address,
          # a postal service can deliver items to a premises, P.O. Box, or other
          # delivery location.
          # Given a postal address, a postal service can deliver items to a premise, P.O.
          # Box or similar.
          # It is not intended to model geographical locations (roads, towns,
          # mountains).
          #
          # In typical usage an address would be created via user input or from importing
          # existing data, depending on the type of process.
          #
          # Advice on address input / editing:
          #  - Use an i18n-ready address widget such as
          #    https://github.com/google/libaddressinput)
          # - Users should not be presented with UI elements for input or editing of
          #   fields outside countries where that field is used.
          #
          # For more guidance on how to use this schema, please see:
          # https://support.google.com/business/answer/6397478
        &quot;locality&quot;: &quot;A String&quot;, # Optional. Generally refers to the city/town portion of the address.
            # Examples: US city, IT comune, UK post town.
            # In regions of the world where localities are not well defined or do not fit
            # into this structure well, leave locality empty and use address_lines.
        &quot;administrativeArea&quot;: &quot;A String&quot;, # Optional. Highest administrative subdivision which is used for postal
            # addresses of a country or region.
            # For example, this can be a state, a province, an oblast, or a prefecture.
            # Specifically, for Spain this is the province and not the autonomous
            # community (e.g. &quot;Barcelona&quot; and not &quot;Catalonia&quot;).
            # Many countries don&#x27;t use an administrative area in postal addresses. E.g.
            # in Switzerland this should be left unpopulated.
        &quot;organization&quot;: &quot;A String&quot;, # Optional. The name of the organization at the address.
        &quot;addressLines&quot;: [ # Unstructured address lines describing the lower levels of an address.
            #
            # Because values in address_lines do not have type information and may
            # sometimes contain multiple values in a single field (e.g.
            # &quot;Austin, TX&quot;), it is important that the line order is clear. The order of
            # address lines should be &quot;envelope order&quot; for the country/region of the
            # address. In places where this can vary (e.g. Japan), address_language is
            # used to make it explicit (e.g. &quot;ja&quot; for large-to-small ordering and
            # &quot;ja-Latn&quot; or &quot;en&quot; for small-to-large). This way, the most specific line of
            # an address can be selected based on the language.
            #
            # The minimum permitted structural representation of an address consists
            # of a region_code with all remaining information placed in the
            # address_lines. It would be possible to format such an address very
            # approximately without geocoding, but no semantic reasoning could be
            # made about any of the address components until it was at least
            # partially resolved.
            #
            # Creating an address only containing a region_code and address_lines, and
            # then geocoding is the recommended way to handle completely unstructured
            # addresses (as opposed to guessing which parts of the address should be
            # localities or administrative areas).
          &quot;A String&quot;,
        ],
        &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR region code of the country/region of the address. This
            # is never inferred and it is up to the user to ensure the value is
            # correct. See http://cldr.unicode.org/ and
            # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
            # for details. Example: &quot;CH&quot; for Switzerland.
        &quot;postalCode&quot;: &quot;A String&quot;, # Optional. Postal code of the address. Not all countries use or require
            # postal codes to be present, but where they are used, they may trigger
            # additional validation with other parts of the address (e.g. state/zip
            # validation in the U.S.A.).
        &quot;sortingCode&quot;: &quot;A String&quot;, # Optional. Additional, country-specific, sorting code. This is not used
            # in most regions. Where it is used, the value is either a string like
            # &quot;CEDEX&quot;, optionally followed by a number (e.g. &quot;CEDEX 7&quot;), or just a number
            # alone, representing the &quot;sector code&quot; (Jamaica), &quot;delivery area indicator&quot;
            # (Malawi) or &quot;post office indicator&quot; (e.g. Côte d&#x27;Ivoire).
        &quot;languageCode&quot;: &quot;A String&quot;, # Optional. BCP-47 language code of the contents of this address (if
            # known). This is often the UI language of the input form or is expected
            # to match one of the languages used in the address&#x27; country/region, or their
            # transliterated equivalents.
            # This can affect formatting in certain countries, but is not critical
            # to the correctness of the data and will never affect any validation or
            # other non-formatting related operations.
            #
            # If this value is not known, it should be omitted (rather than specifying a
            # possibly incorrect default).
            #
            # Examples: &quot;zh-Hant&quot;, &quot;ja&quot;, &quot;ja-Latn&quot;, &quot;en&quot;.
        &quot;recipients&quot;: [ # Optional. The recipient at the address.
            # This field may, under certain circumstances, contain multiline information.
            # For example, it might contain &quot;care of&quot; information.
          &quot;A String&quot;,
        ],
        &quot;sublocality&quot;: &quot;A String&quot;, # Optional. Sublocality of the address.
            # For example, this can be neighborhoods, boroughs, districts.
        &quot;revision&quot;: 42, # The schema revision of the `PostalAddress`. This must be set to 0, which is
            # the latest revision.
            #
            # All new revisions **must** be backward compatible with old revisions.
      },
      &quot;locationType&quot;: &quot;A String&quot;, # The type of a location, which corresponds to the address lines field of
          # PostalAddress. For example, &quot;Downtown, Atlanta, GA, USA&quot; has a type of
          # LocationType#NEIGHBORHOOD, and &quot;Kansas City, KS, USA&quot; has a type of
          # LocationType#LOCALITY.
      &quot;radiusMeters&quot;: 3.14, # Radius in meters of the job location. This value is derived from the
          # location bounding box in which a circle with the specified radius
          # centered from LatLng coves the area associated with the job location.
          # For example, currently, &quot;Mountain View, CA, USA&quot; has a radius of
          # 7885.79 meters.
      &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # An object representing a latitude/longitude pair.
          # of doubles representing degrees latitude and degrees longitude. Unless
          # specified otherwise, this must conform to the
          # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
          # standard&lt;/a&gt;. Values must be within normalized ranges.
        &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
    },
    &quot;hiringAgency&quot;: True or False, # Optional. Set to true if it is the hiring agency that post jobs for other
        # employers.
        # 
        # Defaults to false if not provided.
    &quot;title&quot;: &quot;A String&quot;, # Deprecated. Use display_name instead.
        # 
        # Required.
        # 
        # The name of the employer to be displayed with the job,
        # for example, &quot;Google, LLC.&quot;.
    &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of the employer to be displayed with the job,
        # for example, &quot;Google, LLC.&quot;.
  }

  updateCompanyFields: string, Optional but strongly recommended to be provided for the best service
experience.

If update_company_fields is provided, only the specified fields in
company are updated. Otherwise all the fields are updated.

A field mask to specify the company fields to update. Valid values are:

* displayName
* website
* imageUrl
* companySize
* distributorBillingCompanyId
* companyInfoSources
* careerPageLink
* hiringAgency
* hqLocation
* eeoText
* keywordSearchableCustomAttributes
* title (deprecated)
* keywordSearchableCustomFields (deprecated)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Company resource represents a company in the service. A company is the
        # entity that owns job listings, that is, the hiring entity responsible for
        # employing applicants for the job position.
      &quot;website&quot;: &quot;A String&quot;, # Optional. The URL representing the company&#x27;s primary web site or home page,
          # such as, &quot;www.google.com&quot;.
      &quot;hqLocation&quot;: &quot;A String&quot;, # Optional. The street address of the company&#x27;s main headquarters, which may be
          # different from the job location. The service attempts
          # to geolocate the provided address, and populates a more specific
          # location wherever possible in structured_company_hq_location.
      &quot;companyInfoSources&quot;: [ # Optional. Identifiers external to the application that help to further identify
          # the employer.
        { # A resource that represents an external  Google identifier for a company,
            # for example, a Google+ business page or a Google Maps business page.
            # For unsupported types, use `unknown_type_id`.
          &quot;mapsCid&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s headquarters on Google Maps,
              # namely, the Google Maps CID (cell id).
          &quot;freebaseMid&quot;: &quot;A String&quot;, # Optional. The Google&#x27;s Knowledge Graph value for the employer&#x27;s company.
          &quot;unknownTypeId&quot;: &quot;A String&quot;, # Optional. A Google identifier that does not match any of the other types.
          &quot;gplusId&quot;: &quot;A String&quot;, # Optional. The numeric identifier for the employer&#x27;s Google+ business page.
        },
      ],
      &quot;keywordSearchableCustomAttributes&quot;: [ # Optional. A list of keys of filterable Job.custom_attributes, whose
          # corresponding `string_values` are used in keyword search. Jobs with
          # `string_values` under these specified field keys are returned if any
          # of the values matches the search keyword. Custom field values with
          # parenthesis, brackets and special symbols might not be properly searchable,
          # and those keyword queries need to be surrounded by quotes.
        &quot;A String&quot;,
      ],
      &quot;suspended&quot;: True or False, # Output only. Indicates whether a company is flagged to be suspended from public
          # availability by the service when job content appears suspicious,
          # abusive, or spammy.
      &quot;imageUrl&quot;: &quot;A String&quot;, # Optional. A URL that hosts the employer&#x27;s company logo. If provided,
          # the logo image should be squared at 80x80 pixels.
          #
          # The url must be a Google Photos or Google Album url.
          # Only images in these Google sub-domains are accepted.
      &quot;distributorBillingCompanyId&quot;: &quot;A String&quot;, # Optional. The unique company identifier provided by the client to identify an
          # employer for billing purposes. Recommended practice is to use
          # the distributor_company_id.
          #
          # Defaults to same value as distributor_company_id when a value
          # is not provided.
      &quot;careerPageLink&quot;: &quot;A String&quot;, # Optional. The URL to employer&#x27;s career site or careers page on the employer&#x27;s web
          # site.
      &quot;keywordSearchableCustomFields&quot;: [ # Deprecated. Use keyword_searchable_custom_attributes instead.
          #
          # Optional.
          #
          # A list of filterable custom fields that should be used in keyword
          # search. The jobs of this company are returned if any of these custom
          # fields matches the search keyword. Custom field values with parenthesis,
          # brackets and special symbols might not be properly searchable, and those
          # keyword queries need to be surrounded by quotes.
        42,
      ],
      &quot;disableLocationOptimization&quot;: True or False, # Deprecated. Do not use this field.
          #
          # Optional.
          #
          # This field is no longer used. Any value set to it is ignored.
      &quot;companySize&quot;: &quot;A String&quot;, # Optional. The employer&#x27;s company size.
      &quot;eeoText&quot;: &quot;A String&quot;, # Optional. Equal Employment Opportunity legal disclaimer text to be
          # associated with all jobs, and typically to be displayed in all
          # roles.
          #
          # The maximum number of allowed characters is 500.
      &quot;name&quot;: &quot;A String&quot;, # Required during company update.
          #
          # The resource name for a company. This is generated by the service when a
          # company is created, for example,
          # &quot;companies/0000aaaa-1111-bbbb-2222-cccc3333dddd&quot;.
      &quot;distributorCompanyId&quot;: &quot;A String&quot;, # Required. A client&#x27;s company identifier, used to uniquely identify the
          # company. If an employer has a subsidiary or sub-brand, such as &quot;Alphabet&quot;
          # and &quot;Google&quot;, which the client wishes to use as the company displayed on
          # the job. Best practice is to create a distinct company identifier for each
          # distinct brand displayed.
          #
          # The maximum number of allowed characters is 255.
      &quot;structuredCompanyHqLocation&quot;: { # Output only. # Output only. A structured headquarters location of the company,
          # resolved from hq_location if possible.
          #
          # A resource that represents a location with full geographic
          # information.
        &quot;postalAddress&quot;: { # Represents a postal address, e.g. for postal delivery or payments addresses. # Postal address of the location that includes human readable information,
            # such as postal delivery and payments addresses. Given a postal address,
            # a postal service can deliver items to a premises, P.O. Box, or other
            # delivery location.
            # Given a postal address, a postal service can deliver items to a premise, P.O.
            # Box or similar.
            # It is not intended to model geographical locations (roads, towns,
            # mountains).
            #
            # In typical usage an address would be created via user input or from importing
            # existing data, depending on the type of process.
            #
            # Advice on address input / editing:
            #  - Use an i18n-ready address widget such as
            #    https://github.com/google/libaddressinput)
            # - Users should not be presented with UI elements for input or editing of
            #   fields outside countries where that field is used.
            #
            # For more guidance on how to use this schema, please see:
            # https://support.google.com/business/answer/6397478
          &quot;locality&quot;: &quot;A String&quot;, # Optional. Generally refers to the city/town portion of the address.
              # Examples: US city, IT comune, UK post town.
              # In regions of the world where localities are not well defined or do not fit
              # into this structure well, leave locality empty and use address_lines.
          &quot;administrativeArea&quot;: &quot;A String&quot;, # Optional. Highest administrative subdivision which is used for postal
              # addresses of a country or region.
              # For example, this can be a state, a province, an oblast, or a prefecture.
              # Specifically, for Spain this is the province and not the autonomous
              # community (e.g. &quot;Barcelona&quot; and not &quot;Catalonia&quot;).
              # Many countries don&#x27;t use an administrative area in postal addresses. E.g.
              # in Switzerland this should be left unpopulated.
          &quot;organization&quot;: &quot;A String&quot;, # Optional. The name of the organization at the address.
          &quot;addressLines&quot;: [ # Unstructured address lines describing the lower levels of an address.
              #
              # Because values in address_lines do not have type information and may
              # sometimes contain multiple values in a single field (e.g.
              # &quot;Austin, TX&quot;), it is important that the line order is clear. The order of
              # address lines should be &quot;envelope order&quot; for the country/region of the
              # address. In places where this can vary (e.g. Japan), address_language is
              # used to make it explicit (e.g. &quot;ja&quot; for large-to-small ordering and
              # &quot;ja-Latn&quot; or &quot;en&quot; for small-to-large). This way, the most specific line of
              # an address can be selected based on the language.
              #
              # The minimum permitted structural representation of an address consists
              # of a region_code with all remaining information placed in the
              # address_lines. It would be possible to format such an address very
              # approximately without geocoding, but no semantic reasoning could be
              # made about any of the address components until it was at least
              # partially resolved.
              #
              # Creating an address only containing a region_code and address_lines, and
              # then geocoding is the recommended way to handle completely unstructured
              # addresses (as opposed to guessing which parts of the address should be
              # localities or administrative areas).
            &quot;A String&quot;,
          ],
          &quot;regionCode&quot;: &quot;A String&quot;, # Required. CLDR region code of the country/region of the address. This
              # is never inferred and it is up to the user to ensure the value is
              # correct. See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: &quot;CH&quot; for Switzerland.
          &quot;postalCode&quot;: &quot;A String&quot;, # Optional. Postal code of the address. Not all countries use or require
              # postal codes to be present, but where they are used, they may trigger
              # additional validation with other parts of the address (e.g. state/zip
              # validation in the U.S.A.).
          &quot;sortingCode&quot;: &quot;A String&quot;, # Optional. Additional, country-specific, sorting code. This is not used
              # in most regions. Where it is used, the value is either a string like
              # &quot;CEDEX&quot;, optionally followed by a number (e.g. &quot;CEDEX 7&quot;), or just a number
              # alone, representing the &quot;sector code&quot; (Jamaica), &quot;delivery area indicator&quot;
              # (Malawi) or &quot;post office indicator&quot; (e.g. Côte d&#x27;Ivoire).
          &quot;languageCode&quot;: &quot;A String&quot;, # Optional. BCP-47 language code of the contents of this address (if
              # known). This is often the UI language of the input form or is expected
              # to match one of the languages used in the address&#x27; country/region, or their
              # transliterated equivalents.
              # This can affect formatting in certain countries, but is not critical
              # to the correctness of the data and will never affect any validation or
              # other non-formatting related operations.
              #
              # If this value is not known, it should be omitted (rather than specifying a
              # possibly incorrect default).
              #
              # Examples: &quot;zh-Hant&quot;, &quot;ja&quot;, &quot;ja-Latn&quot;, &quot;en&quot;.
          &quot;recipients&quot;: [ # Optional. The recipient at the address.
              # This field may, under certain circumstances, contain multiline information.
              # For example, it might contain &quot;care of&quot; information.
            &quot;A String&quot;,
          ],
          &quot;sublocality&quot;: &quot;A String&quot;, # Optional. Sublocality of the address.
              # For example, this can be neighborhoods, boroughs, districts.
          &quot;revision&quot;: 42, # The schema revision of the `PostalAddress`. This must be set to 0, which is
              # the latest revision.
              #
              # All new revisions **must** be backward compatible with old revisions.
        },
        &quot;locationType&quot;: &quot;A String&quot;, # The type of a location, which corresponds to the address lines field of
            # PostalAddress. For example, &quot;Downtown, Atlanta, GA, USA&quot; has a type of
            # LocationType#NEIGHBORHOOD, and &quot;Kansas City, KS, USA&quot; has a type of
            # LocationType#LOCALITY.
        &quot;radiusMeters&quot;: 3.14, # Radius in meters of the job location. This value is derived from the
            # location bounding box in which a circle with the specified radius
            # centered from LatLng coves the area associated with the job location.
            # For example, currently, &quot;Mountain View, CA, USA&quot; has a radius of
            # 7885.79 meters.
        &quot;latLng&quot;: { # An object representing a latitude/longitude pair. This is expressed as a pair # An object representing a latitude/longitude pair.
            # of doubles representing degrees latitude and degrees longitude. Unless
            # specified otherwise, this must conform to the
            # &lt;a href=&quot;http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf&quot;&gt;WGS84
            # standard&lt;/a&gt;. Values must be within normalized ranges.
          &quot;latitude&quot;: 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          &quot;longitude&quot;: 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
      &quot;hiringAgency&quot;: True or False, # Optional. Set to true if it is the hiring agency that post jobs for other
          # employers.
          #
          # Defaults to false if not provided.
      &quot;title&quot;: &quot;A String&quot;, # Deprecated. Use display_name instead.
          #
          # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, &quot;Google, LLC.&quot;.
      &quot;displayName&quot;: &quot;A String&quot;, # Required. The name of the employer to be displayed with the job,
          # for example, &quot;Google, LLC.&quot;.
    }</pre>
</div>

</body></html>