<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.jobs.html">jobs</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#batchDelete">batchDelete(body, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a list of Job postings by filter.</p>
<p class="toc_element">
  <code><a href="#create">create(body, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new job.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None, disableFastProcess=None)</a></code></p>
<p class="firstline">Deletes the specified job.</p>
<p class="toc_element">
  <code><a href="#deleteByFilter">deleteByFilter(body, x__xgafv=None)</a></code></p>
<p class="firstline">Deprecated. Use BatchDeleteJobs instead.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Retrieves the specified job, whose status is OPEN or recently EXPIRED</p>
<p class="toc_element">
  <code><a href="#histogram">histogram(body, x__xgafv=None)</a></code></p>
<p class="firstline">Deprecated. Use SearchJobsRequest.histogram_facets instead to make</p>
<p class="toc_element">
  <code><a href="#list">list(pageSize=None, pageToken=None, x__xgafv=None, idsOnly=None, filter=None)</a></code></p>
<p class="firstline">Lists jobs by filter.</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, x__xgafv=None)</a></code></p>
<p class="firstline">Updates specified job.</p>
<p class="toc_element">
  <code><a href="#search">search(body, x__xgafv=None)</a></code></p>
<p class="firstline">Searches for jobs using the provided SearchJobsRequest.</p>
<p class="toc_element">
  <code><a href="#searchForAlert">searchForAlert(body, x__xgafv=None)</a></code></p>
<p class="firstline">Searches for jobs using the provided SearchJobsRequest.</p>
<p class="toc_element">
  <code><a href="#searchForAlert_next">searchForAlert_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="#search_next">search_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="batchDelete">batchDelete(body, x__xgafv=None)</code>
  <pre>Deletes a list of Job postings by filter.

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

{ # Input only.
      # 
      # Batch delete jobs request.
    "filter": "A String", # Required.
        # 
        # The filter string specifies the jobs to be deleted.
        # 
        # Supported operator: =, AND
        # 
        # The fields eligible for filtering are:
        # 
        # * `companyName` (Required)
        # * `requisitionId` (Required)
        # 
        # Sample Query: companyName = "companies/123" AND requisitionId = "req-1"
  }

  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="create">create(body, x__xgafv=None)</code>
  <pre>Creates a new job.

Typically, the job becomes searchable within 10 seconds, but it may take
up to 5 minutes.

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

{ # Input only.
      # 
      # Create job request.
    "job": { # A Job resource represents a job posting (also referred to as a "job listing" # Required.
        # 
        # The Job to be created.
        # or "job requisition"). A job belongs to a Company, which is the hiring
        # entity responsible for the job.
      "languageCode": "A String", # Optional.
          #
          # The language of the posting. This field is distinct from
          # any requirements for fluency that are associated with the job.
          #
          # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
          # For more information, see
          # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
          # class="external" target="_blank" }.
          #
          # If this field is unspecified and Job.description is present, detected
          # language code based on Job.description is assigned, otherwise
          # defaults to 'en_US'.
      "updateTime": "A String", # Output only.
          #
          # The timestamp when this job was last updated.
      "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
          #
          # Optional.
          #
          # A map of fields to hold non-filterable custom job attributes, similar to
          # filterable_custom_fields. These fields are distinct in that the data
          # in these fields are not indexed. Therefore, the client cannot search
          # against them, nor can the client use them to list jobs.
          #
          # The key of the map can be any valid string.
        "a_key": { # Resource that represents the custom data not captured by the standard fields.
          "values": [ # Optional.
              #
              # The values of the custom data.
            "A String",
          ],
        },
      },
      "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
          #
          # The end date of the job in UTC time zone. Typically this field
          # is used for contracting engagements.
          # Dates prior to 1970/1/1 and invalid date formats are ignored.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "companyDisplayName": "A String", # Output only.
          #
          # The name of the company listing the job.
      "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
          #
          # The start date of the job in UTC time zone. Typically this field
          # is used for contracting engagements.
          # Dates prior to 1970/1/1 and invalid date formats are ignored.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "jobLocations": [ # Output only.
          #
          # Structured locations of the job, resolved from locations.
        { # Output only.
            #
            # 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].
          },
        },
      ],
      "locations": [ # Optional but strongly recommended for the best service experience.
          #
          # Location(s) where the emploeyer is looking to hire for this job posting.
          #
          # Specifying the full street address(es) of the hiring location enables
          # better API results, especially job searches by commute time.
          #
          # At most 50 locations are allowed for best search performance. If a job has
          # more locations, it is suggested to split it into multiple jobs with unique
          # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
          # multiple jobs with the same requisition_id, company_name and
          # language_code are not allowed. If the original requisition_id must
          # be preserved, a custom field should be used for storage. It is also
          # suggested to group the locations that close to each other in the same job
          # for better search experience.
          #
          # The maximum number of allowed characters is 500.
        "A String",
      ],
      "employmentTypes": [ # Optional.
          #
          # The employment type(s) of a job, for example,
          # full time or
          # part time.
        "A String",
      ],
      "applicationUrls": [ # Optional but at least one of application_urls,
          # application_email_list or application_instruction must be
          # specified.
          #
          # Use this URL field to direct an applicant to a website, for example to
          # link to an online application form.
          #
          # The maximum number of allowed characters is 2,000.
        "A String",
      ],
      "educationLevels": [ # Optional.
          #
          # The desired education level for the job, such as
          # "Bachelors", "Masters", "Doctorate".
        "A String",
      ],
      "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
          #
          # Optional.
          #
          # Job compensation information.
          #
          # This field replaces compensation_info. Only
          # CompensationInfo.entries or extended_compensation_info can be set,
          # otherwise an exception is thrown.
          #
          # Describes job compensation.
        "annualizedTotalCompensationUnspecified": True or False, # Output only.
            #
            # Indicates annualized total compensation range cannot be derived, due to
            # the job's all CompensationEntry cannot be annualized.
            # See CompensationEntry for explanation on annualization and base
            # compensation entry.
        "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
            #
            # Annualized base compensation range.
            #
            # Compensation range.
          "max": { # Deprecated. See CompensationInfo. # Required.
              #
              # Maximum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "min": { # Deprecated. See CompensationInfo. # Required.
              #
              # Minimum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
        },
        "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
            #
            # Annualized total compensation range.
            #
            # Compensation range.
          "max": { # Deprecated. See CompensationInfo. # Required.
              #
              # Maximum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "min": { # Deprecated. See CompensationInfo. # Required.
              #
              # Minimum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
        },
        "currency": "A String", # Optional.
            #
            # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
            # currency code.
        "annualizedBaseCompensationUnspecified": True or False, # Output only.
            #
            # Indicates annualized base compensation range cannot be derived, due to
            # the job's base compensation entry cannot be annualized.
            # See CompensationEntry for explanation on annualization and base
            # compensation entry.
        "entries": [ # Optional.
            #
            # Job compensation information.
            #
            # At most one entry can be of type
            # ExtendedCompensationInfo.CompensationType.BASE, which is
            # referred as ** base compensation entry ** for the job.
          { # Deprecated. See CompensationInfo.
              #
              # A compensation entry that represents one component of compensation, such
              # as base pay, bonus, or other compensation type.
              #
              # Annualization: One compensation entry can be annualized if
              # - it contains valid amount or range.
              # - and its expected_units_per_year is set or can be derived.
              # Its annualized range is determined as (amount or range) times
              # expected_units_per_year.
            "description": "A String", # Optional.
                #
                # Compensation description.
            "range": { # Deprecated. See CompensationInfo. # Optional.
                #
                # Compensation range.
                #
                # Compensation range.
              "max": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Maximum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "min": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Minimum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
            },
            "unspecified": True or False, # Optional.
                #
                # Indicates compensation amount and range are unset.
            "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
                #
                # Expected number of units paid each year. If not specified, when
                # Job.employment_types is FULLTIME, a default value is inferred
                # based on unit. Default values:
                # - HOURLY: 2080
                # - DAILY: 260
                # - WEEKLY: 52
                # - MONTHLY: 12
                # - ANNUAL: 1
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "amount": { # Deprecated. See CompensationInfo. # Optional.
                #
                # Monetary amount.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "type": "A String", # Required.
                #
                # Compensation type.
            "unit": "A String", # Optional.
                #
                # Frequency of the specified amount.
                #
                # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
          },
        ],
      },
      "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
          #
          # Optional.
          #
          # A map of fields to hold filterable custom job attributes not captured by
          # the standard fields such as job_title, company_name, or
          # level. These custom fields store arbitrary
          # string values, and can be used for purposes not covered by
          # the structured fields. For the best search experience, use of the
          # structured rather than custom fields is recommended.
          #
          # Data stored in these custom fields fields are indexed and
          # searched against by keyword searches (see
          # SearchJobsRequest.custom_field_filters][]).
          #
          # The map key must be a number between 1-20. If an invalid key is
          # provided on job create or update, an error is returned.
        "a_key": { # Resource that represents the custom data not captured by the standard fields.
          "values": [ # Optional.
              #
              # The values of the custom data.
            "A String",
          ],
        },
      },
      "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
          #
          # Optional but strongly recommended to be provided for the best service
          # experience.
          #
          # The expiration date of the job in UTC time. After 12 am on this date, the
          # job is marked as expired, and it no longer appears in search results.
          # The expired job can't be deleted or listed by the DeleteJob and
          # ListJobs APIs, but it can be retrieved with the GetJob API or
          # updated with the UpdateJob API. An expired job can be updated and
          # opened again by using a future expiration date. It can also remain expired.
          # Updating an expired job to be open fails if there is another existing open
          # job with same requisition_id, company_name and language_code.
          #
          # The expired jobs are retained in our system for 90 days. However, the
          # overall expired job count cannot exceed 3 times the maximum of open jobs
          # count over the past week, otherwise jobs with earlier expire time are
          # removed first. Expired jobs are no longer accessible after they are cleaned
          # out.
          #
          # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
          # ignored and treated as expiry date not provided.
          #
          # If this value is not provided on job creation or is invalid, the job
          # posting expires after 30 days from the job's creation time. For example, if
          # the job was created on 2017/01/01 13:00AM UTC with an unspecified
          # expiration date, the job expires after 2017/01/31 13:00AM UTC.
          #
          # If this value is not provided on job update, it depends on the field masks
          # set by UpdateJobRequest.update_job_fields. If the field masks include
          # expiry_date, or the masks are empty meaning that every field is
          # updated, the job expires after 30 days from the job's last update time.
          # Otherwise the expiration date isn't updated.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "responsibilities": "A String", # Optional.
          #
          # A description of job responsibilities. The use of this field is
          # recommended as an alternative to using the more general description
          # field.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 10,000.
      "compensationInfo": { # Job compensation details. # Optional.
          #
          # Job compensation information.
        "annualizedBaseCompensationRange": { # Compensation range. # Output only.
            #
            # Annualized base compensation range. Computed as
            # base compensation entry's CompensationEntry.compensation times
            # CompensationEntry.expected_units_per_year.
            #
            # See CompensationEntry for explanation on compensation annualization.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # A lower bound on a range for compensation or pay for the job.
            # The currency type is specified in compensation_amount.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "annualizedTotalCompensationRange": { # Compensation range. # Output only.
            #
            # Annualized total compensation range. Computed as
            # all compensation entries' CompensationEntry.compensation times
            # CompensationEntry.expected_units_per_year.
            #
            # See CompensationEntry for explanation on compensation annualization.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # An upper bound on a range for compensation or pay for the job.
            # The currency type is specified in compensation_amount.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # The amount of compensation or pay for the job.
            # As an alternative, compensation_amount_min and
            # compensation_amount_max may be used to define a range of
            # compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "entries": [ # Optional.
            #
            # Job compensation information.
            #
            # At most one entry can be of type
            # CompensationInfo.CompensationType.BASE, which is
            # referred as ** base compensation entry ** for the job.
          { # A compensation entry that represents one component of compensation, such
              # as base pay, bonus, or other compensation type.
              #
              # Annualization: One compensation entry can be annualized if
              # - it contains valid amount or range.
              # - and its expected_units_per_year is set or can be derived.
              # Its annualized range is determined as (amount or range) times
              # expected_units_per_year.
            "description": "A String", # Optional.
                #
                # Compensation description.  For example, could
                # indicate equity terms or provide additional context to an estimated
                # bonus.
            "range": { # Compensation range. # Optional.
                #
                # Compensation range.
              "max": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The maximum amount of compensation. If left empty, the value is set
                  # to a maximal compensation value and the currency code is set to
                  # match the currency code of
                  # min_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "min": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The minimum amount of compensation. If left empty, the value is set
                  # to zero and the currency code is set to match the
                  # currency code of max_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
            },
            "expectedUnitsPerYear": 3.14, # Optional.
                #
                # Expected number of units paid each year. If not specified, when
                # Job.employment_types is FULLTIME, a default value is inferred
                # based on unit. Default values:
                # - HOURLY: 2080
                # - DAILY: 260
                # - WEEKLY: 52
                # - MONTHLY: 12
                # - ANNUAL: 1
            "amount": { # Represents an amount of money with its currency type. # Optional.
                #
                # Compensation amount.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "type": "A String", # Required.
                #
                # Compensation type.
            "unit": "A String", # Optional.
                #
                # Frequency of the specified amount.
                #
                # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
          },
        ],
        "type": "A String", # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # Type of job compensation.
      },
      "jobTitle": "A String", # Required.
          #
          # The title of the job, such as "Software Engineer"
          #
          # The maximum number of allowed characters is 500.
      "department": "A String", # Optional.
          #
          # The department or functional area within the company with the open
          # position.
          #
          # The maximum number of allowed characters is 255.
      "applicationInstruction": "A String", # Optional but at least one of application_urls,
          # application_email_list or application_instruction must be
          # specified.
          #
          # Use this field to provide instructions, such as "Mail your application
          # to ...", that a candidate can follow to apply for the job.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 3,000.
      "description": "A String", # Required.
          #
          # The description of the job, which typically includes a multi-paragraph
          # description of the company and related information. Separate fields are
          # provided on the job object for responsibilities,
          # qualifications, and other job characteristics. Use of
          # these separate job fields is recommended.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 100,000.
      "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
          # provided.
          #
          # The resource name of the company listing the job, such as
          # /companies/foo. This field takes precedence over the
          # distributor-assigned company identifier, distributor_company_id.
      "incentives": "A String", # Optional.
          #
          # A description of bonus, commission, and other compensation
          # incentives associated with the job not including salary or pay.
          #
          # The maximum number of allowed characters is 10,000.
      "requisitionId": "A String", # Required.
          #
          # The requisition ID, also referred to as the posting ID, assigned by the
          # client to identify a job. This field is intended to be used by clients
          # for client identification and tracking of listings. A job is not allowed
          # to be created if there is another job with the same requisition_id,
          # company_name and language_code.
          #
          # The maximum number of allowed characters is 255.
      "qualifications": "A String", # Optional.
          #
          # A description of the qualifications required to perform the
          # job. The use of this field is recommended
          # as an alternative to using the more general description field.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 10,000.
      "visibility": "A String", # Optional.
          #
          # The visibility of the job.
          # Defaults to JobVisibility.PRIVATE if not specified.
          # Currently only JobVisibility.PRIVATE is supported.
      "expireTime": "A String", # Optional but strongly recommended for the best service
          # experience.
          #
          # The expiration timestamp of the job. After this timestamp, the
          # job is marked as expired, and it no longer appears in search results. The
          # expired job can't be deleted or listed by the DeleteJob and
          # ListJobs APIs, but it can be retrieved with the GetJob API or
          # updated with the UpdateJob API. An expired job can be updated and
          # opened again by using a future expiration timestamp. Updating an expired
          # job fails if there is another existing open job with same
          # requisition_id, company_name and language_code.
          #
          # The expired jobs are retained in our system for 90 days. However, the
          # overall expired job count cannot exceed 3 times the maximum of open jobs
          # count over the past week, otherwise jobs with earlier expire time are
          # cleaned first. Expired jobs are no longer accessible after they are cleaned
          # out.
          # The format of this field is RFC 3339 date strings. Example:
          # 2000-01-01T00:00:00.999999999Z
          # See
          # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
          #
          # A valid date range is between 1970-01-01T00:00:00.0Z and
          # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
          # time not provided.
          #
          # If this value is not provided at the time of job creation or is invalid,
          # the job posting expires after 30 days from the job's creation time. For
          # example, if the job was created on 2017/01/01 13:00AM UTC with an
          # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
          #
          # If this value is not provided but expiry_date is, expiry_date is
          # used.
          #
          # If this value is not provided on job update, it depends on the field masks
          # set by UpdateJobRequest.update_job_fields. If the field masks include
          # expiry_time, or the masks are empty meaning that every field is
          # updated, the job posting expires after 30 days from the job's last
          # update time. Otherwise the expiration date isn't updated.
      "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
          #
          # The date this job was most recently published in UTC format. The default
          # value is the time the request arrives at the server.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "applicationEmailList": [ # Optional but at least one of application_urls,
          # application_email_list or application_instruction must be
          # specified.
          #
          # Use this field to specify email address(es) to which resumes or
          # applications can be sent.
          #
          # The maximum number of allowed characters is 255.
        "A String",
      ],
      "createTime": "A String", # Output only.
          #
          # The timestamp when this job was created.
      "benefits": [ # Optional.
          #
          # The benefits included with the job.
        "A String",
      ],
      "name": "A String", # Required during job update.
          #
          # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
          # of this field in job queries and API calls is preferred over the use of
          # requisition_id since this value is unique.
      "level": "A String", # Optional.
          #
          # The experience level associated with the job, such as "Entry Level".
      "companyTitle": "A String", # Deprecated. Use company_display_name instead.
          #
          # Output only.
          #
          # The name of the company listing the job.
      "region": "A String", # Optional.
          #
          # The job Region (for example, state, country) throughout which the job
          # is available. If this field is set, a
          # LocationFilter in a search query within the job region
          # finds this job if an exact location match is not specified.
          # If this field is set, setting job locations
          # to the same location level as this field is strongly recommended.
      "promotionValue": 42, # Optional.
          #
          # A promotion value of the job, as determined by the client.
          # The value determines the sort order of the jobs returned when searching for
          # jobs using the featured jobs search call, with higher promotional values
          # being returned first and ties being resolved by relevance sort. Only the
          # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
          #
          # Default value is 0, and negative values are treated as 0.
      "referenceUrl": "A String", # Output only.
          #
          # The URL of a web page that displays job details.
      "customAttributes": { # Optional.
          #
          # A map of fields to hold both filterable and non-filterable custom job
          # attributes that are not covered by the provided structured fields.
          #
          # This field is a more general combination of the deprecated id-based
          # filterable_custom_fields and string-based
          # non_filterable_custom_fields.
          #
          # The keys of the map are strings up to 64 bytes and must match the
          # pattern: a-zA-Z*.
          #
          # At most 100 filterable and at most 100 unfilterable keys are supported.
          # For filterable `string_values`, across all keys at most 200 values are
          # allowed, with each string no more than 255 characters. For unfilterable
          # `string_values`, the maximum total size of `string_values` across all keys
          # is 50KB.
        "a_key": { # Custom attribute values that are either filterable or non-filterable.
          "filterable": True or False, # Optional.
              #
              # If the `filterable` flag is true, custom field values are searchable.
              # If false, values are not searchable.
              #
              # Default is false.
          "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
              # be specified.
              #
              # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
              # `CASE_INSENSITIVE_MATCH`) search.
              # For filterable `string_values`, a maximum total number of 200 values
              # is allowed, with each `string_value` has a byte size of no more than
              # 255B. For unfilterable `string_values`, the maximum total byte size of
              # unfilterable `string_values` is 50KB.
              #
              # Empty strings are not allowed.
            "values": [ # Required.
                #
                # String values.
              "A String",
            ],
          },
          "longValue": "A String", # Optional but at least one of string_values or long_value must
              # be specified.
              #
              # This field is used to perform number range search.
              # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
              # `long_value`, a value between Long.MIN and Long.MAX is allowed.
        },
      },
      "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
          # provided.
          #
          # A unique company identifier used by job distributors to identify an
          # employer's company entity. company_name takes precedence over
          # this field, and is the recommended field to use to identify companies.
          #
          # The maximum number of allowed characters is 255.
    },
    "processingOptions": { # Input only. # Optional.
        # 
        # Options for job processing.
        #
        # Options for job processing.
      "htmlSanitization": "A String", # Optional.
          #
          # Option for job HTML content sanitization. Applied fields are:
          #
          # * description
          # * applicationInstruction
          # * incentives
          # * qualifications
          # * responsibilities
          #
          # HTML tags in these fields may be stripped if sanitiazation is not disabled.
          #
          # Defaults to HtmlSanitization.SIMPLE_FORMATTING_ONLY.
      "disableStreetAddressResolution": True or False, # Optional.
          #
          # If set to `true`, the service does not attempt to resolve a
          # more precise address for the job.
    },
    "disableStreetAddressResolution": True or False, # Deprecated. Please use processing_options. This flag is ignored if
        # processing_options is set.
        # 
        # Optional.
        # 
        # If set to `true`, the service does not attempt to resolve a
        # more precise address for the job.
  }

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

Returns:
  An object of the form:

    { # A Job resource represents a job posting (also referred to as a "job listing"
      # or "job requisition"). A job belongs to a Company, which is the hiring
      # entity responsible for the job.
    "languageCode": "A String", # Optional.
        #
        # The language of the posting. This field is distinct from
        # any requirements for fluency that are associated with the job.
        #
        # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
        # For more information, see
        # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
        # class="external" target="_blank" }.
        #
        # If this field is unspecified and Job.description is present, detected
        # language code based on Job.description is assigned, otherwise
        # defaults to 'en_US'.
    "updateTime": "A String", # Output only.
        #
        # The timestamp when this job was last updated.
    "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
        #
        # Optional.
        #
        # A map of fields to hold non-filterable custom job attributes, similar to
        # filterable_custom_fields. These fields are distinct in that the data
        # in these fields are not indexed. Therefore, the client cannot search
        # against them, nor can the client use them to list jobs.
        #
        # The key of the map can be any valid string.
      "a_key": { # Resource that represents the custom data not captured by the standard fields.
        "values": [ # Optional.
            #
            # The values of the custom data.
          "A String",
        ],
      },
    },
    "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The end date of the job in UTC time zone. Typically this field
        # is used for contracting engagements.
        # Dates prior to 1970/1/1 and invalid date formats are ignored.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "companyDisplayName": "A String", # Output only.
        #
        # The name of the company listing the job.
    "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The start date of the job in UTC time zone. Typically this field
        # is used for contracting engagements.
        # Dates prior to 1970/1/1 and invalid date formats are ignored.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "jobLocations": [ # Output only.
        #
        # Structured locations of the job, resolved from locations.
      { # Output only.
          #
          # 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].
        },
      },
    ],
    "locations": [ # Optional but strongly recommended for the best service experience.
        #
        # Location(s) where the emploeyer is looking to hire for this job posting.
        #
        # Specifying the full street address(es) of the hiring location enables
        # better API results, especially job searches by commute time.
        #
        # At most 50 locations are allowed for best search performance. If a job has
        # more locations, it is suggested to split it into multiple jobs with unique
        # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
        # multiple jobs with the same requisition_id, company_name and
        # language_code are not allowed. If the original requisition_id must
        # be preserved, a custom field should be used for storage. It is also
        # suggested to group the locations that close to each other in the same job
        # for better search experience.
        #
        # The maximum number of allowed characters is 500.
      "A String",
    ],
    "employmentTypes": [ # Optional.
        #
        # The employment type(s) of a job, for example,
        # full time or
        # part time.
      "A String",
    ],
    "applicationUrls": [ # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this URL field to direct an applicant to a website, for example to
        # link to an online application form.
        #
        # The maximum number of allowed characters is 2,000.
      "A String",
    ],
    "educationLevels": [ # Optional.
        #
        # The desired education level for the job, such as
        # "Bachelors", "Masters", "Doctorate".
      "A String",
    ],
    "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
        #
        # Optional.
        #
        # Job compensation information.
        #
        # This field replaces compensation_info. Only
        # CompensationInfo.entries or extended_compensation_info can be set,
        # otherwise an exception is thrown.
        #
        # Describes job compensation.
      "annualizedTotalCompensationUnspecified": True or False, # Output only.
          #
          # Indicates annualized total compensation range cannot be derived, due to
          # the job's all CompensationEntry cannot be annualized.
          # See CompensationEntry for explanation on annualization and base
          # compensation entry.
      "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
          #
          # Annualized base compensation range.
          #
          # Compensation range.
        "max": { # Deprecated. See CompensationInfo. # Required.
            #
            # Maximum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
        "min": { # Deprecated. See CompensationInfo. # Required.
            #
            # Minimum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
      },
      "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
          #
          # Annualized total compensation range.
          #
          # Compensation range.
        "max": { # Deprecated. See CompensationInfo. # Required.
            #
            # Maximum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
        "min": { # Deprecated. See CompensationInfo. # Required.
            #
            # Minimum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
      },
      "currency": "A String", # Optional.
          #
          # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
          # currency code.
      "annualizedBaseCompensationUnspecified": True or False, # Output only.
          #
          # Indicates annualized base compensation range cannot be derived, due to
          # the job's base compensation entry cannot be annualized.
          # See CompensationEntry for explanation on annualization and base
          # compensation entry.
      "entries": [ # Optional.
          #
          # Job compensation information.
          #
          # At most one entry can be of type
          # ExtendedCompensationInfo.CompensationType.BASE, which is
          # referred as ** base compensation entry ** for the job.
        { # Deprecated. See CompensationInfo.
            #
            # A compensation entry that represents one component of compensation, such
            # as base pay, bonus, or other compensation type.
            #
            # Annualization: One compensation entry can be annualized if
            # - it contains valid amount or range.
            # - and its expected_units_per_year is set or can be derived.
            # Its annualized range is determined as (amount or range) times
            # expected_units_per_year.
          "description": "A String", # Optional.
              #
              # Compensation description.
          "range": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Compensation range.
              #
              # Compensation range.
            "max": { # Deprecated. See CompensationInfo. # Required.
                #
                # Maximum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "min": { # Deprecated. See CompensationInfo. # Required.
                #
                # Minimum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
          },
          "unspecified": True or False, # Optional.
              #
              # Indicates compensation amount and range are unset.
          "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Expected number of units paid each year. If not specified, when
              # Job.employment_types is FULLTIME, a default value is inferred
              # based on unit. Default values:
              # - HOURLY: 2080
              # - DAILY: 260
              # - WEEKLY: 52
              # - MONTHLY: 12
              # - ANNUAL: 1
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "amount": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Monetary amount.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "type": "A String", # Required.
              #
              # Compensation type.
          "unit": "A String", # Optional.
              #
              # Frequency of the specified amount.
              #
              # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
        },
      ],
    },
    "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
        #
        # Optional.
        #
        # A map of fields to hold filterable custom job attributes not captured by
        # the standard fields such as job_title, company_name, or
        # level. These custom fields store arbitrary
        # string values, and can be used for purposes not covered by
        # the structured fields. For the best search experience, use of the
        # structured rather than custom fields is recommended.
        #
        # Data stored in these custom fields fields are indexed and
        # searched against by keyword searches (see
        # SearchJobsRequest.custom_field_filters][]).
        #
        # The map key must be a number between 1-20. If an invalid key is
        # provided on job create or update, an error is returned.
      "a_key": { # Resource that represents the custom data not captured by the standard fields.
        "values": [ # Optional.
            #
            # The values of the custom data.
          "A String",
        ],
      },
    },
    "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
        #
        # Optional but strongly recommended to be provided for the best service
        # experience.
        #
        # The expiration date of the job in UTC time. After 12 am on this date, the
        # job is marked as expired, and it no longer appears in search results.
        # The expired job can't be deleted or listed by the DeleteJob and
        # ListJobs APIs, but it can be retrieved with the GetJob API or
        # updated with the UpdateJob API. An expired job can be updated and
        # opened again by using a future expiration date. It can also remain expired.
        # Updating an expired job to be open fails if there is another existing open
        # job with same requisition_id, company_name and language_code.
        #
        # The expired jobs are retained in our system for 90 days. However, the
        # overall expired job count cannot exceed 3 times the maximum of open jobs
        # count over the past week, otherwise jobs with earlier expire time are
        # removed first. Expired jobs are no longer accessible after they are cleaned
        # out.
        #
        # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
        # ignored and treated as expiry date not provided.
        #
        # If this value is not provided on job creation or is invalid, the job
        # posting expires after 30 days from the job's creation time. For example, if
        # the job was created on 2017/01/01 13:00AM UTC with an unspecified
        # expiration date, the job expires after 2017/01/31 13:00AM UTC.
        #
        # If this value is not provided on job update, it depends on the field masks
        # set by UpdateJobRequest.update_job_fields. If the field masks include
        # expiry_date, or the masks are empty meaning that every field is
        # updated, the job expires after 30 days from the job's last update time.
        # Otherwise the expiration date isn't updated.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "responsibilities": "A String", # Optional.
        #
        # A description of job responsibilities. The use of this field is
        # recommended as an alternative to using the more general description
        # field.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 10,000.
    "compensationInfo": { # Job compensation details. # Optional.
        #
        # Job compensation information.
      "annualizedBaseCompensationRange": { # Compensation range. # Output only.
          #
          # Annualized base compensation range. Computed as
          # base compensation entry's CompensationEntry.compensation times
          # CompensationEntry.expected_units_per_year.
          #
          # See CompensationEntry for explanation on compensation annualization.
        "max": { # Represents an amount of money with its currency type. # Optional.
            #
            # The maximum amount of compensation. If left empty, the value is set
            # to a maximal compensation value and the currency code is set to
            # match the currency code of
            # min_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "min": { # Represents an amount of money with its currency type. # Optional.
            #
            # The minimum amount of compensation. If left empty, the value is set
            # to zero and the currency code is set to match the
            # currency code of max_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
      },
      "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # A lower bound on a range for compensation or pay for the job.
          # The currency type is specified in compensation_amount.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "annualizedTotalCompensationRange": { # Compensation range. # Output only.
          #
          # Annualized total compensation range. Computed as
          # all compensation entries' CompensationEntry.compensation times
          # CompensationEntry.expected_units_per_year.
          #
          # See CompensationEntry for explanation on compensation annualization.
        "max": { # Represents an amount of money with its currency type. # Optional.
            #
            # The maximum amount of compensation. If left empty, the value is set
            # to a maximal compensation value and the currency code is set to
            # match the currency code of
            # min_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "min": { # Represents an amount of money with its currency type. # Optional.
            #
            # The minimum amount of compensation. If left empty, the value is set
            # to zero and the currency code is set to match the
            # currency code of max_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
      },
      "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # An upper bound on a range for compensation or pay for the job.
          # The currency type is specified in compensation_amount.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # The amount of compensation or pay for the job.
          # As an alternative, compensation_amount_min and
          # compensation_amount_max may be used to define a range of
          # compensation.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "entries": [ # Optional.
          #
          # Job compensation information.
          #
          # At most one entry can be of type
          # CompensationInfo.CompensationType.BASE, which is
          # referred as ** base compensation entry ** for the job.
        { # A compensation entry that represents one component of compensation, such
            # as base pay, bonus, or other compensation type.
            #
            # Annualization: One compensation entry can be annualized if
            # - it contains valid amount or range.
            # - and its expected_units_per_year is set or can be derived.
            # Its annualized range is determined as (amount or range) times
            # expected_units_per_year.
          "description": "A String", # Optional.
              #
              # Compensation description.  For example, could
              # indicate equity terms or provide additional context to an estimated
              # bonus.
          "range": { # Compensation range. # Optional.
              #
              # Compensation range.
            "max": { # Represents an amount of money with its currency type. # Optional.
                #
                # The maximum amount of compensation. If left empty, the value is set
                # to a maximal compensation value and the currency code is set to
                # match the currency code of
                # min_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "min": { # Represents an amount of money with its currency type. # Optional.
                #
                # The minimum amount of compensation. If left empty, the value is set
                # to zero and the currency code is set to match the
                # currency code of max_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
          },
          "expectedUnitsPerYear": 3.14, # Optional.
              #
              # Expected number of units paid each year. If not specified, when
              # Job.employment_types is FULLTIME, a default value is inferred
              # based on unit. Default values:
              # - HOURLY: 2080
              # - DAILY: 260
              # - WEEKLY: 52
              # - MONTHLY: 12
              # - ANNUAL: 1
          "amount": { # Represents an amount of money with its currency type. # Optional.
              #
              # Compensation amount.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "type": "A String", # Required.
              #
              # Compensation type.
          "unit": "A String", # Optional.
              #
              # Frequency of the specified amount.
              #
              # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
        },
      ],
      "type": "A String", # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # Type of job compensation.
    },
    "jobTitle": "A String", # Required.
        #
        # The title of the job, such as "Software Engineer"
        #
        # The maximum number of allowed characters is 500.
    "department": "A String", # Optional.
        #
        # The department or functional area within the company with the open
        # position.
        #
        # The maximum number of allowed characters is 255.
    "applicationInstruction": "A String", # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this field to provide instructions, such as "Mail your application
        # to ...", that a candidate can follow to apply for the job.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 3,000.
    "description": "A String", # Required.
        #
        # The description of the job, which typically includes a multi-paragraph
        # description of the company and related information. Separate fields are
        # provided on the job object for responsibilities,
        # qualifications, and other job characteristics. Use of
        # these separate job fields is recommended.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 100,000.
    "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
        # provided.
        #
        # The resource name of the company listing the job, such as
        # /companies/foo. This field takes precedence over the
        # distributor-assigned company identifier, distributor_company_id.
    "incentives": "A String", # Optional.
        #
        # A description of bonus, commission, and other compensation
        # incentives associated with the job not including salary or pay.
        #
        # The maximum number of allowed characters is 10,000.
    "requisitionId": "A String", # Required.
        #
        # The requisition ID, also referred to as the posting ID, assigned by the
        # client to identify a job. This field is intended to be used by clients
        # for client identification and tracking of listings. A job is not allowed
        # to be created if there is another job with the same requisition_id,
        # company_name and language_code.
        #
        # The maximum number of allowed characters is 255.
    "qualifications": "A String", # Optional.
        #
        # A description of the qualifications required to perform the
        # job. The use of this field is recommended
        # as an alternative to using the more general description field.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 10,000.
    "visibility": "A String", # Optional.
        #
        # The visibility of the job.
        # Defaults to JobVisibility.PRIVATE if not specified.
        # Currently only JobVisibility.PRIVATE is supported.
    "expireTime": "A String", # Optional but strongly recommended for the best service
        # experience.
        #
        # The expiration timestamp of the job. After this timestamp, the
        # job is marked as expired, and it no longer appears in search results. The
        # expired job can't be deleted or listed by the DeleteJob and
        # ListJobs APIs, but it can be retrieved with the GetJob API or
        # updated with the UpdateJob API. An expired job can be updated and
        # opened again by using a future expiration timestamp. Updating an expired
        # job fails if there is another existing open job with same
        # requisition_id, company_name and language_code.
        #
        # The expired jobs are retained in our system for 90 days. However, the
        # overall expired job count cannot exceed 3 times the maximum of open jobs
        # count over the past week, otherwise jobs with earlier expire time are
        # cleaned first. Expired jobs are no longer accessible after they are cleaned
        # out.
        # The format of this field is RFC 3339 date strings. Example:
        # 2000-01-01T00:00:00.999999999Z
        # See
        # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
        #
        # A valid date range is between 1970-01-01T00:00:00.0Z and
        # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
        # time not provided.
        #
        # If this value is not provided at the time of job creation or is invalid,
        # the job posting expires after 30 days from the job's creation time. For
        # example, if the job was created on 2017/01/01 13:00AM UTC with an
        # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
        #
        # If this value is not provided but expiry_date is, expiry_date is
        # used.
        #
        # If this value is not provided on job update, it depends on the field masks
        # set by UpdateJobRequest.update_job_fields. If the field masks include
        # expiry_time, or the masks are empty meaning that every field is
        # updated, the job posting expires after 30 days from the job's last
        # update time. Otherwise the expiration date isn't updated.
    "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The date this job was most recently published in UTC format. The default
        # value is the time the request arrives at the server.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "applicationEmailList": [ # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this field to specify email address(es) to which resumes or
        # applications can be sent.
        #
        # The maximum number of allowed characters is 255.
      "A String",
    ],
    "createTime": "A String", # Output only.
        #
        # The timestamp when this job was created.
    "benefits": [ # Optional.
        #
        # The benefits included with the job.
      "A String",
    ],
    "name": "A String", # Required during job update.
        #
        # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
        # of this field in job queries and API calls is preferred over the use of
        # requisition_id since this value is unique.
    "level": "A String", # Optional.
        #
        # The experience level associated with the job, such as "Entry Level".
    "companyTitle": "A String", # Deprecated. Use company_display_name instead.
        #
        # Output only.
        #
        # The name of the company listing the job.
    "region": "A String", # Optional.
        #
        # The job Region (for example, state, country) throughout which the job
        # is available. If this field is set, a
        # LocationFilter in a search query within the job region
        # finds this job if an exact location match is not specified.
        # If this field is set, setting job locations
        # to the same location level as this field is strongly recommended.
    "promotionValue": 42, # Optional.
        #
        # A promotion value of the job, as determined by the client.
        # The value determines the sort order of the jobs returned when searching for
        # jobs using the featured jobs search call, with higher promotional values
        # being returned first and ties being resolved by relevance sort. Only the
        # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
        #
        # Default value is 0, and negative values are treated as 0.
    "referenceUrl": "A String", # Output only.
        #
        # The URL of a web page that displays job details.
    "customAttributes": { # Optional.
        #
        # A map of fields to hold both filterable and non-filterable custom job
        # attributes that are not covered by the provided structured fields.
        #
        # This field is a more general combination of the deprecated id-based
        # filterable_custom_fields and string-based
        # non_filterable_custom_fields.
        #
        # The keys of the map are strings up to 64 bytes and must match the
        # pattern: a-zA-Z*.
        #
        # At most 100 filterable and at most 100 unfilterable keys are supported.
        # For filterable `string_values`, across all keys at most 200 values are
        # allowed, with each string no more than 255 characters. For unfilterable
        # `string_values`, the maximum total size of `string_values` across all keys
        # is 50KB.
      "a_key": { # Custom attribute values that are either filterable or non-filterable.
        "filterable": True or False, # Optional.
            #
            # If the `filterable` flag is true, custom field values are searchable.
            # If false, values are not searchable.
            #
            # Default is false.
        "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
            # be specified.
            #
            # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
            # `CASE_INSENSITIVE_MATCH`) search.
            # For filterable `string_values`, a maximum total number of 200 values
            # is allowed, with each `string_value` has a byte size of no more than
            # 255B. For unfilterable `string_values`, the maximum total byte size of
            # unfilterable `string_values` is 50KB.
            #
            # Empty strings are not allowed.
          "values": [ # Required.
              #
              # String values.
            "A String",
          ],
        },
        "longValue": "A String", # Optional but at least one of string_values or long_value must
            # be specified.
            #
            # This field is used to perform number range search.
            # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
            # `long_value`, a value between Long.MIN and Long.MAX is allowed.
      },
    },
    "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
        # provided.
        #
        # A unique company identifier used by job distributors to identify an
        # employer's company entity. company_name takes precedence over
        # this field, and is the recommended field to use to identify companies.
        #
        # The maximum number of allowed characters is 255.
  }</pre>
