/v1/salaryGet salary benchmark data for a job title in any US metro or EU country
Return normalized salary benchmark data for a job title in any supported location. This is the primary salary lookup endpoint — it auto-detects whether the requested `location` is a US metro area or an EU country/city and returns the appropriate shape. **When to use:** answer questions like 'What do software developers earn in Berlin?', 'What is the median salary for nurses in Austin, TX?', or 'Look up the US national average for a data scientist'. **Location handling:** accepts BLS area codes, US metro names ('Austin, TX'), ISO country codes ('DE'), country names ('Germany'), or EU city names ('Berlin'). Location resolution may trigger a 400 `LOCATION_NOT_FOUND` if the input cannot be mapped — in that case retry with `GET /v1/salary/areas` or a broader name. **Response shape:** returns `SalaryResponse` (US — with percentiles p10-p90 and cost-of-living index) or `UnifiedSalaryResponse` (EU — with mean/median, gender pay gap, minimum wage). Both shapes carry `data_source` and `data_date` fields tagged with the originating dataset year. **Job title matching:** uses a 3-tier pipeline (alias → trigram → ILIKE). If no occupation matches, the endpoint returns 404 `NO_SALARY_DATA`. Use `GET /v1/jobs/search` beforehand when the caller is unsure of the title. Source: BLS OES (US) or Eurostat SES (EU). Required scope: `salary:read`.
Authentication
Requires API key via X-API-Key header.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| job_title | query | string | required | Job title to look up, e.g. 'Software Developer', 'Data Scientist', 'Nurse' |
| location | query | any | optional | US metro area (e.g. 'Austin, TX'), EU country (e.g. 'Germany', 'DE'), or EU city (e.g. 'Berlin'). Omit for US national average. |
| experience | query | any | optional | Planned feature — currently accepted but not applied to results |
| currency | query | string | optional | Currency code: 'USD' (default for US) or 'EUR' (default for EU) |
Example request
curl -X GET \
"https://salary.wageapi.com/api/v1/salary?job_title=%3Cjob_title%3E&location=%3Clocation%3E&experience=%3Cexperience%3E¤cy=USD" \
-H "X-API-Key: YOUR_API_KEY"Responses
querySalaryQueryrequiredjob_titlestringrequiredmatched_socstringrequiredmatched_titlestringrequiredlocationstringrequiredexperienceanyrequiredcurrencystringrequiredsalarySalaryBandrequiredp10anyrequiredp25anyrequiredmediananyrequiredp75anyrequiredp90anyrequiredmeananyrequiredsample_sizeanyrequiredcost_of_living_indexanyoptionaldata_sourcestringrequireddata_datestringrequiredrelated_titlesarray<string>optionaldefault []
queryUnifiedSalaryQueryrequiredjob_titlestringrequiredmatched_titlestringrequiredlocationstringrequiredregionstringrequiredenum: us | eumatched_socanyoptionalmatched_iscoanyoptionalmatched_isco_fullanyoptionalmatch_methodanyoptionalcountry_codeanyoptionalexperienceanyoptionalcurrencystringrequiredsalaryUnifiedSalaryBandrequiredmediananyoptionalmeananyoptionalp10anyoptionalp25anyoptionalp75anyoptionalp90anyoptionalsample_sizeanyoptionalcurrencystringrequiredgender_gap_pctanyoptionalmean_maleanyoptionalmean_femaleanyoptionalcost_of_living_indexanyoptionalminimum_wageanyoptionalmonthly_euranyrequiredmonthly_ppsanyrequiredyearintegerrequiredsemesteranyoptionaldata_sourcestringrequireddata_datestringrequirednotesarray<string>optionaldefault []
related_titlesarray<string>optionaldefault []
errorErrorDetailrequiredStructured 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.
codestringrequiredMachine-readable error code (e.g. INVALID_API_KEY)
messagestringrequiredHuman-readable error message
statusintegerrequiredHTTP status code
request_idstringrequiredRequest identifier — include in support tickets
suggestionanyoptionalActionable hint on how to resolve the error
doc_urlanyoptionalLink to full documentation for this error code
fieldanyoptionalField that caused the error (if applicable)
errorsanyoptionalPer-field validation errors (only for 422 VALIDATION_ERROR responses)
errorErrorDetailrequiredStructured 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.
codestringrequiredMachine-readable error code (e.g. INVALID_API_KEY)
messagestringrequiredHuman-readable error message
statusintegerrequiredHTTP status code
request_idstringrequiredRequest identifier — include in support tickets
suggestionanyoptionalActionable hint on how to resolve the error
doc_urlanyoptionalLink to full documentation for this error code
fieldanyoptionalField that caused the error (if applicable)
errorsanyoptionalPer-field validation errors (only for 422 VALIDATION_ERROR responses)
errorErrorDetailrequiredStructured 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.
codestringrequiredMachine-readable error code (e.g. INVALID_API_KEY)
messagestringrequiredHuman-readable error message
statusintegerrequiredHTTP status code
request_idstringrequiredRequest identifier — include in support tickets
suggestionanyoptionalActionable hint on how to resolve the error
doc_urlanyoptionalLink to full documentation for this error code
fieldanyoptionalField that caused the error (if applicable)
errorsanyoptionalPer-field validation errors (only for 422 VALIDATION_ERROR responses)
errorErrorDetailrequiredStructured 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.
codestringrequiredMachine-readable error code (e.g. INVALID_API_KEY)
messagestringrequiredHuman-readable error message
statusintegerrequiredHTTP status code
request_idstringrequiredRequest identifier — include in support tickets
suggestionanyoptionalActionable hint on how to resolve the error
doc_urlanyoptionalLink to full documentation for this error code
fieldanyoptionalField that caused the error (if applicable)
errorsanyoptionalPer-field validation errors (only for 422 VALIDATION_ERROR responses)
errorErrorDetailrequiredStructured 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.
codestringrequiredMachine-readable error code (e.g. INVALID_API_KEY)
messagestringrequiredHuman-readable error message
statusintegerrequiredHTTP status code
request_idstringrequiredRequest identifier — include in support tickets
suggestionanyoptionalActionable hint on how to resolve the error
doc_urlanyoptionalLink to full documentation for this error code
fieldanyoptionalField that caused the error (if applicable)
errorsanyoptionalPer-field validation errors (only for 422 VALIDATION_ERROR responses)
errorErrorDetailrequiredStructured 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.
codestringrequiredMachine-readable error code (e.g. INVALID_API_KEY)
messagestringrequiredHuman-readable error message
statusintegerrequiredHTTP status code
request_idstringrequiredRequest identifier — include in support tickets
suggestionanyoptionalActionable hint on how to resolve the error
doc_urlanyoptionalLink to full documentation for this error code
fieldanyoptionalField that caused the error (if applicable)
errorsanyoptionalPer-field validation errors (only for 422 VALIDATION_ERROR responses)
errorErrorDetailrequiredStructured 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.
codestringrequiredMachine-readable error code (e.g. INVALID_API_KEY)
messagestringrequiredHuman-readable error message
statusintegerrequiredHTTP status code
request_idstringrequiredRequest identifier — include in support tickets
suggestionanyoptionalActionable hint on how to resolve the error
doc_urlanyoptionalLink to full documentation for this error code
fieldanyoptionalField that caused the error (if applicable)
errorsanyoptionalPer-field validation errors (only for 422 VALIDATION_ERROR responses)
Try this endpoint
Create a free Aethar account and generate an API key in 2 minutes.
Create free account →