apyhub
Back
▣ RETRIEVAL KIT · VERIFICATION KIT

Search Places and Reverse Geocode API

What it does

Place Search API lets you look up places by name, find the nearest place to a coordinate, and list all known places within a radius. Send a search term, or a latitude and longitude, and get back structured place records with coordinates, country code, country, region, population, area, timezone, GeoNames and Wikidata identifiers, and source metadata.

Use the name search when you need to resolve user-entered place names into canonical records. The request accepts q, optional country, optional limit, and optional lang. The response includes the trimmed query, a count, a results array, and the contributing sources. Each result includes name, officialNames, latitude, longitude, countryCode, country, region, population, areaKm2, timezone, type, and source identifiers, plus optional translation data when you pass lang.

Use the coordinate lookup when you need reverse geocoding with context. It accepts lat, lon, optional minPopulation, and optional lang, and returns the nearest place plus the nearest major city with a population of at least 100,000 when available. For spatial search, send lat, lon, radius, optional minPopulation, optional limit, and optional lang to list matching places within the radius. Those responses include the requested coordinate as query, a count, the matching places, and the shared sources metadata.

This is a good fit for location autocomplete, map pin labeling, nearby-city detection, address normalization, and analytics that need consistent place IDs rather than free-text names.

▣ ENDPOINT 01 / 03
GET
Finds places by name.
https://api.eu.apyhub.com/modernsoftware-pro/search-places-reverse-geocode/search

QUICKSTART

GUIDE

Quickstart

Search for a place by query text; this example looks up “Paris” and returns matching geocoding results.

curl -X GET "https://api.eu.apyhub.com/modernsoftware-pro/search-places-reverse-geocode/search?q=Paris&limit=3" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with count, query, results, and sources. count is the number of items in results; query is the trimmed search text; results is an array of place objects; and sources lists the data sources behind the returned results.

{
  "query": "Paris",
  "count": 3,
  "results": [
    {
      "geonameId": 2988507,
      "wikidataId": "Q90",
      "nationalId": null,
      "name": "Paris",
      "officialNames": [
        {
          "language": "fr",
          "name": "Paris"
        }
      ],
      "latitude": 48.85341,
      "longitude": 2.3488,
      "countryCode": "FR",
      "country": "France",
      "region": "Île-de-France",
      "population": 2138551,
      "areaKm2": 105.4,
      "timezone": "Europe/Paris",
      "type": {
        "code": "PPLC",
        "label": "capital of a political entity"
      },
      "sources": [
        "geonames"
      ]
    },
    {
      "geonameId": 2970479,
      "wikidataId": null,
      "nationalId": null,
      "name": "Paris 15 Vaugirard",
      "officialNames": [
        {
          "language": "fr",
          "name": "Paris 15 Vaugirard"
        }
      ],
      "latitude": 48.8412,
      "longitude": 2.3003,
      "countryCode": "FR",
      "country": "France",
      "region": "Île-de-France",
      "population": 229713,
      "areaKm2": null,
      "timezone": "Europe/Paris",
      "type": {
        "code": "PPL",
        "label": "populated place"
      },
      "sources": [
        "geonames"
      ]
    },
    {
      "geonameId": 2994540,
      "wikidataId": null,
      "nationalId": null,
      "name": "Paris 20 Ménilmontant",
      "officialNames": [
        {
          "language": "fr",
          "name": "Paris 20 Ménilmontant"
        }
      ],
      "latitude": 48.8646,
      "longitude": 2.3984,
      "countryCode": "FR",
      "country": "France",
      "region": "Île-de-France",
      "population": 185140,
      "areaKm2": null,
      "timezone": "Europe/Paris",
      "type": {
        "code": "PPL",
        "label": "populated place"
      },
      "sources": [
        "geonames"
      ]
    }
  ],
  "sources": [
    {
      "id": "geonames",
      "name": "GeoNames.org",
      "license": "CC-BY-4.0",
      "attribution": null,
      "updatedAt": "2026-11-07"
    }
  ]
}
TRY ITLIVE · 25 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Name to search, in any supported language.
Optional country filter, ISO 3166-1 alpha-2
Max results to return
Return additional `translations` for up to 2 languages: comma-separated 2-letter ISO-639 language codes (use 3-letter, if no 2-letter code exists)

About this endpoint

Finds places by name.