</div>

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

Typically, the job becomes unsearchable within 10 seconds, but it may take
up to 5 minutes.

Args:
  name: string, Required.

The resource name of the job to be deleted, such as "jobs/11111111". (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  disableFastProcess: boolean, Deprecated. This field is not working anymore.

Optional.

If set to true, this call waits for all processing steps to complete
before the job is cleaned up. Otherwise, the call returns while some
steps are still taking place asynchronously, hence faster.

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="deleteByFilter">deleteByFilter(body, x__xgafv=None)</code>
  <pre>Deprecated. Use BatchDeleteJobs instead.

Deletes the specified job by filter. You can specify whether to
synchronously wait for validation, indexing, and general processing to be
completed before the response is returned.

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

{ # Deprecated. Use BatchDeleteJobsRequest instead.
      # 
      # Input only.
      # 
      # Delete job by filter request.
      # 
      # The job typically becomes unsearchable within 10 seconds, but it may take
      # up to 5 minutes.
    "filter": { # Deprecated. Use BatchDeleteJobsRequest instead. # Required.
        # 
        # Restrictions on the scope of the delete request.
        #
        # Input only.
        #
        # Filter for jobs to be deleted.
      "requisitionId": "A String", # Required.
          #
          # The requisition ID (or posting ID) assigned by the client to identify a
          # job. This is intended for client identification and tracking of
          # listings.
          # name takes precedence over this field
          # The maximum number of allowed characters is 225.
    },
    "disableFastProcess": True or False, # Optional.
        # 
        # If set to true, this call waits for all processing steps to complete
        # before the job is cleaned up. Otherwise, the call returns while some
        # steps are still taking place asynchronously, hence faster.
  }

  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 job, whose status is OPEN or recently EXPIRED
within the last 90 days.

Args:
  name: string, Required.

The resource name of the job to retrieve, such as "jobs/11111111". (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A Job resource represents a job posting (also referred to as a "job listing"
      # or "job requisition"). A job belongs to a Company, which is the hiring
      # entity responsible for the job.
    "languageCode": "A String", # Optional.
        #
        # The language of the posting. This field is distinct from
        # any requirements for fluency that are associated with the job.
        #
        # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
        # For more information, see
        # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
        # class="external" target="_blank" }.
        #
        # If this field is unspecified and Job.description is present, detected
        # language code based on Job.description is assigned, otherwise
        # defaults to 'en_US'.
    "updateTime": "A String", # Output only.
        #
        # The timestamp when this job was last updated.
    "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
        #
        # Optional.
        #
        # A map of fields to hold non-filterable custom job attributes, similar to
        # filterable_custom_fields. These fields are distinct in that the data
        # in these fields are not indexed. Therefore, the client cannot search
        # against them, nor can the client use them to list jobs.
        #
        # The key of the map can be any valid string.
      "a_key": { # Resource that represents the custom data not captured by the standard fields.
        "values": [ # Optional.
            #
            # The values of the custom data.
          "A String",
        ],
      },
    },
    "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The end date of the job in UTC time zone. Typically this field
        # is used for contracting engagements.
        # Dates prior to 1970/1/1 and invalid date formats are ignored.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "companyDisplayName": "A String", # Output only.
        #
        # The name of the company listing the job.
    "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The start date of the job in UTC time zone. Typically this field
        # is used for contracting engagements.
        # Dates prior to 1970/1/1 and invalid date formats are ignored.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "jobLocations": [ # Output only.
        #
        # Structured locations of the job, resolved from locations.
      { # Output only.
          #
          # 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].
        },
      },
    ],
    "locations": [ # Optional but strongly recommended for the best service experience.
        #
        # Location(s) where the emploeyer is looking to hire for this job posting.
        #
        # Specifying the full street address(es) of the hiring location enables
        # better API results, especially job searches by commute time.
        #
        # At most 50 locations are allowed for best search performance. If a job has
        # more locations, it is suggested to split it into multiple jobs with unique
        # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
        # multiple jobs with the same requisition_id, company_name and
        # language_code are not allowed. If the original requisition_id must
        # be preserved, a custom field should be used for storage. It is also
        # suggested to group the locations that close to each other in the same job
        # for better search experience.
        #
        # The maximum number of allowed characters is 500.
      "A String",
    ],
    "employmentTypes": [ # Optional.
        #
        # The employment type(s) of a job, for example,
        # full time or
        # part time.
      "A String",
    ],
    "applicationUrls": [ # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this URL field to direct an applicant to a website, for example to
        # link to an online application form.
        #
        # The maximum number of allowed characters is 2,000.
      "A String",
    ],
    "educationLevels": [ # Optional.
        #
        # The desired education level for the job, such as
        # "Bachelors", "Masters", "Doctorate".
      "A String",
    ],
    "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
        #
        # Optional.
        #
        # Job compensation information.
        #
        # This field replaces compensation_info. Only
        # CompensationInfo.entries or extended_compensation_info can be set,
        # otherwise an exception is thrown.
        #
        # Describes job compensation.
      "annualizedTotalCompensationUnspecified": True or False, # Output only.
          #
          # Indicates annualized total compensation range cannot be derived, due to
          # the job's all CompensationEntry cannot be annualized.
          # See CompensationEntry for explanation on annualization and base
          # compensation entry.
      "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
          #
          # Annualized base compensation range.
          #
          # Compensation range.
        "max": { # Deprecated. See CompensationInfo. # Required.
            #
            # Maximum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
        "min": { # Deprecated. See CompensationInfo. # Required.
            #
            # Minimum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
      },
      "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
          #
          # Annualized total compensation range.
          #
          # Compensation range.
        "max": { # Deprecated. See CompensationInfo. # Required.
            #
            # Maximum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
        "min": { # Deprecated. See CompensationInfo. # Required.
            #
            # Minimum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
      },
      "currency": "A String", # Optional.
          #
          # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
          # currency code.
      "annualizedBaseCompensationUnspecified": True or False, # Output only.
          #
          # Indicates annualized base compensation range cannot be derived, due to
          # the job's base compensation entry cannot be annualized.
          # See CompensationEntry for explanation on annualization and base
          # compensation entry.
      "entries": [ # Optional.
          #
          # Job compensation information.
          #
          # At most one entry can be of type
          # ExtendedCompensationInfo.CompensationType.BASE, which is
          # referred as ** base compensation entry ** for the job.
        { # Deprecated. See CompensationInfo.
            #
            # A compensation entry that represents one component of compensation, such
            # as base pay, bonus, or other compensation type.
            #
            # Annualization: One compensation entry can be annualized if
            # - it contains valid amount or range.
            # - and its expected_units_per_year is set or can be derived.
            # Its annualized range is determined as (amount or range) times
            # expected_units_per_year.
          "description": "A String", # Optional.
              #
              # Compensation description.
          "range": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Compensation range.
              #
              # Compensation range.
            "max": { # Deprecated. See CompensationInfo. # Required.
                #
                # Maximum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "min": { # Deprecated. See CompensationInfo. # Required.
                #
                # Minimum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
          },
          "unspecified": True or False, # Optional.
              #
              # Indicates compensation amount and range are unset.
          "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Expected number of units paid each year. If not specified, when
              # Job.employment_types is FULLTIME, a default value is inferred
              # based on unit. Default values:
              # - HOURLY: 2080
              # - DAILY: 260
              # - WEEKLY: 52
              # - MONTHLY: 12
              # - ANNUAL: 1
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "amount": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Monetary amount.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "type": "A String", # Required.
              #
              # Compensation type.
          "unit": "A String", # Optional.
              #
              # Frequency of the specified amount.
              #
              # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
        },
      ],
    },
    "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
        #
        # Optional.
        #
        # A map of fields to hold filterable custom job attributes not captured by
        # the standard fields such as job_title, company_name, or
        # level. These custom fields store arbitrary
        # string values, and can be used for purposes not covered by
        # the structured fields. For the best search experience, use of the
        # structured rather than custom fields is recommended.
        #
        # Data stored in these custom fields fields are indexed and
        # searched against by keyword searches (see
        # SearchJobsRequest.custom_field_filters][]).
        #
        # The map key must be a number between 1-20. If an invalid key is
        # provided on job create or update, an error is returned.
      "a_key": { # Resource that represents the custom data not captured by the standard fields.
        "values": [ # Optional.
            #
            # The values of the custom data.
          "A String",
        ],
      },
    },
    "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
        #
        # Optional but strongly recommended to be provided for the best service
        # experience.
        #
        # The expiration date of the job in UTC time. After 12 am on this date, the
        # job is marked as expired, and it no longer appears in search results.
        # The expired job can't be deleted or listed by the DeleteJob and
        # ListJobs APIs, but it can be retrieved with the GetJob API or
        # updated with the UpdateJob API. An expired job can be updated and
        # opened again by using a future expiration date. It can also remain expired.
        # Updating an expired job to be open fails if there is another existing open
        # job with same requisition_id, company_name and language_code.
        #
        # The expired jobs are retained in our system for 90 days. However, the
        # overall expired job count cannot exceed 3 times the maximum of open jobs
        # count over the past week, otherwise jobs with earlier expire time are
        # removed first. Expired jobs are no longer accessible after they are cleaned
        # out.
        #
        # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
        # ignored and treated as expiry date not provided.
        #
        # If this value is not provided on job creation or is invalid, the job
        # posting expires after 30 days from the job's creation time. For example, if
        # the job was created on 2017/01/01 13:00AM UTC with an unspecified
        # expiration date, the job expires after 2017/01/31 13:00AM UTC.
        #
        # If this value is not provided on job update, it depends on the field masks
        # set by UpdateJobRequest.update_job_fields. If the field masks include
        # expiry_date, or the masks are empty meaning that every field is
        # updated, the job expires after 30 days from the job's last update time.
        # Otherwise the expiration date isn't updated.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "responsibilities": "A String", # Optional.
        #
        # A description of job responsibilities. The use of this field is
        # recommended as an alternative to using the more general description
        # field.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 10,000.
    "compensationInfo": { # Job compensation details. # Optional.
        #
        # Job compensation information.
      "annualizedBaseCompensationRange": { # Compensation range. # Output only.
          #
          # Annualized base compensation range. Computed as
          # base compensation entry's CompensationEntry.compensation times
          # CompensationEntry.expected_units_per_year.
          #
          # See CompensationEntry for explanation on compensation annualization.
        "max": { # Represents an amount of money with its currency type. # Optional.
            #
            # The maximum amount of compensation. If left empty, the value is set
            # to a maximal compensation value and the currency code is set to
            # match the currency code of
            # min_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "min": { # Represents an amount of money with its currency type. # Optional.
            #
            # The minimum amount of compensation. If left empty, the value is set
            # to zero and the currency code is set to match the
            # currency code of max_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
      },
      "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # A lower bound on a range for compensation or pay for the job.
          # The currency type is specified in compensation_amount.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "annualizedTotalCompensationRange": { # Compensation range. # Output only.
          #
          # Annualized total compensation range. Computed as
          # all compensation entries' CompensationEntry.compensation times
          # CompensationEntry.expected_units_per_year.
          #
          # See CompensationEntry for explanation on compensation annualization.
        "max": { # Represents an amount of money with its currency type. # Optional.
            #
            # The maximum amount of compensation. If left empty, the value is set
            # to a maximal compensation value and the currency code is set to
            # match the currency code of
            # min_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "min": { # Represents an amount of money with its currency type. # Optional.
            #
            # The minimum amount of compensation. If left empty, the value is set
            # to zero and the currency code is set to match the
            # currency code of max_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
      },
      "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # An upper bound on a range for compensation or pay for the job.
          # The currency type is specified in compensation_amount.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # The amount of compensation or pay for the job.
          # As an alternative, compensation_amount_min and
          # compensation_amount_max may be used to define a range of
          # compensation.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "entries": [ # Optional.
          #
          # Job compensation information.
          #
          # At most one entry can be of type
          # CompensationInfo.CompensationType.BASE, which is
          # referred as ** base compensation entry ** for the job.
        { # A compensation entry that represents one component of compensation, such
            # as base pay, bonus, or other compensation type.
            #
            # Annualization: One compensation entry can be annualized if
            # - it contains valid amount or range.
            # - and its expected_units_per_year is set or can be derived.
            # Its annualized range is determined as (amount or range) times
            # expected_units_per_year.
          "description": "A String", # Optional.
              #
              # Compensation description.  For example, could
              # indicate equity terms or provide additional context to an estimated
              # bonus.
          "range": { # Compensation range. # Optional.
              #
              # Compensation range.
            "max": { # Represents an amount of money with its currency type. # Optional.
                #
                # The maximum amount of compensation. If left empty, the value is set
                # to a maximal compensation value and the currency code is set to
                # match the currency code of
                # min_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "min": { # Represents an amount of money with its currency type. # Optional.
                #
                # The minimum amount of compensation. If left empty, the value is set
                # to zero and the currency code is set to match the
                # currency code of max_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
          },
          "expectedUnitsPerYear": 3.14, # Optional.
              #
              # Expected number of units paid each year. If not specified, when
              # Job.employment_types is FULLTIME, a default value is inferred
              # based on unit. Default values:
              # - HOURLY: 2080
              # - DAILY: 260
              # - WEEKLY: 52
              # - MONTHLY: 12
              # - ANNUAL: 1
          "amount": { # Represents an amount of money with its currency type. # Optional.
              #
              # Compensation amount.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "type": "A String", # Required.
              #
              # Compensation type.
          "unit": "A String", # Optional.
              #
              # Frequency of the specified amount.
              #
              # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
        },
      ],
      "type": "A String", # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # Type of job compensation.
    },
    "jobTitle": "A String", # Required.
        #
        # The title of the job, such as "Software Engineer"
        #
        # The maximum number of allowed characters is 500.
    "department": "A String", # Optional.
        #
        # The department or functional area within the company with the open
        # position.
        #
        # The maximum number of allowed characters is 255.
    "applicationInstruction": "A String", # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this field to provide instructions, such as "Mail your application
        # to ...", that a candidate can follow to apply for the job.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 3,000.
    "description": "A String", # Required.
        #
        # The description of the job, which typically includes a multi-paragraph
        # description of the company and related information. Separate fields are
        # provided on the job object for responsibilities,
        # qualifications, and other job characteristics. Use of
        # these separate job fields is recommended.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 100,000.
    "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
        # provided.
        #
        # The resource name of the company listing the job, such as
        # /companies/foo. This field takes precedence over the
        # distributor-assigned company identifier, distributor_company_id.
    "incentives": "A String", # Optional.
        #
        # A description of bonus, commission, and other compensation
        # incentives associated with the job not including salary or pay.
        #
        # The maximum number of allowed characters is 10,000.
    "requisitionId": "A String", # Required.
        #
        # The requisition ID, also referred to as the posting ID, assigned by the
        # client to identify a job. This field is intended to be used by clients
        # for client identification and tracking of listings. A job is not allowed
        # to be created if there is another job with the same requisition_id,
        # company_name and language_code.
        #
        # The maximum number of allowed characters is 255.
    "qualifications": "A String", # Optional.
        #
        # A description of the qualifications required to perform the
        # job. The use of this field is recommended
        # as an alternative to using the more general description field.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 10,000.
    "visibility": "A String", # Optional.
        #
        # The visibility of the job.
        # Defaults to JobVisibility.PRIVATE if not specified.
        # Currently only JobVisibility.PRIVATE is supported.
    "expireTime": "A String", # Optional but strongly recommended for the best service
        # experience.
        #
        # The expiration timestamp of the job. After this timestamp, the
        # job is marked as expired, and it no longer appears in search results. The
        # expired job can't be deleted or listed by the DeleteJob and
        # ListJobs APIs, but it can be retrieved with the GetJob API or
        # updated with the UpdateJob API. An expired job can be updated and
        # opened again by using a future expiration timestamp. Updating an expired
        # job fails if there is another existing open job with same
        # requisition_id, company_name and language_code.
        #
        # The expired jobs are retained in our system for 90 days. However, the
        # overall expired job count cannot exceed 3 times the maximum of open jobs
        # count over the past week, otherwise jobs with earlier expire time are
        # cleaned first. Expired jobs are no longer accessible after they are cleaned
        # out.
        # The format of this field is RFC 3339 date strings. Example:
        # 2000-01-01T00:00:00.999999999Z
        # See
        # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
        #
        # A valid date range is between 1970-01-01T00:00:00.0Z and
        # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
        # time not provided.
        #
        # If this value is not provided at the time of job creation or is invalid,
        # the job posting expires after 30 days from the job's creation time. For
        # example, if the job was created on 2017/01/01 13:00AM UTC with an
        # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
        #
        # If this value is not provided but expiry_date is, expiry_date is
        # used.
        #
        # If this value is not provided on job update, it depends on the field masks
        # set by UpdateJobRequest.update_job_fields. If the field masks include
        # expiry_time, or the masks are empty meaning that every field is
        # updated, the job posting expires after 30 days from the job's last
        # update time. Otherwise the expiration date isn't updated.
    "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The date this job was most recently published in UTC format. The default
        # value is the time the request arrives at the server.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "applicationEmailList": [ # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this field to specify email address(es) to which resumes or
        # applications can be sent.
        #
        # The maximum number of allowed characters is 255.
      "A String",
    ],
    "createTime": "A String", # Output only.
        #
        # The timestamp when this job was created.
    "benefits": [ # Optional.
        #
        # The benefits included with the job.
      "A String",
    ],
    "name": "A String", # Required during job update.
        #
        # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
        # of this field in job queries and API calls is preferred over the use of
        # requisition_id since this value is unique.
    "level": "A String", # Optional.
        #
        # The experience level associated with the job, such as "Entry Level".
    "companyTitle": "A String", # Deprecated. Use company_display_name instead.
        #
        # Output only.
        #
        # The name of the company listing the job.
    "region": "A String", # Optional.
        #
        # The job Region (for example, state, country) throughout which the job
        # is available. If this field is set, a
        # LocationFilter in a search query within the job region
        # finds this job if an exact location match is not specified.
        # If this field is set, setting job locations
        # to the same location level as this field is strongly recommended.
    "promotionValue": 42, # Optional.
        #
        # A promotion value of the job, as determined by the client.
        # The value determines the sort order of the jobs returned when searching for
        # jobs using the featured jobs search call, with higher promotional values
        # being returned first and ties being resolved by relevance sort. Only the
        # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
        #
        # Default value is 0, and negative values are treated as 0.
    "referenceUrl": "A String", # Output only.
        #
        # The URL of a web page that displays job details.
    "customAttributes": { # Optional.
        #
        # A map of fields to hold both filterable and non-filterable custom job
        # attributes that are not covered by the provided structured fields.
        #
        # This field is a more general combination of the deprecated id-based
        # filterable_custom_fields and string-based
        # non_filterable_custom_fields.
        #
        # The keys of the map are strings up to 64 bytes and must match the
        # pattern: a-zA-Z*.
        #
        # At most 100 filterable and at most 100 unfilterable keys are supported.
        # For filterable `string_values`, across all keys at most 200 values are
        # allowed, with each string no more than 255 characters. For unfilterable
        # `string_values`, the maximum total size of `string_values` across all keys
        # is 50KB.
      "a_key": { # Custom attribute values that are either filterable or non-filterable.
        "filterable": True or False, # Optional.
            #
            # If the `filterable` flag is true, custom field values are searchable.
            # If false, values are not searchable.
            #
            # Default is false.
        "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
            # be specified.
            #
            # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
            # `CASE_INSENSITIVE_MATCH`) search.
            # For filterable `string_values`, a maximum total number of 200 values
            # is allowed, with each `string_value` has a byte size of no more than
            # 255B. For unfilterable `string_values`, the maximum total byte size of
            # unfilterable `string_values` is 50KB.
            #
            # Empty strings are not allowed.
          "values": [ # Required.
              #
              # String values.
            "A String",
          ],
        },
        "longValue": "A String", # Optional but at least one of string_values or long_value must
            # be specified.
            #
            # This field is used to perform number range search.
            # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
            # `long_value`, a value between Long.MIN and Long.MAX is allowed.
      },
    },
    "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
        # provided.
        #
        # A unique company identifier used by job distributors to identify an
        # employer's company entity. company_name takes precedence over
        # this field, and is the recommended field to use to identify companies.
        #
        # The maximum number of allowed characters is 255.
  }</pre>
</div>

<div class="method">
    <code class="details" id="histogram">histogram(body, x__xgafv=None)</code>
  <pre>Deprecated. Use SearchJobsRequest.histogram_facets instead to make
a single call with both search and histogram.

Retrieves a histogram for the given
GetHistogramRequest. This call provides a structured
count of jobs that match against the search query, grouped by specified
facets.

This call constrains the visibility of jobs
present in the database, and only counts jobs the caller has
permission to search against.

For example, use this call to generate the
number of jobs in the U.S. by state.

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

