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

NameInTypeNotes
q requiredquerystring at least 2 characters
countryquerystring
limitqueryinteger ≥ 1 · ≤ 100 · default 20

Response

JSON { data, meta, warnings }, where data is:

  • results array of PlaceResult required
    • place_id string required
    • name string required
    • state string
    • country string required
    • latitude number required
    • longitude number required
    • timezone string required
    • population integer

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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

Get one place

GET/v1/places/{place_id}

1 credit · Secret key (test or live) · getPlace

Parameters

NameInTypeNotes
place_id requiredpathstring

Response

JSON { data, meta, warnings }, where data is:

  • place_id string required
  • name string required
  • state string
  • country string required
  • latitude number required
  • longitude number required
  • timezone string required
  • population integer

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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

Nearest real settlement to coordinates

GET/v1/places/reverse

1 credit · Secret key (test or live) · reversePlace

Parameters

NameInTypeNotes
lat requiredquerynumber
lon requiredquerynumber

Response

JSON { data, meta, warnings }, where data is:

  • results array of PlaceResult required
    • place_id string required
    • name string required
    • state string
    • country string required
    • latitude number required
    • longitude number required
    • timezone string required
    • population integer

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

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one

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

  • latitude number required

    ≥ -90 · ≤ 90

  • longitude number required

    ≥ -180 · ≤ 180

  • datetime string (date-time) required

No other fields are accepted.

Response

JSON { data, meta, warnings }, where data is:

  • name string required
  • utc_offset string required
  • offset_minutes integer 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": []
}
Try it

Leave empty to use the shared demo key (limited). Test keys only: never charged. Kept in this browser tab and sent through this site to the API. Create one