Finds up to 50 cities and populated places whose name starts with q in any stored language, ignoring accents and capitalization, sorted by population from the largest. Includes an optional country filter. The results contain the known names in the country official languages. if lang language is specified - it returns known additional translations in up to 2 languages.

Query Parameter(s)

AttributeTypeMandatoryDescription
qStringYesThe text to search for, 1-200 characters after trimming whitespace. Matched against every stored name of a place (case-insensitive, accent-insensitive), as a prefix.
countryStringNoRestricts results to this ISO 3166-1 alpha-2 country code (case-insensitive). An unrecognized but well-formed code simply yields no results.
limitIntegerNoThe maximum number of results to return (default 10, at most 50).
langStringNoReturn additional translations for up to 2 languages: comma-separated 2-letter ISO 639-1 codes. Supported: ar, be, bg, cs, da, de, el, en, es, et, fi, fr, hi, hr, hu, is, it, ja, lt, lv, nl, no, pl, pt, ro, ru, sk, sl, sq, sr, sv, sw, uk, zh. Other codes (including 3-letter codes) are ignored and return no translation.

Response

Returns a JSON object listing up to 50 cities and populated places whose name starts with q in any stored language, sorted by population descending (unknown population last) and capped at limit, along with the data source(s) behind those results.

AttributeTypeMandatoryDescription
queryStringYesThe (trimmed) search text that was searched for.
countIntegerYesThe number of entries in results (already capped by limit).
resultsObject ArrayYesEvery place whose name matches the search, sorted by population descending. Empty if none could be found.
results[].geonameIdIntegerNoThe place GeoNames identifier, or null for a place with no GeoNames data at all.
results[].wikidataIdStringNoThe place Wikidata entity ID (e.g. Q2807), or null when none is known.
results[].nationalIdStringNoThe place code in its own country official place register, or null when not known.
results[].nameStringYesThe place's default display name.
results[].officialNamesObject ArrayYesThe place's name in every official language of its country (if known). Empty if none are known. Each item has language and name.
results[].officialNames[].languageStringYesThe language's ISO 639-1 code.
results[].officialNames[].nameStringYesThe place's name in that language.
results[].translationsObject ArrayNoPresent only when lang was supplied: the place name in each of the requested languages (if known), in the same order as lang.
results[].latitudeNumberYesThe place latitude.
results[].longitudeNumberYesThe place longitude.
results[].countryCodeStringYesISO 3166-1 alpha-2 country code.
results[].countryStringNoThe country display name, or null if unknown.
results[].regionStringNoThe place top-level administrative division (e.g. a state or province), or null if unknown.
results[].populationIntegerNoThe place population, or null if unknown.
results[].areaKm2NumberNoThe place area in square kilometers, or null if unknown.
results[].timezoneStringNoThe place IANA time zone identifier, or null if unknown.
results[].typeObjectNoThe place GeoNames type, or null for a place with no GeoNames data at all.
results[].type.codeStringYesThe place GeoNames feature code, e.g. PPLC.
results[].type.labelStringNoThe human-readable label for code, or null for an unrecognized code.
results[].sourcesString ArrayYesThe source code(s) that contributed data to this place (e.g. geonames).
sourcesObject ArrayYesThe dictionary entry for data sources used in results.
sources[].idStringYesThe source identifier used in results[].sources.
sources[].nameStringYesThe source human-readable display name.
sources[].licenseStringYesThe source data license.
sources[].attributionStringNoCustom attribution text this source requires callers to display verbatim, beyond the license itself, or null when there is no such requirement.
sources[].updatedAtStringYesThe date this source's data was last (re-)imported into the database as a whole, formatted as YYYY-MM-DD.

Notes

  • At most 50 results are returned per call; use limit to control how many.
  • Language codes must be 2-letter ISO 639-1 codes. 3-letter codes are not supported.
  • Supported languages (34): Arabic (ar), Belarusian (be), Bulgarian (bg), Croatian (hr), Czech (cs), Danish (da), Dutch (nl), English (en), Estonian (et), Finnish (fi), French (fr), German (de), Greek (el), Hindi (hi), Hungarian (hu), Icelandic (is), Italian (it), Japanese (ja), Latvian (lv), Lithuanian (lt), Norwegian (no), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Serbian (sr), Slovak (sk), Slovenian (sl), Spanish (es), Swahili (sw), Swedish (sv), Albanian (sq), Ukrainian (uk), Chinese (zh).
  • Sending an unsupported code does not return an error. The request succeeds and translations is empty.
  • A translation is returned only if the upstream source has a name for that place in that language. * The API recognizes 30+ languages, and the coverage may increase over time. Sending the code of the unsupported language does not result in error - you will simply not get a translation for it in the response.
  • The API returns the official name or translation in the given language only if the upstream source defines such a name.
  • officialNames lists place names in the recognized country official languages at the national level (or best-effort guess for certain countries that do not have an official language or it is ambiguous). To return known names in languages recognized at the regional level, use lang filter.