{ # Deprecated. Use SearchJobsRequest.histogram_facets instead to make
      # a single call with both search and histogram.
      # 
      # Input only.
      # 
      # A request for the `GetHistogram` method.
    "query": { # Input only. # Optional.
        # 
        # Query used to search against jobs, such as keyword, location filters, etc.
        #
        # The query required to perform a search query or histogram.
      "disableSpellCheck": True or False, # Optional.
          #
          # This flag controls the spell-check feature. If false, the
          # service attempts to correct a misspelled query,
          # for example, "enginee" is corrected to "engineer".
          #
          # Defaults to false: a spell check is performed.
      "customAttributeFilter": "A String", # Optional.
          #
          # This filter specifies a structured syntax to match against the
          # Job.custom_attributes marked as `filterable`.
          #
          # The syntax for this expression is a subset of Google SQL syntax.
          #
          # Supported operators are: =, !=, <, <=, >, >= where the left of the operator
          # is a custom field key and the right of the operator is a number or string
          # (surrounded by quotes) value.
          #
          # Supported functions are LOWER(<field_name>) to
          # perform case insensitive match and EMPTY(<field_name>) to filter on the
          # existence of a key.
          #
          # Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
          # nesting (for example, "((A AND B AND C) OR NOT D) AND E"), a maximum of 50
          # comparisons/functions are allowed in the expression. The expression
          # must be < 2000 characters in length.
          #
          # Sample Query:
          # (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1)) AND key2 > 100
      "publishDateRange": "A String", # Optional.
          #
          # Jobs published within a range specified by this filter are searched
          # against, for example, DateRange.PAST_MONTH. If a value isn't
          # specified, all open jobs are searched against regardless of their
          # published date.
      "commuteFilter": { # Input only. # Optional.
          #
          #  Allows filtering jobs by commute time with different travel methods (for
          #  example, driving or public transit). Note: This only works with COMMUTE
          #  MODE. When specified, [JobQuery.location_filters] is
          #  ignored.
          #
          #  Currently we don't support sorting by commute time.
          #
          # Parameters needed for commute search.
        "departureHourLocal": 42, # Optional.
            #
            # The departure hour to use to calculate traffic impact. Accepts an
            # integer between 0 and 23, representing the hour in the time zone of the
            # start_location. Must not be present if road_traffic is specified.
        "roadTraffic": "A String", # Optional.
            #
            # Specifies the traffic density to use when calculating commute time.
            # Must not be present if departure_hour_local is specified.
        "allowNonStreetLevelAddress": True or False, # Optional.
            # If `true`, jobs without street level addresses may also be returned.
            # For city level addresses, the city center is used. For state and coarser
            # level addresses, text matching is used.
            # If this field is set to `false` or is not specified, only jobs that include
            # street level addresses will be returned by commute search.
        "travelTime": "A String", # Required.
            #
            # The maximum travel time in seconds. The maximum allowed value is `3600s`
            # (one hour). Format is `123s`.
        "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
            #
            # The latitude and longitude of the location from which to calculate the
            # commute time.
            # 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].
        },
        "method": "A String", # Required.
            #
            # The method of transportation for which to calculate the commute time.
      },
      "employmentTypes": [ # Optional.
          #
          # The employment type filter specifies the employment type of jobs to
          # search against, such as EmploymentType.FULL_TIME.
          #
          # If a value is not specified, jobs in the search results include any
          # employment type.
          #
          # If multiple values are specified, jobs in the search results include
          # any of the specified employment types.
        "A String",
      ],
      "categories": [ # Optional.
          #
          # The category filter specifies the categories of jobs to search against.
          # See Category for more information.
          #
          # If a value is not specified, jobs from any category are searched against.
          #
          # If multiple values are specified, jobs from any of the specified
          # categories are searched against.
        "A String",
      ],
      "query": "A String", # Optional.
          #
          # The query string that matches against the job title, description, and
          # location fields.
          #
          # The maximum query size is 255 bytes.
      "languageCodes": [ # Optional.
          #
          # This filter specifies the locale of jobs to search against,
          # for example, "en-US".
          #
          # If a value isn't specified, the search results can contain jobs in any
          # locale.
          #
          #
          # Language codes should be in BCP-47 format, such as "en-US" or "sr-Latn".
          # For more information, see
          # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).
          #
          # At most 10 language code filters are allowed.
        "A String",
      ],
      "companyNames": [ # Optional.
          #
          # This filter specifies the company entities to search against.
          #
          # If a value isn't specified, jobs are searched for against all
          # companies.
          #
          # If multiple values are specified, jobs are searched against the
          # companies specified.
          #
          # At most 20 company filters are allowed.
        "A String",
      ],
      "companyDisplayNames": [ # Optional.
          #
          # This filter specifies the exact company display
          # name of the jobs to search against.
          #
          # If a value isn't specified, jobs within the search results are
          # associated with any company.
          #
          # If multiple values are specified, jobs within the search results may be
          # associated with any of the specified companies.
          #
          # At most 20 company display name filters are allowed.
        "A String",
      ],
      "locationFilters": [ # Optional.
          #
          # The location filter specifies geo-regions containing the jobs to
          # search against. See LocationFilter for more information.
          #
          # If a location value isn't specified, jobs fitting the other search
          # criteria are retrieved regardless of where they're located.
          #
          # If multiple values are specified, jobs are retrieved from any of the
          # specified locations. If different values are specified for the
          # LocationFilter.distance_in_miles parameter, the maximum provided
          # distance is used for all locations.
          #
          # At most 5 location filters are allowed.
        { # Input only.
            #
            # Geographic region of the search.
          "regionCode": "A String", # Optional.
              #
              # CLDR region code of the country/region of the address. This will be used
              # to address ambiguity of the user-input location, e.g. "Liverpool"
              # against "Liverpool, NY, US" or "Liverpool, UK".
              #
              # Set this field if all the jobs to search against are from a same region,
              # or jobs are world-wide but the job seeker is from a specific region.
              #
              # See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: "CH" for Switzerland.
          "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Optional.
              #
              # The latitude and longitude of the geographic center from which to
              # search. This field is ignored if `location_name` is provided.
              # 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].
          },
          "name": "A String", # Optional.
              #
              # The address name, such as "Mountain View" or "Bay Area".
          "isTelecommute": True or False, # Optional.
              #
              # Allows the client to return jobs without a
              # set location, specifically, telecommuting jobs (telecomuting is considered
              # by the service as a special location.
              # Job.allow_telecommute indicates if a job permits telecommuting.
              # If this field is true, telecommuting jobs are searched, and
              # name and lat_lng are
              # ignored.
              # This filter can be used by itself to search exclusively for telecommuting
              # jobs, or it can be combined with another location
              # filter to search for a combination of job locations,
              # such as "Mountain View" or "telecommuting" jobs. However, when used in
              # combination with other location filters, telecommuting jobs can be
              # treated as less relevant than other jobs in the search response.
          "distanceInMiles": 3.14, # Optional.
              #
              #
              # The distance_in_miles is applied when the location being searched for is
              # identified as a city or smaller. When the location being searched for is a
              # state or larger, this field is ignored.
        },
      ],
      "compensationFilter": { # Input only. # Optional.
          #
          # This search filter is applied only to
          # Job.compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs meeting
          # these criteria are searched. If a filter isn't defined, all open jobs
          # are searched.
          #
          # Filter on job compensation type and amount.
        "units": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # CompensationInfo.CompensationUnit.
          "A String",
        ],
        "range": { # Compensation range. # Optional.
            #
            # Compensation range.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "type": "A String", # Required.
            #
            # Type of filter.
        "includeJobsWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
    },
    "requestMetadata": { # Input only. # Meta information, such as `user_id`, collected from the job searcher or
        # other entity conducting a job search, is used to improve the service's
        # search quality. Users determine identifier values, which must be
        # unique and consist.
        #
        # Meta information related to the job searcher or entity
        # conducting the job search. This information is used to improve the
        # performance of the service.
      "deviceInfo": { # Input only. # Optional.
          #
          # The type of device used by the job seeker at the time of the call to the
          # service.
          #
          # Device information collected from the job seeker, candidate, or
          # other entity conducting the job search. Providing this information improves
          # the quality of the search results across devices.
        "deviceType": "A String", # Optional.
            #
            # Type of the device.
        "id": "A String", # Optional.
            #
            # A device-specific ID. The ID must be a unique identifier that distinguishes
            # the device from other devices.
      },
      "sessionId": "A String", # Required.
          #
          # A unique session identification string. A session is defined as the
          # duration of an end user's interaction with the service over a period.
          # Obfuscate this field for privacy concerns before
          # providing it to the API.
          #
          # If this field is not available for some reason, please send "UNKNOWN". Note
          # that any improvements to the service model for a particular tenant site,
          # rely on this field being set correctly to some unique session_id.
      "userId": "A String", # Required.
          #
          # A unique user identification string, as determined by the client. The
          # client is responsible for ensuring client-level uniqueness of this value
          # in order to have the strongest positive impact on search quality.
          # Obfuscate this field for privacy concerns before
          # providing it to the service.
          #
          # If this field is not available for some reason, please send "UNKNOWN". Note
          # that any improvements to the service model for a particular tenant site,
          # rely on this field being set correctly to some unique user_id.
      "domain": "A String", # Required.
          #
          # The client-defined scope or source of the service call, which typically
          # is the domain on
          # which the service has been implemented and is currently being run.
          #
          # For example, if the service is being run by client <em>Foo, Inc.</em>, on
          # job board www.foo.com and career site www.bar.com, then this field is
          # set to "foo.com" for use on the job board, and "bar.com" for use on the
          # career site.
          #
          # If this field is not available for some reason, send "UNKNOWN". Note that
          # any improvements to the service model for a particular tenant site rely on
          # this field being set correctly to some domain.
    },
    "searchTypes": [ # Required.
        # 
        # A list of facets that specify the histogram data to be calculated
        # against and returned.
        # 
        # Histogram response times can be slow, and counts
        # can be approximations. This call may be temporarily or permanently removed
        # prior to the production release of Cloud Talent Solution.
      "A String",
    ],
    "filters": { # Input only. # Deprecated. Use query instead.
        # 
        # Optional.
        # 
        # Restrictions on the scope of the histogram.
        #
        # Deprecated. Use JobQuery instead.
        #
        # The filters required to perform a search query or histogram.
      "disableSpellCheck": True or False, # Optional.
          #
          # This flag controls the spell-check feature. If false, the
          # service attempts to correct a misspelled query,
          # for example, "enginee" is corrected to "engineer".
          #
          # Defaults to false: a spell check is performed.
      "customAttributeFilter": "A String", # Optional.
          #
          # This filter specifies a structured syntax to match against the
          # Job.custom_attributes that are marked as `filterable`.
          #
          # The syntax for this expression is a subset of Google SQL syntax.
          #
          # Supported operators are: =, !=, <, <=, >, >= where the left of the operator
          # is a custom field key and the right of the operator is a number or string
          # (surrounded by quotes) value.
          #
          # Supported functions are LOWER(<field_name>) to
          # perform case insensitive match and EMPTY(<field_name>) to filter on the
          # existence of a key.
          #
          # Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
          # nesting (For example, "((A AND B AND C) OR NOT D) AND E"), and there can
          # be a maximum of 100 comparisons/functions in the expression. The expression
          # must be < 3000 bytes in length.
          #
          # Sample Query:
          # (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1)) AND key2 > 100
      "customFieldFilters": { # Deprecated. Use custom_attribute_filter instead.
          #
          # Optional.
          #
          # This filter specifies searching against
          # custom field values. See Job.filterable_custom_fields for information.
          # The key value specifies a number between 1-20 (the service
          # supports 20 custom fields) corresponding to the desired custom field map
          # value. If an invalid key is provided or specified together with
          # custom_attribute_filter, an error is thrown.
        "a_key": { # Input only.
            #
            # Custom field filter of the search.
          "type": "A String", # Optional.
              #
              # The type of filter.
              # Defaults to FilterType.OR.
          "queries": [ # Required.
              #
              # The query strings for the filter.
            "A String",
          ],
        },
      },
      "tenantJobOnly": True or False, # Deprecated. Do not use this field.
          #
          # This flag controls whether the job search should be restricted to jobs
          # owned by the current user.
          #
          # Defaults to false where all jobs accessible to the
          # user are searched against.
      "categories": [ # Optional.
          #
          # The category filter specifies the categories of jobs to search against.
          # See Category for more information.
          #
          # If a value is not specified, jobs from any category are searched against.
          #
          # If multiple values are specified, jobs from any of the specified
          # categories are searched against.
        "A String",
      ],
      "employmentTypes": [ # Optional.
          #
          # The employment type filter specifies the employment type of jobs to
          # search against, such as EmploymentType.FULL_TIME.
          #
          # If a value is not specified, jobs in the search results include any
          # employment type.
          #
          # If multiple values are specified, jobs in the search results include any
          # of the specified employment types.
        "A String",
      ],
      "companyTitles": [ # Optional.
          #
          # This filter specifies the exact company titles
          # of jobs to search against.
          #
          # If a value is not specified, jobs within the search results can be
          # associated with any company.
          #
          # If multiple values are specified, jobs within the search results may be
          # associated with any of the specified companies.
          #
          # At most 20 company title filters are allowed.
        "A String",
      ],
      "query": "A String", # Optional.
          #
          # The query filter contains the keywords that match against the job
          # title, description, and location fields.
          #
          # The maximum query size is 255 bytes/characters.
      "extendedCompensationFilter": { # Deprecated. Always use CompensationFilter. # Deprecated. Always use compensation_filter.
          #
          # Optional.
          #
          # This search filter is applied only to
          # Job.extended_compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs that meet
          # these criteria are searched. If a filter is not defined, all open jobs
          # are searched.
          #
          # Input only.
          #
          # Filter on job compensation type and amount.
        "currency": "A String", # Optional.
            #
            # Specify currency in 3-letter
            # [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) format. If
            # unspecified, jobs are returned regardless of currency.
        "type": "A String", # Required.
            #
            # Type of filter.
        "compensationRange": { # Deprecated. See CompensationInfo. # Optional.
            #
            # Compensation range.
            #
            # Compensation range.
          "max": { # Deprecated. See CompensationInfo. # Required.
              #
              # Maximum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "min": { # Deprecated. See CompensationInfo. # Required.
              #
              # Minimum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
        },
        "compensationUnits": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # ExtendedCompensationInfo.CompensationUnit.
          "A String",
        ],
        "includeJobWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
      "commuteFilter": { # Input only. # Optional.
          #
          #  Allows filtering jobs by commute time with different travel methods (e.g.
          #  driving or public transit). Note: this only works with COMMUTE
          #  MODE. When specified, [JobFilters.location_filters] will be
          #  ignored.
          #
          #  Currently we do not support sorting by commute time.
          #
          # Parameters needed for commute search.
        "departureHourLocal": 42, # Optional.
            #
            # The departure hour to use to calculate traffic impact. Accepts an
            # integer between 0 and 23, representing the hour in the time zone of the
            # start_location. Must not be present if road_traffic is specified.
        "roadTraffic": "A String", # Optional.
            #
            # Specifies the traffic density to use when calculating commute time.
            # Must not be present if departure_hour_local is specified.
        "allowNonStreetLevelAddress": True or False, # Optional.
            # If `true`, jobs without street level addresses may also be returned.
            # For city level addresses, the city center is used. For state and coarser
            # level addresses, text matching is used.
            # If this field is set to `false` or is not specified, only jobs that include
            # street level addresses will be returned by commute search.
        "travelTime": "A String", # Required.
            #
            # The maximum travel time in seconds. The maximum allowed value is `3600s`
            # (one hour). Format is `123s`.
        "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
            #
            # The latitude and longitude of the location from which to calculate the
            # commute time.
            # 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].
        },
        "method": "A String", # Required.
            #
            # The method of transportation for which to calculate the commute time.
      },
      "languageCodes": [ # Optional.
          #
          # This filter specifies the locale of jobs to search against,
          # for example, "en-US".
          #
          # If a value is not specified, the search results may contain jobs in any
          # locale.
          #
          #
          # Language codes should be in BCP-47 format, for example, "en-US" or
          # "sr-Latn". For more information, see [Tags for Identifying
          # Languages](https://tools.ietf.org/html/bcp47).
          #
          # At most 10 language code filters are allowed.
        "A String",
      ],
      "companyNames": [ # Optional.
          #
          # The company names filter specifies the company entities to search
          # against.
          #
          # If a value is not specified, jobs are searched for against all companies.
          #
          # If multiple values are specified, jobs are searched against the
          # specified companies.
          #
          # At most 20 company filters are allowed.
        "A String",
      ],
      "publishDateRange": "A String", # Optional.
          #
          # Jobs published within a range specified by this filter are searched
          # against, for example, DateRange.PAST_MONTH. If a value is not
          # specified, all open jobs are searched against regardless of the
          # date they were published.
      "locationFilters": [ # Optional.
          #
          # The location filter specifies geo-regions containing the jobs to
          # search against. See LocationFilter for more information.
          #
          # If a location value is not specified, jobs are retrieved
          # from all locations.
          #
          # If multiple values are specified, jobs are retrieved from any of the
          # specified locations. If different values are specified for the
          # LocationFilter.distance_in_miles parameter, the maximum provided
          # distance is used for all locations.
          #
          # At most 5 location filters are allowed.
        { # Input only.
            #
            # Geographic region of the search.
          "regionCode": "A String", # Optional.
              #
              # CLDR region code of the country/region of the address. This will be used
              # to address ambiguity of the user-input location, e.g. "Liverpool"
              # against "Liverpool, NY, US" or "Liverpool, UK".
              #
              # Set this field if all the jobs to search against are from a same region,
              # or jobs are world-wide but the job seeker is from a specific region.
              #
              # See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: "CH" for Switzerland.
          "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Optional.
              #
              # The latitude and longitude of the geographic center from which to
              # search. This field is ignored if `location_name` is provided.
              # 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].
          },
          "name": "A String", # Optional.
              #
              # The address name, such as "Mountain View" or "Bay Area".
          "isTelecommute": True or False, # Optional.
              #
              # Allows the client to return jobs without a
              # set location, specifically, telecommuting jobs (telecomuting is considered
              # by the service as a special location.
              # Job.allow_telecommute indicates if a job permits telecommuting.
              # If this field is true, telecommuting jobs are searched, and
              # name and lat_lng are
              # ignored.
              # This filter can be used by itself to search exclusively for telecommuting
              # jobs, or it can be combined with another location
              # filter to search for a combination of job locations,
              # such as "Mountain View" or "telecommuting" jobs. However, when used in
              # combination with other location filters, telecommuting jobs can be
              # treated as less relevant than other jobs in the search response.
          "distanceInMiles": 3.14, # Optional.
              #
              #
              # The distance_in_miles is applied when the location being searched for is
              # identified as a city or smaller. When the location being searched for is a
              # state or larger, this field is ignored.
        },
      ],
      "compensationFilter": { # Input only. # Optional.
          #
          # This search filter is applied only to
          # Job.compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs that meet
          # this criteria are searched. If a filter is not defined, all open jobs
          # are searched.
          #
          # Filter on job compensation type and amount.
        "units": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # CompensationInfo.CompensationUnit.
          "A String",
        ],
        "range": { # Compensation range. # Optional.
            #
            # Compensation range.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "type": "A String", # Required.
            #
            # Type of filter.
        "includeJobsWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
    },
    "allowBroadening": True or False, # Optional.
        # 
        # Controls whether to broaden the search to avoid too few results for a
        # given query in instances where a search has sparse results. Results from a
        # broadened query is a superset of the results from the original query.
        # 
        # Defaults to false.
  }

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

Returns:
  An object of the form:

    { # Deprecated. Use SearchJobsRequest.histogram_facets instead to make
      # a single call with both search and histogram.
      #
      # Output only.
      #
      # The response of the GetHistogram method.
    "results": [ # The Histogram results.
      { # Output only.
          #
          # Result of a histogram call. The response contains the histogram map for the
          # search type specified by HistogramResult.field.
          # The response is a map of each filter value to the corresponding count of
          # jobs for that filter.
        "values": { # A map from the values of field to the number of jobs with that value
            # in this search result.
            #
            # Key: search type (filter names, such as the companyName).
            #
            # Values: the count of jobs that match the filter for this search.
          "a_key": 42,
        },
        "searchType": "A String", # The Histogram search filters.
      },
    ],
    "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">list(pageSize=None, pageToken=None, x__xgafv=None, idsOnly=None, filter=None)</code>
  <pre>Lists jobs by filter.

Args:
  pageSize: integer, Optional.

The maximum number of jobs to be returned per page of results.

If ids_only is set to true, the maximum allowed page size
is 1000. Otherwise, the maximum allowed page size is 100.

Default is 100 if empty or a number < 1 is specified.
  pageToken: string, Optional.

The starting point of a query result.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
  idsOnly: boolean, Optional.

If set to `true`, only Job.name, Job.requisition_id and
Job.language_code will be returned.

A typical use case is to synchronize job repositories.

Defaults to false.
  filter: string, Required.

The filter string specifies the jobs to be enumerated.

Supported operator: =, AND

The fields eligible for filtering are:

* `companyName` (Required)
* `requisitionId` (Optional)

Sample Query:

* companyName = "companies/123"
* companyName = "companies/123" AND requisitionId = "req-1"

Returns:
  An object of the form:

    { # Output only.
      #
      # List jobs response.
    "nextPageToken": "A String", # A token to retrieve the next page of results.
    "jobs": [ # The Jobs for a given company.
        #
        # The maximum number of items returned is based on the limit field
        # provided in the request.
      { # A Job resource represents a job posting (also referred to as a "job listing"
          # or "job requisition"). A job belongs to a Company, which is the hiring
          # entity responsible for the job.
        "languageCode": "A String", # Optional.
            #
            # The language of the posting. This field is distinct from
            # any requirements for fluency that are associated with the job.
            #
            # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
            # For more information, see
            # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
            # class="external" target="_blank" }.
            #
            # If this field is unspecified and Job.description is present, detected
            # language code based on Job.description is assigned, otherwise
            # defaults to 'en_US'.
        "updateTime": "A String", # Output only.
            #
            # The timestamp when this job was last updated.
        "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
            #
            # Optional.
            #
            # A map of fields to hold non-filterable custom job attributes, similar to
            # filterable_custom_fields. These fields are distinct in that the data
            # in these fields are not indexed. Therefore, the client cannot search
            # against them, nor can the client use them to list jobs.
            #
            # The key of the map can be any valid string.
          "a_key": { # Resource that represents the custom data not captured by the standard fields.
            "values": [ # Optional.
                #
                # The values of the custom data.
              "A String",
            ],
          },
        },
        "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
            #
            # The end date of the job in UTC time zone. Typically this field
            # is used for contracting engagements.
            # Dates prior to 1970/1/1 and invalid date formats are ignored.
            # and time zone are either specified elsewhere or are not significant. The date
            # is relative to the Proleptic Gregorian Calendar. This can represent:
            #
            # * A full date, with non-zero year, month and day values
            # * A month and day value, with a zero year, e.g. an anniversary
            # * A year on its own, with zero month and day values
            # * A year and month value, with a zero day, e.g. a credit card expiration date
            #
            # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
          "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
              # month and day.
          "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
              # if specifying a year by itself or a year and month where the day is not
              # significant.
          "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
              # a year.
        },
        "companyDisplayName": "A String", # Output only.
            #
            # The name of the company listing the job.
        "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
            #
            # The start date of the job in UTC time zone. Typically this field
            # is used for contracting engagements.
            # Dates prior to 1970/1/1 and invalid date formats are ignored.
            # and time zone are either specified elsewhere or are not significant. The date
            # is relative to the Proleptic Gregorian Calendar. This can represent:
            #
            # * A full date, with non-zero year, month and day values
            # * A month and day value, with a zero year, e.g. an anniversary
            # * A year on its own, with zero month and day values
            # * A year and month value, with a zero day, e.g. a credit card expiration date
            #
            # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
          "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
              # month and day.
          "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
              # if specifying a year by itself or a year and month where the day is not
              # significant.
          "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
              # a year.
        },
        "jobLocations": [ # Output only.
            #
            # Structured locations of the job, resolved from locations.
          { # Output only.
              #
              # 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].
            },
          },
        ],
        "locations": [ # Optional but strongly recommended for the best service experience.
            #
            # Location(s) where the emploeyer is looking to hire for this job posting.
            #
            # Specifying the full street address(es) of the hiring location enables
            # better API results, especially job searches by commute time.
            #
            # At most 50 locations are allowed for best search performance. If a job has
            # more locations, it is suggested to split it into multiple jobs with unique
            # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
            # multiple jobs with the same requisition_id, company_name and
            # language_code are not allowed. If the original requisition_id must
            # be preserved, a custom field should be used for storage. It is also
            # suggested to group the locations that close to each other in the same job
            # for better search experience.
            #
            # The maximum number of allowed characters is 500.
          "A String",
        ],
        "employmentTypes": [ # Optional.
            #
            # The employment type(s) of a job, for example,
            # full time or
            # part time.
          "A String",
        ],
        "applicationUrls": [ # Optional but at least one of application_urls,
            # application_email_list or application_instruction must be
            # specified.
            #
            # Use this URL field to direct an applicant to a website, for example to
            # link to an online application form.
            #
            # The maximum number of allowed characters is 2,000.
          "A String",
        ],
        "educationLevels": [ # Optional.
            #
            # The desired education level for the job, such as
            # "Bachelors", "Masters", "Doctorate".
          "A String",
        ],
        "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
            #
            # Optional.
            #
            # Job compensation information.
            #
            # This field replaces compensation_info. Only
            # CompensationInfo.entries or extended_compensation_info can be set,
            # otherwise an exception is thrown.
            #
            # Describes job compensation.
          "annualizedTotalCompensationUnspecified": True or False, # Output only.
              #
              # Indicates annualized total compensation range cannot be derived, due to
              # the job's all CompensationEntry cannot be annualized.
              # See CompensationEntry for explanation on annualization and base
              # compensation entry.
          "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
              #
              # Annualized base compensation range.
              #
              # Compensation range.
            "max": { # Deprecated. See CompensationInfo. # Required.
                #
                # Maximum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "min": { # Deprecated. See CompensationInfo. # Required.
                #
                # Minimum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
          },
          "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
              #
              # Annualized total compensation range.
              #
              # Compensation range.
            "max": { # Deprecated. See CompensationInfo. # Required.
                #
                # Maximum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "min": { # Deprecated. See CompensationInfo. # Required.
                #
                # Minimum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
          },
          "currency": "A String", # Optional.
              #
              # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
              # currency code.
          "annualizedBaseCompensationUnspecified": True or False, # Output only.
              #
              # Indicates annualized base compensation range cannot be derived, due to
              # the job's base compensation entry cannot be annualized.
              # See CompensationEntry for explanation on annualization and base
              # compensation entry.
          "entries": [ # Optional.
              #
              # Job compensation information.
              #
              # At most one entry can be of type
              # ExtendedCompensationInfo.CompensationType.BASE, which is
              # referred as ** base compensation entry ** for the job.
            { # Deprecated. See CompensationInfo.
                #
                # A compensation entry that represents one component of compensation, such
                # as base pay, bonus, or other compensation type.
                #
                # Annualization: One compensation entry can be annualized if
                # - it contains valid amount or range.
                # - and its expected_units_per_year is set or can be derived.
                # Its annualized range is determined as (amount or range) times
                # expected_units_per_year.
              "description": "A String", # Optional.
                  #
                  # Compensation description.
              "range": { # Deprecated. See CompensationInfo. # Optional.
                  #
                  # Compensation range.
                  #
                  # Compensation range.
                "max": { # Deprecated. See CompensationInfo. # Required.
                    #
                    # Maximum value.
                    #
                    # Decimal number.
                  "units": "A String", # Whole units.
                  "micros": 42, # Micro (10^-6) units.
                      # The value must be between -999,999 and +999,999 inclusive.
                      # If `units` is positive, `micros` must be positive or zero.
                      # If `units` is zero, `micros` can be positive, zero, or negative.
                      # If `units` is negative, `micros` must be negative or zero.
                      # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                },
                "min": { # Deprecated. See CompensationInfo. # Required.
                    #
                    # Minimum value.
                    #
                    # Decimal number.
                  "units": "A String", # Whole units.
                  "micros": 42, # Micro (10^-6) units.
                      # The value must be between -999,999 and +999,999 inclusive.
                      # If `units` is positive, `micros` must be positive or zero.
                      # If `units` is zero, `micros` can be positive, zero, or negative.
                      # If `units` is negative, `micros` must be negative or zero.
                      # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                },
              },
              "unspecified": True or False, # Optional.
                  #
                  # Indicates compensation amount and range are unset.
              "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
                  #
                  # Expected number of units paid each year. If not specified, when
                  # Job.employment_types is FULLTIME, a default value is inferred
                  # based on unit. Default values:
                  # - HOURLY: 2080
                  # - DAILY: 260
                  # - WEEKLY: 52
                  # - MONTHLY: 12
                  # - ANNUAL: 1
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "amount": { # Deprecated. See CompensationInfo. # Optional.
                  #
                  # Monetary amount.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "type": "A String", # Required.
                  #
                  # Compensation type.
              "unit": "A String", # Optional.
                  #
                  # Frequency of the specified amount.
                  #
                  # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
            },
          ],
        },
        "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
            #
            # Optional.
            #
            # A map of fields to hold filterable custom job attributes not captured by
            # the standard fields such as job_title, company_name, or
            # level. These custom fields store arbitrary
            # string values, and can be used for purposes not covered by
            # the structured fields. For the best search experience, use of the
            # structured rather than custom fields is recommended.
            #
            # Data stored in these custom fields fields are indexed and
            # searched against by keyword searches (see
            # SearchJobsRequest.custom_field_filters][]).
            #
            # The map key must be a number between 1-20. If an invalid key is
            # provided on job create or update, an error is returned.
          "a_key": { # Resource that represents the custom data not captured by the standard fields.
            "values": [ # Optional.
                #
                # The values of the custom data.
              "A String",
            ],
          },
        },
        "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
            #
            # Optional but strongly recommended to be provided for the best service
            # experience.
            #
            # The expiration date of the job in UTC time. After 12 am on this date, the
            # job is marked as expired, and it no longer appears in search results.
            # The expired job can't be deleted or listed by the DeleteJob and
            # ListJobs APIs, but it can be retrieved with the GetJob API or
            # updated with the UpdateJob API. An expired job can be updated and
            # opened again by using a future expiration date. It can also remain expired.
            # Updating an expired job to be open fails if there is another existing open
            # job with same requisition_id, company_name and language_code.
            #
            # The expired jobs are retained in our system for 90 days. However, the
            # overall expired job count cannot exceed 3 times the maximum of open jobs
            # count over the past week, otherwise jobs with earlier expire time are
            # removed first. Expired jobs are no longer accessible after they are cleaned
            # out.
            #
            # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
            # ignored and treated as expiry date not provided.
            #
            # If this value is not provided on job creation or is invalid, the job
            # posting expires after 30 days from the job's creation time. For example, if
            # the job was created on 2017/01/01 13:00AM UTC with an unspecified
            # expiration date, the job expires after 2017/01/31 13:00AM UTC.
            #
            # If this value is not provided on job update, it depends on the field masks
            # set by UpdateJobRequest.update_job_fields. If the field masks include
            # expiry_date, or the masks are empty meaning that every field is
            # updated, the job expires after 30 days from the job's last update time.
            # Otherwise the expiration date isn't updated.
            # and time zone are either specified elsewhere or are not significant. The date
            # is relative to the Proleptic Gregorian Calendar. This can represent:
            #
            # * A full date, with non-zero year, month and day values
            # * A month and day value, with a zero year, e.g. an anniversary
            # * A year on its own, with zero month and day values
            # * A year and month value, with a zero day, e.g. a credit card expiration date
            #
            # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
          "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
              # month and day.
          "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
              # if specifying a year by itself or a year and month where the day is not
              # significant.
          "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
              # a year.
        },
        "responsibilities": "A String", # Optional.
            #
            # A description of job responsibilities. The use of this field is
            # recommended as an alternative to using the more general description
            # field.
            #
            # This field accepts and sanitizes HTML input, and also accepts
            # bold, italic, ordered list, and unordered list markup tags.
            #
            # The maximum number of allowed characters is 10,000.
        "compensationInfo": { # Job compensation details. # Optional.
            #
            # Job compensation information.
          "annualizedBaseCompensationRange": { # Compensation range. # Output only.
              #
              # Annualized base compensation range. Computed as
              # base compensation entry's CompensationEntry.compensation times
              # CompensationEntry.expected_units_per_year.
              #
              # See CompensationEntry for explanation on compensation annualization.
            "max": { # Represents an amount of money with its currency type. # Optional.
                #
                # The maximum amount of compensation. If left empty, the value is set
                # to a maximal compensation value and the currency code is set to
                # match the currency code of
                # min_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "min": { # Represents an amount of money with its currency type. # Optional.
                #
                # The minimum amount of compensation. If left empty, the value is set
                # to zero and the currency code is set to match the
                # currency code of max_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
          },
          "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
              #
              # Optional.
              #
              # A lower bound on a range for compensation or pay for the job.
              # The currency type is specified in compensation_amount.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "annualizedTotalCompensationRange": { # Compensation range. # Output only.
              #
              # Annualized total compensation range. Computed as
              # all compensation entries' CompensationEntry.compensation times
              # CompensationEntry.expected_units_per_year.
              #
              # See CompensationEntry for explanation on compensation annualization.
            "max": { # Represents an amount of money with its currency type. # Optional.
                #
                # The maximum amount of compensation. If left empty, the value is set
                # to a maximal compensation value and the currency code is set to
                # match the currency code of
                # min_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "min": { # Represents an amount of money with its currency type. # Optional.
                #
                # The minimum amount of compensation. If left empty, the value is set
                # to zero and the currency code is set to match the
                # currency code of max_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
          },
          "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
              #
              # Optional.
              #
              # An upper bound on a range for compensation or pay for the job.
              # The currency type is specified in compensation_amount.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
              #
              # Optional.
              #
              # The amount of compensation or pay for the job.
              # As an alternative, compensation_amount_min and
              # compensation_amount_max may be used to define a range of
              # compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "entries": [ # Optional.
              #
              # Job compensation information.
              #
              # At most one entry can be of type
              # CompensationInfo.CompensationType.BASE, which is
              # referred as ** base compensation entry ** for the job.
            { # A compensation entry that represents one component of compensation, such
                # as base pay, bonus, or other compensation type.
                #
                # Annualization: One compensation entry can be annualized if
                # - it contains valid amount or range.
                # - and its expected_units_per_year is set or can be derived.
                # Its annualized range is determined as (amount or range) times
                # expected_units_per_year.
              "description": "A String", # Optional.
                  #
                  # Compensation description.  For example, could
                  # indicate equity terms or provide additional context to an estimated
                  # bonus.
              "range": { # Compensation range. # Optional.
                  #
                  # Compensation range.
                "max": { # Represents an amount of money with its currency type. # Optional.
                    #
                    # The maximum amount of compensation. If left empty, the value is set
                    # to a maximal compensation value and the currency code is set to
                    # match the currency code of
                    # min_compensation.
                  "nanos": 42, # Number of nano (10^-9) units of the amount.
                      # The value must be between -999,999,999 and +999,999,999 inclusive.
                      # If `units` is positive, `nanos` must be positive or zero.
                      # If `units` is zero, `nanos` can be positive, zero, or negative.
                      # If `units` is negative, `nanos` must be negative or zero.
                      # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                  "units": "A String", # The whole units of the amount.
                      # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                  "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                },
                "min": { # Represents an amount of money with its currency type. # Optional.
                    #
                    # The minimum amount of compensation. If left empty, the value is set
                    # to zero and the currency code is set to match the
                    # currency code of max_compensation.
                  "nanos": 42, # Number of nano (10^-9) units of the amount.
                      # The value must be between -999,999,999 and +999,999,999 inclusive.
                      # If `units` is positive, `nanos` must be positive or zero.
                      # If `units` is zero, `nanos` can be positive, zero, or negative.
                      # If `units` is negative, `nanos` must be negative or zero.
                      # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                  "units": "A String", # The whole units of the amount.
                      # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                  "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                },
              },
              "expectedUnitsPerYear": 3.14, # Optional.
                  #
                  # Expected number of units paid each year. If not specified, when
                  # Job.employment_types is FULLTIME, a default value is inferred
                  # based on unit. Default values:
                  # - HOURLY: 2080
                  # - DAILY: 260
                  # - WEEKLY: 52
                  # - MONTHLY: 12
                  # - ANNUAL: 1
              "amount": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # Compensation amount.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "type": "A String", # Required.
                  #
                  # Compensation type.
              "unit": "A String", # Optional.
                  #
                  # Frequency of the specified amount.
                  #
                  # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
            },
          ],
          "type": "A String", # Deprecated. Use entries instead.
              #
              # Optional.
              #
              # Type of job compensation.
        },
        "jobTitle": "A String", # Required.
            #
            # The title of the job, such as "Software Engineer"
            #
            # The maximum number of allowed characters is 500.
        "department": "A String", # Optional.
            #
            # The department or functional area within the company with the open
            # position.
            #
            # The maximum number of allowed characters is 255.
        "applicationInstruction": "A String", # Optional but at least one of application_urls,
            # application_email_list or application_instruction must be
            # specified.
            #
            # Use this field to provide instructions, such as "Mail your application
            # to ...", that a candidate can follow to apply for the job.
            #
            # This field accepts and sanitizes HTML input, and also accepts
            # bold, italic, ordered list, and unordered list markup tags.
            #
            # The maximum number of allowed characters is 3,000.
        "description": "A String", # Required.
            #
            # The description of the job, which typically includes a multi-paragraph
            # description of the company and related information. Separate fields are
            # provided on the job object for responsibilities,
            # qualifications, and other job characteristics. Use of
            # these separate job fields is recommended.
            #
            # This field accepts and sanitizes HTML input, and also accepts
            # bold, italic, ordered list, and unordered list markup tags.
            #
            # The maximum number of allowed characters is 100,000.
        "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
            # provided.
            #
            # The resource name of the company listing the job, such as
            # /companies/foo. This field takes precedence over the
            # distributor-assigned company identifier, distributor_company_id.
        "incentives": "A String", # Optional.
            #
            # A description of bonus, commission, and other compensation
            # incentives associated with the job not including salary or pay.
            #
            # The maximum number of allowed characters is 10,000.
        "requisitionId": "A String", # Required.
            #
            # The requisition ID, also referred to as the posting ID, assigned by the
            # client to identify a job. This field is intended to be used by clients
            # for client identification and tracking of listings. A job is not allowed
            # to be created if there is another job with the same requisition_id,
            # company_name and language_code.
            #
            # The maximum number of allowed characters is 255.
        "qualifications": "A String", # Optional.
            #
            # A description of the qualifications required to perform the
            # job. The use of this field is recommended
            # as an alternative to using the more general description field.
            #
            # This field accepts and sanitizes HTML input, and also accepts
            # bold, italic, ordered list, and unordered list markup tags.
            #
            # The maximum number of allowed characters is 10,000.
        "visibility": "A String", # Optional.
            #
            # The visibility of the job.
            # Defaults to JobVisibility.PRIVATE if not specified.
            # Currently only JobVisibility.PRIVATE is supported.
        "expireTime": "A String", # Optional but strongly recommended for the best service
            # experience.
            #
            # The expiration timestamp of the job. After this timestamp, the
            # job is marked as expired, and it no longer appears in search results. The
            # expired job can't be deleted or listed by the DeleteJob and
            # ListJobs APIs, but it can be retrieved with the GetJob API or
            # updated with the UpdateJob API. An expired job can be updated and
            # opened again by using a future expiration timestamp. Updating an expired
            # job fails if there is another existing open job with same
            # requisition_id, company_name and language_code.
            #
            # The expired jobs are retained in our system for 90 days. However, the
            # overall expired job count cannot exceed 3 times the maximum of open jobs
            # count over the past week, otherwise jobs with earlier expire time are
            # cleaned first. Expired jobs are no longer accessible after they are cleaned
            # out.
            # The format of this field is RFC 3339 date strings. Example:
            # 2000-01-01T00:00:00.999999999Z
            # See
            # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
            #
            # A valid date range is between 1970-01-01T00:00:00.0Z and
            # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
            # time not provided.
            #
            # If this value is not provided at the time of job creation or is invalid,
            # the job posting expires after 30 days from the job's creation time. For
            # example, if the job was created on 2017/01/01 13:00AM UTC with an
            # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
            #
            # If this value is not provided but expiry_date is, expiry_date is
            # used.
            #
            # If this value is not provided on job update, it depends on the field masks
            # set by UpdateJobRequest.update_job_fields. If the field masks include
            # expiry_time, or the masks are empty meaning that every field is
            # updated, the job posting expires after 30 days from the job's last
            # update time. Otherwise the expiration date isn't updated.
        "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
            #
            # The date this job was most recently published in UTC format. The default
            # value is the time the request arrives at the server.
            # and time zone are either specified elsewhere or are not significant. The date
            # is relative to the Proleptic Gregorian Calendar. This can represent:
            #
            # * A full date, with non-zero year, month and day values
            # * A month and day value, with a zero year, e.g. an anniversary
            # * A year on its own, with zero month and day values
            # * A year and month value, with a zero day, e.g. a credit card expiration date
            #
            # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
          "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
              # month and day.
          "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
              # if specifying a year by itself or a year and month where the day is not
              # significant.
          "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
              # a year.
        },
        "applicationEmailList": [ # Optional but at least one of application_urls,
            # application_email_list or application_instruction must be
            # specified.
            #
            # Use this field to specify email address(es) to which resumes or
            # applications can be sent.
            #
            # The maximum number of allowed characters is 255.
          "A String",
        ],
        "createTime": "A String", # Output only.
            #
            # The timestamp when this job was created.
        "benefits": [ # Optional.
            #
            # The benefits included with the job.
          "A String",
        ],
        "name": "A String", # Required during job update.
            #
            # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
            # of this field in job queries and API calls is preferred over the use of
            # requisition_id since this value is unique.
        "level": "A String", # Optional.
            #
            # The experience level associated with the job, such as "Entry Level".
        "companyTitle": "A String", # Deprecated. Use company_display_name instead.
            #
            # Output only.
            #
            # The name of the company listing the job.
        "region": "A String", # Optional.
            #
            # The job Region (for example, state, country) throughout which the job
            # is available. If this field is set, a
            # LocationFilter in a search query within the job region
            # finds this job if an exact location match is not specified.
            # If this field is set, setting job locations
            # to the same location level as this field is strongly recommended.
        "promotionValue": 42, # Optional.
            #
            # A promotion value of the job, as determined by the client.
            # The value determines the sort order of the jobs returned when searching for
            # jobs using the featured jobs search call, with higher promotional values
            # being returned first and ties being resolved by relevance sort. Only the
            # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
            #
            # Default value is 0, and negative values are treated as 0.
        "referenceUrl": "A String", # Output only.
            #
            # The URL of a web page that displays job details.
        "customAttributes": { # Optional.
            #
            # A map of fields to hold both filterable and non-filterable custom job
            # attributes that are not covered by the provided structured fields.
            #
            # This field is a more general combination of the deprecated id-based
            # filterable_custom_fields and string-based
            # non_filterable_custom_fields.
            #
            # The keys of the map are strings up to 64 bytes and must match the
            # pattern: a-zA-Z*.
            #
            # At most 100 filterable and at most 100 unfilterable keys are supported.
            # For filterable `string_values`, across all keys at most 200 values are
            # allowed, with each string no more than 255 characters. For unfilterable
            # `string_values`, the maximum total size of `string_values` across all keys
            # is 50KB.
          "a_key": { # Custom attribute values that are either filterable or non-filterable.
            "filterable": True or False, # Optional.
                #
                # If the `filterable` flag is true, custom field values are searchable.
                # If false, values are not searchable.
                #
                # Default is false.
            "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
                # be specified.
                #
                # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
                # `CASE_INSENSITIVE_MATCH`) search.
                # For filterable `string_values`, a maximum total number of 200 values
                # is allowed, with each `string_value` has a byte size of no more than
                # 255B. For unfilterable `string_values`, the maximum total byte size of
                # unfilterable `string_values` is 50KB.
                #
                # Empty strings are not allowed.
              "values": [ # Required.
                  #
                  # String values.
                "A String",
              ],
            },
            "longValue": "A String", # Optional but at least one of string_values or long_value must
                # be specified.
                #
                # This field is used to perform number range search.
                # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
                # `long_value`, a value between Long.MIN and Long.MAX is allowed.
          },
        },
        "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
            # provided.
            #
            # A unique company identifier used by job distributors to identify an
            # employer's company entity. company_name takes precedence over
            # this field, and is the recommended field to use to identify companies.
            #
            # The maximum number of allowed characters is 255.
      },
    ],
    "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, x__xgafv=None)</code>
  <pre>Updates specified job.

