Places & time
Resolve a birth place (5.17M places, India-aware) and the timezone at a moment — historical offsets included.
Search birth places
GET/v1/places/search
1 credit · Secret key (test or live) · searchPlaces
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
q required | query | string | at least 2 characters |
country | query | string | |
limit | query | integer | ≥ 1 · ≤ 100 · default 20 |
Response
JSON { data, meta, warnings }, where data is:
resultsarray of PlaceResult requiredplace_idstring requirednamestring requiredstatestringcountrystring requiredlatitudenumber requiredlongitudenumber requiredtimezonestring requiredpopulationinteger
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl 'https://api.astrologics.in/v1/places/search?q=Noida' \
-H 'Authorization: Bearer al_test_YOUR_KEY'
Node.js
const res = await fetch("https://api.astrologics.in/v1/places/search?q=Noida", {
headers: { Authorization: "Bearer al_test_YOUR_KEY" },
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
req = urllib.request.Request(
"https://api.astrologics.in/v1/places/search?q=Noida",
method="GET",
headers={"Authorization": "Bearer al_test_YOUR_KEY"},
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/places/search?q=Noida');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY'],
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 2,067 characters
{
"data": {
"results": [
{
"place_id": "pl_2028",
"name": "Noida",
"country": "India",
"latitude": 28.58,
"longitude": 77.33,
"timezone": "Asia/Kolkata",
"state": "Uttar Pradesh",
"population": 293908
},
{
"place_id": "pl_106077",
"name": "Noidans-lès-Vesoul",
"country": "France",
"latitude": 47.61299,
"longitude": 6.12571,
"timezone": "Europe/Paris",
"state": "Bourgogne",
"population": 2163
},
{
"place_id": "pl_328080",
"name": "Noidan",
"country": "France",
"latitude": 47.34536,
"longitude": 4.40881,
"timezone": "Europe/Paris",
"state": "Bourgogne",
"population": 82
},
{
"place_id": "pl_182020",
"name": "Noidans-le-Ferroux",
"country": "France",
"latitude": 47.57004,
"longitude": 5.95492,
"timezone": "Europe/Paris",
"state": "Bourgogne",
"population": 603
},
{
"place_id": "pl_271822",
"name": "Noidant-le-Rocheux",
"country": "France",
"latitude": 47.83008,
"longitude": 5.25433,
"timezone": "Europe/Paris",
"state": "Grand Est",
"population": 191
},
{
"place_id": "pl_323512",
"name": "Noidant-Chatenoy",
"country": "France",
"latitude": 47.79427,
"longitude": 5.37558,
"timezone": "Europe/Paris",
"state": "Grand Est",
"population": 89
},
{
"place_id": "pl_2059631",
"name": "Noidanniemi",
"country": "Finland",
"latitude": 60.91667,
"longitude": 26.46667,
"timezone": "Europe/Helsinki",
"state": "Paijat-Hame",
"population": 0
}
]
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.9.28",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
Get one place
GET/v1/places/{place_id}
1 credit · Secret key (test or live) · getPlace
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
place_id required | path | string |
Response
JSON { data, meta, warnings }, where data is:
place_idstring requirednamestring requiredstatestringcountrystring requiredlatitudenumber requiredlongitudenumber requiredtimezonestring requiredpopulationinteger
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl 'https://api.astrologics.in/v1/places/pl_2028' \
-H 'Authorization: Bearer al_test_YOUR_KEY'
Node.js
const res = await fetch("https://api.astrologics.in/v1/places/pl_2028", {
headers: { Authorization: "Bearer al_test_YOUR_KEY" },
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
req = urllib.request.Request(
"https://api.astrologics.in/v1/places/pl_2028",
method="GET",
headers={"Authorization": "Bearer al_test_YOUR_KEY"},
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/places/pl_2028');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY'],
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 398 characters
{
"data": {
"place_id": "pl_2028",
"name": "Noida",
"country": "India",
"latitude": 28.58,
"longitude": 77.33,
"timezone": "Asia/Kolkata",
"state": "Uttar Pradesh",
"population": 293908
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.9.28",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
Nearest real settlement to coordinates
GET/v1/places/reverse
1 credit · Secret key (test or live) · reversePlace
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
lat required | query | number | |
lon required | query | number |
Response
JSON { data, meta, warnings }, where data is:
resultsarray of PlaceResult requiredplace_idstring requirednamestring requiredstatestringcountrystring requiredlatitudenumber requiredlongitudenumber requiredtimezonestring requiredpopulationinteger
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl 'https://api.astrologics.in/v1/places/reverse?lat=28.4039&lon=77.8577' \
-H 'Authorization: Bearer al_test_YOUR_KEY'
Node.js
const res = await fetch("https://api.astrologics.in/v1/places/reverse?lat=28.4039&lon=77.8577", {
headers: { Authorization: "Bearer al_test_YOUR_KEY" },
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
req = urllib.request.Request(
"https://api.astrologics.in/v1/places/reverse?lat=28.4039&lon=77.8577",
method="GET",
headers={"Authorization": "Bearer al_test_YOUR_KEY"},
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/places/reverse?lat=28.4039&lon=77.8577');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY'],
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 481 characters
{
"data": {
"results": [
{
"place_id": "pl_3086",
"name": "Bulandshahr",
"country": "India",
"latitude": 28.40392,
"longitude": 77.85773,
"timezone": "Asia/Kolkata",
"state": "Uttar Pradesh",
"population": 198612
}
]
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.9.28",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}Try it
IANA zone and UTC offset at a moment and place
POST/v1/timezone
1 credit · Secret key (test or live) · getTimezone
POST because a birth moment plus place is personal data — it never goes in a URL.
Request body
latitudenumber required≥ -90 · ≤ 90
longitudenumber required≥ -180 · ≤ 180
datetimestring (date-time) required
No other fields are accepted.
Response
JSON { data, meta, warnings }, where data is:
namestring requiredutc_offsetstring requiredoffset_minutesinteger required
Errors: 400, 401, 403, 404, 422, 429, 500. See error codes.
Example request
curl -X POST 'https://api.astrologics.in/v1/timezone' \
-H 'Authorization: Bearer al_test_YOUR_KEY' \
-H 'Content-Type: application/json' \
-d '{"latitude":28.6139,"longitude":77.209,"datetime":"1990-08-13T01:00:00Z"}'
Node.js
const res = await fetch("https://api.astrologics.in/v1/timezone", {
method: "POST",
headers: { Authorization: "Bearer al_test_YOUR_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"latitude": 28.6139,
"longitude": 77.209,
"datetime": "1990-08-13T01:00:00Z"
}),
});
console.log(JSON.stringify(await res.json(), null, 2));Python
import json
import urllib.error
import urllib.request
body = {
"latitude": 28.6139,
"longitude": 77.209,
"datetime": "1990-08-13T01:00:00Z",
}
req = urllib.request.Request(
"https://api.astrologics.in/v1/timezone",
method="POST",
headers={"Authorization": "Bearer al_test_YOUR_KEY", "Content-Type": "application/json"},
data=json.dumps(body).encode(),
)
try:
with urllib.request.urlopen(req) as res:
print(json.dumps(json.load(res), indent=2, ensure_ascii=False))
except urllib.error.HTTPError as err:
print(err.code, err.read().decode())PHP
<?php
$ch = curl_init('https://api.astrologics.in/v1/timezone');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer al_test_YOUR_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"latitude":28.6139,"longitude":77.209,"datetime":"1990-08-13T01:00:00Z"}',
CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch), PHP_EOL;Example response
200 OK · 274 characters
{
"data": {
"name": "Asia/Kolkata",
"utc_offset": "+05:30",
"offset_minutes": 330
},
"meta": {
"request_id": "req_example",
"api_version": "v1",
"engine_version": "2026.9.28",
"mode": "live",
"credits_charged": 1
},
"warnings": []
}