Kundali API
A full kundali in one request.
Charts, nakshatra, three dasha systems, birth panchang, guna milan and SVG. Send BS or AD dates and get Nepali, Hindi or English back.
Charts render on the server
North and South Indian SVG with CSS variables for colour and type, class names on every house and graha, and a text alternative. No drawing code in your app.
Endpoints
POST/v1/kundali
Full kundali
1 credit
POST/v1/kundali/planets
Positions only
1 credit
POST/v1/dasha
Dasha timeline, 1 to 3 levels
1 credit
POST/v1/matching/ashtakoota
Guna milan for one pair
1 credit
POST/v1/matching/ashtakoota/batch
1 to 100 pairs
1 credit per pair
POST/v1/matching/rashi
Rashi compatibility
1 credit
POST/v1/charts/svg
North or South SVG chart
1 credit
GET/v1/places/search
Place search in en, ne and hi
Free
What one call returns
- subject
- Resolved place, timezone, UTC offset and its source, and the birth date in AD and BS.
- lagna, grahas
- Sign, longitude, house, nakshatra, pada and retrograde flag for the lagna and nine grahas.
- vargas
- D1 and D9 by default. Other divisional charts through include.
- moon
- Rashi, nakshatra, pada and the naming syllable in Nepali, Hindi and English.
- dashas
- Vimshottari by default; Yogini and Tribhagi through include. Never tied to the server clock.
- panchang
- Birth tithi with paksha, yoga, karana, weekday and lunar month.
- sensitivity
- Lagna, nakshatra or pada changes inside the time window you ask for.
- meta
- Ayanamsha, node type, tzdb, BS table, override and engine versions.
Request and response
curl https://api.navapatra.com/v1/kundali \
-H "Authorization: Bearer $NAVAPATRA_API_KEY" \
-H "Navapatra-Version: 2026-11-01" \
-H "Content-Type: application/json" \
-d '{
"birth": {
"calendar": "BS", "date": "2050-05-12", "time": "14:35:00",
"place": { "lat": 28.2096, "lng": 83.9856 }
},
"options": { "ayanamsha": "lahiri", "sensitivityMinutes": 10 },
"include": ["panchang"],
"lang": "ne"
}'const res = await fetch('https://api.navapatra.com/v1/kundali', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.NAVAPATRA_API_KEY}`,
'Navapatra-Version': '2026-11-01',
'Content-Type': 'application/json',
},
body: JSON.stringify({
birth: {
calendar: 'BS', date: '2050-05-12', time: '14:35:00',
place: { lat: 28.2096, lng: 83.9856 },
},
options: { ayanamsha: 'lahiri', sensitivityMinutes: 10 },
include: ['panchang'],
lang: 'ne',
}),
});
const kundali = await res.json();import os, requests
res = requests.post(
"https://api.navapatra.com/v1/kundali",
headers={
"Authorization": f"Bearer {os.environ['NAVAPATRA_API_KEY']}",
"Navapatra-Version": "2026-11-01",
},
json={
"birth": {
"calendar": "BS", "date": "2050-05-12", "time": "14:35:00",
"place": {"lat": 28.2096, "lng": 83.9856},
},
"options": {"ayanamsha": "lahiri", "sensitivityMinutes": 10},
"include": ["panchang"],
"lang": "ne",
},
)
kundali = res.json()<?php
$client = new GuzzleHttp\Client();
$res = $client->post('https://api.navapatra.com/v1/kundali', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('NAVAPATRA_API_KEY'),
'Navapatra-Version' => '2026-11-01',
],
'json' => [
'birth' => [
'calendar' => 'BS', 'date' => '2050-05-12', 'time' => '14:35:00',
'place' => ['lat' => 28.2096, 'lng' => 83.9856],
],
'options' => ['ayanamsha' => 'lahiri', 'sensitivityMinutes' => 10],
'include' => ['panchang'],
'lang' => 'ne',
],
]);
$kundali = json_decode($res->getBody(), true);{
"subject": {
"instantUtc": "1993-08-28T08:50:00Z",
"place": { "lat": 28.2096, "lng": 83.9856 },
"tzid": "Asia/Kathmandu",
"utcOffset": "+05:45",
"offsetSource": "tzdb",
"birth": { "ad": "1993-08-28", "bs": "2050-05-12" }
},
"lagna": {
"sign": { "index": 9, "name": "धनु" },
"longitude": 245.8854,
"nakshatra": { "index": 19, "name": "मूल" },
"pada": 2
},
"grahas": [
{
"id": "sun",
"name": "सूर्य",
"sign": { "index": 5, "name": "सिंह" },
"longitude": 131.2923,
"house": 9,
"retrograde": false,
"nakshatra": { "index": 10, "name": "मघा" },
"pada": 4
},
{
"id": "moon",
"name": "चन्द्र",
"sign": { "index": 9, "name": "धनु" },
"longitude": 269.0004,
"house": 1,
"retrograde": false,
"nakshatra": { "index": 21, "name": "उत्तराषाढा" },
"pada": 1
}
],
"moon": {
"rashi": { "index": 9, "name": "धनु" },
"nakshatra": { "index": 21, "name": "उत्तराषाढा" },
"pada": 1,
"syllable": { "index": 81, "en": "Bhe", "ne": "भे", "hi": "भे" }
},
"dashas": {
"vimshottari": {
"system": { "id": "vimshottari", "index": 1, "name": "विंशोत्तरी" },
"balanceAtBirth": { "lord": { "id": "sun", "index": 1, "name": "सूर्य" }, "years": 4.9498 }
}
},
"panchang": {
"tithi": {
"index": 12,
"name": "द्वादशी",
"start": "1993-08-27T21:04:12Z",
"end": "1993-08-28T21:54:23Z",
"paksha": { "id": "shukla", "index": 1, "name": "शुक्ल" }
}
},
"sensitivity": [
{
"field": "lagnaD9",
"from": { "index": 2, "name": "वृष" },
"to": { "index": 3, "name": "मिथुन" },
"changesAt": "1993-08-28T08:53:24Z"
}
],
"meta": {
"engineVersion": "0.1.0",
"apiVersion": "2026-11-01",
"ayanamsha": { "id": "lahiri", "degrees": 23.773159 },
"nodeType": "mean",
"tzdbVersion": "unknown",
"bsTableVersion": "2026.10.1",
"overridesVersion": null
}
}Errors you can act on
Errors use RFC 9457 problem details with a stable code. Failed requests cost nothing.
422ambiguous_place
The place query matched several places. Up to 10 candidates come back; the API never picks one silently.
422ambiguous_local_time
The local time falls in a clock change. Resolve it with options.disambiguation.
422out_of_range
The birth date is outside AD 1900 to 2100.
402insufficient_credits
The balance is zero. The response includes a top-up link.