Nearest place to coordinates
curl -X GET https://api.astroway.info/v1/geo/reverse?lat=49.8397&lon=24.0297 \ -H "X-Api-Key: aw_live_..." \ -H "Content-Type: application/json"const res = await fetch('https://api.astroway.info/v1/geo/reverse?lat=49.8397&lon=24.0297', { method: 'GET', headers: { 'X-Api-Key': process.env.ASTROWAY_API_KEY, 'Content-Type': 'application/json', },});const { ok, data, error } = await res.json();if (!ok) throw new Error(error.message);console.log(data);import os, requests
r = requests.get( 'https://api.astroway.info/v1/geo/reverse?lat=49.8397&lon=24.0297', headers={'X-Api-Key': os.environ['ASTROWAY_API_KEY'], 'Content-Type': 'application/json'},)result = r.json()if not result['ok']: raise RuntimeError(result['error']['message'])print(result['data'])<?phpuse GuzzleHttp\Client;
$client = new Client(['base_uri' => 'https://api.astroway.info/v1/']);$r = $client->get('geo/reverse?lat=49.8397&lon=24.0297', [ 'headers' => ['X-Api-Key' => getenv('ASTROWAY_API_KEY')],]);$result = json_decode($r->getBody(), true);if (!$result['ok']) throw new \RuntimeException($result['error']['message']);print_r($result['data']);The populated place nearest to a point, by great-circle distance over the same list as /geo/search, and the IANA zone of the point itself (which near a border can differ from the place’s). Works across the antimeridian and at the poles. At sea timezone is the nautical hour band (Etc/GMT+2, whose sign is inverted by POSIX convention) and nautical is true; place.distanceKm says how far the nearest place is, so a point in open water is not mistaken for a town. featureCode PPLX marks a section of a city rather than a city.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”Example
49.8397Latitude in decimal degrees, north positive.
Example
24.0297Longitude in decimal degrees, east positive.
Example
enLanguage for the place, region and country names.
Comma-separated dotted paths, relative to data, to keep in the response. A path is applied to every element of an array, so planets.name means the name of each planet. Paths that match nothing come back in _fields_unmatched; a list where nothing matches at all is a 400, because an empty object would be a confident wrong answer.
Example
planets.name,planets.longitudeRound every non-integer number in the response to this many decimal places. Integers are left alone, because an id is not a measurement. Ecliptic longitudes ship with fourteen decimals by default; 2 is about a tenth of an arcminute.
Example
4Responses
Section titled “ Responses ”Successful calculation
object
object
object
object
object
Example
{ "ok": true, "data": { "latitude": 49.8397, "longitude": 24.0297, "timezone": "Europe/Kyiv", "nautical": false, "place": { "id": 702550, "name": "Lviv", "admin1": "Lviv Oblast", "admin1Code": "15", "countryCode": "UA", "country": "Ukraine", "latitude": 49.8383, "longitude": 24.0232, "timezone": "Europe/Kyiv", "population": 717273, "featureCode": "PPLA", "distanceKm": 0.5 }, "dataset": { "source": "GeoNames cities1000", "url": "https://download.geonames.org/export/dump/cities1000.zip", "namesUrl": "https://download.geonames.org/export/dump/alternateNamesV2.zip", "licence": "CC BY 4.0", "downloaded": "2026-11-07", "count": 171800 }, "attribution": { "source": "GeoNames", "sourceUrl": "https://www.geonames.org/", "licence": "CC BY 4.0", "licenceUrl": "https://creativecommons.org/licenses/by/4.0/", "notice": "Place names, coordinates and populations from the GeoNames geographical database, used under CC BY 4.0. Displaying this data requires carrying the same credit." } }}Validation error
Example
{ "ok": false, "error": { "code": "INVALID_INPUT", "message": "Validation failed: date: Date must be YYYY-MM-DD", "details": [ { "path": "date", "message": "Date must be YYYY-MM-DD" } ] }}Missing or invalid API key
Example
{ "ok": false, "error": { "code": "INVALID_API_KEY", "message": "Invalid API key" }}