▣ ENDPOINT 02 / 03
GET
Finds the place nearest to a coordinate.
https://api.eu.apyhub.com/modernsoftware-pro/search-places-reverse-geocode/reverse

QUICKSTART

GUIDE

Quickstart

Look up the nearest place for a latitude/longitude pair.

curl -X GET "https://api.eu.apyhub.com/modernsoftware-pro/search-places-reverse-geocode/reverse?lat=48.8566&lon=2.3522" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with query, nearest, nearestMajorCity, and sources fields. query echoes the requested coordinates; nearest and nearestMajorCity are objects or null; sources is an array of source metadata objects.

{
  "query": {
    "lat": 48.8566,
    "lon": 2.3522
  },
  "nearest": {
    "geonameId": 3013131,
    "wikidataId": null,
    "nationalId": null,
    "name": "Paris 04 Hôtel-de-Ville",
    "officialNames": [
      {
        "language": "fr",
        "name": "Paris 04 Hôtel-de-Ville"
      }
    ],
    "latitude": 48.8601,
    "longitude": 2.3507,
    "countryCode": "FR",
    "country": "France",
    "region": "Île-de-France",
    "population": 27332,
    "areaKm2": null,
    "timezone": "Europe/Paris",
    "type": {
      "code": "PPL",
      "label": "populated place"
    },
    "sources": [
      "geonames"
    ],
    "distanceKm": 0.4
  },
  "nearestMajorCity": {
    "geonameId": 2988507,
    "wikidataId": "Q90",
    "nationalId": null,
    "name": "Paris",
    "officialNames": [
      {
        "language": "fr",
        "name": "Paris"
      }
    ],
    "latitude": 48.85341,
    "longitude": 2.3488,
    "countryCode": "FR",
    "country": "France",
    "region": "Île-de-France",
    "population": 2138551,
    "areaKm2": 105.4,
    "timezone": "Europe/Paris",
    "type": {
      "code": "PPLC",
      "label": "capital of a political entity"
    },
    "sources": [
      "geonames"
    ],
    "distanceKm": 0.43
  },
  "sources": [
    {
      "id": "geonames",
      "name": "GeoNames.org",
      "license": "CC-BY-4.0",
      "attribution": null,
      "updatedAt": "2026-11-07"
    }
  ]
}
TRY ITLIVE · 25 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Latitude to query, between: -90.0 and 90.0
Longitude to query, between: -180.0 and 180.0
Only places with at least this population are considered (default 0, meaning no restriction).
Return additional translations for up to 2 languages: comma-separated 2-letter ISO-639 language codes (use 3-letter, if no 2-letter code exists)

About this endpoint

Reverse geocoding: finds the place nearest to a coordinate.

Given a GPS coordinate, returns the nearest known place and the nearest place with a population of at least 100,000 (a "major city", regardless of minPopulation). If no place can be found near the given coordinate (within a reasonable search radius), nearest is returned as null; nearestMajorCity is independently null if no sufficiently large place is found nearby. The results contain the known names in the country official languages. if lang language is specified - it returns known additional translations in up to 2 languages.

Query Parameter(s)

AttributeTypeMandatoryDescription
latNumberYesThe coordinate's latitude, in decimal degrees (positive north). Between -90 and 90.
lonNumberYesThe coordinate's longitude, in decimal degrees (positive east). Between -180 and 180.
minPopulationIntegerNoOnly places with at least this population are considered (default 0, meaning no restriction). Does not affect "nearestMajorCity", which always means a population of at least 100,000. A place with unknown population never satisfies a value greater than 0.
langStringNoReturn additional translations for up to 2 languages: comma-separated ISO-639 language codes.

Response

