---
title: "Create Compensation Benchmark"
method: POST
path: "/api/v1/compensation/benchmarks"
tags: ["Compensation Benchmarking", "Public API"]
---

# Create Compensation Benchmark

`POST /api/v1/compensation/benchmarks`

Creates a new compensation benchmark for a specific company job title (and optionally a specific job location). The `jobTitleId` value comes from `GET /api/v1/compensation/benchmarks` (`jobDetails.id`) or the company's job-title list. When `jobLocationId` is omitted, the benchmark applies to the job title at any location. Returns the saved benchmark wrapped in `savedBenchmark` along with a status `message`.

OAuth Scopes: compensation_benchmarks.write

## Request body

- object
  - `jobTitleId` string, required — ID of the company job title the benchmark applies to.
  - `jobLocationId` string — Optional job location ID to scope the benchmark to a specific location.
  - `currencyCode` string, required — ISO 4217 currency code for the benchmark values.
  - `mjlJobCode` string — Mercer Job Library code associated with this benchmark. Stored on the benchmark as `mercerJobCode`.
  - `benchmarkValue` number, required — Benchmark median value.
  - `benchmarkMin` number, required — Benchmark minimum value.
  - `benchmarkMax` number, required — Benchmark maximum value.
  - `benchmarkSource` string — Free-text label describing where the benchmark came from.
  - `externalJobTitle` string
  - `externalLocation` string
  - `externalLevel` string
  - `externalJobDescription` string
  - `companiesSurveyed` integer
  - `employeesSurveyed` integer
  - `sourceId` string — ID of the benchmark source from `GET /api/v1/compensation/benchmarks/sources`.
  - `sourceDate` string — Date the benchmark source data applies to.
  - `dataYear` string — Year of the underlying survey data.
  - `externalCountry` string
  - `externalSecondaryLocation` string
  - `externalCompanySize` string
  - `externalIndustry` string

## Response `200`

Object containing the newly created benchmark row and a status message.

- object
  - `savedBenchmark` object
    - `id` string
    - `jobTitleId` string
    - `jobLocationId` string, nullable
    - `mercerJobCode` string, nullable
    - `benchmarkSource` string, nullable
    - `currencyCode` string, nullable
    - `benchmarkValue` number, nullable
    - `benchmarkMin` number, nullable
    - `benchmarkMax` number, nullable
    - `externalJobTitle` string, nullable
    - `externalLocation` string, nullable
    - `externalLevel` string, nullable
    - `externalJobDescription` string, nullable
    - `companiesSurveyed` integer, nullable
    - `employeesSurveyed` integer, nullable
    - `sourceId` string, nullable
    - `sourceDate` string, nullable
    - `dataYear` string, nullable
    - `externalCountry` string, nullable
    - `externalSecondaryLocation` string, nullable
    - `externalCompanySize` string, nullable
    - `externalIndustry` string, nullable
  - `message` string

## Other responses

- `400` — Invalid job title, location, or benchmark source reference.
- `403` — The authenticated caller lacks permission to create compensation benchmarks.
- `409` — A benchmark already exists for this job title and location combination.
- `500` — Unexpected server error while creating the benchmark.

---

[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)