Typically, updated contents become visible in search results within 10
seconds, but it may take up to 5 minutes.

Args:
  name: string, Required during job update.

Resource name assigned to a job by the API, for example, "/jobs/foo". Use
of this field in job queries and API calls is preferred over the use of
requisition_id since this value is unique. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Input only.
      # 
      # Update job request.
    "updateJobFields": "A String", # Optional but strongly recommended to be provided for the best service
        # experience.
        # 
        # If update_job_fields is provided, only the specified fields in
        # job are updated. Otherwise all the fields are updated.
        # 
        # A field mask to restrict the fields that are updated. Valid values are:
        # 
        # * jobTitle
        # * employmentTypes
        # * description
        # * applicationUrls
        # * applicationEmailList
        # * applicationInstruction
        # * responsibilities
        # * qualifications
        # * educationLevels
        # * level
        # * department
        # * startDate
        # * endDate
        # * compensationInfo
        # * incentives
        # * languageCode
        # * benefits
        # * expireTime
        # * customAttributes
        # * visibility
        # * publishDate
        # * promotionValue
        # * locations
        # * region
        # * expiryDate (deprecated)
        # * filterableCustomFields (deprecated)
        # * unindexedCustomFields (deprecated)
    "job": { # A Job resource represents a job posting (also referred to as a "job listing" # Required.
        # 
        # The Job to be updated.
        # or "job requisition"). A job belongs to a Company, which is the hiring
        # entity responsible for the job.
      "languageCode": "A String", # Optional.
          #
          # The language of the posting. This field is distinct from
          # any requirements for fluency that are associated with the job.
          #
          # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
          # For more information, see
          # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
          # class="external" target="_blank" }.
          #
          # If this field is unspecified and Job.description is present, detected
          # language code based on Job.description is assigned, otherwise
          # defaults to 'en_US'.
      "updateTime": "A String", # Output only.
          #
          # The timestamp when this job was last updated.
      "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
          #
          # Optional.
          #
          # A map of fields to hold non-filterable custom job attributes, similar to
          # filterable_custom_fields. These fields are distinct in that the data
          # in these fields are not indexed. Therefore, the client cannot search
          # against them, nor can the client use them to list jobs.
          #
          # The key of the map can be any valid string.
        "a_key": { # Resource that represents the custom data not captured by the standard fields.
          "values": [ # Optional.
              #
              # The values of the custom data.
            "A String",
          ],
        },
      },
      "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
          #
          # The end date of the job in UTC time zone. Typically this field
          # is used for contracting engagements.
          # Dates prior to 1970/1/1 and invalid date formats are ignored.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "companyDisplayName": "A String", # Output only.
          #
          # The name of the company listing the job.
      "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
          #
          # The start date of the job in UTC time zone. Typically this field
          # is used for contracting engagements.
          # Dates prior to 1970/1/1 and invalid date formats are ignored.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "jobLocations": [ # Output only.
          #
          # Structured locations of the job, resolved from locations.
        { # Output only.
            #
            # 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].
          },
        },
      ],
      "locations": [ # Optional but strongly recommended for the best service experience.
          #
          # Location(s) where the emploeyer is looking to hire for this job posting.
          #
          # Specifying the full street address(es) of the hiring location enables
          # better API results, especially job searches by commute time.
          #
          # At most 50 locations are allowed for best search performance. If a job has
          # more locations, it is suggested to split it into multiple jobs with unique
          # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
          # multiple jobs with the same requisition_id, company_name and
          # language_code are not allowed. If the original requisition_id must
          # be preserved, a custom field should be used for storage. It is also
          # suggested to group the locations that close to each other in the same job
          # for better search experience.
          #
          # The maximum number of allowed characters is 500.
        "A String",
      ],
      "employmentTypes": [ # Optional.
          #
          # The employment type(s) of a job, for example,
          # full time or
          # part time.
        "A String",
      ],
      "applicationUrls": [ # Optional but at least one of application_urls,
          # application_email_list or application_instruction must be
          # specified.
          #
          # Use this URL field to direct an applicant to a website, for example to
          # link to an online application form.
          #
          # The maximum number of allowed characters is 2,000.
        "A String",
      ],
      "educationLevels": [ # Optional.
          #
          # The desired education level for the job, such as
          # "Bachelors", "Masters", "Doctorate".
        "A String",
      ],
      "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
          #
          # Optional.
          #
          # Job compensation information.
          #
          # This field replaces compensation_info. Only
          # CompensationInfo.entries or extended_compensation_info can be set,
          # otherwise an exception is thrown.
          #
          # Describes job compensation.
        "annualizedTotalCompensationUnspecified": True or False, # Output only.
            #
            # Indicates annualized total compensation range cannot be derived, due to
            # the job's all CompensationEntry cannot be annualized.
            # See CompensationEntry for explanation on annualization and base
            # compensation entry.
        "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
            #
            # Annualized base compensation range.
            #
            # Compensation range.
          "max": { # Deprecated. See CompensationInfo. # Required.
              #
              # Maximum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "min": { # Deprecated. See CompensationInfo. # Required.
              #
              # Minimum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
        },
        "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
            #
            # Annualized total compensation range.
            #
            # Compensation range.
          "max": { # Deprecated. See CompensationInfo. # Required.
              #
              # Maximum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "min": { # Deprecated. See CompensationInfo. # Required.
              #
              # Minimum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
        },
        "currency": "A String", # Optional.
            #
            # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
            # currency code.
        "annualizedBaseCompensationUnspecified": True or False, # Output only.
            #
            # Indicates annualized base compensation range cannot be derived, due to
            # the job's base compensation entry cannot be annualized.
            # See CompensationEntry for explanation on annualization and base
            # compensation entry.
        "entries": [ # Optional.
            #
            # Job compensation information.
            #
            # At most one entry can be of type
            # ExtendedCompensationInfo.CompensationType.BASE, which is
            # referred as ** base compensation entry ** for the job.
          { # Deprecated. See CompensationInfo.
              #
              # A compensation entry that represents one component of compensation, such
              # as base pay, bonus, or other compensation type.
              #
              # Annualization: One compensation entry can be annualized if
              # - it contains valid amount or range.
              # - and its expected_units_per_year is set or can be derived.
              # Its annualized range is determined as (amount or range) times
              # expected_units_per_year.
            "description": "A String", # Optional.
                #
                # Compensation description.
            "range": { # Deprecated. See CompensationInfo. # Optional.
                #
                # Compensation range.
                #
                # Compensation range.
              "max": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Maximum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "min": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Minimum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
            },
            "unspecified": True or False, # Optional.
                #
                # Indicates compensation amount and range are unset.
            "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
                #
                # Expected number of units paid each year. If not specified, when
                # Job.employment_types is FULLTIME, a default value is inferred
                # based on unit. Default values:
                # - HOURLY: 2080
                # - DAILY: 260
                # - WEEKLY: 52
                # - MONTHLY: 12
                # - ANNUAL: 1
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "amount": { # Deprecated. See CompensationInfo. # Optional.
                #
                # Monetary amount.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "type": "A String", # Required.
                #
                # Compensation type.
            "unit": "A String", # Optional.
                #
                # Frequency of the specified amount.
                #
                # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
          },
        ],
      },
      "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
          #
          # Optional.
          #
          # A map of fields to hold filterable custom job attributes not captured by
          # the standard fields such as job_title, company_name, or
          # level. These custom fields store arbitrary
          # string values, and can be used for purposes not covered by
          # the structured fields. For the best search experience, use of the
          # structured rather than custom fields is recommended.
          #
          # Data stored in these custom fields fields are indexed and
          # searched against by keyword searches (see
          # SearchJobsRequest.custom_field_filters][]).
          #
          # The map key must be a number between 1-20. If an invalid key is
          # provided on job create or update, an error is returned.
        "a_key": { # Resource that represents the custom data not captured by the standard fields.
          "values": [ # Optional.
              #
              # The values of the custom data.
            "A String",
          ],
        },
      },
      "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
          #
          # Optional but strongly recommended to be provided for the best service
          # experience.
          #
          # The expiration date of the job in UTC time. After 12 am on this date, the
          # job is marked as expired, and it no longer appears in search results.
          # The expired job can't be deleted or listed by the DeleteJob and
          # ListJobs APIs, but it can be retrieved with the GetJob API or
          # updated with the UpdateJob API. An expired job can be updated and
          # opened again by using a future expiration date. It can also remain expired.
          # Updating an expired job to be open fails if there is another existing open
          # job with same requisition_id, company_name and language_code.
          #
          # The expired jobs are retained in our system for 90 days. However, the
          # overall expired job count cannot exceed 3 times the maximum of open jobs
          # count over the past week, otherwise jobs with earlier expire time are
          # removed first. Expired jobs are no longer accessible after they are cleaned
          # out.
          #
          # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
          # ignored and treated as expiry date not provided.
          #
          # If this value is not provided on job creation or is invalid, the job
          # posting expires after 30 days from the job's creation time. For example, if
          # the job was created on 2017/01/01 13:00AM UTC with an unspecified
          # expiration date, the job expires after 2017/01/31 13:00AM UTC.
          #
          # If this value is not provided on job update, it depends on the field masks
          # set by UpdateJobRequest.update_job_fields. If the field masks include
          # expiry_date, or the masks are empty meaning that every field is
          # updated, the job expires after 30 days from the job's last update time.
          # Otherwise the expiration date isn't updated.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "responsibilities": "A String", # Optional.
          #
          # A description of job responsibilities. The use of this field is
          # recommended as an alternative to using the more general description
          # field.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 10,000.
      "compensationInfo": { # Job compensation details. # Optional.
          #
          # Job compensation information.
        "annualizedBaseCompensationRange": { # Compensation range. # Output only.
            #
            # Annualized base compensation range. Computed as
            # base compensation entry's CompensationEntry.compensation times
            # CompensationEntry.expected_units_per_year.
            #
            # See CompensationEntry for explanation on compensation annualization.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # A lower bound on a range for compensation or pay for the job.
            # The currency type is specified in compensation_amount.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "annualizedTotalCompensationRange": { # Compensation range. # Output only.
            #
            # Annualized total compensation range. Computed as
            # all compensation entries' CompensationEntry.compensation times
            # CompensationEntry.expected_units_per_year.
            #
            # See CompensationEntry for explanation on compensation annualization.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # An upper bound on a range for compensation or pay for the job.
            # The currency type is specified in compensation_amount.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # The amount of compensation or pay for the job.
            # As an alternative, compensation_amount_min and
            # compensation_amount_max may be used to define a range of
            # compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "entries": [ # Optional.
            #
            # Job compensation information.
            #
            # At most one entry can be of type
            # CompensationInfo.CompensationType.BASE, which is
            # referred as ** base compensation entry ** for the job.
          { # A compensation entry that represents one component of compensation, such
              # as base pay, bonus, or other compensation type.
              #
              # Annualization: One compensation entry can be annualized if
              # - it contains valid amount or range.
              # - and its expected_units_per_year is set or can be derived.
              # Its annualized range is determined as (amount or range) times
              # expected_units_per_year.
            "description": "A String", # Optional.
                #
                # Compensation description.  For example, could
                # indicate equity terms or provide additional context to an estimated
                # bonus.
            "range": { # Compensation range. # Optional.
                #
                # Compensation range.
              "max": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The maximum amount of compensation. If left empty, the value is set
                  # to a maximal compensation value and the currency code is set to
                  # match the currency code of
                  # min_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "min": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The minimum amount of compensation. If left empty, the value is set
                  # to zero and the currency code is set to match the
                  # currency code of max_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
            },
            "expectedUnitsPerYear": 3.14, # Optional.
                #
                # Expected number of units paid each year. If not specified, when
                # Job.employment_types is FULLTIME, a default value is inferred
                # based on unit. Default values:
                # - HOURLY: 2080
                # - DAILY: 260
                # - WEEKLY: 52
                # - MONTHLY: 12
                # - ANNUAL: 1
            "amount": { # Represents an amount of money with its currency type. # Optional.
                #
                # Compensation amount.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "type": "A String", # Required.
                #
                # Compensation type.
            "unit": "A String", # Optional.
                #
                # Frequency of the specified amount.
                #
                # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
          },
        ],
        "type": "A String", # Deprecated. Use entries instead.
            #
            # Optional.
            #
            # Type of job compensation.
      },
      "jobTitle": "A String", # Required.
          #
          # The title of the job, such as "Software Engineer"
          #
          # The maximum number of allowed characters is 500.
      "department": "A String", # Optional.
          #
          # The department or functional area within the company with the open
          # position.
          #
          # The maximum number of allowed characters is 255.
      "applicationInstruction": "A String", # Optional but at least one of application_urls,
          # application_email_list or application_instruction must be
          # specified.
          #
          # Use this field to provide instructions, such as "Mail your application
          # to ...", that a candidate can follow to apply for the job.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 3,000.
      "description": "A String", # Required.
          #
          # The description of the job, which typically includes a multi-paragraph
          # description of the company and related information. Separate fields are
          # provided on the job object for responsibilities,
          # qualifications, and other job characteristics. Use of
          # these separate job fields is recommended.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 100,000.
      "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
          # provided.
          #
          # The resource name of the company listing the job, such as
          # /companies/foo. This field takes precedence over the
          # distributor-assigned company identifier, distributor_company_id.
      "incentives": "A String", # Optional.
          #
          # A description of bonus, commission, and other compensation
          # incentives associated with the job not including salary or pay.
          #
          # The maximum number of allowed characters is 10,000.
      "requisitionId": "A String", # Required.
          #
          # The requisition ID, also referred to as the posting ID, assigned by the
          # client to identify a job. This field is intended to be used by clients
          # for client identification and tracking of listings. A job is not allowed
          # to be created if there is another job with the same requisition_id,
          # company_name and language_code.
          #
          # The maximum number of allowed characters is 255.
      "qualifications": "A String", # Optional.
          #
          # A description of the qualifications required to perform the
          # job. The use of this field is recommended
          # as an alternative to using the more general description field.
          #
          # This field accepts and sanitizes HTML input, and also accepts
          # bold, italic, ordered list, and unordered list markup tags.
          #
          # The maximum number of allowed characters is 10,000.
      "visibility": "A String", # Optional.
          #
          # The visibility of the job.
          # Defaults to JobVisibility.PRIVATE if not specified.
          # Currently only JobVisibility.PRIVATE is supported.
      "expireTime": "A String", # Optional but strongly recommended for the best service
          # experience.
          #
          # The expiration timestamp of the job. After this timestamp, the
          # job is marked as expired, and it no longer appears in search results. The
          # expired job can't be deleted or listed by the DeleteJob and
          # ListJobs APIs, but it can be retrieved with the GetJob API or
          # updated with the UpdateJob API. An expired job can be updated and
          # opened again by using a future expiration timestamp. Updating an expired
          # job fails if there is another existing open job with same
          # requisition_id, company_name and language_code.
          #
          # The expired jobs are retained in our system for 90 days. However, the
          # overall expired job count cannot exceed 3 times the maximum of open jobs
          # count over the past week, otherwise jobs with earlier expire time are
          # cleaned first. Expired jobs are no longer accessible after they are cleaned
          # out.
          # The format of this field is RFC 3339 date strings. Example:
          # 2000-01-01T00:00:00.999999999Z
          # See
          # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
          #
          # A valid date range is between 1970-01-01T00:00:00.0Z and
          # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
          # time not provided.
          #
          # If this value is not provided at the time of job creation or is invalid,
          # the job posting expires after 30 days from the job's creation time. For
          # example, if the job was created on 2017/01/01 13:00AM UTC with an
          # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
          #
          # If this value is not provided but expiry_date is, expiry_date is
          # used.
          #
          # If this value is not provided on job update, it depends on the field masks
          # set by UpdateJobRequest.update_job_fields. If the field masks include
          # expiry_time, or the masks are empty meaning that every field is
          # updated, the job posting expires after 30 days from the job's last
          # update time. Otherwise the expiration date isn't updated.
      "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
          #
          # The date this job was most recently published in UTC format. The default
          # value is the time the request arrives at the server.
          # and time zone are either specified elsewhere or are not significant. The date
          # is relative to the Proleptic Gregorian Calendar. This can represent:
          #
          # * A full date, with non-zero year, month and day values
          # * A month and day value, with a zero year, e.g. an anniversary
          # * A year on its own, with zero month and day values
          # * A year and month value, with a zero day, e.g. a credit card expiration date
          #
          # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
        "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
            # month and day.
        "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
            # if specifying a year by itself or a year and month where the day is not
            # significant.
        "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
            # a year.
      },
      "applicationEmailList": [ # Optional but at least one of application_urls,
          # application_email_list or application_instruction must be
          # specified.
          #
          # Use this field to specify email address(es) to which resumes or
          # applications can be sent.
          #
          # The maximum number of allowed characters is 255.
        "A String",
      ],
      "createTime": "A String", # Output only.
          #
          # The timestamp when this job was created.
      "benefits": [ # Optional.
          #
          # The benefits included with the job.
        "A String",
      ],
      "name": "A String", # Required during job update.
          #
          # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
          # of this field in job queries and API calls is preferred over the use of
          # requisition_id since this value is unique.
      "level": "A String", # Optional.
          #
          # The experience level associated with the job, such as "Entry Level".
      "companyTitle": "A String", # Deprecated. Use company_display_name instead.
          #
          # Output only.
          #
          # The name of the company listing the job.
      "region": "A String", # Optional.
          #
          # The job Region (for example, state, country) throughout which the job
          # is available. If this field is set, a
          # LocationFilter in a search query within the job region
          # finds this job if an exact location match is not specified.
          # If this field is set, setting job locations
          # to the same location level as this field is strongly recommended.
      "promotionValue": 42, # Optional.
          #
          # A promotion value of the job, as determined by the client.
          # The value determines the sort order of the jobs returned when searching for
          # jobs using the featured jobs search call, with higher promotional values
          # being returned first and ties being resolved by relevance sort. Only the
          # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
          #
          # Default value is 0, and negative values are treated as 0.
      "referenceUrl": "A String", # Output only.
          #
          # The URL of a web page that displays job details.
      "customAttributes": { # Optional.
          #
          # A map of fields to hold both filterable and non-filterable custom job
          # attributes that are not covered by the provided structured fields.
          #
          # This field is a more general combination of the deprecated id-based
          # filterable_custom_fields and string-based
          # non_filterable_custom_fields.
          #
          # The keys of the map are strings up to 64 bytes and must match the
          # pattern: a-zA-Z*.
          #
          # At most 100 filterable and at most 100 unfilterable keys are supported.
          # For filterable `string_values`, across all keys at most 200 values are
          # allowed, with each string no more than 255 characters. For unfilterable
          # `string_values`, the maximum total size of `string_values` across all keys
          # is 50KB.
        "a_key": { # Custom attribute values that are either filterable or non-filterable.
          "filterable": True or False, # Optional.
              #
              # If the `filterable` flag is true, custom field values are searchable.
              # If false, values are not searchable.
              #
              # Default is false.
          "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
              # be specified.
              #
              # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
              # `CASE_INSENSITIVE_MATCH`) search.
              # For filterable `string_values`, a maximum total number of 200 values
              # is allowed, with each `string_value` has a byte size of no more than
              # 255B. For unfilterable `string_values`, the maximum total byte size of
              # unfilterable `string_values` is 50KB.
              #
              # Empty strings are not allowed.
            "values": [ # Required.
                #
                # String values.
              "A String",
            ],
          },
          "longValue": "A String", # Optional but at least one of string_values or long_value must
              # be specified.
              #
              # This field is used to perform number range search.
              # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
              # `long_value`, a value between Long.MIN and Long.MAX is allowed.
        },
      },
      "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
          # provided.
          #
          # A unique company identifier used by job distributors to identify an
          # employer's company entity. company_name takes precedence over
          # this field, and is the recommended field to use to identify companies.
          #
          # The maximum number of allowed characters is 255.
    },
    "processingOptions": { # Input only. # Optional.
        # 
        # Options for job processing.
        # 
        # UpdateJobRequest.disable_street_address_resolution is ignored if this
        # flag is set.
        #
        # Options for job processing.
      "htmlSanitization": "A String", # Optional.
          #
          # Option for job HTML content sanitization. Applied fields are:
          #
          # * description
          # * applicationInstruction
          # * incentives
          # * qualifications
          # * responsibilities
          #
          # HTML tags in these fields may be stripped if sanitiazation is not disabled.
          #
          # Defaults to HtmlSanitization.SIMPLE_FORMATTING_ONLY.
      "disableStreetAddressResolution": True or False, # Optional.
          #
          # If set to `true`, the service does not attempt to resolve a
          # more precise address for the job.
    },
    "disableStreetAddressResolution": True or False, # Deprecated. Please use processing_options. This flag is ignored if
        # processing_options is set.
        # 
        # Optional.
        # 
        # If set to `true`, the service does not attempt resolve a more precise
        # address for the job.
  }

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