Returns a JSON object describing the queried coordinate, the nearest known place, the nearest place with a population of at least 100,000 (a "major city"), and the data source(s) behind those results. "nearest" and "nearestMajorCity" are independently null when no matching place can be found near the given coordinate.

AttributeTypeMandatoryDescription
queryObjectYesThe queried coordinate, echoed back.
query.latNumberYesThe queried latitude.
query.lonNumberYesThe queried longitude.
nearestObjectNoThe nearest place satisfying minPopulation, or null if none could be found within a reasonable search radius. Has the same fields as nearestMajorCity.
nearest.geonameIdIntegerNoThe place GeoNames identifier, or null for a place with no GeoNames data at all.
nearest.wikidataIdStringNoThe place Wikidata entity ID (e.g. Q2807), or null when none is known.
nearest.nationalIdStringNoThe place code in its own country official place register, or null when not known.
nearest.nameStringYesThe place's default display name.
nearest.officialNamesObject ArrayYesThe place's name in every official language of its country (if known). Empty if none are known. Each item has language and name.
nearest.officialNames[].languageStringYesThe language's ISO 639-1 code.
nearest.officialNames[].nameStringYesThe place's name in that language.
nearest.translationsObject ArrayNoPresent only when lang was supplied: the place name in each of the requested languages (if known), in the same order as lang.
nearest.latitudeNumberYesThe place latitude.
nearest.longitudeNumberYesThe place longitude.
nearest.countryCodeStringYesISO 3166-1 alpha-2 country code.
nearest.countryStringNoThe country display name, or null if unknown.
nearest.regionStringNoThe place top-level administrative division (e.g. a state or province), or null if unknown.
nearest.populationIntegerNoThe place population, or null if unknown.
nearest.areaKm2NumberNoThe place area in square kilometers, or null if unknown.
nearest.timezoneStringNoThe place IANA time zone identifier, or null if unknown.
nearest.typeObjectNoThe place GeoNames type, or null for a place with no GeoNames data at all.
nearest.type.codeStringYesThe place GeoNames feature code, e.g. PPLC.
nearest.type.labelStringNoThe human-readable label for code, or null for an unrecognized code.
nearest.distanceKmNumberYesThe great-circle distance from the queried coordinate, in kilometers, rounded to 2 decimal places.
nearest.sourcesString ArrayYesThe source code(s) that contributed data to this place (e.g. geonames).
nearestMajorCityObjectNoThe nearest place with a population of at least 100,000, or null if none could be found nearby. Has the same fields as nearest.
sourcesObject ArrayYesThe dictionary entry for data sources used in nearest and nearestMajorCity.
sources[].idStringYesThe source identifier used in nearest.sources and nearestMajorCity.sources.
sources[].nameStringYesThe source human-readable display name.
sources[].licenseStringYesThe source data license.
sources[].attributionStringNoCustom attribution text this source requires callers to display verbatim, beyond the license itself, or null when there is no such requirement.
sources[].updatedAtStringYesThe date this source's data was last (re-)imported into the database as a whole, formatted as YYYY-MM-DD.

Notes

  • Language codes are in 2-letter ISO-639 set 1 format. If the language has no set 1 code assigned, use 3-letter ISO-639 code.
  • The API recognizes 30+ languages, and the coverage may increase over time. Sending the code of the unsupported language does not result in error - you will simply not get a translation for it in the response.
  • The API returns the official name or translation in the given language only if the upstream source defines such a name.
  • officialNames lists place names in the recognized country official languages at the national level (or best-effort guess for certain countries that do not have an official language or it is ambiguous). To return known names in languages recognized at the regional level, use lang filter.
▣ ENDPOINT 03 / 03
GET
Lists every known place within a radius of a coordinate.
https://api.eu.apyhub.com/modernsoftware-pro/search-places-reverse-geocode/nearby

QUICKSTART

GUIDE

Quickstart

Find places near a coordinate by latitude, longitude, and search radius.

curl -X GET "https://api.eu.apyhub.com/modernsoftware-pro/search-places-reverse-geocode/nearby?lat=40.7128&lon=-74.006&radius=5" \
  -H "apy-token: $APY_TOKEN"

What you'll get back

Returns a JSON object with query, count, places, and sources fields. query is an object describing the normalized search inputs, count is the number of entries in places, places is an array of matched places, and sources lists the data sources behind the returned places.

