POST/v1/compliance/validate-salary-range

Validate a posted salary range against EU Pay Transparency rules

Check whether a job posting's salary range complies with the EU Pay Transparency Directive (2023/970) for a given country. Use this when an employer or job board needs to flag posted ranges *before* publishing to avoid minimum-wage violations and structurally non-compliant postings. **What it checks:** - **Legal validity** — both `min_salary` and `max_salary` are present, `max > min`, and the range is at or above the national minimum wage (converted to the same period as the posting). - **Statistical reasonableness** — benchmarks the range against Eurostat SES data for the matched ISCO occupation. Flags ranges that are clearly below or above market without hard-failing them. **Response:** two independent booleans — `legally_valid` and `statistically_reasonable` — plus a list of `warnings` explaining each finding. The endpoint intentionally never conflates legal compliance with market positioning in a single boolean. **Not legal advice** — the `disclaimer` field in the response calls this out explicitly. Consult an employment lawyer for formal compliance decisions. Source: EU Directive 2023/970, Eurostat SES, national minimum wage data. Required scope: `compliance:read` (Pro tier or higher).

Authentication

Requires API key via X-API-Key header.

Request body

job_titlestringrequired
countrystringrequired
min_salarynumberrequired
max_salarynumberrequired
currencystringoptional

default "EUR"

salary_periodstringoptionalenum: annual | monthly | hourly

default "annual"

sectoranyoptional
one of:
option 1:
string
option 2:
null
company_sizeanyoptional
one of:
option 1:
integer
option 2:
null

Example request

curl
curl -X POST \
  "https://salary.wageapi.com/api/v1/compliance/validate-salary-range" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"company_size":250,"country":"DE","currency":"EUR","job_title":"Software Developer","max_salary":75000,"min_salary":55000,"salary_period":"annual","sector":"information_and_communication"}'

Responses

200Successful Response
legally_validbooleanrequired
statistically_reasonablebooleanrequired
warningsarray<ValidationWarning>optional

default []

array of ValidationWarning
codestringrequired
severitystringrequiredenum: error | warning | info
messagestringrequired
country_codestringrequired
country_namestringrequired
directive_transposedbooleanrequired
matched_iscoanyoptional
one of:
option 1:
string
option 2:
null
matched_titleanyoptional
one of:
option 1:
string
option 2:
null
benchmark_mediananyoptional
one of:
option 1:
number
option 2:
null
estimated_percentilesanyoptional
one of:
option 1:
object
option 2:
null
benchmark_currencystringoptional

default "EUR"

salary_periodstringoptional

default "annual"

methodology_noteanyoptional
one of:
option 1:
string
option 2:
null
disclaimerstringoptional

default "The legally_valid field assesses structural compliance (range present, above minimum wage). The statistically_reasonable field assesses market positioning against Eurostat data. Neither constitutes legal advice."

401Missing or invalid API key.
errorErrorDetailrequired

Structured error payload returned by all Aethar APIs. Mirrors the shape produced by aethar_auth.exception_handlers so the OpenAPI spec accurately describes real error bodies for documentation readers and MCP clients.

codestringrequired

Machine-readable error code (e.g. INVALID_API_KEY)

messagestringrequired

Human-readable error message

statusintegerrequired

HTTP status code

request_idstringrequired

Request identifier — include in support tickets

suggestionanyoptional

Actionable hint on how to resolve the error

one of:
option 1:
string
option 2:
null
doc_urlanyoptional

Link to full documentation for this error code

one of:
option 1:
string
option 2:
null
fieldanyoptional

Field that caused the error (if applicable)

one of:
option 1:
string
option 2:
null
errorsanyoptional

Per-field validation errors (only for 422 VALIDATION_ERROR responses)

one of:
option 1:
array of object
object
option 2:
null
403API key lacks the required scope for this endpoint.
errorErrorDetailrequired

Structured error payload returned by all Aethar APIs. Mirrors the shape produced by aethar_auth.exception_handlers so the OpenAPI spec accurately describes real error bodies for documentation readers and MCP clients.

codestringrequired

Machine-readable error code (e.g. INVALID_API_KEY)

messagestringrequired

Human-readable error message

statusintegerrequired

HTTP status code

request_idstringrequired

Request identifier — include in support tickets

suggestionanyoptional

Actionable hint on how to resolve the error

