Skip to content

Compare Cities

POST
/api/v1/geo/compare

Compare multiple cities side by side

object
cities
required

City IDs to compare

Array<string>
>= 2 items <= 5 items
Example
[
"lisbon-portugal",
"barcelona-spain",
"berlin-germany"
]
monthlyBudget

Monthly budget for affordability calculation

number
> 0
Example
2500
priorities

Priority weights for scoring (0-10)

object
cost
number
default: 5 <= 10
safety
number
default: 5 <= 10
climate
number
default: 5 <= 10
internet
number
default: 5 <= 10
healthcare
number
default: 5 <= 10

City comparison

object
success
required
boolean
data
required
object
cities
required
Array<object>
object
id
required

City identifier

string
Example
lisbon-portugal
name
required

City name

string
Example
Lisbon
country
required

Country name

string
Example
Portugal
countryCode
required

ISO 3166-1 alpha-2 country code

string
>= 2 characters <= 2 characters
Example
PT
region
required

Geographic region

string
Example
Western Europe
coordinates
required

City coordinates

object
lat
required
number
>= -90 <= 90
lng
required
number
>= -180 <= 180
Example
{
"lat": 38.7223,
"lng": -9.1393
}
costOfLiving
required
object
monthlyTotal
required

Total monthly cost of living (EUR)

number
Example
1800
housing
required

Monthly housing cost (EUR)

number
Example
900
food
required

Monthly food cost (EUR)

number
Example
350
transportation
required

Monthly transportation cost (EUR)

number
Example
50
utilities
required

Monthly utilities cost (EUR)

number
Example
100
entertainment
required

Monthly entertainment cost (EUR)

number
Example
200
other
required

Other monthly costs (EUR)

number
Example
200
qualityOfLife
required
object
overall
required

Overall quality of life score (0-100)

number
<= 100
Example
75
safety
required

Safety score (0-100)

number
<= 100
Example
80
healthcare
required

Healthcare quality score (0-100)

number
<= 100
Example
70
climate
required

Climate score (0-100)

number
<= 100
Example
85
internet
required

Internet quality score (0-100)

number
<= 100
Example
75
englishFriendly
required

English-friendliness score (0-100)

number
<= 100
Example
70
taxInfo
required
object
incomeTaxRate
required

Top marginal income tax rate (%)

number
<= 100
Example
48
capitalGainsTaxRate
required

Capital gains tax rate (%)

number
<= 100
Example
28
specialPrograms
required

Available special tax programs

Array<string>
Example
[
"NHR (Non-Habitual Resident)"
]
nomadScore
required

Overall nomad-friendliness score (0-100)

number
<= 100
Example
82
visaInfo
required
object
schengen
required

Is in Schengen area

boolean
digitalNomadVisa
required

Offers digital nomad visa

boolean
visaFreeFor
required

Countries with visa-free access

Array<string>
Example
[
"US",
"UK",
"CA",
"AU"
]
currency
required

Local currency code

string
>= 3 characters <= 3 characters
Example
EUR
lastUpdated
required

Last data update timestamp

string format: date-time
rankings
required
Array<object>
object
cityId
required
string
overallScore
required
number
<= 100
rank
required
integer
> 0
scoreBreakdown
required
object
cost
required
number
safety
required
number
climate
required
number
internet
required
number
healthcare
required
number
affordabilityYears
required

Years of FI runway at this location

number | null
recommendation
required

AI-generated recommendation based on priorities

string
meta
required
object
timestamp
required
string format: date-time

Validation error

object
success
required

Always false for error responses

boolean
error
required

Error type

string
Example
Validation error
code

Machine-readable error code

string
Example
VALIDATION_ERROR
details

Detailed validation errors

Array<object>
object
path
required

Path to the invalid field

string
Example
currentAge
message
required

Error message

string
Example
Must be between 18 and 100