Visier Compensation Benchmarks API

Dataset API providing access to Visier Compensation Benchmarks: market compensation data by job, location, industry, and company size, for benchmarking pay against external market reference points.

OpenAPI Specification

visier-compensation-benchmarks-openapi.yaml Raw ↑
openapi: "3.0.1"
info:
  title: Compensation Benchmarks API
  license:
    name: Apache License, Version 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
  version: "1.0"
tags:
  - name: Benchmarks
    description: |
      Get benchmark values.
  - name: Dimensions
    description: "Discover dimensions and members.\n\nA dimension organizes unique values of an attribute into a list or a hierarchical structure of members. \nThe structure can be navigated to discover the members, and the members can be used to look up benchmark values.\n"
paths:
  /v1/compensation-benchmarks/base-salary:
    get:
      summary: Get base salary benchmark value
      tags: [Benchmarks]
      operationId: GetSalaryBenchmark
      description: |
        Retrieve the base salary benchmark value.
      parameters:
        - name: job
          in: query
          required: true
          schema:
            type: string
          description: |
            The job member ID.
        - name: industry
          in: query
          required: false
          schema:
            type: string
          description: |
            The industry member ID. If the ID is not provided, the response returns the benchmark value across all industries.
        - name: naicsCode
          in: query
          required: false
          schema:
            type: string
          description: "The North American Industry Classification System (NAICS) code. \n\nIf the NAICS code is not provided, the response returns the benchmark value across all industries.\nIf both `naicsCode` and `industry` are provided, the response returns the benchmark value for the `industry` parameter. The entered `naicsCode` will not be applied.\n"
        - name: location
          in: query
          required: false
          schema:
            type: string
          description: |
            The location member ID. If the ID is not provided, the response returns the benchmark value across all locations.
        - name: companySize
          in: query
          required: false
          schema:
            type: string
          description: |
            The company size member ID. If the ID is not provided, the response returns the benchmark value across all company sizes.
        - name: careerLevel
          in: query
          required: false
          schema:
            type: string
          description: |
            The career level member ID. If the ID is not provided, the response returns the benchmark value across all career levels.
        - name: matchDate
          in: query
          required: false
          schema:
            type: string
          description: |
            The date on which the career level was matched in `yyyy-MM-dd` format. A `matchDate` allows precise migration of career levels according to job architecture changes released since the match was made. If `matchDate` is not available, the migration assumes the most recent possible match date for the provided career level.
      responses:
        "200":
          description: |
            The requested base salary benchmark value.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/BenchmarkValue"
        "400":
          description: |
            The API request failed given the parameters provided, such as missing parameters, invalid parameters, or there is no benchmark value available.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-get-salary-arn}"
      security:
        - api_key: []
  /v1/compensation-benchmarks/base-salary/feedback:
    post:
      summary: Submit feedback to improve salary benchmark values
      tags: [Benchmarks]
      operationId: "SubmitSalaryBenchmarkFeedback"
      description: |
        Give feedback for a salary benchmark value returned by `GET /v1/compensation-benchmarks/base-salary` or `/base-salaries`. To submit feedback, include the benchmark value's:
          * ID values you defined in `GET /v1/compensation-benchmarks/base-salary` or `/base-salaries`.
          * `referenceDate` and `releaseDate` returned by `GET /v1/compensation-benchmarks/base-salary` or `/base-salaries`.
          * Optional `additionalComments` up to 750 characters.
      requestBody:
        description: |
          The feedback to submit.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SalaryBenchmarkFeedbackInput"
        required: true
      responses:
        "204":
          description: |
            Your feedback has been submitted successfully.
        "400":
          description: |
            Your feedback could not be submitted. Ensure all mandatory fields are included in the request body.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-submit-benchmark-feedback-arn}"
        type: "aws_proxy"
      security:
        - api_key: []
  /v1/compensation-benchmarks/base-salaries:
    post:
      summary: Get salary benchmark values in bulk
      tags: [Benchmarks]
      operationId: "GetSalaryBenchmarksInBulk"
      description: |
        Retrieve multiple base salary benchmark values in a single request.
      requestBody:
        description: |
          A batch request takes a JSON object consisting of an array of your requests. You can batch up to 1000 individual requests in one API call.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/SalaryBenchmarkInputs"
        required: true
      responses:
        "200":
          description: "The bulk request was completed. Review the responses individually to see which actions were successful. \nIf you receive a 400 status code for an individual response, it indicates missing parameters, invalid members, or no benchmark values were found.\n"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SalaryBenchmarksBatchProcessingOutputs"
        "400":
          description: |
            The API request failed due to invalid JSON input, empty input or it exceeded the bulk size limit of 1000 individual requests.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-get-batch-benchmarks-arn}"
      security:
        - api_key: []
  /v1/compensation-benchmarks/jobs:
    get:
      summary: Get jobs V1
      tags: [Dimensions]
      operationId: GetJobsV1
      description: |
        Retrieve a list of all the jobs in Visier's ontology. A new version of this endpoint is now available. For more information, see `GET /v2/compensation-benchmarks/jobs`.
      parameters:
        - name: hierarchy
          in: query
          required: false
          schema:
            type: string
          description: |
            The ID of the job hierarchy to navigate.

            If not provided, Visier's default job hierarchy is used. In the default hierarchy, jobs are organized into three levels with domain and subdomain groupings.
        - name: parent
          in: query
          required: false
          schema:
            type: string
          description: |
            The ID of the parent member.

            If the ID is provided, the response returns the immediate children of the parent member.

            To get the top-level members, use the value `root`.

            Member availability and the parent-child relationship depends on the selected hierarchy. Please refer to the `hierarchy` parameter.
        - name: term
          in: query
          required: false
          schema:
            type: string
          description: "The input search term. The job members that are the most semantically similar to the search term are returned with the most relevant job members displayed first. \nYour search term may not be included in the results as semantic search goes beyond keyword matching and attempts to interpret the meaning behind the query to provide search results.\n\nThe minimum length is 2 characters and the maximum length is 100 characters.\n\n***The search term must be URL encoded.***\n"
        - name: naicsCode
          in: query
          required: false
          schema:
            type: string
          description: |
            The North American Industry Classification System (NAICS) code.

            If `naicsCode` is provided, `term` is required. The most relevant job members associated with the naicsCode are returned first.
        - name: hasBenchmarkValue
          in: query
          required: false
          schema:
            type: boolean
          description: "Filter members based on the availability of benchmark values. \nIf `true`, members with benchmark values are returned. \nIf `false`, members without benchmark values are returned. \nIf no value is specified, all members are returned.\n"
        - name: semanticOnly
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, only semantic search will be used to find matches. Ensure the parameter `lexicalOnly` is set to `false`.
            Default is `false`. By default, both semantic and lexical search are used to find matches.
        - name: lexicalOnly
          in: query
          required: false
          schema:
            type: boolean
          description: "If `true`, only lexical search will be used to find matches. Ensure the parameter `semanticOnly` is set to `false`. \nDefault is `false`. By default, both semantic and lexical search are used to find matches.\n"
        - name: typicalTitlesSearch
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, similar job titles for a job member are included in the lexical search for matches.
            Default is `false`.
        - name: showHierarchy
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, returns members in a tree structure based on the occupation hierarchy.
            Default is `false`.
        - name: includeArchived
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, both `active` and `archived` members are returned. Default is `false`. Members are archived when taxonomy changes are made.
      responses:
        "200":
          description: |
            List of job members.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DimensionMember"
        "400":
          description: |
            The API request failed given the parameters provided, such as missing or invalid parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-get-salary-arn}"
      security:
        - api_key: []
  /v2/compensation-benchmarks/jobs:
    get:
      summary: Get jobs V2
      tags: [Dimensions]
      operationId: GetJobsV2
      description: |
        Retrieve a list of all the jobs in Visier's ontology. Jobs V2 improves upon Jobs V1 in the following ways:
        - Supports pagination through the `page` and `limit` parameters.
        - Returns both the short and long versions of job descriptions and job typical titles.
      parameters:
        - name: hierarchy
          in: query
          required: false
          schema:
            type: string
          description: |
            The ID of the job hierarchy to navigate.

            If not provided, Visier's default job hierarchy is used. In the default hierarchy, jobs are organized into three levels with domain and subdomain groupings.
        - name: parent
          in: query
          required: false
          schema:
            type: string
          description: |
            The ID of the parent member.

            If the ID is provided, the response returns the immediate children of the parent member.

            To get the top-level members, use the value `root`.

            Member availability and the parent-child relationship depends on the selected hierarchy. Please refer to the `hierarchy` parameter.
        - name: term
          in: query
          required: false
          schema:
            type: string
          description: "The input search term. The job members that are the most semantically similar to the search term are returned with the most relevant job members displayed first. \nYour search term may not be included in the results as semantic search goes beyond keyword matching and attempts to interpret the meaning behind the query to provide search results.\n\nThe minimum length is 2 characters and the maximum length is 100 characters.\n\n***The search term must be URL encoded.***\n"
        - name: naicsCode
          in: query
          required: false
          schema:
            type: string
          description: |
            The North American Industry Classification System (NAICS) code.

            If `naicsCode` is provided, `term` is required. The most relevant job members associated with the naicsCode are returned first.
        - name: hasBenchmarkValue
          in: query
          required: false
          schema:
            type: boolean
          description: "Filter members based on the availability of benchmark values. \nIf `true`, members with benchmark values are returned. \nIf `false`, members without benchmark values are returned. \nIf no value is specified, all members are returned.\n"
        - name: semanticOnly
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, only semantic search will be used to find matches. Ensure the parameter `lexicalOnly` is set to `false`.
            Default is `false`. By default, both semantic and lexical search are used to find matches.
        - name: lexicalOnly
          in: query
          required: false
          schema:
            type: boolean
          description: "If `true`, only lexical search will be used to find matches. Ensure the parameter `semanticOnly` is set to `false`. \nDefault is `false`. By default, both semantic and lexical search are used to find matches.\n"
        - name: typicalTitlesSearch
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, similar job titles for a job member are included in the lexical search for matches.
            Default is `false`.
        - name: showHierarchy
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, returns members in a tree structure based on the occupation hierarchy.
            Default is `false`.
        - name: includeArchived
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, both `active` and `archived` members are returned. Default is `false`. Members are archived when taxonomy changes are made.
        - name: page
          in: query
          required: false
          schema:
            type: integer
          description: |
            The subset of the overall result set to return. The number of rows per page is equal to `limit`, except the last page which may contain fewer rows. Page is an index that begins at 0. The index to start retrieving results is calculated by multiplying `page` by `limit`. Default is to return results for page 0.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
          description: |
            The maximum number of entries to return. Default and maximum are 1000 entries.
      responses:
        "200":
          description: |
            List of job members.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DimensionMember"
        "400":
          description: |
            The API request failed given the parameters provided, such as missing or invalid parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-get-salary-arn}"
      security:
        - api_key: []
  /v1/compensation-benchmarks/jobs/standardize:
    post:
      summary: Standardize custom job titles in bulk
      tags: [Dimensions]
      operationId: "StandardizeJobsInBulk"
      description: |
        Find the top standardized job matches for any custom job title and optional NAICS code in bulk.
      requestBody:
        description: |
          The custom job titles that you want to retrieve standardized jobs for, the optional NAICS code to retrieve industry specific jobs, and the optional number of top matches to retrieve.

          By default, both semantic and lexical search are used to find matches. If you want to use a specific search method, set one of the parameters `semanticOnly` or `lexicalOnly` to `true`. Default for `semanticOnly` and `lexicalOnly` are `false`.

          The minimum custom job title length is 2 characters and the maximum length is 100 characters. You can submit up to 30 custom job titles per request.

          The default number of top matches returned is 5.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobStandardizationInput"
        required: true
      responses:
        "200":
          description: |
            The top standardized job matches for each custom job title.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobStandardizationOutput"
        "400":
          description: |
            The API request failed given the parameters provided, such as missing or invalid parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-get-batch-dimension-members-arn}"
      security:
        - api_key: []
  /v1/compensation-benchmarks/jobs/hierarchies:
    get:
      summary: Get job hierarchies
      tags: [Dimensions]
      operationId: GetJobHierarchies
      description: |
        Retrieve a list of all hierarchies used to organize jobs.
      parameters:
        - name: naicsCode
          in: query
          required: false
          schema:
            type: string
          description: |
            The North American Industry Classification System (NAICS) code.

            If provided, the response returns the hierarchies associated with the code.
      responses:
        "200":
          description: |
            List of hierarchies.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Hierarchy"
        "400":
          description: |
            The API request failed given the parameters provided, such as missing or invalid parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-get-occupation-hierarchies-arn}"
      security:
        - api_key: []
  /v1/compensation-benchmarks/jobs/search:
    post:
      summary: Search jobs by IDs
      tags: [Dimensions]
      operationId: "SearchJobs"
      description: |
        Retrieve a matching job for each specified job ID.
      requestBody:
        description: |
          The job IDs that you want to retrieve a job match.

          Include the mandatory `jobIDs` field.
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobSearchInput"
        required: true
      responses:
        "200":
          description: "The request was completed. Review the responses individually to see which actions were successful. \nIf you receive a 400 status code for an individual input, it indicates an invalid job ID or no job was found.\n"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/JobSearchOutput"
        "400":
          description: |
            The API request failed due to invalid JSON input, empty input or it exceeded the size limit of 1000 IDs.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-search-jobs-arn}"
      security:
        - api_key: []
  /v1/compensation-benchmarks/jobs/feedback:
    post:
      summary: Send feedback to help improve the quality of the job match results
      tags: [Dimensions]
      operationId: "SubmitJobsFeedback"
      description: "This API allows you to submit feedback on the quality of the job match results returned by the Get jobs endpoint. \n\nYou must include the search term (job title you entered) in the request body. You can include the optional `naicsCode` if it was used as part of the search in the Get jobs endpoint.\n\nYou can also submit additional comments by providing values for `additionalComments`, along with `term` and `naicsCode`.\n\n**Note:**\n\nFor `term`, the minimum is 2 characters and the maximum is 100 characters.\n\nFor `additionalComments`, the maximum is 750 characters.\n"
      requestBody:
        description: |
          The feedback you want to submit for.

          Ensure to include the mandatory fields: search term (`term`).
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/JobFeedbackInput"
        required: true
      responses:
        "204":
          description: |
            Your feedback has been submitted successfully.
        "400":
          description: |
            Your feedback could not be submitted. Ensure the required fields `term` is not included in the request body.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-submit-match-feedback-arn}"
        type: "aws_proxy"
      security:
        - api_key: []
  /v1/compensation-benchmarks/industries:
    get:
      summary: Get industries
      tags: [Dimensions]
      operationId: GetIndustries
      description: |
        Retrieve a list of all available industries.
      parameters:
        - name: parent
          in: query
          required: false
          schema:
            type: string
          description: |
            The ID of the parent member.

            If the ID is provided, the response returns the immediate children of the parent member.

            To get the top-level members, use the value `root`.
        - name: naicsCode
          in: query
          required: false
          schema:
            type: string
          description: |
            The North American Industry Classification System (NAICS) code.

            If provided, the response returns the best matching member associated with the code.
        - name: showHierarchy
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, returns members in a tree structure based on the industry hierarchy.
            Default is `false`.
        - name: hasBenchmarkValue
          in: query
          required: false
          schema:
            type: boolean
          description: "Filter members based on the availability of benchmark values. \nIf `true`, members with benchmark values are returned. \nIf `false`, members without benchmark values are returned. \nIf no value is specified, all members are returned.\n"
        - name: includeArchived
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, both `active` and `archived` members are returned. Default is `false`. Members are archived when taxonomy changes are made.
      responses:
        "200":
          description: |
            List of industry members.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/DimensionMember"
        "400":
          description: |
            The API request failed given the parameters provided, such as missing or invalid parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "500":
          description: |
            An unexpected exception occurred on the server.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
        "504":
          description: |
            The server is taking too long to respond and the request timed out.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ApiError"
      x-amazon-apigateway-integration:
        type: "aws_proxy"
        credentials: "${apigateway_role}"
        httpMethod: "POST"
        uri: "${lambda-get-dimension-members-arn}"
      security:
        - api_key: []
  /v1/compensation-benchmarks/locations:
    get:
      summary: Get locations
      tags: [Dimensions]
      operationId: GetLocations
      description: |
        Retrieve a list of all available locations.
      parameters:
        - name: parent
          in: query
          required: false
          schema:
            type: string
          description: |
            The ID of the parent member.

            If the ID is provided, the response returns the immediate children of the parent member.

            To get the top-level member, use the value `root`.
        - name: countryCode
          in: query
          required: false
          schema:
            type: string
          description: |
            The **ISO 3166-1** country code to look up. Returns location members that match the country code.

            Currently, the only supported country code is `US`.
        - name: postalCode
          in: query
          required: false
          schema:
            type: string
          description: |
            Postal code to look up. If `postalCode` is provided, `countryCode` is required. Returns location members that match both the country code and postal code.
        - name: showHierarchy
          in: query
          required: false
          schema:
            type: boolean
          description: |
            If `true`, returns members in a tree structure based on the location hierarchy.
            Default is `false`.
        - name: hasBenchmarkValue
          in: query
     

# --- truncated at 32 KB (72 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/visier/refs/heads/main/openapi/visier-compensation-benchmarks-openapi.yaml