Returns:
  An object of the form:

    { # A Job resource represents a job posting (also referred to as a "job listing"
      # or "job requisition"). A job belongs to a Company, which is the hiring
      # entity responsible for the job.
    "languageCode": "A String", # Optional.
        #
        # The language of the posting. This field is distinct from
        # any requirements for fluency that are associated with the job.
        #
        # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
        # For more information, see
        # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
        # class="external" target="_blank" }.
        #
        # If this field is unspecified and Job.description is present, detected
        # language code based on Job.description is assigned, otherwise
        # defaults to 'en_US'.
    "updateTime": "A String", # Output only.
        #
        # The timestamp when this job was last updated.
    "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
        #
        # Optional.
        #
        # A map of fields to hold non-filterable custom job attributes, similar to
        # filterable_custom_fields. These fields are distinct in that the data
        # in these fields are not indexed. Therefore, the client cannot search
        # against them, nor can the client use them to list jobs.
        #
        # The key of the map can be any valid string.
      "a_key": { # Resource that represents the custom data not captured by the standard fields.
        "values": [ # Optional.
            #
            # The values of the custom data.
          "A String",
        ],
      },
    },
    "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The end date of the job in UTC time zone. Typically this field
        # is used for contracting engagements.
        # Dates prior to 1970/1/1 and invalid date formats are ignored.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "companyDisplayName": "A String", # Output only.
        #
        # The name of the company listing the job.
    "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The start date of the job in UTC time zone. Typically this field
        # is used for contracting engagements.
        # Dates prior to 1970/1/1 and invalid date formats are ignored.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "jobLocations": [ # Output only.
        #
        # Structured locations of the job, resolved from locations.
      { # Output only.
          #
          # 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].
        },
      },
    ],
    "locations": [ # Optional but strongly recommended for the best service experience.
        #
        # Location(s) where the emploeyer is looking to hire for this job posting.
        #
        # Specifying the full street address(es) of the hiring location enables
        # better API results, especially job searches by commute time.
        #
        # At most 50 locations are allowed for best search performance. If a job has
        # more locations, it is suggested to split it into multiple jobs with unique
        # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
        # multiple jobs with the same requisition_id, company_name and
        # language_code are not allowed. If the original requisition_id must
        # be preserved, a custom field should be used for storage. It is also
        # suggested to group the locations that close to each other in the same job
        # for better search experience.
        #
        # The maximum number of allowed characters is 500.
      "A String",
    ],
    "employmentTypes": [ # Optional.
        #
        # The employment type(s) of a job, for example,
        # full time or
        # part time.
      "A String",
    ],
    "applicationUrls": [ # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this URL field to direct an applicant to a website, for example to
        # link to an online application form.
        #
        # The maximum number of allowed characters is 2,000.
      "A String",
    ],
    "educationLevels": [ # Optional.
        #
        # The desired education level for the job, such as
        # "Bachelors", "Masters", "Doctorate".
      "A String",
    ],
    "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
        #
        # Optional.
        #
        # Job compensation information.
        #
        # This field replaces compensation_info. Only
        # CompensationInfo.entries or extended_compensation_info can be set,
        # otherwise an exception is thrown.
        #
        # Describes job compensation.
      "annualizedTotalCompensationUnspecified": True or False, # Output only.
          #
          # Indicates annualized total compensation range cannot be derived, due to
          # the job's all CompensationEntry cannot be annualized.
          # See CompensationEntry for explanation on annualization and base
          # compensation entry.
      "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
          #
          # Annualized base compensation range.
          #
          # Compensation range.
        "max": { # Deprecated. See CompensationInfo. # Required.
            #
            # Maximum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
        "min": { # Deprecated. See CompensationInfo. # Required.
            #
            # Minimum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
      },
      "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
          #
          # Annualized total compensation range.
          #
          # Compensation range.
        "max": { # Deprecated. See CompensationInfo. # Required.
            #
            # Maximum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
        "min": { # Deprecated. See CompensationInfo. # Required.
            #
            # Minimum value.
            #
            # Decimal number.
          "units": "A String", # Whole units.
          "micros": 42, # Micro (10^-6) units.
              # The value must be between -999,999 and +999,999 inclusive.
              # If `units` is positive, `micros` must be positive or zero.
              # If `units` is zero, `micros` can be positive, zero, or negative.
              # If `units` is negative, `micros` must be negative or zero.
              # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
        },
      },
      "currency": "A String", # Optional.
          #
          # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
          # currency code.
      "annualizedBaseCompensationUnspecified": True or False, # Output only.
          #
          # Indicates annualized base compensation range cannot be derived, due to
          # the job's base compensation entry cannot be annualized.
          # See CompensationEntry for explanation on annualization and base
          # compensation entry.
      "entries": [ # Optional.
          #
          # Job compensation information.
          #
          # At most one entry can be of type
          # ExtendedCompensationInfo.CompensationType.BASE, which is
          # referred as ** base compensation entry ** for the job.
        { # Deprecated. See CompensationInfo.
            #
            # A compensation entry that represents one component of compensation, such
            # as base pay, bonus, or other compensation type.
            #
            # Annualization: One compensation entry can be annualized if
            # - it contains valid amount or range.
            # - and its expected_units_per_year is set or can be derived.
            # Its annualized range is determined as (amount or range) times
            # expected_units_per_year.
          "description": "A String", # Optional.
              #
              # Compensation description.
          "range": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Compensation range.
              #
              # Compensation range.
            "max": { # Deprecated. See CompensationInfo. # Required.
                #
                # Maximum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
            "min": { # Deprecated. See CompensationInfo. # Required.
                #
                # Minimum value.
                #
                # Decimal number.
              "units": "A String", # Whole units.
              "micros": 42, # Micro (10^-6) units.
                  # The value must be between -999,999 and +999,999 inclusive.
                  # If `units` is positive, `micros` must be positive or zero.
                  # If `units` is zero, `micros` can be positive, zero, or negative.
                  # If `units` is negative, `micros` must be negative or zero.
                  # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
            },
          },
          "unspecified": True or False, # Optional.
              #
              # Indicates compensation amount and range are unset.
          "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Expected number of units paid each year. If not specified, when
              # Job.employment_types is FULLTIME, a default value is inferred
              # based on unit. Default values:
              # - HOURLY: 2080
              # - DAILY: 260
              # - WEEKLY: 52
              # - MONTHLY: 12
              # - ANNUAL: 1
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "amount": { # Deprecated. See CompensationInfo. # Optional.
              #
              # Monetary amount.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "type": "A String", # Required.
              #
              # Compensation type.
          "unit": "A String", # Optional.
              #
              # Frequency of the specified amount.
              #
              # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
        },
      ],
    },
    "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
        #
        # Optional.
        #
        # A map of fields to hold filterable custom job attributes not captured by
        # the standard fields such as job_title, company_name, or
        # level. These custom fields store arbitrary
        # string values, and can be used for purposes not covered by
        # the structured fields. For the best search experience, use of the
        # structured rather than custom fields is recommended.
        #
        # Data stored in these custom fields fields are indexed and
        # searched against by keyword searches (see
        # SearchJobsRequest.custom_field_filters][]).
        #
        # The map key must be a number between 1-20. If an invalid key is
        # provided on job create or update, an error is returned.
      "a_key": { # Resource that represents the custom data not captured by the standard fields.
        "values": [ # Optional.
            #
            # The values of the custom data.
          "A String",
        ],
      },
    },
    "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
        #
        # Optional but strongly recommended to be provided for the best service
        # experience.
        #
        # The expiration date of the job in UTC time. After 12 am on this date, the
        # job is marked as expired, and it no longer appears in search results.
        # The expired job can't be deleted or listed by the DeleteJob and
        # ListJobs APIs, but it can be retrieved with the GetJob API or
        # updated with the UpdateJob API. An expired job can be updated and
        # opened again by using a future expiration date. It can also remain expired.
        # Updating an expired job to be open fails if there is another existing open
        # job with same requisition_id, company_name and language_code.
        #
        # The expired jobs are retained in our system for 90 days. However, the
        # overall expired job count cannot exceed 3 times the maximum of open jobs
        # count over the past week, otherwise jobs with earlier expire time are
        # removed first. Expired jobs are no longer accessible after they are cleaned
        # out.
        #
        # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
        # ignored and treated as expiry date not provided.
        #
        # If this value is not provided on job creation or is invalid, the job
        # posting expires after 30 days from the job's creation time. For example, if
        # the job was created on 2017/01/01 13:00AM UTC with an unspecified
        # expiration date, the job expires after 2017/01/31 13:00AM UTC.
        #
        # If this value is not provided on job update, it depends on the field masks
        # set by UpdateJobRequest.update_job_fields. If the field masks include
        # expiry_date, or the masks are empty meaning that every field is
        # updated, the job expires after 30 days from the job's last update time.
        # Otherwise the expiration date isn't updated.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "responsibilities": "A String", # Optional.
        #
        # A description of job responsibilities. The use of this field is
        # recommended as an alternative to using the more general description
        # field.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 10,000.
    "compensationInfo": { # Job compensation details. # Optional.
        #
        # Job compensation information.
      "annualizedBaseCompensationRange": { # Compensation range. # Output only.
          #
          # Annualized base compensation range. Computed as
          # base compensation entry's CompensationEntry.compensation times
          # CompensationEntry.expected_units_per_year.
          #
          # See CompensationEntry for explanation on compensation annualization.
        "max": { # Represents an amount of money with its currency type. # Optional.
            #
            # The maximum amount of compensation. If left empty, the value is set
            # to a maximal compensation value and the currency code is set to
            # match the currency code of
            # min_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "min": { # Represents an amount of money with its currency type. # Optional.
            #
            # The minimum amount of compensation. If left empty, the value is set
            # to zero and the currency code is set to match the
            # currency code of max_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
      },
      "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # A lower bound on a range for compensation or pay for the job.
          # The currency type is specified in compensation_amount.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "annualizedTotalCompensationRange": { # Compensation range. # Output only.
          #
          # Annualized total compensation range. Computed as
          # all compensation entries' CompensationEntry.compensation times
          # CompensationEntry.expected_units_per_year.
          #
          # See CompensationEntry for explanation on compensation annualization.
        "max": { # Represents an amount of money with its currency type. # Optional.
            #
            # The maximum amount of compensation. If left empty, the value is set
            # to a maximal compensation value and the currency code is set to
            # match the currency code of
            # min_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
        "min": { # Represents an amount of money with its currency type. # Optional.
            #
            # The minimum amount of compensation. If left empty, the value is set
            # to zero and the currency code is set to match the
            # currency code of max_compensation.
          "nanos": 42, # Number of nano (10^-9) units of the amount.
              # The value must be between -999,999,999 and +999,999,999 inclusive.
              # If `units` is positive, `nanos` must be positive or zero.
              # If `units` is zero, `nanos` can be positive, zero, or negative.
              # If `units` is negative, `nanos` must be negative or zero.
              # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
          "units": "A String", # The whole units of the amount.
              # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
          "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
        },
      },
      "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # An upper bound on a range for compensation or pay for the job.
          # The currency type is specified in compensation_amount.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # The amount of compensation or pay for the job.
          # As an alternative, compensation_amount_min and
          # compensation_amount_max may be used to define a range of
          # compensation.
        "nanos": 42, # Number of nano (10^-9) units of the amount.
            # The value must be between -999,999,999 and +999,999,999 inclusive.
            # If `units` is positive, `nanos` must be positive or zero.
            # If `units` is zero, `nanos` can be positive, zero, or negative.
            # If `units` is negative, `nanos` must be negative or zero.
            # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
        "units": "A String", # The whole units of the amount.
            # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
        "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
      },
      "entries": [ # Optional.
          #
          # Job compensation information.
          #
          # At most one entry can be of type
          # CompensationInfo.CompensationType.BASE, which is
          # referred as ** base compensation entry ** for the job.
        { # A compensation entry that represents one component of compensation, such
            # as base pay, bonus, or other compensation type.
            #
            # Annualization: One compensation entry can be annualized if
            # - it contains valid amount or range.
            # - and its expected_units_per_year is set or can be derived.
            # Its annualized range is determined as (amount or range) times
            # expected_units_per_year.
          "description": "A String", # Optional.
              #
              # Compensation description.  For example, could
              # indicate equity terms or provide additional context to an estimated
              # bonus.
          "range": { # Compensation range. # Optional.
              #
              # Compensation range.
            "max": { # Represents an amount of money with its currency type. # Optional.
                #
                # The maximum amount of compensation. If left empty, the value is set
                # to a maximal compensation value and the currency code is set to
                # match the currency code of
                # min_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "min": { # Represents an amount of money with its currency type. # Optional.
                #
                # The minimum amount of compensation. If left empty, the value is set
                # to zero and the currency code is set to match the
                # currency code of max_compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
          },
          "expectedUnitsPerYear": 3.14, # Optional.
              #
              # Expected number of units paid each year. If not specified, when
              # Job.employment_types is FULLTIME, a default value is inferred
              # based on unit. Default values:
              # - HOURLY: 2080
              # - DAILY: 260
              # - WEEKLY: 52
              # - MONTHLY: 12
              # - ANNUAL: 1
          "amount": { # Represents an amount of money with its currency type. # Optional.
              #
              # Compensation amount.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "type": "A String", # Required.
              #
              # Compensation type.
          "unit": "A String", # Optional.
              #
              # Frequency of the specified amount.
              #
              # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
        },
      ],
      "type": "A String", # Deprecated. Use entries instead.
          #
          # Optional.
          #
          # Type of job compensation.
    },
    "jobTitle": "A String", # Required.
        #
        # The title of the job, such as "Software Engineer"
        #
        # The maximum number of allowed characters is 500.
    "department": "A String", # Optional.
        #
        # The department or functional area within the company with the open
        # position.
        #
        # The maximum number of allowed characters is 255.
    "applicationInstruction": "A String", # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this field to provide instructions, such as "Mail your application
        # to ...", that a candidate can follow to apply for the job.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 3,000.
    "description": "A String", # Required.
        #
        # The description of the job, which typically includes a multi-paragraph
        # description of the company and related information. Separate fields are
        # provided on the job object for responsibilities,
        # qualifications, and other job characteristics. Use of
        # these separate job fields is recommended.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 100,000.
    "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
        # provided.
        #
        # The resource name of the company listing the job, such as
        # /companies/foo. This field takes precedence over the
        # distributor-assigned company identifier, distributor_company_id.
    "incentives": "A String", # Optional.
        #
        # A description of bonus, commission, and other compensation
        # incentives associated with the job not including salary or pay.
        #
        # The maximum number of allowed characters is 10,000.
    "requisitionId": "A String", # Required.
        #
        # The requisition ID, also referred to as the posting ID, assigned by the
        # client to identify a job. This field is intended to be used by clients
        # for client identification and tracking of listings. A job is not allowed
        # to be created if there is another job with the same requisition_id,
        # company_name and language_code.
        #
        # The maximum number of allowed characters is 255.
    "qualifications": "A String", # Optional.
        #
        # A description of the qualifications required to perform the
        # job. The use of this field is recommended
        # as an alternative to using the more general description field.
        #
        # This field accepts and sanitizes HTML input, and also accepts
        # bold, italic, ordered list, and unordered list markup tags.
        #
        # The maximum number of allowed characters is 10,000.
    "visibility": "A String", # Optional.
        #
        # The visibility of the job.
        # Defaults to JobVisibility.PRIVATE if not specified.
        # Currently only JobVisibility.PRIVATE is supported.
    "expireTime": "A String", # Optional but strongly recommended for the best service
        # experience.
        #
        # The expiration timestamp of the job. After this timestamp, the
        # job is marked as expired, and it no longer appears in search results. The
        # expired job can't be deleted or listed by the DeleteJob and
        # ListJobs APIs, but it can be retrieved with the GetJob API or
        # updated with the UpdateJob API. An expired job can be updated and
        # opened again by using a future expiration timestamp. Updating an expired
        # job fails if there is another existing open job with same
        # requisition_id, company_name and language_code.
        #
        # The expired jobs are retained in our system for 90 days. However, the
        # overall expired job count cannot exceed 3 times the maximum of open jobs
        # count over the past week, otherwise jobs with earlier expire time are
        # cleaned first. Expired jobs are no longer accessible after they are cleaned
        # out.
        # The format of this field is RFC 3339 date strings. Example:
        # 2000-01-01T00:00:00.999999999Z
        # See
        # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
        #
        # A valid date range is between 1970-01-01T00:00:00.0Z and
        # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
        # time not provided.
        #
        # If this value is not provided at the time of job creation or is invalid,
        # the job posting expires after 30 days from the job's creation time. For
        # example, if the job was created on 2017/01/01 13:00AM UTC with an
        # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
        #
        # If this value is not provided but expiry_date is, expiry_date is
        # used.
        #
        # If this value is not provided on job update, it depends on the field masks
        # set by UpdateJobRequest.update_job_fields. If the field masks include
        # expiry_time, or the masks are empty meaning that every field is
        # updated, the job posting expires after 30 days from the job's last
        # update time. Otherwise the expiration date isn't updated.
    "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
        #
        # The date this job was most recently published in UTC format. The default
        # value is the time the request arrives at the server.
        # and time zone are either specified elsewhere or are not significant. The date
        # is relative to the Proleptic Gregorian Calendar. This can represent:
        #
        # * A full date, with non-zero year, month and day values
        # * A month and day value, with a zero year, e.g. an anniversary
        # * A year on its own, with zero month and day values
        # * A year and month value, with a zero day, e.g. a credit card expiration date
        #
        # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
      "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
          # month and day.
      "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
          # if specifying a year by itself or a year and month where the day is not
          # significant.
      "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
          # a year.
    },
    "applicationEmailList": [ # Optional but at least one of application_urls,
        # application_email_list or application_instruction must be
        # specified.
        #
        # Use this field to specify email address(es) to which resumes or
        # applications can be sent.
        #
        # The maximum number of allowed characters is 255.
      "A String",
    ],
    "createTime": "A String", # Output only.
        #
        # The timestamp when this job was created.
    "benefits": [ # Optional.
        #
        # The benefits included with the job.
      "A String",
    ],
    "name": "A String", # Required during job update.
        #
        # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
        # of this field in job queries and API calls is preferred over the use of
        # requisition_id since this value is unique.
    "level": "A String", # Optional.
        #
        # The experience level associated with the job, such as "Entry Level".
    "companyTitle": "A String", # Deprecated. Use company_display_name instead.
        #
        # Output only.
        #
        # The name of the company listing the job.
    "region": "A String", # Optional.
        #
        # The job Region (for example, state, country) throughout which the job
        # is available. If this field is set, a
        # LocationFilter in a search query within the job region
        # finds this job if an exact location match is not specified.
        # If this field is set, setting job locations
        # to the same location level as this field is strongly recommended.
    "promotionValue": 42, # Optional.
        #
        # A promotion value of the job, as determined by the client.
        # The value determines the sort order of the jobs returned when searching for
        # jobs using the featured jobs search call, with higher promotional values
        # being returned first and ties being resolved by relevance sort. Only the
        # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
        #
        # Default value is 0, and negative values are treated as 0.
    "referenceUrl": "A String", # Output only.
        #
        # The URL of a web page that displays job details.
    "customAttributes": { # Optional.
        #
        # A map of fields to hold both filterable and non-filterable custom job
        # attributes that are not covered by the provided structured fields.
        #
        # This field is a more general combination of the deprecated id-based
        # filterable_custom_fields and string-based
        # non_filterable_custom_fields.
        #
        # The keys of the map are strings up to 64 bytes and must match the
        # pattern: a-zA-Z*.
        #
        # At most 100 filterable and at most 100 unfilterable keys are supported.
        # For filterable `string_values`, across all keys at most 200 values are
        # allowed, with each string no more than 255 characters. For unfilterable
        # `string_values`, the maximum total size of `string_values` across all keys
        # is 50KB.
      "a_key": { # Custom attribute values that are either filterable or non-filterable.
        "filterable": True or False, # Optional.
            #
            # If the `filterable` flag is true, custom field values are searchable.
            # If false, values are not searchable.
            #
            # Default is false.
        "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
            # be specified.
            #
            # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
            # `CASE_INSENSITIVE_MATCH`) search.
            # For filterable `string_values`, a maximum total number of 200 values
            # is allowed, with each `string_value` has a byte size of no more than
            # 255B. For unfilterable `string_values`, the maximum total byte size of
            # unfilterable `string_values` is 50KB.
            #
            # Empty strings are not allowed.
          "values": [ # Required.
              #
              # String values.
            "A String",
          ],
        },
        "longValue": "A String", # Optional but at least one of string_values or long_value must
            # be specified.
            #
            # This field is used to perform number range search.
            # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
            # `long_value`, a value between Long.MIN and Long.MAX is allowed.
      },
    },
    "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
        # provided.
        #
        # A unique company identifier used by job distributors to identify an
        # employer's company entity. company_name takes precedence over
        # this field, and is the recommended field to use to identify companies.
        #
        # The maximum number of allowed characters is 255.
  }</pre>
</div>

<div class="method">
    <code class="details" id="search">search(body, x__xgafv=None)</code>
  <pre>Searches for jobs using the provided SearchJobsRequest.

This call constrains the visibility of jobs
present in the database, and only returns jobs that the caller has
permission to search against.

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

{ # Input only.
      # 
      # The Request body of the `SearchJobs` call.
    "orderBy": "A String", # Deprecated. Use sort_by instead.
        # 
        # Optional.
        # 
        # The criteria determining how search results are sorted.
        # Defaults to SortBy.RELEVANCE_DESC if no value is specified.
    "histogramFacets": { # Input only. # Optional.
        # 
        # Restrictions on what fields to perform histogram on, such as
        # `COMPANY_SIZE` etc.
        #
        # Histogram facets to be specified in SearchJobsRequest.
      "simpleHistogramFacets": [ # Optional. Specifies the simple type of histogram facets, for example,
          # `COMPANY_SIZE`, `EMPLOYMENT_TYPE` etc. This field is equivalent to
          # GetHistogramRequest.
        "A String",
      ],
      "customAttributeHistogramFacets": [ # Optional.
          #
          # Specifies the custom attributes histogram requests.
          # Duplicate values of CustomAttributeHistogramRequest.key are not
          # allowed.
        { # Custom attributes histogram request. An error will be thrown if neither
            # string_value_histogram or long_value_histogram_bucketing_option has
            # been defined.
          "stringValueHistogram": True or False, # Optional. If set to true, the response will include the histogram value for
              # each key as a string.
          "longValueHistogramBucketingOption": { # Input only. # Optional.
              #
              # Specifies buckets used to perform a range histogram on Job's
              # filterable long custom field values, or min/max value requirements.
              #
              # Use this field to specify bucketing option for the histogram search response.
            "bucketBounds": [ # Required.
                #
                # Two adjacent values form a histogram bucket. Values should be in
                # ascending order. For example, if [5, 10, 15] are provided, four buckets are
                # created: (-inf, 5), 5, 10), [10, 15), [15, inf). At most 20
                # [buckets_bound is supported.
              3.14,
            ],
            "requiresMinMax": True or False, # Optional.
                #
                # If set to true, the histogram result includes minimum/maximum
                # value of the numeric field.
          },
          "key": "A String", # Required.
              #
              # Specifies the custom field key to perform a histogram on. If specified
              # without `long_value_histogram_bucketing_option`, histogram on string values
              # of the given `key` is triggered, otherwise histogram is performed on long
              # values.
        },
      ],
      "compensationHistogramFacets": [ # Optional.
          #
          # Specifies compensation field-based histogram requests.
          # Duplicate values of CompensationHistogramRequest.type are not allowed.
        { # Input only.
            #
            # Compensation based histogram request.
          "bucketingOption": { # Input only. # Required.
              #
              # Numeric histogram options, like buckets, whether include min or max value.
              #
              # Use this field to specify bucketing option for the histogram search response.
            "bucketBounds": [ # Required.
                #
                # Two adjacent values form a histogram bucket. Values should be in
                # ascending order. For example, if [5, 10, 15] are provided, four buckets are
                # created: (-inf, 5), 5, 10), [10, 15), [15, inf). At most 20
                # [buckets_bound is supported.
              3.14,
            ],
            "requiresMinMax": True or False, # Optional.
                #
                # If set to true, the histogram result includes minimum/maximum
                # value of the numeric field.
          },
          "type": "A String", # Required.
              #
              # Type of the request, representing which field the histogramming should be
              # performed over. A single request can only specify one histogram of each
              # `CompensationHistogramRequestType`.
        },
      ],
    },
    "enableBroadening": True or False, # Optional.
        # 
        # Controls whether to broaden the search when it produces sparse results.
        # Broadened queries append results to the end of the matching results
        # list.
        # 
        # Defaults to false.
    "enablePreciseResultSize": True or False, # Optional.
        # 
        # Controls if the search job request requires the return of a precise
        # count of the first 300 results. Setting this to `true` ensures
        # consistency in the number of results per page. Best practice is to set this
        # value to true if a client allows users to jump directly to a
        # non-sequential search results page.
        # 
        # Enabling this flag may adversely impact performance.
        # 
        # Defaults to false.
    "disableRelevanceThresholding": True or False, # Optional.
        # 
        # Controls whether to disable relevance thresholding. Relevance
        # thresholding removes jobs that have low relevance in search results,
        # for example, removing "Assistant to the CEO" positions from the search
        # results of a search for "CEO".
        # 
        # Disabling relevance thresholding improves the accuracy of subsequent
        # search requests.
        # 
        # Defaults to false.
    "pageSize": 42, # Optional.
        # 
        # A limit on the number of jobs returned in the search results.
        # Increasing this value above the default value of 10 can increase search
        # response time. The value can be between 1 and 100.
    "pageToken": "A String", # Optional.
        # 
        # The token specifying the current offset within
        # search results. See SearchJobsResponse.next_page_token for
        # an explanation of how to obtain the next set of query results.
    "jobView": "A String", # Optional.
        # 
        # The number of job attributes returned for jobs in the
        # search response. Defaults to JobView.SMALL if no value is specified.
    "requestMetadata": { # Input only. # Required.
        # 
        # The meta information collected about the job searcher, used to improve the
        # search quality of the service. The identifiers, (such as `user_id`) are
        # provided by users, and must be unique and consistent.
        #
        # Meta information related to the job searcher or entity
        # conducting the job search. This information is used to improve the
        # performance of the service.
      "deviceInfo": { # Input only. # Optional.
          #
          # The type of device used by the job seeker at the time of the call to the
          # service.
          #
          # Device information collected from the job seeker, candidate, or
          # other entity conducting the job search. Providing this information improves
          # the quality of the search results across devices.
        "deviceType": "A String", # Optional.
            #
            # Type of the device.
        "id": "A String", # Optional.
            #
            # A device-specific ID. The ID must be a unique identifier that distinguishes
            # the device from other devices.
      },
      "sessionId": "A String", # Required.
          #
          # A unique session identification string. A session is defined as the
          # duration of an end user's interaction with the service over a period.
          # Obfuscate this field for privacy concerns before
          # providing it to the API.
          #
          # If this field is not available for some reason, please send "UNKNOWN". Note
          # that any improvements to the service model for a particular tenant site,
          # rely on this field being set correctly to some unique session_id.
      "userId": "A String", # Required.
          #
          # A unique user identification string, as determined by the client. The
          # client is responsible for ensuring client-level uniqueness of this value
          # in order to have the strongest positive impact on search quality.
          # Obfuscate this field for privacy concerns before
          # providing it to the service.
          #
          # If this field is not available for some reason, please send "UNKNOWN". Note
          # that any improvements to the service model for a particular tenant site,
          # rely on this field being set correctly to some unique user_id.
      "domain": "A String", # Required.
          #
          # The client-defined scope or source of the service call, which typically
          # is the domain on
          # which the service has been implemented and is currently being run.
          #
          # For example, if the service is being run by client <em>Foo, Inc.</em>, on
          # job board www.foo.com and career site www.bar.com, then this field is
          # set to "foo.com" for use on the job board, and "bar.com" for use on the
          # career site.
          #
          # If this field is not available for some reason, send "UNKNOWN". Note that
          # any improvements to the service model for a particular tenant site rely on
          # this field being set correctly to some domain.
    },
    "sortBy": "A String", # Optional.
        # 
        # The criteria determining how search results are sorted.
        # Defaults to SortBy.RELEVANCE_DESC if no value is specified.
    "filters": { # Input only. # Deprecated. Use query instead.
        # 
        # Optional.
        # 
        # Restrictions on the scope of the search request, such as filtering
        # by location.
        #
        # Deprecated. Use JobQuery instead.
        #
        # The filters required to perform a search query or histogram.
      "disableSpellCheck": True or False, # Optional.
          #
          # This flag controls the spell-check feature. If false, the
          # service attempts to correct a misspelled query,
          # for example, "enginee" is corrected to "engineer".
          #
          # Defaults to false: a spell check is performed.
      "customAttributeFilter": "A String", # Optional.
          #
          # This filter specifies a structured syntax to match against the
          # Job.custom_attributes that are marked as `filterable`.
          #
          # The syntax for this expression is a subset of Google SQL syntax.
          #
          # Supported operators are: =, !=, <, <=, >, >= where the left of the operator
          # is a custom field key and the right of the operator is a number or string
          # (surrounded by quotes) value.
          #
          # Supported functions are LOWER(<field_name>) to
          # perform case insensitive match and EMPTY(<field_name>) to filter on the
          # existence of a key.
          #
          # Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
          # nesting (For example, "((A AND B AND C) OR NOT D) AND E"), and there can
          # be a maximum of 100 comparisons/functions in the expression. The expression
          # must be < 3000 bytes in length.
          #
          # Sample Query:
          # (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1)) AND key2 > 100
      "customFieldFilters": { # Deprecated. Use custom_attribute_filter instead.
          #
          # Optional.
          #
          # This filter specifies searching against
          # custom field values. See Job.filterable_custom_fields for information.
          # The key value specifies a number between 1-20 (the service
          # supports 20 custom fields) corresponding to the desired custom field map
          # value. If an invalid key is provided or specified together with
          # custom_attribute_filter, an error is thrown.
        "a_key": { # Input only.
            #
            # Custom field filter of the search.
          "type": "A String", # Optional.
              #
              # The type of filter.
              # Defaults to FilterType.OR.
          "queries": [ # Required.
              #
              # The query strings for the filter.
            "A String",
          ],
        },
      },
      "tenantJobOnly": True or False, # Deprecated. Do not use this field.
          #
          # This flag controls whether the job search should be restricted to jobs
          # owned by the current user.
          #
          # Defaults to false where all jobs accessible to the
          # user are searched against.
      "categories": [ # Optional.
          #
          # The category filter specifies the categories of jobs to search against.
          # See Category for more information.
          #
          # If a value is not specified, jobs from any category are searched against.
          #
          # If multiple values are specified, jobs from any of the specified
          # categories are searched against.
        "A String",
      ],
      "employmentTypes": [ # Optional.
          #
          # The employment type filter specifies the employment type of jobs to
          # search against, such as EmploymentType.FULL_TIME.
          #
          # If a value is not specified, jobs in the search results include any
          # employment type.
          #
          # If multiple values are specified, jobs in the search results include any
          # of the specified employment types.
        "A String",
      ],
      "companyTitles": [ # Optional.
          #
          # This filter specifies the exact company titles
          # of jobs to search against.
          #
          # If a value is not specified, jobs within the search results can be
          # associated with any company.
          #
          # If multiple values are specified, jobs within the search results may be
          # associated with any of the specified companies.
          #
          # At most 20 company title filters are allowed.
        "A String",
      ],
      "query": "A String", # Optional.
          #
          # The query filter contains the keywords that match against the job
          # title, description, and location fields.
          #
          # The maximum query size is 255 bytes/characters.
      "extendedCompensationFilter": { # Deprecated. Always use CompensationFilter. # Deprecated. Always use compensation_filter.
          #
          # Optional.
          #
          # This search filter is applied only to
          # Job.extended_compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs that meet
          # these criteria are searched. If a filter is not defined, all open jobs
          # are searched.
          #
          # Input only.
          #
          # Filter on job compensation type and amount.
        "currency": "A String", # Optional.
            #
            # Specify currency in 3-letter
            # [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) format. If
            # unspecified, jobs are returned regardless of currency.
        "type": "A String", # Required.
            #
            # Type of filter.
        "compensationRange": { # Deprecated. See CompensationInfo. # Optional.
            #
            # Compensation range.
            #
            # Compensation range.
          "max": { # Deprecated. See CompensationInfo. # Required.
              #
              # Maximum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "min": { # Deprecated. See CompensationInfo. # Required.
              #
              # Minimum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
        },
        "compensationUnits": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # ExtendedCompensationInfo.CompensationUnit.
          "A String",
        ],
        "includeJobWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
      "commuteFilter": { # Input only. # Optional.
          #
          #  Allows filtering jobs by commute time with different travel methods (e.g.
          #  driving or public transit). Note: this only works with COMMUTE
          #  MODE. When specified, [JobFilters.location_filters] will be
          #  ignored.
          #
          #  Currently we do not support sorting by commute time.
          #
          # Parameters needed for commute search.
        "departureHourLocal": 42, # Optional.
            #
            # The departure hour to use to calculate traffic impact. Accepts an
            # integer between 0 and 23, representing the hour in the time zone of the
            # start_location. Must not be present if road_traffic is specified.
        "roadTraffic": "A String", # Optional.
            #
            # Specifies the traffic density to use when calculating commute time.
            # Must not be present if departure_hour_local is specified.
        "allowNonStreetLevelAddress": True or False, # Optional.
            # If `true`, jobs without street level addresses may also be returned.
            # For city level addresses, the city center is used. For state and coarser
            # level addresses, text matching is used.
            # If this field is set to `false` or is not specified, only jobs that include
            # street level addresses will be returned by commute search.
        "travelTime": "A String", # Required.
            #
            # The maximum travel time in seconds. The maximum allowed value is `3600s`
            # (one hour). Format is `123s`.
        "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
            #
            # The latitude and longitude of the location from which to calculate the
            # commute time.
            # 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].
        },
        "method": "A String", # Required.
            #
            # The method of transportation for which to calculate the commute time.
      },
      "languageCodes": [ # Optional.
          #
          # This filter specifies the locale of jobs to search against,
          # for example, "en-US".
          #
          # If a value is not specified, the search results may contain jobs in any
          # locale.
          #
          #
          # Language codes should be in BCP-47 format, for example, "en-US" or
          # "sr-Latn". For more information, see [Tags for Identifying
          # Languages](https://tools.ietf.org/html/bcp47).
          #
          # At most 10 language code filters are allowed.
        "A String",
      ],
      "companyNames": [ # Optional.
          #
          # The company names filter specifies the company entities to search
          # against.
          #
          # If a value is not specified, jobs are searched for against all companies.
          #
          # If multiple values are specified, jobs are searched against the
          # specified companies.
          #
          # At most 20 company filters are allowed.
        "A String",
      ],
      "publishDateRange": "A String", # Optional.
          #
          # Jobs published within a range specified by this filter are searched
          # against, for example, DateRange.PAST_MONTH. If a value is not
          # specified, all open jobs are searched against regardless of the
          # date they were published.
      "locationFilters": [ # Optional.
          #
          # The location filter specifies geo-regions containing the jobs to
          # search against. See LocationFilter for more information.
          #
          # If a location value is not specified, jobs are retrieved
          # from all locations.
          #
          # If multiple values are specified, jobs are retrieved from any of the
          # specified locations. If different values are specified for the
          # LocationFilter.distance_in_miles parameter, the maximum provided
          # distance is used for all locations.
          #
          # At most 5 location filters are allowed.
        { # Input only.
            #
            # Geographic region of the search.
          "regionCode": "A String", # Optional.
              #
              # CLDR region code of the country/region of the address. This will be used
              # to address ambiguity of the user-input location, e.g. "Liverpool"
              # against "Liverpool, NY, US" or "Liverpool, UK".
              #
              # Set this field if all the jobs to search against are from a same region,
              # or jobs are world-wide but the job seeker is from a specific region.
              #
              # See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: "CH" for Switzerland.
          "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Optional.
              #
              # The latitude and longitude of the geographic center from which to
              # search. This field is ignored if `location_name` is provided.
              # 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].
          },
          "name": "A String", # Optional.
              #
              # The address name, such as "Mountain View" or "Bay Area".
          "isTelecommute": True or False, # Optional.
              #
              # Allows the client to return jobs without a
              # set location, specifically, telecommuting jobs (telecomuting is considered
              # by the service as a special location.
              # Job.allow_telecommute indicates if a job permits telecommuting.
              # If this field is true, telecommuting jobs are searched, and
              # name and lat_lng are
              # ignored.
              # This filter can be used by itself to search exclusively for telecommuting
              # jobs, or it can be combined with another location
              # filter to search for a combination of job locations,
              # such as "Mountain View" or "telecommuting" jobs. However, when used in
              # combination with other location filters, telecommuting jobs can be
              # treated as less relevant than other jobs in the search response.
          "distanceInMiles": 3.14, # Optional.
              #
              #
              # The distance_in_miles is applied when the location being searched for is
              # identified as a city or smaller. When the location being searched for is a
              # state or larger, this field is ignored.
        },
      ],
      "compensationFilter": { # Input only. # Optional.
          #
          # This search filter is applied only to
          # Job.compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs that meet
          # this criteria are searched. If a filter is not defined, all open jobs
          # are searched.
          #
          # Filter on job compensation type and amount.
        "units": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # CompensationInfo.CompensationUnit.
          "A String",
        ],
        "range": { # Compensation range. # Optional.
            #
            # Compensation range.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "type": "A String", # Required.
            #
            # Type of filter.
        "includeJobsWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
    },
    "offset": 42, # Optional.
        # 
        # An integer that specifies the current offset (that is, starting result
        # location, amongst the jobs deemed by the API as relevant) in search
        # results. This field is only considered if page_token is unset.
        # 
        # For example, 0 means to  return results starting from the first matching
        # job, and 10 means to return from the 11th job. This can be used for
        # pagination, (for example, pageSize = 10 and offset = 10 means to return
        # from the second page).
    "query": { # Input only. # Optional.
        # 
        # Query used to search against jobs, such as keyword, location filters, etc.
        #
        # The query required to perform a search query or histogram.
      "disableSpellCheck": True or False, # Optional.
          #
          # This flag controls the spell-check feature. If false, the
          # service attempts to correct a misspelled query,
          # for example, "enginee" is corrected to "engineer".
          #
          # Defaults to false: a spell check is performed.
      "customAttributeFilter": "A String", # Optional.
          #
          # This filter specifies a structured syntax to match against the
          # Job.custom_attributes marked as `filterable`.
          #
          # The syntax for this expression is a subset of Google SQL syntax.
          #
          # Supported operators are: =, !=, <, <=, >, >= where the left of the operator
          # is a custom field key and the right of the operator is a number or string
          # (surrounded by quotes) value.
          #
          # Supported functions are LOWER(<field_name>) to
          # perform case insensitive match and EMPTY(<field_name>) to filter on the
          # existence of a key.
          #
          # Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
          # nesting (for example, "((A AND B AND C) OR NOT D) AND E"), a maximum of 50
          # comparisons/functions are allowed in the expression. The expression
          # must be < 2000 characters in length.
          #
          # Sample Query:
          # (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1)) AND key2 > 100
      "publishDateRange": "A String", # Optional.
          #
          # Jobs published within a range specified by this filter are searched
          # against, for example, DateRange.PAST_MONTH. If a value isn't
          # specified, all open jobs are searched against regardless of their
          # published date.
      "commuteFilter": { # Input only. # Optional.
          #
          #  Allows filtering jobs by commute time with different travel methods (for
          #  example, driving or public transit). Note: This only works with COMMUTE
          #  MODE. When specified, [JobQuery.location_filters] is
          #  ignored.
          #
          #  Currently we don't support sorting by commute time.
          #
          # Parameters needed for commute search.
        "departureHourLocal": 42, # Optional.
            #
            # The departure hour to use to calculate traffic impact. Accepts an
            # integer between 0 and 23, representing the hour in the time zone of the
            # start_location. Must not be present if road_traffic is specified.
        "roadTraffic": "A String", # Optional.
            #
            # Specifies the traffic density to use when calculating commute time.
            # Must not be present if departure_hour_local is specified.
        "allowNonStreetLevelAddress": True or False, # Optional.
            # If `true`, jobs without street level addresses may also be returned.
            # For city level addresses, the city center is used. For state and coarser
            # level addresses, text matching is used.
            # If this field is set to `false` or is not specified, only jobs that include
            # street level addresses will be returned by commute search.
        "travelTime": "A String", # Required.
            #
            # The maximum travel time in seconds. The maximum allowed value is `3600s`
            # (one hour). Format is `123s`.
        "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
            #
            # The latitude and longitude of the location from which to calculate the
            # commute time.
            # 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].
        },
        "method": "A String", # Required.
            #
            # The method of transportation for which to calculate the commute time.
      },
      "employmentTypes": [ # Optional.
          #
          # The employment type filter specifies the employment type of jobs to
          # search against, such as EmploymentType.FULL_TIME.
          #
          # If a value is not specified, jobs in the search results include any
          # employment type.
          #
          # If multiple values are specified, jobs in the search results include
          # any of the specified employment types.
        "A String",
      ],
      "categories": [ # Optional.
          #
          # The category filter specifies the categories of jobs to search against.
          # See Category for more information.
          #
          # If a value is not specified, jobs from any category are searched against.
          #
          # If multiple values are specified, jobs from any of the specified
          # categories are searched against.
        "A String",
      ],
      "query": "A String", # Optional.
          #
          # The query string that matches against the job title, description, and
          # location fields.
          #
          # The maximum query size is 255 bytes.
      "languageCodes": [ # Optional.
          #
          # This filter specifies the locale of jobs to search against,
          # for example, "en-US".
          #
          # If a value isn't specified, the search results can contain jobs in any
          # locale.
          #
          #
          # Language codes should be in BCP-47 format, such as "en-US" or "sr-Latn".
          # For more information, see
          # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).
          #
          # At most 10 language code filters are allowed.
        "A String",
      ],
      "companyNames": [ # Optional.
          #
          # This filter specifies the company entities to search against.
          #
          # If a value isn't specified, jobs are searched for against all
          # companies.
          #
          # If multiple values are specified, jobs are searched against the
          # companies specified.
          #
          # At most 20 company filters are allowed.
        "A String",
      ],
      "companyDisplayNames": [ # Optional.
          #
          # This filter specifies the exact company display
          # name of the jobs to search against.
          #
          # If a value isn't specified, jobs within the search results are
          # associated with any company.
          #
          # If multiple values are specified, jobs within the search results may be
          # associated with any of the specified companies.
          #
          # At most 20 company display name filters are allowed.
        "A String",
      ],
      "locationFilters": [ # Optional.
          #
          # The location filter specifies geo-regions containing the jobs to
          # search against. See LocationFilter for more information.
          #
          # If a location value isn't specified, jobs fitting the other search
          # criteria are retrieved regardless of where they're located.
          #
          # If multiple values are specified, jobs are retrieved from any of the
          # specified locations. If different values are specified for the
          # LocationFilter.distance_in_miles parameter, the maximum provided
          # distance is used for all locations.
          #
          # At most 5 location filters are allowed.
        { # Input only.
            #
            # Geographic region of the search.
          "regionCode": "A String", # Optional.
              #
              # CLDR region code of the country/region of the address. This will be used
              # to address ambiguity of the user-input location, e.g. "Liverpool"
              # against "Liverpool, NY, US" or "Liverpool, UK".
              #
              # Set this field if all the jobs to search against are from a same region,
              # or jobs are world-wide but the job seeker is from a specific region.
              #
              # See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: "CH" for Switzerland.
          "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Optional.
              #
              # The latitude and longitude of the geographic center from which to
              # search. This field is ignored if `location_name` is provided.
              # 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].
          },
          "name": "A String", # Optional.
              #
              # The address name, such as "Mountain View" or "Bay Area".
          "isTelecommute": True or False, # Optional.
              #
              # Allows the client to return jobs without a
              # set location, specifically, telecommuting jobs (telecomuting is considered
              # by the service as a special location.
              # Job.allow_telecommute indicates if a job permits telecommuting.
              # If this field is true, telecommuting jobs are searched, and
              # name and lat_lng are
              # ignored.
              # This filter can be used by itself to search exclusively for telecommuting
              # jobs, or it can be combined with another location
              # filter to search for a combination of job locations,
              # such as "Mountain View" or "telecommuting" jobs. However, when used in
              # combination with other location filters, telecommuting jobs can be
              # treated as less relevant than other jobs in the search response.
          "distanceInMiles": 3.14, # Optional.
              #
              #
              # The distance_in_miles is applied when the location being searched for is
              # identified as a city or smaller. When the location being searched for is a
              # state or larger, this field is ignored.
        },
      ],
      "compensationFilter": { # Input only. # Optional.
          #
          # This search filter is applied only to
          # Job.compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs meeting
          # these criteria are searched. If a filter isn't defined, all open jobs
          # are searched.
          #
          # Filter on job compensation type and amount.
        "units": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # CompensationInfo.CompensationUnit.
          "A String",
        ],
        "range": { # Compensation range. # Optional.
            #
            # Compensation range.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "type": "A String", # Required.
            #
            # Type of filter.
        "includeJobsWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
    },
    "mode": "A String", # Required.
        # 
        # Mode of a search.
  }

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

