/v1/cheapest-citiesRank the cheapest countries in a region by CPI
Return a ranked list of the cheapest countries in a given region, sorted by headline CPI (or a specific category like housing or food). Use this endpoint to power 'top-N cheapest places' lists for dashboards, relocation research, or budget-travel tools. **Region selector:** accepts curated region aliases — `world` (default), `EU`, `Europe`, `Asia`, `G7`, `G20`, `OECD`, `Nordic`, `Baltics`. The server resolves each alias to a fixed set of ISO country codes. **Category filter:** pass `category` to rank by a specific expense bucket instead of headline CPI. Accepts human-readable keywords ('housing', 'food', 'transport', 'health') or COICOP codes ('CP04'). **Top-N:** `top` (default 10, max 50) caps the result set size. **Response shape:** a list of `RankedLocation` items with `rank`, `country_code`, `country_name`, `cpi_value`, and `vs_average_pct` (difference from the group mean). Source: BLS CPI, Eurostat HICP, OECD CPI. Required scope: `costapi:read`.
Authentication
Requires API key via X-API-Key header.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| region | query | string | optional | Region to search: 'EU', 'Europe', 'Asia', 'G7', 'OECD', 'Nordic', 'world'. |
| top | query | integer | optional | Number of results to return (1-50) |
| category | query | any | optional | Category keyword ('housing', 'food', 'transport') or COICOP code ('CP04'). |
Example request
curl -X GET \
"https://col.wageapi.com/api/v1/cheapest-cities?region=world&top=10&category=%3Ccategory%3E" \
-H "X-API-Key: YOUR_API_KEY"Responses
dataarray<RankedLocation>requiredrankintegerrequiredRank position (1 = cheapest)
country_codestringrequiredISO alpha-2 country code
country_namestringrequiredCountry name
cpi_valueanyoptionalLatest CPI index value
vs_average_pctanyoptionalPercentage vs. the group average (negative = cheaper than average)
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 →