---
title: "Get Compensation Benchmark Details"
method: GET
path: "/api/v1/compensation/benchmarks/details"
tags: ["Compensation Benchmarking", "Public API"]
---

# Get Compensation Benchmark Details

`GET /api/v1/compensation/benchmarks/details`

Returns detailed benchmark data for a single company job title, optionally scoped to a specific location. The response includes the company pay range derived from current employees, the internal pay band configured for the job (if any), Mercer benchmark details when a Mercer benchmark is linked, every saved benchmark for the job/location (empty when none exist), and per-employee salary and compensation stats. Use `GET /api/v1/compensation/benchmarks` to find valid `jobId` and `locationId` values.

OAuth Scopes: compensation_benchmarks

## Query parameters

- `jobId` string, required
- `locationId` string

## Response `200`

Benchmark detail object for the requested job (and optional location).

- object
  - `jobId` string
  - `jobTitle` string
  - `locationId` string, nullable
  - `location` string, nullable
  - `mercerBenchmarkDetails` object, nullable — Populated when a Mercer benchmark is linked to this job/location.
    - `id` string
    - `source` string
    - `jobCode` string
    - `jobTitle` string
    - `jobLocation` string
    - `jobLevel` string, nullable
    - `jobDescription` string, nullable
    - `formattedJobDescription` string[], nullable
    - `companiesSurveyed` integer, nullable
    - `employeesSurveyed` integer, nullable
    - `lastReviewed` string, nullable
    - `values` object
      - `median` number
      - `min` number
      - `max` number
      - `currencyCode` string
      - `originalMedian` number, nullable
      - `originalMin` number, nullable
      - `originalMax` number, nullable
      - `originalCurrencyCode` string, nullable
      - `description` string, nullable
    - `createdYmdt` string, nullable
    - `updatedYmdt` string, nullable
    - `dataYear` string, nullable
  - `companyPayRange` object, nullable — Pay range aggregated from the current employees in this job and location.
    - `median` number
    - `min` number
    - `max` number
    - `currencyCode` string
    - `originalMedian` number, nullable
    - `originalMin` number, nullable
    - `originalMax` number, nullable
    - `originalCurrencyCode` string, nullable
  - `internalJobPayBand` object, nullable — Company-configured internal pay band for this job.
    - `median` number
    - `min` number
    - `max` number
    - `currencyCode` string
    - `originalMedian` number, nullable
    - `originalMin` number, nullable
    - `originalMax` number, nullable
    - `originalCurrencyCode` string, nullable
    - `description` string, nullable
  - `benchmarkValues` object[] — All saved benchmarks for this job/location. Empty when no benchmarks exist.
    - `id` integer
    - `jobTitle` string, nullable
    - `lastEdited` string, nullable
    - `sourceColorCode` string, nullable
    - `sourceDate` string, nullable
    - `createdYmdt` string, nullable
    - `updatedYmdt` string, nullable
    - `dataYear` string, nullable
    - `median` number
    - `min` number
    - `max` number
    - `currencyCode` string
  - `employees` object[]
    - `id` integer
    - `name` string
    - `jobTitle` object
      - `id` string
      - `value` string
      - `jobTitle` string
    - `location` object, nullable
      - `id` string
      - `value` string
      - `name` string
    - `salary` object
      - `amount` number
      - `currencyCode` string
    - `varianceFromPayBand` object, nullable
      - `amount` number
      - `currencyCode` string
    - `yearsAtCompany` integer
    - `rangePenetration` number, nullable
    - `compaRatio` number, nullable
    - `compaRatioStatus` string, nullable
    - `photoUrl` string
    - `country` string, nullable
    - `isRemote` boolean, nullable
    - `paidPer` string — Pay period label for the employee salary amount (e.g. Year, Hour).
    - `currencyConversionFailed` boolean
    - `annualizationFailed` boolean — True when pay could not be annualized (e.g. PayPeriod without a pay schedule); salary is the raw amount for paidPer.

## Other responses

- `403` — The authenticated caller lacks permission to read compensation benchmarks.
- `500` — Unexpected server error while loading benchmark details. Also returned when `jobId` is missing.

---

[API](https://skmtc.net/bamboohr/apis/bamboohr-api.md) · [All operations](https://skmtc.net/bamboohr/apis/bamboohr-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bamboohr/bamboohr-api/revisions/19ebf391a399/schema)