Returns:
  An object of the form:

    { # Output only.
      #
      # Response for SearchJob method.
    "nextPageToken": "A String", # The token that specifies the starting position of the next page of results.
        # This field is empty if there are no more results.
    "estimatedTotalSize": "A String", # An estimation of the number of jobs that match the specified query.
        #
        # This number is not guaranteed to be accurate. For accurate results,
        # seenenable_precise_result_size.
    "totalSize": "A String", # The precise result count, which is available only if the client set
        # enable_precise_result_size to `true` or if the response
        # is the last page of results. Otherwise, the value will be `-1`.
    "matchingJobs": [ # The Job entities that match the specified SearchJobsRequest.
      { # Output only.
          #
          # Job entry with metadata inside SearchJobsResponse.
        "searchTextSnippet": "A String", # Contains snippets of text from the Job.description and similar
            # fields that most closely match a search query's keywords, if available.
            # All HTML tags in the original fields are stripped when returned in this
            # field, and matching query keywords are enclosed in HTML bold tags.
        "job": { # A Job resource represents a job posting (also referred to as a "job listing" # Job resource that matches the specified SearchJobsRequest.
            # or "job requisition"). A job belongs to a Company, which is the hiring
            # entity responsible for the job.
          "languageCode": "A String", # Optional.
              #
              # The language of the posting. This field is distinct from
              # any requirements for fluency that are associated with the job.
              #
              # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
              # For more information, see
              # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
              # class="external" target="_blank" }.
              #
              # If this field is unspecified and Job.description is present, detected
              # language code based on Job.description is assigned, otherwise
              # defaults to 'en_US'.
          "updateTime": "A String", # Output only.
              #
              # The timestamp when this job was last updated.
          "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
              #
              # Optional.
              #
              # A map of fields to hold non-filterable custom job attributes, similar to
              # filterable_custom_fields. These fields are distinct in that the data
              # in these fields are not indexed. Therefore, the client cannot search
              # against them, nor can the client use them to list jobs.
              #
              # The key of the map can be any valid string.
            "a_key": { # Resource that represents the custom data not captured by the standard fields.
              "values": [ # Optional.
                  #
                  # The values of the custom data.
                "A String",
              ],
            },
          },
          "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
              #
              # The end date of the job in UTC time zone. Typically this field
              # is used for contracting engagements.
              # Dates prior to 1970/1/1 and invalid date formats are ignored.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "companyDisplayName": "A String", # Output only.
              #
              # The name of the company listing the job.
          "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
              #
              # The start date of the job in UTC time zone. Typically this field
              # is used for contracting engagements.
              # Dates prior to 1970/1/1 and invalid date formats are ignored.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "jobLocations": [ # Output only.
              #
              # Structured locations of the job, resolved from locations.
            { # Output only.
                #
                # 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].
              },
            },
          ],
          "locations": [ # Optional but strongly recommended for the best service experience.
              #
              # Location(s) where the emploeyer is looking to hire for this job posting.
              #
              # Specifying the full street address(es) of the hiring location enables
              # better API results, especially job searches by commute time.
              #
              # At most 50 locations are allowed for best search performance. If a job has
              # more locations, it is suggested to split it into multiple jobs with unique
              # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
              # multiple jobs with the same requisition_id, company_name and
              # language_code are not allowed. If the original requisition_id must
              # be preserved, a custom field should be used for storage. It is also
              # suggested to group the locations that close to each other in the same job
              # for better search experience.
              #
              # The maximum number of allowed characters is 500.
            "A String",
          ],
          "employmentTypes": [ # Optional.
              #
              # The employment type(s) of a job, for example,
              # full time or
              # part time.
            "A String",
          ],
          "applicationUrls": [ # Optional but at least one of application_urls,
              # application_email_list or application_instruction must be
              # specified.
              #
              # Use this URL field to direct an applicant to a website, for example to
              # link to an online application form.
              #
              # The maximum number of allowed characters is 2,000.
            "A String",
          ],
          "educationLevels": [ # Optional.
              #
              # The desired education level for the job, such as
              # "Bachelors", "Masters", "Doctorate".
            "A String",
          ],
          "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
              #
              # Optional.
              #
              # Job compensation information.
              #
              # This field replaces compensation_info. Only
              # CompensationInfo.entries or extended_compensation_info can be set,
              # otherwise an exception is thrown.
              #
              # Describes job compensation.
            "annualizedTotalCompensationUnspecified": True or False, # Output only.
                #
                # Indicates annualized total compensation range cannot be derived, due to
                # the job's all CompensationEntry cannot be annualized.
                # See CompensationEntry for explanation on annualization and base
                # compensation entry.
            "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
                #
                # Annualized base compensation range.
                #
                # Compensation range.
              "max": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Maximum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "min": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Minimum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
            },
            "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
                #
                # Annualized total compensation range.
                #
                # Compensation range.
              "max": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Maximum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "min": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Minimum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
            },
            "currency": "A String", # Optional.
                #
                # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
                # currency code.
            "annualizedBaseCompensationUnspecified": True or False, # Output only.
                #
                # Indicates annualized base compensation range cannot be derived, due to
                # the job's base compensation entry cannot be annualized.
                # See CompensationEntry for explanation on annualization and base
                # compensation entry.
            "entries": [ # Optional.
                #
                # Job compensation information.
                #
                # At most one entry can be of type
                # ExtendedCompensationInfo.CompensationType.BASE, which is
                # referred as ** base compensation entry ** for the job.
              { # Deprecated. See CompensationInfo.
                  #
                  # A compensation entry that represents one component of compensation, such
                  # as base pay, bonus, or other compensation type.
                  #
                  # Annualization: One compensation entry can be annualized if
                  # - it contains valid amount or range.
                  # - and its expected_units_per_year is set or can be derived.
                  # Its annualized range is determined as (amount or range) times
                  # expected_units_per_year.
                "description": "A String", # Optional.
                    #
                    # Compensation description.
                "range": { # Deprecated. See CompensationInfo. # Optional.
                    #
                    # Compensation range.
                    #
                    # Compensation range.
                  "max": { # Deprecated. See CompensationInfo. # Required.
                      #
                      # Maximum value.
                      #
                      # Decimal number.
                    "units": "A String", # Whole units.
                    "micros": 42, # Micro (10^-6) units.
                        # The value must be between -999,999 and +999,999 inclusive.
                        # If `units` is positive, `micros` must be positive or zero.
                        # If `units` is zero, `micros` can be positive, zero, or negative.
                        # If `units` is negative, `micros` must be negative or zero.
                        # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                  },
                  "min": { # Deprecated. See CompensationInfo. # Required.
                      #
                      # Minimum value.
                      #
                      # Decimal number.
                    "units": "A String", # Whole units.
                    "micros": 42, # Micro (10^-6) units.
                        # The value must be between -999,999 and +999,999 inclusive.
                        # If `units` is positive, `micros` must be positive or zero.
                        # If `units` is zero, `micros` can be positive, zero, or negative.
                        # If `units` is negative, `micros` must be negative or zero.
                        # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                  },
                },
                "unspecified": True or False, # Optional.
                    #
                    # Indicates compensation amount and range are unset.
                "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
                    #
                    # Expected number of units paid each year. If not specified, when
                    # Job.employment_types is FULLTIME, a default value is inferred
                    # based on unit. Default values:
                    # - HOURLY: 2080
                    # - DAILY: 260
                    # - WEEKLY: 52
                    # - MONTHLY: 12
                    # - ANNUAL: 1
                    #
                    # Decimal number.
                  "units": "A String", # Whole units.
                  "micros": 42, # Micro (10^-6) units.
                      # The value must be between -999,999 and +999,999 inclusive.
                      # If `units` is positive, `micros` must be positive or zero.
                      # If `units` is zero, `micros` can be positive, zero, or negative.
                      # If `units` is negative, `micros` must be negative or zero.
                      # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                },
                "amount": { # Deprecated. See CompensationInfo. # Optional.
                    #
                    # Monetary amount.
                    #
                    # Decimal number.
                  "units": "A String", # Whole units.
                  "micros": 42, # Micro (10^-6) units.
                      # The value must be between -999,999 and +999,999 inclusive.
                      # If `units` is positive, `micros` must be positive or zero.
                      # If `units` is zero, `micros` can be positive, zero, or negative.
                      # If `units` is negative, `micros` must be negative or zero.
                      # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                },
                "type": "A String", # Required.
                    #
                    # Compensation type.
                "unit": "A String", # Optional.
                    #
                    # Frequency of the specified amount.
                    #
                    # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
              },
            ],
          },
          "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
              #
              # Optional.
              #
              # A map of fields to hold filterable custom job attributes not captured by
              # the standard fields such as job_title, company_name, or
              # level. These custom fields store arbitrary
              # string values, and can be used for purposes not covered by
              # the structured fields. For the best search experience, use of the
              # structured rather than custom fields is recommended.
              #
              # Data stored in these custom fields fields are indexed and
              # searched against by keyword searches (see
              # SearchJobsRequest.custom_field_filters][]).
              #
              # The map key must be a number between 1-20. If an invalid key is
              # provided on job create or update, an error is returned.
            "a_key": { # Resource that represents the custom data not captured by the standard fields.
              "values": [ # Optional.
                  #
                  # The values of the custom data.
                "A String",
              ],
            },
          },
          "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
              #
              # Optional but strongly recommended to be provided for the best service
              # experience.
              #
              # The expiration date of the job in UTC time. After 12 am on this date, the
              # job is marked as expired, and it no longer appears in search results.
              # The expired job can't be deleted or listed by the DeleteJob and
              # ListJobs APIs, but it can be retrieved with the GetJob API or
              # updated with the UpdateJob API. An expired job can be updated and
              # opened again by using a future expiration date. It can also remain expired.
              # Updating an expired job to be open fails if there is another existing open
              # job with same requisition_id, company_name and language_code.
              #
              # The expired jobs are retained in our system for 90 days. However, the
              # overall expired job count cannot exceed 3 times the maximum of open jobs
              # count over the past week, otherwise jobs with earlier expire time are
              # removed first. Expired jobs are no longer accessible after they are cleaned
              # out.
              #
              # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
              # ignored and treated as expiry date not provided.
              #
              # If this value is not provided on job creation or is invalid, the job
              # posting expires after 30 days from the job's creation time. For example, if
              # the job was created on 2017/01/01 13:00AM UTC with an unspecified
              # expiration date, the job expires after 2017/01/31 13:00AM UTC.
              #
              # If this value is not provided on job update, it depends on the field masks
              # set by UpdateJobRequest.update_job_fields. If the field masks include
              # expiry_date, or the masks are empty meaning that every field is
              # updated, the job expires after 30 days from the job's last update time.
              # Otherwise the expiration date isn't updated.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "responsibilities": "A String", # Optional.
              #
              # A description of job responsibilities. The use of this field is
              # recommended as an alternative to using the more general description
              # field.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 10,000.
          "compensationInfo": { # Job compensation details. # Optional.
              #
              # Job compensation information.
            "annualizedBaseCompensationRange": { # Compensation range. # Output only.
                #
                # Annualized base compensation range. Computed as
                # base compensation entry's CompensationEntry.compensation times
                # CompensationEntry.expected_units_per_year.
                #
                # See CompensationEntry for explanation on compensation annualization.
              "max": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The maximum amount of compensation. If left empty, the value is set
                  # to a maximal compensation value and the currency code is set to
                  # match the currency code of
                  # min_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "min": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The minimum amount of compensation. If left empty, the value is set
                  # to zero and the currency code is set to match the
                  # currency code of max_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
            },
            "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # A lower bound on a range for compensation or pay for the job.
                # The currency type is specified in compensation_amount.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "annualizedTotalCompensationRange": { # Compensation range. # Output only.
                #
                # Annualized total compensation range. Computed as
                # all compensation entries' CompensationEntry.compensation times
                # CompensationEntry.expected_units_per_year.
                #
                # See CompensationEntry for explanation on compensation annualization.
              "max": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The maximum amount of compensation. If left empty, the value is set
                  # to a maximal compensation value and the currency code is set to
                  # match the currency code of
                  # min_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "min": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The minimum amount of compensation. If left empty, the value is set
                  # to zero and the currency code is set to match the
                  # currency code of max_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
            },
            "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # An upper bound on a range for compensation or pay for the job.
                # The currency type is specified in compensation_amount.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # The amount of compensation or pay for the job.
                # As an alternative, compensation_amount_min and
                # compensation_amount_max may be used to define a range of
                # compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "entries": [ # Optional.
                #
                # Job compensation information.
                #
                # At most one entry can be of type
                # CompensationInfo.CompensationType.BASE, which is
                # referred as ** base compensation entry ** for the job.
              { # A compensation entry that represents one component of compensation, such
                  # as base pay, bonus, or other compensation type.
                  #
                  # Annualization: One compensation entry can be annualized if
                  # - it contains valid amount or range.
                  # - and its expected_units_per_year is set or can be derived.
                  # Its annualized range is determined as (amount or range) times
                  # expected_units_per_year.
                "description": "A String", # Optional.
                    #
                    # Compensation description.  For example, could
                    # indicate equity terms or provide additional context to an estimated
                    # bonus.
                "range": { # Compensation range. # Optional.
                    #
                    # Compensation range.
                  "max": { # Represents an amount of money with its currency type. # Optional.
                      #
                      # The maximum amount of compensation. If left empty, the value is set
                      # to a maximal compensation value and the currency code is set to
                      # match the currency code of
                      # min_compensation.
                    "nanos": 42, # Number of nano (10^-9) units of the amount.
                        # The value must be between -999,999,999 and +999,999,999 inclusive.
                        # If `units` is positive, `nanos` must be positive or zero.
                        # If `units` is zero, `nanos` can be positive, zero, or negative.
                        # If `units` is negative, `nanos` must be negative or zero.
                        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                    "units": "A String", # The whole units of the amount.
                        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                  },
                  "min": { # Represents an amount of money with its currency type. # Optional.
                      #
                      # The minimum amount of compensation. If left empty, the value is set
                      # to zero and the currency code is set to match the
                      # currency code of max_compensation.
                    "nanos": 42, # Number of nano (10^-9) units of the amount.
                        # The value must be between -999,999,999 and +999,999,999 inclusive.
                        # If `units` is positive, `nanos` must be positive or zero.
                        # If `units` is zero, `nanos` can be positive, zero, or negative.
                        # If `units` is negative, `nanos` must be negative or zero.
                        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                    "units": "A String", # The whole units of the amount.
                        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                  },
                },
                "expectedUnitsPerYear": 3.14, # Optional.
                    #
                    # Expected number of units paid each year. If not specified, when
                    # Job.employment_types is FULLTIME, a default value is inferred
                    # based on unit. Default values:
                    # - HOURLY: 2080
                    # - DAILY: 260
                    # - WEEKLY: 52
                    # - MONTHLY: 12
                    # - ANNUAL: 1
                "amount": { # Represents an amount of money with its currency type. # Optional.
                    #
                    # Compensation amount.
                  "nanos": 42, # Number of nano (10^-9) units of the amount.
                      # The value must be between -999,999,999 and +999,999,999 inclusive.
                      # If `units` is positive, `nanos` must be positive or zero.
                      # If `units` is zero, `nanos` can be positive, zero, or negative.
                      # If `units` is negative, `nanos` must be negative or zero.
                      # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                  "units": "A String", # The whole units of the amount.
                      # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                  "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                },
                "type": "A String", # Required.
                    #
                    # Compensation type.
                "unit": "A String", # Optional.
                    #
                    # Frequency of the specified amount.
                    #
                    # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
              },
            ],
            "type": "A String", # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # Type of job compensation.
          },
          "jobTitle": "A String", # Required.
              #
              # The title of the job, such as "Software Engineer"
              #
              # The maximum number of allowed characters is 500.
          "department": "A String", # Optional.
              #
              # The department or functional area within the company with the open
              # position.
              #
              # The maximum number of allowed characters is 255.
          "applicationInstruction": "A String", # Optional but at least one of application_urls,
              # application_email_list or application_instruction must be
              # specified.
              #
              # Use this field to provide instructions, such as "Mail your application
              # to ...", that a candidate can follow to apply for the job.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 3,000.
          "description": "A String", # Required.
              #
              # The description of the job, which typically includes a multi-paragraph
              # description of the company and related information. Separate fields are
              # provided on the job object for responsibilities,
              # qualifications, and other job characteristics. Use of
              # these separate job fields is recommended.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 100,000.
          "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
              # provided.
              #
              # The resource name of the company listing the job, such as
              # /companies/foo. This field takes precedence over the
              # distributor-assigned company identifier, distributor_company_id.
          "incentives": "A String", # Optional.
              #
              # A description of bonus, commission, and other compensation
              # incentives associated with the job not including salary or pay.
              #
              # The maximum number of allowed characters is 10,000.
          "requisitionId": "A String", # Required.
              #
              # The requisition ID, also referred to as the posting ID, assigned by the
              # client to identify a job. This field is intended to be used by clients
              # for client identification and tracking of listings. A job is not allowed
              # to be created if there is another job with the same requisition_id,
              # company_name and language_code.
              #
              # The maximum number of allowed characters is 255.
          "qualifications": "A String", # Optional.
              #
              # A description of the qualifications required to perform the
              # job. The use of this field is recommended
              # as an alternative to using the more general description field.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 10,000.
          "visibility": "A String", # Optional.
              #
              # The visibility of the job.
              # Defaults to JobVisibility.PRIVATE if not specified.
              # Currently only JobVisibility.PRIVATE is supported.
          "expireTime": "A String", # Optional but strongly recommended for the best service
              # experience.
              #
              # The expiration timestamp of the job. After this timestamp, the
              # job is marked as expired, and it no longer appears in search results. The
              # expired job can't be deleted or listed by the DeleteJob and
              # ListJobs APIs, but it can be retrieved with the GetJob API or
              # updated with the UpdateJob API. An expired job can be updated and
              # opened again by using a future expiration timestamp. Updating an expired
              # job fails if there is another existing open job with same
              # requisition_id, company_name and language_code.
              #
              # The expired jobs are retained in our system for 90 days. However, the
              # overall expired job count cannot exceed 3 times the maximum of open jobs
              # count over the past week, otherwise jobs with earlier expire time are
              # cleaned first. Expired jobs are no longer accessible after they are cleaned
              # out.
              # The format of this field is RFC 3339 date strings. Example:
              # 2000-01-01T00:00:00.999999999Z
              # See
              # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
              #
              # A valid date range is between 1970-01-01T00:00:00.0Z and
              # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
              # time not provided.
              #
              # If this value is not provided at the time of job creation or is invalid,
              # the job posting expires after 30 days from the job's creation time. For
              # example, if the job was created on 2017/01/01 13:00AM UTC with an
              # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
              #
              # If this value is not provided but expiry_date is, expiry_date is
              # used.
              #
              # If this value is not provided on job update, it depends on the field masks
              # set by UpdateJobRequest.update_job_fields. If the field masks include
              # expiry_time, or the masks are empty meaning that every field is
              # updated, the job posting expires after 30 days from the job's last
              # update time. Otherwise the expiration date isn't updated.
          "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
              #
              # The date this job was most recently published in UTC format. The default
              # value is the time the request arrives at the server.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "applicationEmailList": [ # Optional but at least one of application_urls,
              # application_email_list or application_instruction must be
              # specified.
              #
              # Use this field to specify email address(es) to which resumes or
              # applications can be sent.
              #
              # The maximum number of allowed characters is 255.
            "A String",
          ],
          "createTime": "A String", # Output only.
              #
              # The timestamp when this job was created.
          "benefits": [ # Optional.
              #
              # The benefits included with the job.
            "A String",
          ],
          "name": "A String", # Required during job update.
              #
              # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
              # of this field in job queries and API calls is preferred over the use of
              # requisition_id since this value is unique.
          "level": "A String", # Optional.
              #
              # The experience level associated with the job, such as "Entry Level".
          "companyTitle": "A String", # Deprecated. Use company_display_name instead.
              #
              # Output only.
              #
              # The name of the company listing the job.
          "region": "A String", # Optional.
              #
              # The job Region (for example, state, country) throughout which the job
              # is available. If this field is set, a
              # LocationFilter in a search query within the job region
              # finds this job if an exact location match is not specified.
              # If this field is set, setting job locations
              # to the same location level as this field is strongly recommended.
          "promotionValue": 42, # Optional.
              #
              # A promotion value of the job, as determined by the client.
              # The value determines the sort order of the jobs returned when searching for
              # jobs using the featured jobs search call, with higher promotional values
              # being returned first and ties being resolved by relevance sort. Only the
              # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
              #
              # Default value is 0, and negative values are treated as 0.
          "referenceUrl": "A String", # Output only.
              #
              # The URL of a web page that displays job details.
          "customAttributes": { # Optional.
              #
              # A map of fields to hold both filterable and non-filterable custom job
              # attributes that are not covered by the provided structured fields.
              #
              # This field is a more general combination of the deprecated id-based
              # filterable_custom_fields and string-based
              # non_filterable_custom_fields.
              #
              # The keys of the map are strings up to 64 bytes and must match the
              # pattern: a-zA-Z*.
              #
              # At most 100 filterable and at most 100 unfilterable keys are supported.
              # For filterable `string_values`, across all keys at most 200 values are
              # allowed, with each string no more than 255 characters. For unfilterable
              # `string_values`, the maximum total size of `string_values` across all keys
              # is 50KB.
            "a_key": { # Custom attribute values that are either filterable or non-filterable.
              "filterable": True or False, # Optional.
                  #
                  # If the `filterable` flag is true, custom field values are searchable.
                  # If false, values are not searchable.
                  #
                  # Default is false.
              "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
                  # be specified.
                  #
                  # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
                  # `CASE_INSENSITIVE_MATCH`) search.
                  # For filterable `string_values`, a maximum total number of 200 values
                  # is allowed, with each `string_value` has a byte size of no more than
                  # 255B. For unfilterable `string_values`, the maximum total byte size of
                  # unfilterable `string_values` is 50KB.
                  #
                  # Empty strings are not allowed.
                "values": [ # Required.
                    #
                    # String values.
                  "A String",
                ],
              },
              "longValue": "A String", # Optional but at least one of string_values or long_value must
                  # be specified.
                  #
                  # This field is used to perform number range search.
                  # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
                  # `long_value`, a value between Long.MIN and Long.MAX is allowed.
            },
          },
          "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
              # provided.
              #
              # A unique company identifier used by job distributors to identify an
              # employer's company entity. company_name takes precedence over
              # this field, and is the recommended field to use to identify companies.
              #
              # The maximum number of allowed characters is 255.
        },
        "commuteInfo": { # Output only. # Commute information which is generated based on specified
            #  CommutePreference.
            #
            # Commute details related to this job.
          "travelDuration": "A String", # The number of seconds required to travel to the job location from the query
              # location. A duration of 0 seconds indicates that the job is not
              # reachable within the requested duration, but was returned as part of an
              # expanded query.
          "jobLocation": { # Output only. # Location used as the destination in the commute calculation.
              #
              # 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].
            },
          },
        },
        "jobSummary": "A String", # A summary of the job with core information that's displayed on the search
            # results listing page.
        "jobTitleSnippet": "A String", # Contains snippets of text from the Job.job_title field most
            # closely matching a search query's keywords, if available. The matching
            # query keywords are enclosed in HTML bold tags.
      },
    ],
    "numJobsFromBroadenedQuery": 42, # If query broadening is enabled, we may append additional results from the
        # broadened query. This number indicates how many of the jobs returned in the
        # jobs field are from the broadened query. These results are always at the
        # end of the jobs list. In particular, a value of 0 means all the jobs in the
        # jobs list are from the original (without broadening) query. If this
        # field is non-zero, subsequent requests with offset after this result set
        # should contain all broadened results.
    "appliedJobLocationFilters": [ # The location filters that the service applied to the specified query. If
        # any filters are lat-lng based, the JobLocation.location_type is
        # JobLocation.LocationType#LOCATION_TYPE_UNSPECIFIED.
      { # Output only.
          #
          # 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].
        },
      },
    ],
    "histogramResults": { # Output only. # The histogram results that match specified
        # SearchJobsRequest.HistogramFacets.
        #
        # Histogram results that matches HistogramFacets specified in
        # SearchJobsRequest.
      "customAttributeHistogramResults": [ # Specifies histogram results for custom attributes that
          # matches HistogramFacets.custom_attribute_histogram_facets.
        { # Output only.
            #
            # Custom attribute histogram result.
          "longValueHistogramResult": { # Output only. # Stores bucketed histogram counting result or min/max values for
              # custom attribute long values associated with `key`.
              #
              # Custom numeric bucketing result.
            "counts": [ # Count within each bucket. Its size is the length of
                # NumericBucketingOption.bucket_bounds plus 1.
              { # Represents count of jobs within one bucket.
                "count": 42, # Number of jobs whose numeric field value fall into `range`.
                "range": { # Represents starting and ending value of a range in double. # Bucket range on which histogram was performed for the numeric field,
                    # that is, the count represents number of jobs in this range.
                  "to": 3.14, # Ending value of the bucket range.
                  "from": 3.14, # Starting value of the bucket range.
                },
              },
            ],
            "maxValue": 3.14, # Stores the maximum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
            "minValue": 3.14, # Stores the minimum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
          },
          "stringValueHistogramResult": { # Stores a map from the values of string custom field associated
              # with `key` to the number of jobs with that value in this histogram result.
            "a_key": 42,
          },
          "key": "A String", # Stores the key of custom attribute the histogram is performed on.
        },
      ],
      "simpleHistogramResults": [ # Specifies histogram results that matches
          # HistogramFacets.simple_histogram_facets.
        { # Output only.
            #
            # Result of a histogram call. The response contains the histogram map for the
            # search type specified by HistogramResult.field.
            # The response is a map of each filter value to the corresponding count of
            # jobs for that filter.
          "values": { # A map from the values of field to the number of jobs with that value
              # in this search result.
              #
              # Key: search type (filter names, such as the companyName).
              #
              # Values: the count of jobs that match the filter for this search.
            "a_key": 42,
          },
          "searchType": "A String", # The Histogram search filters.
        },
      ],
      "compensationHistogramResults": [ # Specifies compensation field-based histogram results that matches
          # HistogramFacets.compensation_histogram_requests.
        { # Output only.
            #
            # Compensation based histogram result.
          "type": "A String", # Type of the request, corresponding to
              # CompensationHistogramRequest.type.
          "result": { # Output only. # Histogram result.
              #
              # Custom numeric bucketing result.
            "counts": [ # Count within each bucket. Its size is the length of
                # NumericBucketingOption.bucket_bounds plus 1.
              { # Represents count of jobs within one bucket.
                "count": 42, # Number of jobs whose numeric field value fall into `range`.
                "range": { # Represents starting and ending value of a range in double. # Bucket range on which histogram was performed for the numeric field,
                    # that is, the count represents number of jobs in this range.
                  "to": 3.14, # Ending value of the bucket range.
                  "from": 3.14, # Starting value of the bucket range.
                },
              },
            ],
            "maxValue": 3.14, # Stores the maximum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
            "minValue": 3.14, # Stores the minimum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
          },
        },
      ],
    },
    "jobView": "A String", # Corresponds to SearchJobsRequest.job_view.
    "appliedCommuteFilter": { # Input only. # The commute filter the service applied to the specified query. This
        # information is only available when query has a valid CommutePreference.
        #
        # Parameters needed for commute search.
      "departureHourLocal": 42, # Optional.
          #
          # The departure hour to use to calculate traffic impact. Accepts an
          # integer between 0 and 23, representing the hour in the time zone of the
          # start_location. Must not be present if road_traffic is specified.
      "roadTraffic": "A String", # Optional.
          #
          # Specifies the traffic density to use when calculating commute time.
          # Must not be present if departure_hour_local is specified.
      "allowNonStreetLevelAddress": True or False, # Optional.
          # If `true`, jobs without street level addresses may also be returned.
          # For city level addresses, the city center is used. For state and coarser
          # level addresses, text matching is used.
          # If this field is set to `false` or is not specified, only jobs that include
          # street level addresses will be returned by commute search.
      "travelTime": "A String", # Required.
          #
          # The maximum travel time in seconds. The maximum allowed value is `3600s`
          # (one hour). Format is `123s`.
      "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
          #
          # The latitude and longitude of the location from which to calculate the
          # commute time.
          # 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].
      },
      "method": "A String", # Required.
          #
          # The method of transportation for which to calculate the commute time.
    },
    "spellResult": { # Output only. # The spell checking result, and correction.
        #
        # Spell check result.
      "corrected": True or False, # Indicates if the query was corrected by the spell checker.
      "correctedText": "A String", # Correction output consisting of the corrected keyword string.
    },
    "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="searchForAlert">searchForAlert(body, x__xgafv=None)</code>
  <pre>Searches for jobs using the provided SearchJobsRequest.

