API reference / Reference
/v1/citiesSearch cities, one entry per place
- Operation
listCities- Authentication
- API key
The same capture `/v1/airports` serves, deduplicated to one entry per city.
**Why this is not just a flag on `/v1/airports`.** That endpoint carries a `municipality` and already ranks on it, so `Nairobi` resolves there — but it returns *airports*, and Osaka is 420 of them. A picker built on it offers 420 Osakas and no way to choose between them. This returns the city once, with the codes you would act on attached.
Scoped to cities with a **bookable** airport, an IATA code and scheduled service: 3,965 of them. The other ~34,000 municipalities in the capture are airfields, heliports and closed strips, and a city list built from those is a list of places nobody can fly to.
Matching is case- and accent-insensitive, so `sao paulo` finds `São Paulo` — but the name returned is the source’s spelling, because a picker that answers `Sao Paulo` has silently renamed a city.
**Not metered**, like everything else on this tag: no eligibility work is done.
Request
Parameters
qquerystringcountry_iso2querystringlimitqueryintegerResponses
citiesCity[]requiredcountsobjectrequiredsourcestringrequiredOurAirports, community-maintained — derived from the same capture `/v1/airports` serves, and a reference rather than a government publication.
next_cursorstringnullrequirederrorobjectrequirederrorobjectrequirederrorobjectrequirederrorobjectrequiredExample
curl -X GET https://api.haavisa.com/v1/cities \
-H "Authorization: Bearer $HAAVISA_API_KEY"More in Reference
Something unclear? The eligibility guide explains the model behind the answers; the errors guide covers the envelope.