{
  "query": {
    "lat": 40.7128,
    "lon": -74.006,
    "radiusKm": 5,
    "minPopulation": 0
  },
  "count": 5,
  "places": [
    {
      "geonameId": 5128581,
      "wikidataId": "Q60",
      "nationalId": null,
      "name": "New York City",
      "officialNames": [
        {
          "language": "en",
          "name": "New York"
        }
      ],
      "latitude": 40.71427,
      "longitude": -74.00597,
      "countryCode": "US",
      "country": "United States of America",
      "region": "New York",
      "population": 8804190,
      "areaKm2": 778.18,
      "timezone": "America/New_York",
      "type": {
        "code": "PPL",
        "label": "populated place"
      },
      "sources": [
        "geonames"
      ],
      "distanceKm": 0.16
    },
    {
      "geonameId": 5141365,
      "wikidataId": "Q766014",
      "nationalId": null,
      "name": "Tribeca",
      "officialNames": [
        {
          "language": "en",
          "name": "TriBeCa"
        }
      ],
      "latitude": 40.71538,
      "longitude": -74.00931,
      "countryCode": "US",
      "country": "United States of America",
      "region": "New York",
      "population": 7811,
      "areaKm2": null,
      "timezone": "America/New_York",
      "type": {
        "code": "PPLX",
        "label": "section of populated place"
      },
      "sources": [
        "geonames"
      ],
      "distanceKm": 0.4
    },
    {
      "geonameId": 8436473,
      "wikidataId": "Q1050048",
      "nationalId": null,
      "name": "Financial District",
      "officialNames": [],
      "latitude": 40.70789,
      "longitude": -74.00857,
      "countryCode": "US",
      "country": "United States of America",
      "region": "New York",
      "population": 60976,
      "areaKm2": null,
      "timezone": "America/New_York",
      "type": {
        "code": "PPLX",
        "label": "section of populated place"
      },
      "sources": [
        "geonames"
      ],
      "distanceKm": 0.59
    },
    {
      "geonameId": 5108135,
      "wikidataId": "Q810961",
      "nationalId": null,
      "name": "Battery Park City",
      "officialNames": [],
      "latitude": 40.71149,
      "longitude": -74.01625,
      "countryCode": "US",
      "country": "United States of America",
      "region": "New York",
      "population": 7422,
      "areaKm2": null,
      "timezone": "America/New_York",
      "type": {
        "code": "PPLX",
        "label": "section of populated place"
      },
      "sources": [
        "geonames"
      ],
      "distanceKm": 0.88
    },
    {
      "geonameId": 5112540,
      "wikidataId": "Q866332",
      "nationalId": null,
      "name": "Chinatown",
      "officialNames": [],
      "latitude": 40.71649,
      "longitude": -73.99625,
      "countryCode": "US",
      "country": "United States of America",
      "region": "New York",
      "population": 90000,
      "areaKm2": null,
      "timezone": "America/New_York",
      "type": {
        "code": "PPLX",
        "label": "section of populated place"
      },
      "sources": [
        "geonames"
      ],
      "distanceKm": 0.92
    }
  ],
  "sources": [
    {
      "id": "geonames",
      "name": "GeoNames.org",
      "license": "CC-BY-4.0",
      "attribution": null,
      "updatedAt": "2026-11-07"
    }
  ]
}
TRY ITLIVE · 25 ATOMS
Loading your default key…
The full key is used to call the gateway and stays in this tab — never sent to orbit or saved.
Latitude to query, between -90.0 and 90.0
Longitude to query, between -180.0 and 180.0
Radius in km to search, 1-500.
Only places with at least this population are considered (default 0, meaning no restriction).
Max result limit
Return additional `translations` for up to 2 languages: comma-separated 2-letter ISO-639 language codes (use 3-letter, if no 2-letter code exists)

About this endpoint

Lists every known place within a radius of a coordinate.

Given a GPS coordinate and a radius (in kilometers, up to 500), returns every known place within that radius, sorted by distance ascending. Useful for suggesting alternative nearby locations, e.g. for pickup or delivery. At most 100 results are returned per call; use "limit" to control how many. The results contain the known names in the country official languages. if lang language is specified - it returns known additional translations in up to 2 languages.

Query Parameter(s)