This API call is intended for the use case of targeting passive job
seekers (for example, job seekers who have signed up to receive email
alerts about potential job opportunities), and has different algorithmic
adjustments that are targeted to passive job seekers.

This call constrains the visibility of jobs
present in the database, and only returns jobs the caller has
permission to search against.

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

{ # Input only.
      # 
      # The Request body of the `SearchJobs` call.
    "orderBy": "A String", # Deprecated. Use sort_by instead.
        # 
        # Optional.
        # 
        # The criteria determining how search results are sorted.
        # Defaults to SortBy.RELEVANCE_DESC if no value is specified.
    "histogramFacets": { # Input only. # Optional.
        # 
        # Restrictions on what fields to perform histogram on, such as
        # `COMPANY_SIZE` etc.
        #
        # Histogram facets to be specified in SearchJobsRequest.
      "simpleHistogramFacets": [ # Optional. Specifies the simple type of histogram facets, for example,
          # `COMPANY_SIZE`, `EMPLOYMENT_TYPE` etc. This field is equivalent to
          # GetHistogramRequest.
        "A String",
      ],
      "customAttributeHistogramFacets": [ # Optional.
          #
          # Specifies the custom attributes histogram requests.
          # Duplicate values of CustomAttributeHistogramRequest.key are not
          # allowed.
        { # Custom attributes histogram request. An error will be thrown if neither
            # string_value_histogram or long_value_histogram_bucketing_option has
            # been defined.
          "stringValueHistogram": True or False, # Optional. If set to true, the response will include the histogram value for
              # each key as a string.
          "longValueHistogramBucketingOption": { # Input only. # Optional.
              #
              # Specifies buckets used to perform a range histogram on Job's
              # filterable long custom field values, or min/max value requirements.
              #
              # Use this field to specify bucketing option for the histogram search response.
            "bucketBounds": [ # Required.
                #
                # Two adjacent values form a histogram bucket. Values should be in
                # ascending order. For example, if [5, 10, 15] are provided, four buckets are
                # created: (-inf, 5), 5, 10), [10, 15), [15, inf). At most 20
                # [buckets_bound is supported.
              3.14,
            ],
            "requiresMinMax": True or False, # Optional.
                #
                # If set to true, the histogram result includes minimum/maximum
                # value of the numeric field.
          },
          "key": "A String", # Required.
              #
              # Specifies the custom field key to perform a histogram on. If specified
              # without `long_value_histogram_bucketing_option`, histogram on string values
              # of the given `key` is triggered, otherwise histogram is performed on long
              # values.
        },
      ],
      "compensationHistogramFacets": [ # Optional.
          #
          # Specifies compensation field-based histogram requests.
          # Duplicate values of CompensationHistogramRequest.type are not allowed.
        { # Input only.
            #
            # Compensation based histogram request.
          "bucketingOption": { # Input only. # Required.
              #
              # Numeric histogram options, like buckets, whether include min or max value.
              #
              # Use this field to specify bucketing option for the histogram search response.
            "bucketBounds": [ # Required.
                #
                # Two adjacent values form a histogram bucket. Values should be in
                # ascending order. For example, if [5, 10, 15] are provided, four buckets are
                # created: (-inf, 5), 5, 10), [10, 15), [15, inf). At most 20
                # [buckets_bound is supported.
              3.14,
            ],
            "requiresMinMax": True or False, # Optional.
                #
                # If set to true, the histogram result includes minimum/maximum
                # value of the numeric field.
          },
          "type": "A String", # Required.
              #
              # Type of the request, representing which field the histogramming should be
              # performed over. A single request can only specify one histogram of each
              # `CompensationHistogramRequestType`.
        },
      ],
    },
    "enableBroadening": True or False, # Optional.
        # 
        # Controls whether to broaden the search when it produces sparse results.
        # Broadened queries append results to the end of the matching results
        # list.
        # 
        # Defaults to false.
    "enablePreciseResultSize": True or False, # Optional.
        # 
        # Controls if the search job request requires the return of a precise
        # count of the first 300 results. Setting this to `true` ensures
        # consistency in the number of results per page. Best practice is to set this
        # value to true if a client allows users to jump directly to a
        # non-sequential search results page.
        # 
        # Enabling this flag may adversely impact performance.
        # 
        # Defaults to false.
    "disableRelevanceThresholding": True or False, # Optional.
        # 
        # Controls whether to disable relevance thresholding. Relevance
        # thresholding removes jobs that have low relevance in search results,
        # for example, removing "Assistant to the CEO" positions from the search
        # results of a search for "CEO".
        # 
        # Disabling relevance thresholding improves the accuracy of subsequent
        # search requests.
        # 
        # Defaults to false.
    "pageSize": 42, # Optional.
        # 
        # A limit on the number of jobs returned in the search results.
        # Increasing this value above the default value of 10 can increase search
        # response time. The value can be between 1 and 100.
    "pageToken": "A String", # Optional.
        # 
        # The token specifying the current offset within
        # search results. See SearchJobsResponse.next_page_token for
        # an explanation of how to obtain the next set of query results.
    "jobView": "A String", # Optional.
        # 
        # The number of job attributes returned for jobs in the
        # search response. Defaults to JobView.SMALL if no value is specified.
    "requestMetadata": { # Input only. # Required.
        # 
        # The meta information collected about the job searcher, used to improve the
        # search quality of the service. The identifiers, (such as `user_id`) are
        # provided by users, and must be unique and consistent.
        #
        # Meta information related to the job searcher or entity
        # conducting the job search. This information is used to improve the
        # performance of the service.
      "deviceInfo": { # Input only. # Optional.
          #
          # The type of device used by the job seeker at the time of the call to the
          # service.
          #
          # Device information collected from the job seeker, candidate, or
          # other entity conducting the job search. Providing this information improves
          # the quality of the search results across devices.
        "deviceType": "A String", # Optional.
            #
            # Type of the device.
        "id": "A String", # Optional.
            #
            # A device-specific ID. The ID must be a unique identifier that distinguishes
            # the device from other devices.
      },
      "sessionId": "A String", # Required.
          #
          # A unique session identification string. A session is defined as the
          # duration of an end user's interaction with the service over a period.
          # Obfuscate this field for privacy concerns before
          # providing it to the API.
          #
          # If this field is not available for some reason, please send "UNKNOWN". Note
          # that any improvements to the service model for a particular tenant site,
          # rely on this field being set correctly to some unique session_id.
      "userId": "A String", # Required.
          #
          # A unique user identification string, as determined by the client. The
          # client is responsible for ensuring client-level uniqueness of this value
          # in order to have the strongest positive impact on search quality.
          # Obfuscate this field for privacy concerns before
          # providing it to the service.
          #
          # If this field is not available for some reason, please send "UNKNOWN". Note
          # that any improvements to the service model for a particular tenant site,
          # rely on this field being set correctly to some unique user_id.
      "domain": "A String", # Required.
          #
          # The client-defined scope or source of the service call, which typically
          # is the domain on
          # which the service has been implemented and is currently being run.
          #
          # For example, if the service is being run by client <em>Foo, Inc.</em>, on
          # job board www.foo.com and career site www.bar.com, then this field is
          # set to "foo.com" for use on the job board, and "bar.com" for use on the
          # career site.
          #
          # If this field is not available for some reason, send "UNKNOWN". Note that
          # any improvements to the service model for a particular tenant site rely on
          # this field being set correctly to some domain.
    },
    "sortBy": "A String", # Optional.
        # 
        # The criteria determining how search results are sorted.
        # Defaults to SortBy.RELEVANCE_DESC if no value is specified.
    "filters": { # Input only. # Deprecated. Use query instead.
        # 
        # Optional.
        # 
        # Restrictions on the scope of the search request, such as filtering
        # by location.
        #
        # Deprecated. Use JobQuery instead.
        #
        # The filters required to perform a search query or histogram.
      "disableSpellCheck": True or False, # Optional.
          #
          # This flag controls the spell-check feature. If false, the
          # service attempts to correct a misspelled query,
          # for example, "enginee" is corrected to "engineer".
          #
          # Defaults to false: a spell check is performed.
      "customAttributeFilter": "A String", # Optional.
          #
          # This filter specifies a structured syntax to match against the
          # Job.custom_attributes that are marked as `filterable`.
          #
          # The syntax for this expression is a subset of Google SQL syntax.
          #
          # Supported operators are: =, !=, <, <=, >, >= where the left of the operator
          # is a custom field key and the right of the operator is a number or string
          # (surrounded by quotes) value.
          #
          # Supported functions are LOWER(<field_name>) to
          # perform case insensitive match and EMPTY(<field_name>) to filter on the
          # existence of a key.
          #
          # Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
          # nesting (For example, "((A AND B AND C) OR NOT D) AND E"), and there can
          # be a maximum of 100 comparisons/functions in the expression. The expression
          # must be < 3000 bytes in length.
          #
          # Sample Query:
          # (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1)) AND key2 > 100
      "customFieldFilters": { # Deprecated. Use custom_attribute_filter instead.
          #
          # Optional.
          #
          # This filter specifies searching against
          # custom field values. See Job.filterable_custom_fields for information.
          # The key value specifies a number between 1-20 (the service
          # supports 20 custom fields) corresponding to the desired custom field map
          # value. If an invalid key is provided or specified together with
          # custom_attribute_filter, an error is thrown.
        "a_key": { # Input only.
            #
            # Custom field filter of the search.
          "type": "A String", # Optional.
              #
              # The type of filter.
              # Defaults to FilterType.OR.
          "queries": [ # Required.
              #
              # The query strings for the filter.
            "A String",
          ],
        },
      },
      "tenantJobOnly": True or False, # Deprecated. Do not use this field.
          #
          # This flag controls whether the job search should be restricted to jobs
          # owned by the current user.
          #
          # Defaults to false where all jobs accessible to the
          # user are searched against.
      "categories": [ # Optional.
          #
          # The category filter specifies the categories of jobs to search against.
          # See Category for more information.
          #
          # If a value is not specified, jobs from any category are searched against.
          #
          # If multiple values are specified, jobs from any of the specified
          # categories are searched against.
        "A String",
      ],
      "employmentTypes": [ # Optional.
          #
          # The employment type filter specifies the employment type of jobs to
          # search against, such as EmploymentType.FULL_TIME.
          #
          # If a value is not specified, jobs in the search results include any
          # employment type.
          #
          # If multiple values are specified, jobs in the search results include any
          # of the specified employment types.
        "A String",
      ],
      "companyTitles": [ # Optional.
          #
          # This filter specifies the exact company titles
          # of jobs to search against.
          #
          # If a value is not specified, jobs within the search results can be
          # associated with any company.
          #
          # If multiple values are specified, jobs within the search results may be
          # associated with any of the specified companies.
          #
          # At most 20 company title filters are allowed.
        "A String",
      ],
      "query": "A String", # Optional.
          #
          # The query filter contains the keywords that match against the job
          # title, description, and location fields.
          #
          # The maximum query size is 255 bytes/characters.
      "extendedCompensationFilter": { # Deprecated. Always use CompensationFilter. # Deprecated. Always use compensation_filter.
          #
          # Optional.
          #
          # This search filter is applied only to
          # Job.extended_compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs that meet
          # these criteria are searched. If a filter is not defined, all open jobs
          # are searched.
          #
          # Input only.
          #
          # Filter on job compensation type and amount.
        "currency": "A String", # Optional.
            #
            # Specify currency in 3-letter
            # [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) format. If
            # unspecified, jobs are returned regardless of currency.
        "type": "A String", # Required.
            #
            # Type of filter.
        "compensationRange": { # Deprecated. See CompensationInfo. # Optional.
            #
            # Compensation range.
            #
            # Compensation range.
          "max": { # Deprecated. See CompensationInfo. # Required.
              #
              # Maximum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
          "min": { # Deprecated. See CompensationInfo. # Required.
              #
              # Minimum value.
              #
              # Decimal number.
            "units": "A String", # Whole units.
            "micros": 42, # Micro (10^-6) units.
                # The value must be between -999,999 and +999,999 inclusive.
                # If `units` is positive, `micros` must be positive or zero.
                # If `units` is zero, `micros` can be positive, zero, or negative.
                # If `units` is negative, `micros` must be negative or zero.
                # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
          },
        },
        "compensationUnits": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # ExtendedCompensationInfo.CompensationUnit.
          "A String",
        ],
        "includeJobWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
      "commuteFilter": { # Input only. # Optional.
          #
          #  Allows filtering jobs by commute time with different travel methods (e.g.
          #  driving or public transit). Note: this only works with COMMUTE
          #  MODE. When specified, [JobFilters.location_filters] will be
          #  ignored.
          #
          #  Currently we do not support sorting by commute time.
          #
          # Parameters needed for commute search.
        "departureHourLocal": 42, # Optional.
            #
            # The departure hour to use to calculate traffic impact. Accepts an
            # integer between 0 and 23, representing the hour in the time zone of the
            # start_location. Must not be present if road_traffic is specified.
        "roadTraffic": "A String", # Optional.
            #
            # Specifies the traffic density to use when calculating commute time.
            # Must not be present if departure_hour_local is specified.
        "allowNonStreetLevelAddress": True or False, # Optional.
            # If `true`, jobs without street level addresses may also be returned.
            # For city level addresses, the city center is used. For state and coarser
            # level addresses, text matching is used.
            # If this field is set to `false` or is not specified, only jobs that include
            # street level addresses will be returned by commute search.
        "travelTime": "A String", # Required.
            #
            # The maximum travel time in seconds. The maximum allowed value is `3600s`
            # (one hour). Format is `123s`.
        "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
            #
            # The latitude and longitude of the location from which to calculate the
            # commute time.
            # 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].
        },
        "method": "A String", # Required.
            #
            # The method of transportation for which to calculate the commute time.
      },
      "languageCodes": [ # Optional.
          #
          # This filter specifies the locale of jobs to search against,
          # for example, "en-US".
          #
          # If a value is not specified, the search results may contain jobs in any
          # locale.
          #
          #
          # Language codes should be in BCP-47 format, for example, "en-US" or
          # "sr-Latn". For more information, see [Tags for Identifying
          # Languages](https://tools.ietf.org/html/bcp47).
          #
          # At most 10 language code filters are allowed.
        "A String",
      ],
      "companyNames": [ # Optional.
          #
          # The company names filter specifies the company entities to search
          # against.
          #
          # If a value is not specified, jobs are searched for against all companies.
          #
          # If multiple values are specified, jobs are searched against the
          # specified companies.
          #
          # At most 20 company filters are allowed.
        "A String",
      ],
      "publishDateRange": "A String", # Optional.
          #
          # Jobs published within a range specified by this filter are searched
          # against, for example, DateRange.PAST_MONTH. If a value is not
          # specified, all open jobs are searched against regardless of the
          # date they were published.
      "locationFilters": [ # Optional.
          #
          # The location filter specifies geo-regions containing the jobs to
          # search against. See LocationFilter for more information.
          #
          # If a location value is not specified, jobs are retrieved
          # from all locations.
          #
          # If multiple values are specified, jobs are retrieved from any of the
          # specified locations. If different values are specified for the
          # LocationFilter.distance_in_miles parameter, the maximum provided
          # distance is used for all locations.
          #
          # At most 5 location filters are allowed.
        { # Input only.
            #
            # Geographic region of the search.
          "regionCode": "A String", # Optional.
              #
              # CLDR region code of the country/region of the address. This will be used
              # to address ambiguity of the user-input location, e.g. "Liverpool"
              # against "Liverpool, NY, US" or "Liverpool, UK".
              #
              # Set this field if all the jobs to search against are from a same region,
              # or jobs are world-wide but the job seeker is from a specific region.
              #
              # See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: "CH" for Switzerland.
          "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Optional.
              #
              # The latitude and longitude of the geographic center from which to
              # search. This field is ignored if `location_name` is provided.
              # 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].
          },
          "name": "A String", # Optional.
              #
              # The address name, such as "Mountain View" or "Bay Area".
          "isTelecommute": True or False, # Optional.
              #
              # Allows the client to return jobs without a
              # set location, specifically, telecommuting jobs (telecomuting is considered
              # by the service as a special location.
              # Job.allow_telecommute indicates if a job permits telecommuting.
              # If this field is true, telecommuting jobs are searched, and
              # name and lat_lng are
              # ignored.
              # This filter can be used by itself to search exclusively for telecommuting
              # jobs, or it can be combined with another location
              # filter to search for a combination of job locations,
              # such as "Mountain View" or "telecommuting" jobs. However, when used in
              # combination with other location filters, telecommuting jobs can be
              # treated as less relevant than other jobs in the search response.
          "distanceInMiles": 3.14, # Optional.
              #
              #
              # The distance_in_miles is applied when the location being searched for is
              # identified as a city or smaller. When the location being searched for is a
              # state or larger, this field is ignored.
        },
      ],
      "compensationFilter": { # Input only. # Optional.
          #
          # This search filter is applied only to
          # Job.compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs that meet
          # this criteria are searched. If a filter is not defined, all open jobs
          # are searched.
          #
          # Filter on job compensation type and amount.
        "units": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # CompensationInfo.CompensationUnit.
          "A String",
        ],
        "range": { # Compensation range. # Optional.
            #
            # Compensation range.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "type": "A String", # Required.
            #
            # Type of filter.
        "includeJobsWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
    },
    "offset": 42, # Optional.
        # 
        # An integer that specifies the current offset (that is, starting result
        # location, amongst the jobs deemed by the API as relevant) in search
        # results. This field is only considered if page_token is unset.
        # 
        # For example, 0 means to  return results starting from the first matching
        # job, and 10 means to return from the 11th job. This can be used for
        # pagination, (for example, pageSize = 10 and offset = 10 means to return
        # from the second page).
    "query": { # Input only. # Optional.
        # 
        # Query used to search against jobs, such as keyword, location filters, etc.
        #
        # The query required to perform a search query or histogram.
      "disableSpellCheck": True or False, # Optional.
          #
          # This flag controls the spell-check feature. If false, the
          # service attempts to correct a misspelled query,
          # for example, "enginee" is corrected to "engineer".
          #
          # Defaults to false: a spell check is performed.
      "customAttributeFilter": "A String", # Optional.
          #
          # This filter specifies a structured syntax to match against the
          # Job.custom_attributes marked as `filterable`.
          #
          # The syntax for this expression is a subset of Google SQL syntax.
          #
          # Supported operators are: =, !=, <, <=, >, >= where the left of the operator
          # is a custom field key and the right of the operator is a number or string
          # (surrounded by quotes) value.
          #
          # Supported functions are LOWER(<field_name>) to
          # perform case insensitive match and EMPTY(<field_name>) to filter on the
          # existence of a key.
          #
          # Boolean expressions (AND/OR/NOT) are supported up to 3 levels of
          # nesting (for example, "((A AND B AND C) OR NOT D) AND E"), a maximum of 50
          # comparisons/functions are allowed in the expression. The expression
          # must be < 2000 characters in length.
          #
          # Sample Query:
          # (key1 = "TEST" OR LOWER(key1)="test" OR NOT EMPTY(key1)) AND key2 > 100
      "publishDateRange": "A String", # Optional.
          #
          # Jobs published within a range specified by this filter are searched
          # against, for example, DateRange.PAST_MONTH. If a value isn't
          # specified, all open jobs are searched against regardless of their
          # published date.
      "commuteFilter": { # Input only. # Optional.
          #
          #  Allows filtering jobs by commute time with different travel methods (for
          #  example, driving or public transit). Note: This only works with COMMUTE
          #  MODE. When specified, [JobQuery.location_filters] is
          #  ignored.
          #
          #  Currently we don't support sorting by commute time.
          #
          # Parameters needed for commute search.
        "departureHourLocal": 42, # Optional.
            #
            # The departure hour to use to calculate traffic impact. Accepts an
            # integer between 0 and 23, representing the hour in the time zone of the
            # start_location. Must not be present if road_traffic is specified.
        "roadTraffic": "A String", # Optional.
            #
            # Specifies the traffic density to use when calculating commute time.
            # Must not be present if departure_hour_local is specified.
        "allowNonStreetLevelAddress": True or False, # Optional.
            # If `true`, jobs without street level addresses may also be returned.
            # For city level addresses, the city center is used. For state and coarser
            # level addresses, text matching is used.
            # If this field is set to `false` or is not specified, only jobs that include
            # street level addresses will be returned by commute search.
        "travelTime": "A String", # Required.
            #
            # The maximum travel time in seconds. The maximum allowed value is `3600s`
            # (one hour). Format is `123s`.
        "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
            #
            # The latitude and longitude of the location from which to calculate the
            # commute time.
            # 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].
        },
        "method": "A String", # Required.
            #
            # The method of transportation for which to calculate the commute time.
      },
      "employmentTypes": [ # Optional.
          #
          # The employment type filter specifies the employment type of jobs to
          # search against, such as EmploymentType.FULL_TIME.
          #
          # If a value is not specified, jobs in the search results include any
          # employment type.
          #
          # If multiple values are specified, jobs in the search results include
          # any of the specified employment types.
        "A String",
      ],
      "categories": [ # Optional.
          #
          # The category filter specifies the categories of jobs to search against.
          # See Category for more information.
          #
          # If a value is not specified, jobs from any category are searched against.
          #
          # If multiple values are specified, jobs from any of the specified
          # categories are searched against.
        "A String",
      ],
      "query": "A String", # Optional.
          #
          # The query string that matches against the job title, description, and
          # location fields.
          #
          # The maximum query size is 255 bytes.
      "languageCodes": [ # Optional.
          #
          # This filter specifies the locale of jobs to search against,
          # for example, "en-US".
          #
          # If a value isn't specified, the search results can contain jobs in any
          # locale.
          #
          #
          # Language codes should be in BCP-47 format, such as "en-US" or "sr-Latn".
          # For more information, see
          # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47).
          #
          # At most 10 language code filters are allowed.
        "A String",
      ],
      "companyNames": [ # Optional.
          #
          # This filter specifies the company entities to search against.
          #
          # If a value isn't specified, jobs are searched for against all
          # companies.
          #
          # If multiple values are specified, jobs are searched against the
          # companies specified.
          #
          # At most 20 company filters are allowed.
        "A String",
      ],
      "companyDisplayNames": [ # Optional.
          #
          # This filter specifies the exact company display
          # name of the jobs to search against.
          #
          # If a value isn't specified, jobs within the search results are
          # associated with any company.
          #
          # If multiple values are specified, jobs within the search results may be
          # associated with any of the specified companies.
          #
          # At most 20 company display name filters are allowed.
        "A String",
      ],
      "locationFilters": [ # Optional.
          #
          # The location filter specifies geo-regions containing the jobs to
          # search against. See LocationFilter for more information.
          #
          # If a location value isn't specified, jobs fitting the other search
          # criteria are retrieved regardless of where they're located.
          #
          # If multiple values are specified, jobs are retrieved from any of the
          # specified locations. If different values are specified for the
          # LocationFilter.distance_in_miles parameter, the maximum provided
          # distance is used for all locations.
          #
          # At most 5 location filters are allowed.
        { # Input only.
            #
            # Geographic region of the search.
          "regionCode": "A String", # Optional.
              #
              # CLDR region code of the country/region of the address. This will be used
              # to address ambiguity of the user-input location, e.g. "Liverpool"
              # against "Liverpool, NY, US" or "Liverpool, UK".
              #
              # Set this field if all the jobs to search against are from a same region,
              # or jobs are world-wide but the job seeker is from a specific region.
              #
              # See http://cldr.unicode.org/ and
              # http://www.unicode.org/cldr/charts/30/supplemental/territory_information.html
              # for details. Example: "CH" for Switzerland.
          "latLng": { # An object representing a latitude/longitude pair. This is expressed as a pair # Optional.
              #
              # The latitude and longitude of the geographic center from which to
              # search. This field is ignored if `location_name` is provided.
              # 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].
          },
          "name": "A String", # Optional.
              #
              # The address name, such as "Mountain View" or "Bay Area".
          "isTelecommute": True or False, # Optional.
              #
              # Allows the client to return jobs without a
              # set location, specifically, telecommuting jobs (telecomuting is considered
              # by the service as a special location.
              # Job.allow_telecommute indicates if a job permits telecommuting.
              # If this field is true, telecommuting jobs are searched, and
              # name and lat_lng are
              # ignored.
              # This filter can be used by itself to search exclusively for telecommuting
              # jobs, or it can be combined with another location
              # filter to search for a combination of job locations,
              # such as "Mountain View" or "telecommuting" jobs. However, when used in
              # combination with other location filters, telecommuting jobs can be
              # treated as less relevant than other jobs in the search response.
          "distanceInMiles": 3.14, # Optional.
              #
              #
              # The distance_in_miles is applied when the location being searched for is
              # identified as a city or smaller. When the location being searched for is a
              # state or larger, this field is ignored.
        },
      ],
      "compensationFilter": { # Input only. # Optional.
          #
          # This search filter is applied only to
          # Job.compensation_info. For example, if the filter is specified
          # as "Hourly job with per-hour compensation > $15", only jobs meeting
          # these criteria are searched. If a filter isn't defined, all open jobs
          # are searched.
          #
          # Filter on job compensation type and amount.
        "units": [ # Required.
            #
            # Specify desired `base compensation entry's`
            # CompensationInfo.CompensationUnit.
          "A String",
        ],
        "range": { # Compensation range. # Optional.
            #
            # Compensation range.
          "max": { # Represents an amount of money with its currency type. # Optional.
              #
              # The maximum amount of compensation. If left empty, the value is set
              # to a maximal compensation value and the currency code is set to
              # match the currency code of
              # min_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
          "min": { # Represents an amount of money with its currency type. # Optional.
              #
              # The minimum amount of compensation. If left empty, the value is set
              # to zero and the currency code is set to match the
              # currency code of max_compensation.
            "nanos": 42, # Number of nano (10^-9) units of the amount.
                # The value must be between -999,999,999 and +999,999,999 inclusive.
                # If `units` is positive, `nanos` must be positive or zero.
                # If `units` is zero, `nanos` can be positive, zero, or negative.
                # If `units` is negative, `nanos` must be negative or zero.
                # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
            "units": "A String", # The whole units of the amount.
                # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
            "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
          },
        },
        "type": "A String", # Required.
            #
            # Type of filter.
        "includeJobsWithUnspecifiedCompensationRange": True or False, # Optional.
            #
            # Whether to include jobs whose compensation range is unspecified.
      },
    },
    "mode": "A String", # Required.
        # 
        # Mode of a search.
  }

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

