/v1/compare-cost-of-livingCompare cost of living between two countries or cities (agent-first)
Compare cost of living between two locations side by side. This is the primary semantic endpoint for 'how much more expensive is X vs Y?' questions — it accepts natural language inputs, resolves them to ISO country codes, and returns a headline CPI difference plus a per-category breakdown. **Accepted input formats for `from`/`to`:** country names in any major language ('Germany', 'Deutschland', 'Allemagne'), ISO 2-letter codes ('DE'), ISO 3-letter codes ('DEU'), ISO numeric codes ('276'), or major city names that map to a country. **Optional salary adjustment:** pass `salary` to also receive a PPP-based equivalent salary in the target location. The response `salary_adjustment` block is only populated when PPP data is available for both countries. **Response shape:** a `CostOfLivingComparison` with headline `overall_difference_pct` (positive = target is more expensive), a `categories` list with per-category CPI values and differences, and an optional `salary_adjustment`. Source: BLS CPI, Eurostat HICP, OECD CPI, OECD PPP, World Bank ICP. Required scope: `costapi:read`.
Authentication
Requires API key via X-API-Key header.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| from | query | string | required | Source city or country — accepts names ('Germany'), ISO codes ('DE', 'DEU'), or numeric codes ('276'). |
| to | query | string | required | Target city or country, same formats as 'from'. |
| salary | query | any | optional | Annual salary in source location currency. Calculates equivalent salary in target. |
| currency | query | string | optional | Currency ISO 4217 code |
Example request
curl -X GET \
"https://col.wageapi.com/api/v1/compare-cost-of-living?from=%3Cfrom%3E&to=%3Cto%3E&salary=%3Csalary%3E¤cy=USD" \
-H "X-API-Key: YOUR_API_KEY"Responses
dataCostOfLivingComparisonrequiredFull cost-of-living comparison between two locations.
from_country_codestringrequiredISO alpha-2 code of source location
from_country_namestringrequiredName of source location
to_country_codestringrequiredISO alpha-2 code of target location
to_country_namestringrequiredName of target location
overall_difference_pctanyoptionalOverall CPI difference percentage (positive = target is more expensive)
categoriesarray<CategoryComparison>optionalCategory-by-category comparison
category_codestringrequiredCPI category code (e.g., SA0, SAF, SAH)
category_namestringrequiredHuman-readable category name
from_valueanyoptionalCPI value in the source location
to_valueanyoptionalCPI value in the target location
difference_pctanyoptionalPercentage difference (positive = target is more expensive)
salary_adjustmentanyoptionalSalary adjustment details (only if salary was provided)
original_salarynumberrequiredInput salary in source location
equivalent_salarynumberrequiredEquivalent salary in target location
adjustment_pctnumberrequiredPercentage adjustment needed (positive = need more in target)
currencystringoptionalCurrency of the salary values
default "USD"
metadataMetadataSchemarequiredsourcesarray<SourceSchema>optionalnamestringrequiredData source name (e.g., 'BLS', 'OECD', 'Eurostat')
datasetstringrequiredSpecific dataset identifier
urlanyoptionalURL to the source dataset
last_updatedanyoptionalWhen this data was last refreshed
request_idstringrequiredUnique request identifier
rate_limitanyoptionalremainingintegerrequiredRemaining requests today
daily_limitintegerrequiredTotal daily request limit
reset_atstring (date-time)requiredWhen the rate limit resets
paginationanyoptionalpageintegerrequiredpage_sizeintegerrequiredtotalintegerrequiredtotal_pagesintegerrequireddata_vintageanyoptionalData freshness (e.g., 'CPI data from February 2026')
methodology_notesanyoptionalMethodology notes (e.g., 'CPI rebased to 2020=100')
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 →