one of:
option 1:
string
option 2:
null
doc_urlanyoptional

Link to full documentation for this error code

one of:
option 1:
string
option 2:
null
fieldanyoptional

Field that caused the error (if applicable)

one of:
option 1:
string
option 2:
null
errorsanyoptional

Per-field validation errors (only for 422 VALIDATION_ERROR responses)

one of:
option 1:
array of object
object
option 2:
null
404No Eurostat SES benchmark for the matched ISCO code and country.
errorErrorDetailrequired

Structured error payload returned by all Aethar APIs. Mirrors the shape produced by aethar_auth.exception_handlers so the OpenAPI spec accurately describes real error bodies for documentation readers and MCP clients.

codestringrequired

Machine-readable error code (e.g. INVALID_API_KEY)

messagestringrequired

Human-readable error message

statusintegerrequired

HTTP status code

request_idstringrequired

Request identifier — include in support tickets

suggestionanyoptional

Actionable hint on how to resolve the error

one of:
option 1:
string
option 2:
null
doc_urlanyoptional

Link to full documentation for this error code

one of:
option 1:
string
option 2:
null
fieldanyoptional

Field that caused the error (if applicable)

one of:
option 1:
string
option 2:
null
errorsanyoptional

Per-field validation errors (only for 422 VALIDATION_ERROR responses)

one of:
option 1:
array of object
object
option 2:
null
422Request validation failed (bad JSON shape, missing required fields, etc.).
errorErrorDetailrequired

Structured error payload returned by all Aethar APIs. Mirrors the shape produced by aethar_auth.exception_handlers so the OpenAPI spec accurately describes real error bodies for documentation readers and MCP clients.

codestringrequired

Machine-readable error code (e.g. INVALID_API_KEY)

messagestringrequired

Human-readable error message

statusintegerrequired

HTTP status code

request_idstringrequired

Request identifier — include in support tickets

suggestionanyoptional

Actionable hint on how to resolve the error

one of:
option 1:
string
option 2:
null
doc_urlanyoptional

Link to full documentation for this error code

one of:
option 1:
string
option 2:
null
fieldanyoptional

Field that caused the error (if applicable)

one of:
option 1:
string
option 2:
null
errorsanyoptional

Per-field validation errors (only for 422 VALIDATION_ERROR responses)

one of:
option 1:
array of object
object
option 2:
null
429Daily rate limit exceeded for this API key.
errorErrorDetailrequired

Structured error payload returned by all Aethar APIs. Mirrors the shape produced by aethar_auth.exception_handlers so the OpenAPI spec accurately describes real error bodies for documentation readers and MCP clients.

codestringrequired

Machine-readable error code (e.g. INVALID_API_KEY)

messagestringrequired

Human-readable error message

statusintegerrequired

HTTP status code

request_idstringrequired

Request identifier — include in support tickets

suggestionanyoptional

Actionable hint on how to resolve the error

one of:
option 1:
string
option 2:
null
doc_urlanyoptional

Link to full documentation for this error code

one of:
option 1:
string
option 2:
null
fieldanyoptional

Field that caused the error (if applicable)

one of:
option 1:
string
option 2:
null
errorsanyoptional

Per-field validation errors (only for 422 VALIDATION_ERROR responses)

one of:
option 1:
array of object
object
option 2:
null
500Unexpected server error. Includes a request_id for support.
errorErrorDetailrequired

Structured error payload returned by all Aethar APIs. Mirrors the shape produced by aethar_auth.exception_handlers so the OpenAPI spec accurately describes real error bodies for documentation readers and MCP clients.

codestringrequired

Machine-readable error code (e.g. INVALID_API_KEY)

messagestringrequired

Human-readable error message

statusintegerrequired

HTTP status code

request_idstringrequired

Request identifier — include in support tickets

suggestionanyoptional

Actionable hint on how to resolve the error

one of:
option 1:
string
option 2:
null
doc_urlanyoptional

Link to full documentation for this error code

one of:
option 1:
string
option 2:
null
fieldanyoptional

Field that caused the error (if applicable)

one of:
option 1:
string
option 2:
null
errorsanyoptional

Per-field validation errors (only for 422 VALIDATION_ERROR responses)

one of:
option 1:
array of object
object
option 2:
null

Try this endpoint

Create a free Aethar account and generate an API key in 2 minutes.

Create free account →