Returns:
  An object of the form:

    { # Output only.
      #
      # Response for SearchJob method.
    "nextPageToken": "A String", # The token that specifies the starting position of the next page of results.
        # This field is empty if there are no more results.
    "estimatedTotalSize": "A String", # An estimation of the number of jobs that match the specified query.
        #
        # This number is not guaranteed to be accurate. For accurate results,
        # seenenable_precise_result_size.
    "totalSize": "A String", # The precise result count, which is available only if the client set
        # enable_precise_result_size to `true` or if the response
        # is the last page of results. Otherwise, the value will be `-1`.
    "matchingJobs": [ # The Job entities that match the specified SearchJobsRequest.
      { # Output only.
          #
          # Job entry with metadata inside SearchJobsResponse.
        "searchTextSnippet": "A String", # Contains snippets of text from the Job.description and similar
            # fields that most closely match a search query's keywords, if available.
            # All HTML tags in the original fields are stripped when returned in this
            # field, and matching query keywords are enclosed in HTML bold tags.
        "job": { # A Job resource represents a job posting (also referred to as a "job listing" # Job resource that matches the specified SearchJobsRequest.
            # or "job requisition"). A job belongs to a Company, which is the hiring
            # entity responsible for the job.
          "languageCode": "A String", # Optional.
              #
              # The language of the posting. This field is distinct from
              # any requirements for fluency that are associated with the job.
              #
              # Language codes must be in BCP-47 format, such as "en-US" or "sr-Latn".
              # For more information, see
              # [Tags for Identifying Languages](https://tools.ietf.org/html/bcp47){:
              # class="external" target="_blank" }.
              #
              # If this field is unspecified and Job.description is present, detected
              # language code based on Job.description is assigned, otherwise
              # defaults to 'en_US'.
          "updateTime": "A String", # Output only.
              #
              # The timestamp when this job was last updated.
          "unindexedCustomFields": { # Deprecated. Use custom_attributes instead.
              #
              # Optional.
              #
              # A map of fields to hold non-filterable custom job attributes, similar to
              # filterable_custom_fields. These fields are distinct in that the data
              # in these fields are not indexed. Therefore, the client cannot search
              # against them, nor can the client use them to list jobs.
              #
              # The key of the map can be any valid string.
            "a_key": { # Resource that represents the custom data not captured by the standard fields.
              "values": [ # Optional.
                  #
                  # The values of the custom data.
                "A String",
              ],
            },
          },
          "endDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
              #
              # The end date of the job in UTC time zone. Typically this field
              # is used for contracting engagements.
              # Dates prior to 1970/1/1 and invalid date formats are ignored.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "companyDisplayName": "A String", # Output only.
              #
              # The name of the company listing the job.
          "startDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
              #
              # The start date of the job in UTC time zone. Typically this field
              # is used for contracting engagements.
              # Dates prior to 1970/1/1 and invalid date formats are ignored.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "jobLocations": [ # Output only.
              #
              # Structured locations of the job, resolved from locations.
            { # Output only.
                #
                # 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].
              },
            },
          ],
          "locations": [ # Optional but strongly recommended for the best service experience.
              #
              # Location(s) where the emploeyer is looking to hire for this job posting.
              #
              # Specifying the full street address(es) of the hiring location enables
              # better API results, especially job searches by commute time.
              #
              # At most 50 locations are allowed for best search performance. If a job has
              # more locations, it is suggested to split it into multiple jobs with unique
              # requisition_ids (e.g. 'ReqA' becomes 'ReqA-1', 'ReqA-2', etc.) as
              # multiple jobs with the same requisition_id, company_name and
              # language_code are not allowed. If the original requisition_id must
              # be preserved, a custom field should be used for storage. It is also
              # suggested to group the locations that close to each other in the same job
              # for better search experience.
              #
              # The maximum number of allowed characters is 500.
            "A String",
          ],
          "employmentTypes": [ # Optional.
              #
              # The employment type(s) of a job, for example,
              # full time or
              # part time.
            "A String",
          ],
          "applicationUrls": [ # Optional but at least one of application_urls,
              # application_email_list or application_instruction must be
              # specified.
              #
              # Use this URL field to direct an applicant to a website, for example to
              # link to an online application form.
              #
              # The maximum number of allowed characters is 2,000.
            "A String",
          ],
          "educationLevels": [ # Optional.
              #
              # The desired education level for the job, such as
              # "Bachelors", "Masters", "Doctorate".
            "A String",
          ],
          "extendedCompensationInfo": { # Deprecated. Use CompensationInfo. # Deprecated. Always use compensation_info.
              #
              # Optional.
              #
              # Job compensation information.
              #
              # This field replaces compensation_info. Only
              # CompensationInfo.entries or extended_compensation_info can be set,
              # otherwise an exception is thrown.
              #
              # Describes job compensation.
            "annualizedTotalCompensationUnspecified": True or False, # Output only.
                #
                # Indicates annualized total compensation range cannot be derived, due to
                # the job's all CompensationEntry cannot be annualized.
                # See CompensationEntry for explanation on annualization and base
                # compensation entry.
            "annualizedBaseCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
                #
                # Annualized base compensation range.
                #
                # Compensation range.
              "max": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Maximum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "min": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Minimum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
            },
            "annualizedTotalCompensationRange": { # Deprecated. See CompensationInfo. # Output only.
                #
                # Annualized total compensation range.
                #
                # Compensation range.
              "max": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Maximum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
              "min": { # Deprecated. See CompensationInfo. # Required.
                  #
                  # Minimum value.
                  #
                  # Decimal number.
                "units": "A String", # Whole units.
                "micros": 42, # Micro (10^-6) units.
                    # The value must be between -999,999 and +999,999 inclusive.
                    # If `units` is positive, `micros` must be positive or zero.
                    # If `units` is zero, `micros` can be positive, zero, or negative.
                    # If `units` is negative, `micros` must be negative or zero.
                    # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
              },
            },
            "currency": "A String", # Optional.
                #
                # A 3-letter [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html)
                # currency code.
            "annualizedBaseCompensationUnspecified": True or False, # Output only.
                #
                # Indicates annualized base compensation range cannot be derived, due to
                # the job's base compensation entry cannot be annualized.
                # See CompensationEntry for explanation on annualization and base
                # compensation entry.
            "entries": [ # Optional.
                #
                # Job compensation information.
                #
                # At most one entry can be of type
                # ExtendedCompensationInfo.CompensationType.BASE, which is
                # referred as ** base compensation entry ** for the job.
              { # Deprecated. See CompensationInfo.
                  #
                  # A compensation entry that represents one component of compensation, such
                  # as base pay, bonus, or other compensation type.
                  #
                  # Annualization: One compensation entry can be annualized if
                  # - it contains valid amount or range.
                  # - and its expected_units_per_year is set or can be derived.
                  # Its annualized range is determined as (amount or range) times
                  # expected_units_per_year.
                "description": "A String", # Optional.
                    #
                    # Compensation description.
                "range": { # Deprecated. See CompensationInfo. # Optional.
                    #
                    # Compensation range.
                    #
                    # Compensation range.
                  "max": { # Deprecated. See CompensationInfo. # Required.
                      #
                      # Maximum value.
                      #
                      # Decimal number.
                    "units": "A String", # Whole units.
                    "micros": 42, # Micro (10^-6) units.
                        # The value must be between -999,999 and +999,999 inclusive.
                        # If `units` is positive, `micros` must be positive or zero.
                        # If `units` is zero, `micros` can be positive, zero, or negative.
                        # If `units` is negative, `micros` must be negative or zero.
                        # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                  },
                  "min": { # Deprecated. See CompensationInfo. # Required.
                      #
                      # Minimum value.
                      #
                      # Decimal number.
                    "units": "A String", # Whole units.
                    "micros": 42, # Micro (10^-6) units.
                        # The value must be between -999,999 and +999,999 inclusive.
                        # If `units` is positive, `micros` must be positive or zero.
                        # If `units` is zero, `micros` can be positive, zero, or negative.
                        # If `units` is negative, `micros` must be negative or zero.
                        # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                  },
                },
                "unspecified": True or False, # Optional.
                    #
                    # Indicates compensation amount and range are unset.
                "expectedUnitsPerYear": { # Deprecated. See CompensationInfo. # Optional.
                    #
                    # Expected number of units paid each year. If not specified, when
                    # Job.employment_types is FULLTIME, a default value is inferred
                    # based on unit. Default values:
                    # - HOURLY: 2080
                    # - DAILY: 260
                    # - WEEKLY: 52
                    # - MONTHLY: 12
                    # - ANNUAL: 1
                    #
                    # Decimal number.
                  "units": "A String", # Whole units.
                  "micros": 42, # Micro (10^-6) units.
                      # The value must be between -999,999 and +999,999 inclusive.
                      # If `units` is positive, `micros` must be positive or zero.
                      # If `units` is zero, `micros` can be positive, zero, or negative.
                      # If `units` is negative, `micros` must be negative or zero.
                      # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                },
                "amount": { # Deprecated. See CompensationInfo. # Optional.
                    #
                    # Monetary amount.
                    #
                    # Decimal number.
                  "units": "A String", # Whole units.
                  "micros": 42, # Micro (10^-6) units.
                      # The value must be between -999,999 and +999,999 inclusive.
                      # If `units` is positive, `micros` must be positive or zero.
                      # If `units` is zero, `micros` can be positive, zero, or negative.
                      # If `units` is negative, `micros` must be negative or zero.
                      # For example -1.75 is represented as `units`=-1 and `micros`=-750,000.
                },
                "type": "A String", # Required.
                    #
                    # Compensation type.
                "unit": "A String", # Optional.
                    #
                    # Frequency of the specified amount.
                    #
                    # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
              },
            ],
          },
          "filterableCustomFields": { # Deprecated. Use custom_attributes instead.
              #
              # Optional.
              #
              # A map of fields to hold filterable custom job attributes not captured by
              # the standard fields such as job_title, company_name, or
              # level. These custom fields store arbitrary
              # string values, and can be used for purposes not covered by
              # the structured fields. For the best search experience, use of the
              # structured rather than custom fields is recommended.
              #
              # Data stored in these custom fields fields are indexed and
              # searched against by keyword searches (see
              # SearchJobsRequest.custom_field_filters][]).
              #
              # The map key must be a number between 1-20. If an invalid key is
              # provided on job create or update, an error is returned.
            "a_key": { # Resource that represents the custom data not captured by the standard fields.
              "values": [ # Optional.
                  #
                  # The values of the custom data.
                "A String",
              ],
            },
          },
          "expiryDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Deprecated. Use expire_time instead.
              #
              # Optional but strongly recommended to be provided for the best service
              # experience.
              #
              # The expiration date of the job in UTC time. After 12 am on this date, the
              # job is marked as expired, and it no longer appears in search results.
              # The expired job can't be deleted or listed by the DeleteJob and
              # ListJobs APIs, but it can be retrieved with the GetJob API or
              # updated with the UpdateJob API. An expired job can be updated and
              # opened again by using a future expiration date. It can also remain expired.
              # Updating an expired job to be open fails if there is another existing open
              # job with same requisition_id, company_name and language_code.
              #
              # The expired jobs are retained in our system for 90 days. However, the
              # overall expired job count cannot exceed 3 times the maximum of open jobs
              # count over the past week, otherwise jobs with earlier expire time are
              # removed first. Expired jobs are no longer accessible after they are cleaned
              # out.
              #
              # A valid date range is between 1970/1/1 and 2100/12/31. Invalid dates are
              # ignored and treated as expiry date not provided.
              #
              # If this value is not provided on job creation or is invalid, the job
              # posting expires after 30 days from the job's creation time. For example, if
              # the job was created on 2017/01/01 13:00AM UTC with an unspecified
              # expiration date, the job expires after 2017/01/31 13:00AM UTC.
              #
              # If this value is not provided on job update, it depends on the field masks
              # set by UpdateJobRequest.update_job_fields. If the field masks include
              # expiry_date, or the masks are empty meaning that every field is
              # updated, the job expires after 30 days from the job's last update time.
              # Otherwise the expiration date isn't updated.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "responsibilities": "A String", # Optional.
              #
              # A description of job responsibilities. The use of this field is
              # recommended as an alternative to using the more general description
              # field.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 10,000.
          "compensationInfo": { # Job compensation details. # Optional.
              #
              # Job compensation information.
            "annualizedBaseCompensationRange": { # Compensation range. # Output only.
                #
                # Annualized base compensation range. Computed as
                # base compensation entry's CompensationEntry.compensation times
                # CompensationEntry.expected_units_per_year.
                #
                # See CompensationEntry for explanation on compensation annualization.
              "max": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The maximum amount of compensation. If left empty, the value is set
                  # to a maximal compensation value and the currency code is set to
                  # match the currency code of
                  # min_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "min": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The minimum amount of compensation. If left empty, the value is set
                  # to zero and the currency code is set to match the
                  # currency code of max_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
            },
            "min": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # A lower bound on a range for compensation or pay for the job.
                # The currency type is specified in compensation_amount.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "annualizedTotalCompensationRange": { # Compensation range. # Output only.
                #
                # Annualized total compensation range. Computed as
                # all compensation entries' CompensationEntry.compensation times
                # CompensationEntry.expected_units_per_year.
                #
                # See CompensationEntry for explanation on compensation annualization.
              "max": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The maximum amount of compensation. If left empty, the value is set
                  # to a maximal compensation value and the currency code is set to
                  # match the currency code of
                  # min_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
              "min": { # Represents an amount of money with its currency type. # Optional.
                  #
                  # The minimum amount of compensation. If left empty, the value is set
                  # to zero and the currency code is set to match the
                  # currency code of max_compensation.
                "nanos": 42, # Number of nano (10^-9) units of the amount.
                    # The value must be between -999,999,999 and +999,999,999 inclusive.
                    # If `units` is positive, `nanos` must be positive or zero.
                    # If `units` is zero, `nanos` can be positive, zero, or negative.
                    # If `units` is negative, `nanos` must be negative or zero.
                    # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                "units": "A String", # The whole units of the amount.
                    # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
              },
            },
            "max": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # An upper bound on a range for compensation or pay for the job.
                # The currency type is specified in compensation_amount.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "amount": { # Represents an amount of money with its currency type. # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # The amount of compensation or pay for the job.
                # As an alternative, compensation_amount_min and
                # compensation_amount_max may be used to define a range of
                # compensation.
              "nanos": 42, # Number of nano (10^-9) units of the amount.
                  # The value must be between -999,999,999 and +999,999,999 inclusive.
                  # If `units` is positive, `nanos` must be positive or zero.
                  # If `units` is zero, `nanos` can be positive, zero, or negative.
                  # If `units` is negative, `nanos` must be negative or zero.
                  # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
              "units": "A String", # The whole units of the amount.
                  # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
              "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
            },
            "entries": [ # Optional.
                #
                # Job compensation information.
                #
                # At most one entry can be of type
                # CompensationInfo.CompensationType.BASE, which is
                # referred as ** base compensation entry ** for the job.
              { # A compensation entry that represents one component of compensation, such
                  # as base pay, bonus, or other compensation type.
                  #
                  # Annualization: One compensation entry can be annualized if
                  # - it contains valid amount or range.
                  # - and its expected_units_per_year is set or can be derived.
                  # Its annualized range is determined as (amount or range) times
                  # expected_units_per_year.
                "description": "A String", # Optional.
                    #
                    # Compensation description.  For example, could
                    # indicate equity terms or provide additional context to an estimated
                    # bonus.
                "range": { # Compensation range. # Optional.
                    #
                    # Compensation range.
                  "max": { # Represents an amount of money with its currency type. # Optional.
                      #
                      # The maximum amount of compensation. If left empty, the value is set
                      # to a maximal compensation value and the currency code is set to
                      # match the currency code of
                      # min_compensation.
                    "nanos": 42, # Number of nano (10^-9) units of the amount.
                        # The value must be between -999,999,999 and +999,999,999 inclusive.
                        # If `units` is positive, `nanos` must be positive or zero.
                        # If `units` is zero, `nanos` can be positive, zero, or negative.
                        # If `units` is negative, `nanos` must be negative or zero.
                        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                    "units": "A String", # The whole units of the amount.
                        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                  },
                  "min": { # Represents an amount of money with its currency type. # Optional.
                      #
                      # The minimum amount of compensation. If left empty, the value is set
                      # to zero and the currency code is set to match the
                      # currency code of max_compensation.
                    "nanos": 42, # Number of nano (10^-9) units of the amount.
                        # The value must be between -999,999,999 and +999,999,999 inclusive.
                        # If `units` is positive, `nanos` must be positive or zero.
                        # If `units` is zero, `nanos` can be positive, zero, or negative.
                        # If `units` is negative, `nanos` must be negative or zero.
                        # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                    "units": "A String", # The whole units of the amount.
                        # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                    "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                  },
                },
                "expectedUnitsPerYear": 3.14, # Optional.
                    #
                    # Expected number of units paid each year. If not specified, when
                    # Job.employment_types is FULLTIME, a default value is inferred
                    # based on unit. Default values:
                    # - HOURLY: 2080
                    # - DAILY: 260
                    # - WEEKLY: 52
                    # - MONTHLY: 12
                    # - ANNUAL: 1
                "amount": { # Represents an amount of money with its currency type. # Optional.
                    #
                    # Compensation amount.
                  "nanos": 42, # Number of nano (10^-9) units of the amount.
                      # The value must be between -999,999,999 and +999,999,999 inclusive.
                      # If `units` is positive, `nanos` must be positive or zero.
                      # If `units` is zero, `nanos` can be positive, zero, or negative.
                      # If `units` is negative, `nanos` must be negative or zero.
                      # For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.
                  "units": "A String", # The whole units of the amount.
                      # For example if `currencyCode` is `"USD"`, then 1 unit is one US dollar.
                  "currencyCode": "A String", # The 3-letter currency code defined in ISO 4217.
                },
                "type": "A String", # Required.
                    #
                    # Compensation type.
                "unit": "A String", # Optional.
                    #
                    # Frequency of the specified amount.
                    #
                    # Default is CompensationUnit.COMPENSATION_UNIT_UNSPECIFIED.
              },
            ],
            "type": "A String", # Deprecated. Use entries instead.
                #
                # Optional.
                #
                # Type of job compensation.
          },
          "jobTitle": "A String", # Required.
              #
              # The title of the job, such as "Software Engineer"
              #
              # The maximum number of allowed characters is 500.
          "department": "A String", # Optional.
              #
              # The department or functional area within the company with the open
              # position.
              #
              # The maximum number of allowed characters is 255.
          "applicationInstruction": "A String", # Optional but at least one of application_urls,
              # application_email_list or application_instruction must be
              # specified.
              #
              # Use this field to provide instructions, such as "Mail your application
              # to ...", that a candidate can follow to apply for the job.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 3,000.
          "description": "A String", # Required.
              #
              # The description of the job, which typically includes a multi-paragraph
              # description of the company and related information. Separate fields are
              # provided on the job object for responsibilities,
              # qualifications, and other job characteristics. Use of
              # these separate job fields is recommended.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 100,000.
          "companyName": "A String", # Optional but one of company_name or distributor_company_id must be
              # provided.
              #
              # The resource name of the company listing the job, such as
              # /companies/foo. This field takes precedence over the
              # distributor-assigned company identifier, distributor_company_id.
          "incentives": "A String", # Optional.
              #
              # A description of bonus, commission, and other compensation
              # incentives associated with the job not including salary or pay.
              #
              # The maximum number of allowed characters is 10,000.
          "requisitionId": "A String", # Required.
              #
              # The requisition ID, also referred to as the posting ID, assigned by the
              # client to identify a job. This field is intended to be used by clients
              # for client identification and tracking of listings. A job is not allowed
              # to be created if there is another job with the same requisition_id,
              # company_name and language_code.
              #
              # The maximum number of allowed characters is 255.
          "qualifications": "A String", # Optional.
              #
              # A description of the qualifications required to perform the
              # job. The use of this field is recommended
              # as an alternative to using the more general description field.
              #
              # This field accepts and sanitizes HTML input, and also accepts
              # bold, italic, ordered list, and unordered list markup tags.
              #
              # The maximum number of allowed characters is 10,000.
          "visibility": "A String", # Optional.
              #
              # The visibility of the job.
              # Defaults to JobVisibility.PRIVATE if not specified.
              # Currently only JobVisibility.PRIVATE is supported.
          "expireTime": "A String", # Optional but strongly recommended for the best service
              # experience.
              #
              # The expiration timestamp of the job. After this timestamp, the
              # job is marked as expired, and it no longer appears in search results. The
              # expired job can't be deleted or listed by the DeleteJob and
              # ListJobs APIs, but it can be retrieved with the GetJob API or
              # updated with the UpdateJob API. An expired job can be updated and
              # opened again by using a future expiration timestamp. Updating an expired
              # job fails if there is another existing open job with same
              # requisition_id, company_name and language_code.
              #
              # The expired jobs are retained in our system for 90 days. However, the
              # overall expired job count cannot exceed 3 times the maximum of open jobs
              # count over the past week, otherwise jobs with earlier expire time are
              # cleaned first. Expired jobs are no longer accessible after they are cleaned
              # out.
              # The format of this field is RFC 3339 date strings. Example:
              # 2000-01-01T00:00:00.999999999Z
              # See
              # [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
              #
              # A valid date range is between 1970-01-01T00:00:00.0Z and
              # 2100-12-31T23:59:59.999Z. Invalid dates are ignored and treated as expire
              # time not provided.
              #
              # If this value is not provided at the time of job creation or is invalid,
              # the job posting expires after 30 days from the job's creation time. For
              # example, if the job was created on 2017/01/01 13:00AM UTC with an
              # unspecified expiration date, the job expires after 2017/01/31 13:00AM UTC.
              #
              # If this value is not provided but expiry_date is, expiry_date is
              # used.
              #
              # If this value is not provided on job update, it depends on the field masks
              # set by UpdateJobRequest.update_job_fields. If the field masks include
              # expiry_time, or the masks are empty meaning that every field is
              # updated, the job posting expires after 30 days from the job's last
              # update time. Otherwise the expiration date isn't updated.
          "publishDate": { # Represents a whole or partial calendar date, e.g. a birthday. The time of day # Optional.
              #
              # The date this job was most recently published in UTC format. The default
              # value is the time the request arrives at the server.
              # and time zone are either specified elsewhere or are not significant. The date
              # is relative to the Proleptic Gregorian Calendar. This can represent:
              #
              # * A full date, with non-zero year, month and day values
              # * A month and day value, with a zero year, e.g. an anniversary
              # * A year on its own, with zero month and day values
              # * A year and month value, with a zero day, e.g. a credit card expiration date
              #
              # Related types are google.type.TimeOfDay and `google.protobuf.Timestamp`.
            "month": 42, # Month of year. Must be from 1 to 12, or 0 if specifying a year without a
                # month and day.
            "day": 42, # Day of month. Must be from 1 to 31 and valid for the year and month, or 0
                # if specifying a year by itself or a year and month where the day is not
                # significant.
            "year": 42, # Year of date. Must be from 1 to 9999, or 0 if specifying a date without
                # a year.
          },
          "applicationEmailList": [ # Optional but at least one of application_urls,
              # application_email_list or application_instruction must be
              # specified.
              #
              # Use this field to specify email address(es) to which resumes or
              # applications can be sent.
              #
              # The maximum number of allowed characters is 255.
            "A String",
          ],
          "createTime": "A String", # Output only.
              #
              # The timestamp when this job was created.
          "benefits": [ # Optional.
              #
              # The benefits included with the job.
            "A String",
          ],
          "name": "A String", # Required during job update.
              #
              # Resource name assigned to a job by the API, for example, "/jobs/foo". Use
              # of this field in job queries and API calls is preferred over the use of
              # requisition_id since this value is unique.
          "level": "A String", # Optional.
              #
              # The experience level associated with the job, such as "Entry Level".
          "companyTitle": "A String", # Deprecated. Use company_display_name instead.
              #
              # Output only.
              #
              # The name of the company listing the job.
          "region": "A String", # Optional.
              #
              # The job Region (for example, state, country) throughout which the job
              # is available. If this field is set, a
              # LocationFilter in a search query within the job region
              # finds this job if an exact location match is not specified.
              # If this field is set, setting job locations
              # to the same location level as this field is strongly recommended.
          "promotionValue": 42, # Optional.
              #
              # A promotion value of the job, as determined by the client.
              # The value determines the sort order of the jobs returned when searching for
              # jobs using the featured jobs search call, with higher promotional values
              # being returned first and ties being resolved by relevance sort. Only the
              # jobs with a promotionValue >0 are returned in a FEATURED_JOB_SEARCH.
              #
              # Default value is 0, and negative values are treated as 0.
          "referenceUrl": "A String", # Output only.
              #
              # The URL of a web page that displays job details.
          "customAttributes": { # Optional.
              #
              # A map of fields to hold both filterable and non-filterable custom job
              # attributes that are not covered by the provided structured fields.
              #
              # This field is a more general combination of the deprecated id-based
              # filterable_custom_fields and string-based
              # non_filterable_custom_fields.
              #
              # The keys of the map are strings up to 64 bytes and must match the
              # pattern: a-zA-Z*.
              #
              # At most 100 filterable and at most 100 unfilterable keys are supported.
              # For filterable `string_values`, across all keys at most 200 values are
              # allowed, with each string no more than 255 characters. For unfilterable
              # `string_values`, the maximum total size of `string_values` across all keys
              # is 50KB.
            "a_key": { # Custom attribute values that are either filterable or non-filterable.
              "filterable": True or False, # Optional.
                  #
                  # If the `filterable` flag is true, custom field values are searchable.
                  # If false, values are not searchable.
                  #
                  # Default is false.
              "stringValues": { # Represents array of string values. # Optional but at least one of string_values or long_value must
                  # be specified.
                  #
                  # This field is used to perform a string match (`CASE_SENSITIVE_MATCH` or
                  # `CASE_INSENSITIVE_MATCH`) search.
                  # For filterable `string_values`, a maximum total number of 200 values
                  # is allowed, with each `string_value` has a byte size of no more than
                  # 255B. For unfilterable `string_values`, the maximum total byte size of
                  # unfilterable `string_values` is 50KB.
                  #
                  # Empty strings are not allowed.
                "values": [ # Required.
                    #
                    # String values.
                  "A String",
                ],
              },
              "longValue": "A String", # Optional but at least one of string_values or long_value must
                  # be specified.
                  #
                  # This field is used to perform number range search.
                  # (`EQ`, `GT`, `GE`, `LE`, `LT`) over filterable `long_value`. For
                  # `long_value`, a value between Long.MIN and Long.MAX is allowed.
            },
          },
          "distributorCompanyId": "A String", # Optional but one of company_name or distributor_company_id must be
              # provided.
              #
              # A unique company identifier used by job distributors to identify an
              # employer's company entity. company_name takes precedence over
              # this field, and is the recommended field to use to identify companies.
              #
              # The maximum number of allowed characters is 255.
        },
        "commuteInfo": { # Output only. # Commute information which is generated based on specified
            #  CommutePreference.
            #
            # Commute details related to this job.
          "travelDuration": "A String", # The number of seconds required to travel to the job location from the query
              # location. A duration of 0 seconds indicates that the job is not
              # reachable within the requested duration, but was returned as part of an
              # expanded query.
          "jobLocation": { # Output only. # Location used as the destination in the commute calculation.
              #
              # 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].
            },
          },
        },
        "jobSummary": "A String", # A summary of the job with core information that's displayed on the search
            # results listing page.
        "jobTitleSnippet": "A String", # Contains snippets of text from the Job.job_title field most
            # closely matching a search query's keywords, if available. The matching
            # query keywords are enclosed in HTML bold tags.
      },
    ],
    "numJobsFromBroadenedQuery": 42, # If query broadening is enabled, we may append additional results from the
        # broadened query. This number indicates how many of the jobs returned in the
        # jobs field are from the broadened query. These results are always at the
        # end of the jobs list. In particular, a value of 0 means all the jobs in the
        # jobs list are from the original (without broadening) query. If this
        # field is non-zero, subsequent requests with offset after this result set
        # should contain all broadened results.
    "appliedJobLocationFilters": [ # The location filters that the service applied to the specified query. If
        # any filters are lat-lng based, the JobLocation.location_type is
        # JobLocation.LocationType#LOCATION_TYPE_UNSPECIFIED.
      { # Output only.
          #
          # 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].
        },
      },
    ],
    "histogramResults": { # Output only. # The histogram results that match specified
        # SearchJobsRequest.HistogramFacets.
        #
        # Histogram results that matches HistogramFacets specified in
        # SearchJobsRequest.
      "customAttributeHistogramResults": [ # Specifies histogram results for custom attributes that
          # matches HistogramFacets.custom_attribute_histogram_facets.
        { # Output only.
            #
            # Custom attribute histogram result.
          "longValueHistogramResult": { # Output only. # Stores bucketed histogram counting result or min/max values for
              # custom attribute long values associated with `key`.
              #
              # Custom numeric bucketing result.
            "counts": [ # Count within each bucket. Its size is the length of
                # NumericBucketingOption.bucket_bounds plus 1.
              { # Represents count of jobs within one bucket.
                "count": 42, # Number of jobs whose numeric field value fall into `range`.
                "range": { # Represents starting and ending value of a range in double. # Bucket range on which histogram was performed for the numeric field,
                    # that is, the count represents number of jobs in this range.
                  "to": 3.14, # Ending value of the bucket range.
                  "from": 3.14, # Starting value of the bucket range.
                },
              },
            ],
            "maxValue": 3.14, # Stores the maximum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
            "minValue": 3.14, # Stores the minimum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
          },
          "stringValueHistogramResult": { # Stores a map from the values of string custom field associated
              # with `key` to the number of jobs with that value in this histogram result.
            "a_key": 42,
          },
          "key": "A String", # Stores the key of custom attribute the histogram is performed on.
        },
      ],
      "simpleHistogramResults": [ # Specifies histogram results that matches
          # HistogramFacets.simple_histogram_facets.
        { # Output only.
            #
            # Result of a histogram call. The response contains the histogram map for the
            # search type specified by HistogramResult.field.
            # The response is a map of each filter value to the corresponding count of
            # jobs for that filter.
          "values": { # A map from the values of field to the number of jobs with that value
              # in this search result.
              #
              # Key: search type (filter names, such as the companyName).
              #
              # Values: the count of jobs that match the filter for this search.
            "a_key": 42,
          },
          "searchType": "A String", # The Histogram search filters.
        },
      ],
      "compensationHistogramResults": [ # Specifies compensation field-based histogram results that matches
          # HistogramFacets.compensation_histogram_requests.
        { # Output only.
            #
            # Compensation based histogram result.
          "type": "A String", # Type of the request, corresponding to
              # CompensationHistogramRequest.type.
          "result": { # Output only. # Histogram result.
              #
              # Custom numeric bucketing result.
            "counts": [ # Count within each bucket. Its size is the length of
                # NumericBucketingOption.bucket_bounds plus 1.
              { # Represents count of jobs within one bucket.
                "count": 42, # Number of jobs whose numeric field value fall into `range`.
                "range": { # Represents starting and ending value of a range in double. # Bucket range on which histogram was performed for the numeric field,
                    # that is, the count represents number of jobs in this range.
                  "to": 3.14, # Ending value of the bucket range.
                  "from": 3.14, # Starting value of the bucket range.
                },
              },
            ],
            "maxValue": 3.14, # Stores the maximum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
            "minValue": 3.14, # Stores the minimum value of the numeric field. Will be populated only if
                # [NumericBucketingOption.requires_min_max] is set to true.
          },
        },
      ],
    },
    "jobView": "A String", # Corresponds to SearchJobsRequest.job_view.
    "appliedCommuteFilter": { # Input only. # The commute filter the service applied to the specified query. This
        # information is only available when query has a valid CommutePreference.
        #
        # Parameters needed for commute search.
      "departureHourLocal": 42, # Optional.
          #
          # The departure hour to use to calculate traffic impact. Accepts an
          # integer between 0 and 23, representing the hour in the time zone of the
          # start_location. Must not be present if road_traffic is specified.
      "roadTraffic": "A String", # Optional.
          #
          # Specifies the traffic density to use when calculating commute time.
          # Must not be present if departure_hour_local is specified.
      "allowNonStreetLevelAddress": True or False, # Optional.
          # If `true`, jobs without street level addresses may also be returned.
          # For city level addresses, the city center is used. For state and coarser
          # level addresses, text matching is used.
          # If this field is set to `false` or is not specified, only jobs that include
          # street level addresses will be returned by commute search.
      "travelTime": "A String", # Required.
          #
          # The maximum travel time in seconds. The maximum allowed value is `3600s`
          # (one hour). Format is `123s`.
      "startLocation": { # An object representing a latitude/longitude pair. This is expressed as a pair # Required.
          #
          # The latitude and longitude of the location from which to calculate the
          # commute time.
          # 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].
      },
      "method": "A String", # Required.
          #
          # The method of transportation for which to calculate the commute time.
    },
    "spellResult": { # Output only. # The spell checking result, and correction.
        #
        # Spell check result.
      "corrected": True or False, # Indicates if the query was corrected by the spell checker.
      "correctedText": "A String", # Correction output consisting of the corrected keyword string.
    },
    "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="searchForAlert_next">searchForAlert_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="search_next">search_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>

</body></html>