/v1/salary-adjustedCompute the cost-of-living equivalent salary between two locations
Calculate the equivalent salary for a given job when moving between two locations, adjusted for the local cost of living and local market benchmarks. Use this when a caller asks 'What salary in Berlin equals my $120K in San Francisco?' or needs to build an offer for an inbound hire from another country. **How it works:** matches the job to a SOC/ISCO code, resolves both locations, fetches the local benchmark salary for each, and applies a ratio-based adjustment. For US-to-US moves it uses BEA Regional Price Parities. For cross-border moves it uses the ratio of local salary benchmarks for the same occupation (market-adjusted, not pure PPP). **Response:** `original_salary`, `equivalent_salary` in the target location, `adjustment_factor` (equivalent / original), and `note` explaining which methodology was applied. `equivalent_salary` may be `null` if no benchmark is available for one of the locations. **Limitation:** this endpoint returns a salary estimate, not a full cost-of-living decomposition (rent, groceries, transport). For that, use CostAPI. Source: BLS OES, Eurostat SES, BEA RPP. Required scope: `salary:read`.
Authentication
Requires API key via X-API-Key header.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| job | query | string | required | Job title in natural language, e.g. 'Software Developer' |
| salary | query | number | required | Current annual salary in the supplied currency |
| from | query | string | required | Current location, e.g. 'San Francisco, CA', 'Berlin', 'Germany' |
| to | query | string | required | Target location, e.g. 'Austin, TX', 'Munich', 'Poland' |
| currency | query | string | optional | Currency code: 'USD' or 'EUR' |
Example request
curl -X GET \
"https://salary.wageapi.com/api/v1/salary-adjusted?job=%3Cjob%3E&salary=%3Csalary%3E&from=%3Cfrom%3E&to=%3Cto%3E¤cy=USD" \
-H "X-API-Key: YOUR_API_KEY"Responses
job_titlestringrequiredfrom_locationstringrequiredto_locationstringrequiredoriginal_salarynumberrequiredequivalent_salaryanyoptionaladjustment_factoranyoptionalcurrencystringrequiredfrom_salary_benchmarkanyoptionalto_salary_benchmarkanyoptionalnotestringrequireddata_sourcestringrequirederrorErrorDetailrequiredStructured 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 →