<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, 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(pageSize=None, mustHaveOpenJobs=None, pageToken=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, 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, x__xgafv=None)</code>
  <pre>Creates a new company entity.

Args:
  body: object, The request body. (required)
    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.
    "website": "A String", # Optional.
        # 
        # The URL representing the company's primary web site or home page,
        # such as, "www.google.com".
    "companySize": "A String", # Optional.
        # 
        # The employer's company size.
    "displayName": "A String", # Required.
        # 
        # The name of the employer to be displayed with the job,
        # for example, "Google, LLC.".
    "name": "A String", # Required during company update.
        # 
        # The resource name for a company. This is generated by the service when a
        # company is created, for example,
        # "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd".
    "keywordSearchableCustomAttributes": [ # 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.
      "A String",
    ],
    "title": "A String", # Deprecated. Use display_name instead.
        # 
        # Required.
        # 
        # The name of the employer to be displayed with the job,
        # for example, "Google, LLC.".
    "structuredCompanyHqLocation": { # 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.
      "radiusMeters": 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, "Mountain View, CA, USA" has a radius of
          # 7885.79 meters.
      "locationType": "A String", # The type of a location, which corresponds to the address lines field of
          # PostalAddress. For example, "Downtown, Atlanta, GA, USA" has a type of
          # LocationType#NEIGHBORHOOD, and "Kansas City, KS, USA" has a type of
          # LocationType#LOCALITY.
      "postalAddress": { # 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/googlei18n/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
        "languageCode": "A String", # 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' 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: "zh-Hant", "ja", "ja-Latn", "en".
        "recipients": [ # Optional. The recipient at the address.
            # This field may, under certain circumstances, contain multiline information.
            # For example, it might contain "care of" information.
          "A String",
        ],
        "locality": "A String", # 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.
        "sortingCode": "A String", # Optional. Additional, country-specific, sorting code. This is not used
            # in most regions. Where it is used, the value is either a string like
            # "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
            # alone, representing the "sector code" (Jamaica), "delivery area indicator"
            # (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
        "regionCode": "A String", # 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: "CH" for Switzerland.
        "administrativeArea": "A String", # 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. "Barcelona" and not "Catalonia").
            # Many countries don't use an administrative area in postal addresses. E.g.
            # in Switzerland this should be left unpopulated.
        "addressLines": [ # 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.
            # "Austin, TX"), it is important that the line order is clear. The order of
            # address lines should be "envelope order" 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. "ja" for large-to-small ordering and
            # "ja-Latn" or "en" 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).
          "A String",
        ],
        "postalCode": "A String", # 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.).
        "organization": "A String", # Optional. The name of the organization at the address.
        "sublocality": "A String", # Optional. Sublocality of the address.
            # For example, this can be neighborhoods, boroughs, districts.
        "revision": 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.
      },
      "latLng": { # 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
          # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
          # standard</a>. Values must be within normalized ranges.
        "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
    },
    "companyInfoSources": [ # 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`.
        "unknownTypeId": "A String", # Optional.
            #
            # A Google identifier that does not match any of the other types.
        "mapsCid": "A String", # Optional.
            #
            # The numeric identifier for the employer's headquarters on Google Maps,
            # namely, the Google Maps CID (cell id).
        "freebaseMid": "A String", # Optional.
            #
            # The Google's Knowledge Graph value for the employer's company.
        "gplusId": "A String", # Optional.
            #
            # The numeric identifier for the employer's Google+ business page.
      },
    ],
    "eeoText": "A String", # 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.
    "hqLocation": "A String", # Optional.
        # 
        # The street address of the company'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.
    "distributorBillingCompanyId": "A String", # 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.
    "keywordSearchableCustomFields": [ # 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,
    ],
    "disableLocationOptimization": True or False, # Deprecated. Do not use this field.
        # 
        # Optional.
        # 
        # This field is no longer used. Any value set to it is ignored.
    "suspended": 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.
    "careerPageLink": "A String", # Optional.
        # 
        # The URL to employer's career site or careers page on the employer's web
        # site.
    "hiringAgency": 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.
    "distributorCompanyId": "A String", # Required.
        # 
        # A client's company identifier, used to uniquely identify the
        # company. If an employer has a subsidiary or sub-brand, such as "Alphabet"
        # and "Google", 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.
    "imageUrl": "A String", # Optional.
        # 
        # A URL that hosts the employer'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.
  }

  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.
      "website": "A String", # Optional.
          #
          # The URL representing the company's primary web site or home page,
          # such as, "www.google.com".
      "companySize": "A String", # Optional.
          #
          # The employer's company size.
      "displayName": "A String", # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, "Google, LLC.".
      "name": "A String", # Required during company update.
          #
          # The resource name for a company. This is generated by the service when a
          # company is created, for example,
          # "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd".
      "keywordSearchableCustomAttributes": [ # 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.
        "A String",
      ],
      "title": "A String", # Deprecated. Use display_name instead.
          #
          # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, "Google, LLC.".
      "structuredCompanyHqLocation": { # 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.
        "radiusMeters": 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, "Mountain View, CA, USA" has a radius of
            # 7885.79 meters.
        "locationType": "A String", # The type of a location, which corresponds to the address lines field of
            # PostalAddress. For example, "Downtown, Atlanta, GA, USA" has a type of
            # LocationType#NEIGHBORHOOD, and "Kansas City, KS, USA" has a type of
            # LocationType#LOCALITY.
        "postalAddress": { # 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/googlei18n/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
          "languageCode": "A String", # 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' 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: "zh-Hant", "ja", "ja-Latn", "en".
          "recipients": [ # Optional. The recipient at the address.
              # This field may, under certain circumstances, contain multiline information.
              # For example, it might contain "care of" information.
            "A String",
          ],
          "locality": "A String", # 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.
          "sortingCode": "A String", # Optional. Additional, country-specific, sorting code. This is not used
              # in most regions. Where it is used, the value is either a string like
              # "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
              # alone, representing the "sector code" (Jamaica), "delivery area indicator"
              # (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
          "regionCode": "A String", # 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: "CH" for Switzerland.
          "administrativeArea": "A String", # 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. "Barcelona" and not "Catalonia").
              # Many countries don't use an administrative area in postal addresses. E.g.
              # in Switzerland this should be left unpopulated.
          "addressLines": [ # 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.
              # "Austin, TX"), it is important that the line order is clear. The order of
              # address lines should be "envelope order" 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. "ja" for large-to-small ordering and
              # "ja-Latn" or "en" 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).
            "A String",
          ],
          "postalCode": "A String", # 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.).
          "organization": "A String", # Optional. The name of the organization at the address.
          "sublocality": "A String", # Optional. Sublocality of the address.
              # For example, this can be neighborhoods, boroughs, districts.
          "revision": 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.
        },
        "latLng": { # 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
            # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
            # standard</a>. Values must be within normalized ranges.
          "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
      "companyInfoSources": [ # 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`.
          "unknownTypeId": "A String", # Optional.
              #
              # A Google identifier that does not match any of the other types.
          "mapsCid": "A String", # Optional.
              #
              # The numeric identifier for the employer's headquarters on Google Maps,
              # namely, the Google Maps CID (cell id).
          "freebaseMid": "A String", # Optional.
              #
              # The Google's Knowledge Graph value for the employer's company.
          "gplusId": "A String", # Optional.
              #
              # The numeric identifier for the employer's Google+ business page.
        },
      ],
      "eeoText": "A String", # 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.
      "hqLocation": "A String", # Optional.
          #
          # The street address of the company'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.
      "distributorBillingCompanyId": "A String", # 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.
      "keywordSearchableCustomFields": [ # 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,
      ],
      "disableLocationOptimization": True or False, # Deprecated. Do not use this field.
          #
          # Optional.
          #
          # This field is no longer used. Any value set to it is ignored.
      "suspended": 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.
      "careerPageLink": "A String", # Optional.
          #
          # The URL to employer's career site or careers page on the employer's web
          # site.
      "hiringAgency": 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.
      "distributorCompanyId": "A String", # Required.
          #
          # A client's company identifier, used to uniquely identify the
          # company. If an employer has a subsidiary or sub-brand, such as "Alphabet"
          # and "Google", 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.
      "imageUrl": "A String", # Optional.
          #
          # A URL that hosts the employer'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.
    }</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, "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd". (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 "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd". (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.
      "website": "A String", # Optional.
          #
          # The URL representing the company's primary web site or home page,
          # such as, "www.google.com".
      "companySize": "A String", # Optional.
          #
          # The employer's company size.
      "displayName": "A String", # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, "Google, LLC.".
      "name": "A String", # Required during company update.
          #
          # The resource name for a company. This is generated by the service when a
          # company is created, for example,
          # "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd".
      "keywordSearchableCustomAttributes": [ # 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.
        "A String",
      ],
      "title": "A String", # Deprecated. Use display_name instead.
          #
          # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, "Google, LLC.".
      "structuredCompanyHqLocation": { # 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.
        "radiusMeters": 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, "Mountain View, CA, USA" has a radius of
            # 7885.79 meters.
        "locationType": "A String", # The type of a location, which corresponds to the address lines field of
            # PostalAddress. For example, "Downtown, Atlanta, GA, USA" has a type of
            # LocationType#NEIGHBORHOOD, and "Kansas City, KS, USA" has a type of
            # LocationType#LOCALITY.
        "postalAddress": { # 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/googlei18n/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
          "languageCode": "A String", # 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' 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: "zh-Hant", "ja", "ja-Latn", "en".
          "recipients": [ # Optional. The recipient at the address.
              # This field may, under certain circumstances, contain multiline information.
              # For example, it might contain "care of" information.
            "A String",
          ],
          "locality": "A String", # 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.
          "sortingCode": "A String", # Optional. Additional, country-specific, sorting code. This is not used
              # in most regions. Where it is used, the value is either a string like
              # "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
              # alone, representing the "sector code" (Jamaica), "delivery area indicator"
              # (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
          "regionCode": "A String", # 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: "CH" for Switzerland.
          "administrativeArea": "A String", # 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. "Barcelona" and not "Catalonia").
              # Many countries don't use an administrative area in postal addresses. E.g.
              # in Switzerland this should be left unpopulated.
          "addressLines": [ # 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.
              # "Austin, TX"), it is important that the line order is clear. The order of
              # address lines should be "envelope order" 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. "ja" for large-to-small ordering and
              # "ja-Latn" or "en" 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).
            "A String",
          ],
          "postalCode": "A String", # 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.).
          "organization": "A String", # Optional. The name of the organization at the address.
          "sublocality": "A String", # Optional. Sublocality of the address.
              # For example, this can be neighborhoods, boroughs, districts.
          "revision": 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.
        },
        "latLng": { # 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
            # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
            # standard</a>. Values must be within normalized ranges.
          "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
      "companyInfoSources": [ # 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`.
          "unknownTypeId": "A String", # Optional.
              #
              # A Google identifier that does not match any of the other types.
          "mapsCid": "A String", # Optional.
              #
              # The numeric identifier for the employer's headquarters on Google Maps,
              # namely, the Google Maps CID (cell id).
          "freebaseMid": "A String", # Optional.
              #
              # The Google's Knowledge Graph value for the employer's company.
          "gplusId": "A String", # Optional.
              #
              # The numeric identifier for the employer's Google+ business page.
        },
      ],
      "eeoText": "A String", # 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.
      "hqLocation": "A String", # Optional.
          #
          # The street address of the company'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.
      "distributorBillingCompanyId": "A String", # 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.
      "keywordSearchableCustomFields": [ # 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,
      ],
      "disableLocationOptimization": True or False, # Deprecated. Do not use this field.
          #
          # Optional.
          #
          # This field is no longer used. Any value set to it is ignored.
      "suspended": 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.
      "careerPageLink": "A String", # Optional.
          #
          # The URL to employer's career site or careers page on the employer's web
          # site.
      "hiringAgency": 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.
      "distributorCompanyId": "A String", # Required.
          #
          # A client's company identifier, used to uniquely identify the
          # company. If an employer has a subsidiary or sub-brand, such as "Alphabet"
          # and "Google", 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.
      "imageUrl": "A String", # Optional.
          #
          # A URL that hosts the employer'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.
    }</pre>
</div>

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

Args:
  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.
  pageToken: string, Optional.

The starting indicator from which to return results.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Output only.
      #
      # The List companies response object.
    "nextPageToken": "A String", # A token to retrieve the next page of results.
    "companies": [ # 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.
          "website": "A String", # Optional.
              #
              # The URL representing the company's primary web site or home page,
              # such as, "www.google.com".
          "companySize": "A String", # Optional.
              #
              # The employer's company size.
          "displayName": "A String", # Required.
              #
              # The name of the employer to be displayed with the job,
              # for example, "Google, LLC.".
          "name": "A String", # Required during company update.
              #
              # The resource name for a company. This is generated by the service when a
              # company is created, for example,
              # "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd".
          "keywordSearchableCustomAttributes": [ # 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.
            "A String",
          ],
          "title": "A String", # Deprecated. Use display_name instead.
              #
              # Required.
              #
              # The name of the employer to be displayed with the job,
              # for example, "Google, LLC.".
          "structuredCompanyHqLocation": { # 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.
            "radiusMeters": 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, "Mountain View, CA, USA" has a radius of
                # 7885.79 meters.
            "locationType": "A String", # The type of a location, which corresponds to the address lines field of
                # PostalAddress. For example, "Downtown, Atlanta, GA, USA" has a type of
                # LocationType#NEIGHBORHOOD, and "Kansas City, KS, USA" has a type of
                # LocationType#LOCALITY.
            "postalAddress": { # 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/googlei18n/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
              "languageCode": "A String", # 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' 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: "zh-Hant", "ja", "ja-Latn", "en".
              "recipients": [ # Optional. The recipient at the address.
                  # This field may, under certain circumstances, contain multiline information.
                  # For example, it might contain "care of" information.
                "A String",
              ],
              "locality": "A String", # 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.
              "sortingCode": "A String", # Optional. Additional, country-specific, sorting code. This is not used
                  # in most regions. Where it is used, the value is either a string like
                  # "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
                  # alone, representing the "sector code" (Jamaica), "delivery area indicator"
                  # (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
              "regionCode": "A String", # 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: "CH" for Switzerland.
              "administrativeArea": "A String", # 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. "Barcelona" and not "Catalonia").
                  # Many countries don't use an administrative area in postal addresses. E.g.
                  # in Switzerland this should be left unpopulated.
              "addressLines": [ # 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.
                  # "Austin, TX"), it is important that the line order is clear. The order of
                  # address lines should be "envelope order" 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. "ja" for large-to-small ordering and
                  # "ja-Latn" or "en" 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).
                "A String",
              ],
              "postalCode": "A String", # 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.).
              "organization": "A String", # Optional. The name of the organization at the address.
              "sublocality": "A String", # Optional. Sublocality of the address.
                  # For example, this can be neighborhoods, boroughs, districts.
              "revision": 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.
            },
            "latLng": { # 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
                # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
                # standard</a>. Values must be within normalized ranges.
              "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
              "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
            },
          },
          "companyInfoSources": [ # 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`.
              "unknownTypeId": "A String", # Optional.
                  #
                  # A Google identifier that does not match any of the other types.
              "mapsCid": "A String", # Optional.
                  #
                  # The numeric identifier for the employer's headquarters on Google Maps,
                  # namely, the Google Maps CID (cell id).
              "freebaseMid": "A String", # Optional.
                  #
                  # The Google's Knowledge Graph value for the employer's company.
              "gplusId": "A String", # Optional.
                  #
                  # The numeric identifier for the employer's Google+ business page.
            },
          ],
          "eeoText": "A String", # 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.
          "hqLocation": "A String", # Optional.
              #
              # The street address of the company'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.
          "distributorBillingCompanyId": "A String", # 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.
          "keywordSearchableCustomFields": [ # 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,
          ],
          "disableLocationOptimization": True or False, # Deprecated. Do not use this field.
              #
              # Optional.
              #
              # This field is no longer used. Any value set to it is ignored.
          "suspended": 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.
          "careerPageLink": "A String", # Optional.
              #
              # The URL to employer's career site or careers page on the employer's web
              # site.
          "hiringAgency": 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.
          "distributorCompanyId": "A String", # Required.
              #
              # A client's company identifier, used to uniquely identify the
              # company. If an employer has a subsidiary or sub-brand, such as "Alphabet"
              # and "Google", 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.
          "imageUrl": "A String", # Optional.
              #
              # A URL that hosts the employer'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.
        },
    ],
    "metadata": { # Output only. # Additional information for the API invocation, such as the request
        # tracking id.
        #
        # Additional information returned to client, such as debugging
        # information.
      "requestId": "A String", # A unique id associated with this call.
          # This id is logged for tracking purposes.
      "experimentIdList": [ # 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,
      ],
      "mode": "A String", # For search response only. Indicates the mode of a performed search.
    },
  }</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 'execute()' 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, updateCompanyFields=None, x__xgafv=None)</code>
  <pre>Updates the specified company. Company names can'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,