AttributeTypeMandatoryDescription
latNumberYesThe coordinate's latitude, in decimal degrees (positive north). Between -90 and 90.
lonNumberYesThe coordinate's longitude, in decimal degrees (positive east). Between -180 and 180.
radiusNumberYesThe search radius, in kilometers. Greater than 0, at most 500.
minPopulationIntegerNoOnly places with at least this population are considered (default 0, meaning no restriction). A place with unknown population never satisfies a value greater than 0.
limitIntegerNoThe maximum number of places to return (default 20, at most 100).
langStringNoReturn additional translations for up to 2 languages: comma-separated ISO-639 language codes.

Response

Returns a JSON object listing every known place within radius kilometers of the queried coordinate, sorted by distance ascending and capped at limit, along with the data source(s) behind those results.

AttributeTypeMandatoryDescription
queryObjectYesThe queried coordinate and search parameters, echoed back.
query.latNumberYesThe queried latitude.
query.lonNumberYesThe queried longitude.
query.radiusKmNumberYesThe queried search radius, in kilometers.
query.minPopulationIntegerYesThe queried minimum population filter.
countIntegerYesThe number of entries in places (already capped by limit).
placesObject ArrayYesEvery known place within the search radius, sorted by distance ascending. Empty if none could be found.
places[].geonameIdIntegerNoThe place GeoNames identifier, or null for a place with no GeoNames data at all.
places[].wikidataIdStringNoThe place Wikidata entity ID (e.g. Q2807), or null when none is known.
places[].nationalIdStringNoThe place ID in its own country official place register, or null when not known.
places[].nameStringYesThe place's default display name.
places[].officialNamesObject ArrayYesThe place's name in every official language of its country (if known). Empty if none are known. Each item has language and name.
places[].officialNames[].languageStringYesThe language's ISO 639-1 code.
places[].officialNames[].nameStringYesThe place's name in that language.
places[].translationsObject ArrayNoPresent only when lang was supplied: the place name in each of the requested languages (if known), in the same order as lang.
places[].latitudeNumberYesThe place latitude.
places[].longitudeNumberYesThe place longitude.
places[].countryCodeStringYesISO 3166-1 alpha-2 country code.
places[].countryStringNoThe country display name, or null if unknown.
places[].regionStringNoThe place top-level administrative division (e.g. a state or province), or null if unknown.
places[].populationIntegerNoThe place population, or null if unknown.
places[].areaKm2NumberNoThe place area in square kilometers, or null if unknown.
places[].timezoneStringNoThe place IANA time zone identifier, or null if unknown.
places[].typeObjectNoThe place GeoNames type, or null for a place with no GeoNames data at all.
places[].type.codeStringYesThe place GeoNames feature code, e.g. PPLC.
places[].type.labelStringNoThe human-readable label for code, or null for an unrecognized code.
places[].distanceKmNumberYesThe great-circle distance from the queried coordinate, in kilometers, rounded to 2 decimal places.
places[].sourcesString ArrayYesThe source code(s) that contributed data to this place (e.g. geonames).
sourcesObject ArrayYesThe dictionary entry for data sources used in places.
sources[].idStringYesThe source identifier used in places[].sources.
sources[].nameStringYesThe source human-readable display name.
sources[].licenseStringYesThe source data license.
sources[].attributionStringNoCustom attribution text this source requires callers to display verbatim, beyond the license itself, or null when there is no such requirement.
sources[].updatedAtStringYesThe date this source's data was last (re-)imported into the database as a whole, formatted as YYYY-MM-DD.

Notes

  • At most 100 results are returned per call; use limit to control how many.
  • Language codes are in 2-letter ISO-639 set 1 format. If the language has no set 1 code assigned, use 3-letter ISO-639 code.
  • The API recognizes 30+ languages, and the coverage may increase over time. Sending the code of the unsupported language does not result in error - you will simply not get a translation for it in the response.
  • The API returns the official name or translation in the given language only if the upstream source defines such a name.
  • officialNames lists place names in the recognized country official languages at the national level (or best-effort guess for certain countries that do not have an official language or it is ambiguous). To return known names in languages recognized at the regional level, use lang filter.
▣ COMMON ERRORS

Errors any endpoint can return

400bad_request

Required parameter missing or malformed body.

401unauthorized

API key missing, revoked, or not authorized for this service.

429rate_limited

Your plan's per-second rate exceeded. Retry with exponential backoff.

503upstream_busy

Backend temporarily unavailable. Try again in a few seconds.