"companies/0000aaaa-1111-bbbb-2222-cccc3333dddd". (required)
  body: object, The request body. (required)
    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.
    "website": "A String", # Optional.
        # 
        # The URL representing the company's primary web site or home page,
        # such as, "www.google.com".
    "companySize": "A String", # Optional.
        # 
        # The employer's company size.
    "displayName": "A String", # Required.
        # 
        # The name of the employer to be displayed with the job,
        # for example, "Google, LLC.".
    "name": "A String", # Required during company update.
        # 
        # The resource name for a company. This is generated by the service when a
        # company is created, for example,
        # "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd".
    "keywordSearchableCustomAttributes": [ # 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.
      "A String",
    ],
    "title": "A String", # Deprecated. Use display_name instead.
        # 
        # Required.
        # 
        # The name of the employer to be displayed with the job,
        # for example, "Google, LLC.".
    "structuredCompanyHqLocation": { # 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.
      "radiusMeters": 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, "Mountain View, CA, USA" has a radius of
          # 7885.79 meters.
      "locationType": "A String", # The type of a location, which corresponds to the address lines field of
          # PostalAddress. For example, "Downtown, Atlanta, GA, USA" has a type of
          # LocationType#NEIGHBORHOOD, and "Kansas City, KS, USA" has a type of
          # LocationType#LOCALITY.
      "postalAddress": { # 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/googlei18n/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
        "languageCode": "A String", # 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' 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: "zh-Hant", "ja", "ja-Latn", "en".
        "recipients": [ # Optional. The recipient at the address.
            # This field may, under certain circumstances, contain multiline information.
            # For example, it might contain "care of" information.
          "A String",
        ],
        "locality": "A String", # 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.
        "sortingCode": "A String", # Optional. Additional, country-specific, sorting code. This is not used
            # in most regions. Where it is used, the value is either a string like
            # "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
            # alone, representing the "sector code" (Jamaica), "delivery area indicator"
            # (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
        "regionCode": "A String", # 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: "CH" for Switzerland.
        "administrativeArea": "A String", # 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. "Barcelona" and not "Catalonia").
            # Many countries don't use an administrative area in postal addresses. E.g.
            # in Switzerland this should be left unpopulated.
        "addressLines": [ # 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.
            # "Austin, TX"), it is important that the line order is clear. The order of
            # address lines should be "envelope order" 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. "ja" for large-to-small ordering and
            # "ja-Latn" or "en" 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).
          "A String",
        ],
        "postalCode": "A String", # 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.).
        "organization": "A String", # Optional. The name of the organization at the address.
        "sublocality": "A String", # Optional. Sublocality of the address.
            # For example, this can be neighborhoods, boroughs, districts.
        "revision": 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.
      },
      "latLng": { # 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
          # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
          # standard</a>. Values must be within normalized ranges.
        "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
        "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
      },
    },
    "companyInfoSources": [ # 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`.
        "unknownTypeId": "A String", # Optional.
            #
            # A Google identifier that does not match any of the other types.
        "mapsCid": "A String", # Optional.
            #
            # The numeric identifier for the employer's headquarters on Google Maps,
            # namely, the Google Maps CID (cell id).
        "freebaseMid": "A String", # Optional.
            #
            # The Google's Knowledge Graph value for the employer's company.
        "gplusId": "A String", # Optional.
            #
            # The numeric identifier for the employer's Google+ business page.
      },
    ],
    "eeoText": "A String", # 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.
    "hqLocation": "A String", # Optional.
        # 
        # The street address of the company'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.
    "distributorBillingCompanyId": "A String", # 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.
    "keywordSearchableCustomFields": [ # 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,
    ],
    "disableLocationOptimization": True or False, # Deprecated. Do not use this field.
        # 
        # Optional.
        # 
        # This field is no longer used. Any value set to it is ignored.
    "suspended": 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.
    "careerPageLink": "A String", # Optional.
        # 
        # The URL to employer's career site or careers page on the employer's web
        # site.
    "hiringAgency": 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.
    "distributorCompanyId": "A String", # Required.
        # 
        # A client's company identifier, used to uniquely identify the
        # company. If an employer has a subsidiary or sub-brand, such as "Alphabet"
        # and "Google", 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.
    "imageUrl": "A String", # Optional.
        # 
        # A URL that hosts the employer'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.
  }

  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.
      "website": "A String", # Optional.
          #
          # The URL representing the company's primary web site or home page,
          # such as, "www.google.com".
      "companySize": "A String", # Optional.
          #
          # The employer's company size.
      "displayName": "A String", # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, "Google, LLC.".
      "name": "A String", # Required during company update.
          #
          # The resource name for a company. This is generated by the service when a
          # company is created, for example,
          # "companies/0000aaaa-1111-bbbb-2222-cccc3333dddd".
      "keywordSearchableCustomAttributes": [ # 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.
        "A String",
      ],
      "title": "A String", # Deprecated. Use display_name instead.
          #
          # Required.
          #
          # The name of the employer to be displayed with the job,
          # for example, "Google, LLC.".
      "structuredCompanyHqLocation": { # 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.
        "radiusMeters": 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, "Mountain View, CA, USA" has a radius of
            # 7885.79 meters.
        "locationType": "A String", # The type of a location, which corresponds to the address lines field of
            # PostalAddress. For example, "Downtown, Atlanta, GA, USA" has a type of
            # LocationType#NEIGHBORHOOD, and "Kansas City, KS, USA" has a type of
            # LocationType#LOCALITY.
        "postalAddress": { # 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/googlei18n/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
          "languageCode": "A String", # 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' 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: "zh-Hant", "ja", "ja-Latn", "en".
          "recipients": [ # Optional. The recipient at the address.
              # This field may, under certain circumstances, contain multiline information.
              # For example, it might contain "care of" information.
            "A String",
          ],
          "locality": "A String", # 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.
          "sortingCode": "A String", # Optional. Additional, country-specific, sorting code. This is not used
              # in most regions. Where it is used, the value is either a string like
              # "CEDEX", optionally followed by a number (e.g. "CEDEX 7"), or just a number
              # alone, representing the "sector code" (Jamaica), "delivery area indicator"
              # (Malawi) or "post office indicator" (e.g. Côte d'Ivoire).
          "regionCode": "A String", # 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: "CH" for Switzerland.
          "administrativeArea": "A String", # 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. "Barcelona" and not "Catalonia").
              # Many countries don't use an administrative area in postal addresses. E.g.
              # in Switzerland this should be left unpopulated.
          "addressLines": [ # 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.
              # "Austin, TX"), it is important that the line order is clear. The order of
              # address lines should be "envelope order" 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. "ja" for large-to-small ordering and
              # "ja-Latn" or "en" 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).
            "A String",
          ],
          "postalCode": "A String", # 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.).
          "organization": "A String", # Optional. The name of the organization at the address.
          "sublocality": "A String", # Optional. Sublocality of the address.
              # For example, this can be neighborhoods, boroughs, districts.
          "revision": 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.
        },
        "latLng": { # 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
            # <a href="http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf">WGS84
            # standard</a>. Values must be within normalized ranges.
          "latitude": 3.14, # The latitude in degrees. It must be in the range [-90.0, +90.0].
          "longitude": 3.14, # The longitude in degrees. It must be in the range [-180.0, +180.0].
        },
      },
      "companyInfoSources": [ # 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`.
          "unknownTypeId": "A String", # Optional.
              #
              # A Google identifier that does not match any of the other types.
          "mapsCid": "A String", # Optional.
              #
              # The numeric identifier for the employer's headquarters on Google Maps,
              # namely, the Google Maps CID (cell id).
          "freebaseMid": "A String", # Optional.
              #
              # The Google's Knowledge Graph value for the employer's company.
          "gplusId": "A String", # Optional.
              #
              # The numeric identifier for the employer's Google+ business page.
        },
      ],
      "eeoText": "A String", # 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.
      "hqLocation": "A String", # Optional.
          #
          # The street address of the company'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.
      "distributorBillingCompanyId": "A String", # 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.
      "keywordSearchableCustomFields": [ # 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,
      ],
      "disableLocationOptimization": True or False, # Deprecated. Do not use this field.
          #
          # Optional.
          #
          # This field is no longer used. Any value set to it is ignored.
      "suspended": 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.
      "careerPageLink": "A String", # Optional.
          #
          # The URL to employer's career site or careers page on the employer's web
          # site.
      "hiringAgency": 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.
      "distributorCompanyId": "A String", # Required.
          #
          # A client's company identifier, used to uniquely identify the
          # company. If an employer has a subsidiary or sub-brand, such as "Alphabet"
          # and "Google", 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.
      "imageUrl": "A String", # Optional.
          #
          # A URL that hosts the employer'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.
    }</pre>
</div>

</body></html>