Server: http://192.168.88.10:9191
· All POST endpoints accept Content-Type: application/json
· Built on FastAPI + PyJHora
All POST endpoints accept JSON bodies. The following shared types are used throughout the API.
| Field | Type | Required | Description |
|---|---|---|---|
year | int | required | Year (negative for BC, e.g. -3114) |
month | int | required | Month 1–12 |
day | int | required | Day 1–31 |
| Field | Type | Required | Description |
|---|---|---|---|
hour | int | required | Hour 0–23 |
minute | int | required | Minute 0–59 |
second | float | required | Second 0–59 |
| Field | Type | Required | Description |
|---|---|---|---|
name | str | required | City name (e.g. "Bathinda, India", "New Delhi") |
latitude | float | null | optional | Overrides geocoding if provided |
longitude | float | null | optional | Overrides geocoding if provided |
timezone | float | null | optional | UTC offset (hours); overrides geocoding |
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
date | DateTuple | required | — | Date of birth |
time | TimeTuple | required | — | Time of birth |
place | PlaceRequest | required | — | Place of birth |
ayanamsa_mode | str | optional | "Lahiri" | Ayanamsa mode: Lahiri, KP, Raman, etc. |
divisional_chart_factor | int | optional | 1 | 1=Rasi, 9=Navamsa, 60=Shastyamsa, etc. |
years | int | optional | 1 | Years offset for dasha/transit |
months | int | optional | 1 | Months offset |
sixty_hours | int | optional | 1 | Sixty-hour offset |
{
"date": { "year": 1993, "month": 9, "day": 4 },
"time": { "hour": 16, "minute": 48, "second": 0 },
"place": { "name": "Bathinda, India" },
"ayanamsa_mode": "Lahiri"
}
Root welcome message.
curl -s http://192.168.88.10:9191/
{"message":"PyJHora Vedic Astrology API v4.8.7","docs":"/docs","endpoints":{...}}
Health check — returns status and library version.
curl -s http://192.168.88.10:9191/health
{"status":"ok","jhora_version":"4.8.7"}
All under /api/utils.
Compute Julian Day Number from a calendar date/time.
curl -s -X POST http://192.168.88.10:9191/api/utils/julian-day \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0}}'
{"julian_day":2449235.2,"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0}}
Resolve a place name to lat/long/timezone/elevation. Uses a local SQLite geonames database.
curl -s -X POST http://192.168.88.10:9191/api/utils/place \
-H "Content-Type: application/json" \
-d '{"name":"Bathinda, India"}'
{"name":"Bathinda, India","latitude":30.2379114,"longitude":74.95402625,
"timezone":5.5,"elevation":null}
Convert a decimal degree value to Degrees–Minutes–Seconds notation.
curl -s -X POST http://192.168.88.10:9191/api/utils/to-dms \
-H "Content-Type: application/json" \
-d '{"decimal_degrees":23.456}'
Get the 12-element house-to-planet string list for a given chart.
curl -s -X POST http://192.168.88.10:9191/api/utils/planet-house-list \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
Get the planet-to-house mapping dictionary (planet index → raasi index).
curl -s -X POST http://192.168.88.10:9191/api/utils/planet-house-dict \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
Get the house-to-planet mapping (same as planet-house-dict, alias).
Get Julian Day Number for the current system time (no request body needed).
curl -s http://192.168.88.10:9191/api/utils/now
All under /api/panchanga. Computes the five limbs of the Vedic calendar (tithi, nakshatra, vaara, yogam, karana) plus planetary positions, sunrise/sunset, ayanamsa, and muhurthas.
Common request body (PanchangaInput):
{
"date": { "year": 1993, "month": 9, "day": 4 },
"time": { "hour": 16, "minute": 48, "second": 0 },
"place": { "name": "Bathinda, India" },
"ayanamsa_mode": "Lahiri"
}
Full list of all planet positions (9 bodies including Lagna) with raasi index and longitude.
curl -s -X POST http://192.168.88.10:9191/api/panchanga/planetary-positions \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri"}'
{
"julian_day": 2449235.2,
"place": { "name": "Bathinda, India", "latitude": 30.2379, "longitude": 74.9540, "timezone": 5.5, "elevation": null },
"positions": [
{"planet":"L","raasi_index":4,"longitude_in_raasi":18.168085},
{"planet":1,"raasi_index":11,"longitude_in_raasi":24.96067},
...
],
"ayanamsa_value": 23.456
}
Complete panchanga: all five limbs + sunrise/sunset + ayanamsa.
curl -s -X POST http://192.168.88.10:9191/api/panchanga/full \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri"}'
{
"julian_day": 2449235.2,
"place": { ... },
"sunrise": {"hour":6.20,"minute":12,"second":19,"decimal":6.205388},
"sunset": {"hour":18.74,...},
"tithi": {"index":19,"name":"Krishna Panchami","remaining":41.586964},
"nakshatra": {"index":27,"name":"Revati","remaining":-23.973498},
"raasi": {"index":12,"name":"Pisces","remaining":0.077651},
"vaara": {"index":6,"name":"Shani"},
"yogam": {"index":10,"name":"Vriddhi","remaining":17.183777},
"karana": {"index":37,"name":"Kaulava","remaining":28.317019},
"ayanamsa_value": 23.456
}
Get only tithi (lunar day): {"index":19,"name":"Krishna Panchami","remaining":41.586964}
curl -s -X POST http://192.168.88.10:9191/api/panchanga/tithi \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri"}'
Get only nakshatra (lunar mansion).
Get only raasi (zodiac sign of the Moon).
Get only vaara (weekday).
Get only yogam (the 27 yoga combination).
Get only karana (half of a lunar day).
Get sunrise time at the given place.
Get sunset time at the given place.
Get ayanamsa value (precessional offset) for the given date.
Get muhurtha timings (Rahu Kalam, Yamaganda, Gulika, etc.) for the given day and place.
curl -s -X POST http://192.168.88.10:9191/api/panchanga/muhurthas \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
All under /api/chart. Computes rasi chart, divisional charts, bhava chart, planet positions, retrograde/combustion status, dosha analysis, aspects, and yoga checks.
Common request body (ChartInput):
{
"date": { "year": 1993, "month": 9, "day": 4 },
"time": { "hour": 16, "minute": 48, "second": 0 },
"place": { "name": "Bathinda, India" },
"ayanamsa_mode": "Lahiri",
"divisional_chart_factor": 1,
"chart_method": 1,
"pravesha_type": 0
}
Compute the main Rasi (D1) chart — planet positions, house assignments, retrograde/combust planets.
curl -s -X POST http://192.168.88.10:9191/api/chart/rasi \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri"}'
{
"julian_day": 2449235.2,
"place": { ... },
"divisional_chart_factor": 1,
"planet_positions": [
{"planet":"L","raasi_index":4,"longitude_in_raasi":18.168085},
{"planet":1,"raasi_index":11,"longitude_in_raasi":24.96067},
...
],
"house_to_planet_list": ["2/5", "", "0", ...],
"planet_to_house_dict": {"L":4, "0":2, "1":11, ...},
"retrograde_planets": [4, 6, 7],
"combust_planets": [2, 5, 8]
}
Compute a divisional chart (varga) specified by divisional_chart_factor. Supported factors: 1 (Rasi), 2 (Hora), 3 (Drekkana), 4 (Chaturthamsa), 5 (Panchamsa), 6 (Shashtamsa), 7 (Saptamsa), 8 (Ashtamsa), 9 (Navamsa), 10 (Dasamsa), 12 (Dwadasamsa), 16 (Shodasamsa), 20 (Vimsamsa), 24 (Chaturvimsamsa), 27 (Saptavimsamsa), 30 (Trimsamsa), 40 (Khavedamsa), 45 (Akshavedamsa), 60 (Shastyamsa), 81 (Ekadashasthalamsa), 108 (Ashtottaramsa), 144 (Dvisahasramsa/Dvadasamsa).
curl -s -X POST http://192.168.88.10:9191/api/chart/divisional \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri","divisional_chart_factor":9}'
Shortcut for /api/chart/divisional with factor 9.
Compute the Bhava chart (house-based chart system).
Alias for /api/panchanga/planetary-positions. Returns all planet positions.
List retrograde planets.
curl -s -X POST http://192.168.88.10:9191/api/chart/retrograde \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
List combust planets.
Compute all dosha analysis results (Kala Sarpa, Manglik, Pitru, Guru Chandala, Ganda Moola, Kalathra, Ghata, Shrapit, etc.). Returns a dictionary of dosha names with boolean or descriptive values.
curl -s -X POST http://192.168.88.10:9191/api/chart/dosha \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
{
"Kala Sarpa Dosha": "present",
"Manglik Dosha": "present",
"Pitru Dosha": "absent",
...
}
Get planetary aspects (which planets aspect which houses).
Run a single yoga check by name. Pass query parameter yoga_name e.g. ?yoga_name=vesi_yoga. Returns the description of whether that yoga is present.
curl -s -X POST "http://192.168.88.10:9191/api/chart/yoga-check?yoga_name=vesi_yoga" \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
All under /api/dhasa. Computes period-based dasha systems. Most use DashaInput which extends HoroscopeInput with antardhasa_option (1–6, depth level) and dhasa_level_index (1–6).
Vimsottari Dasha (120-year cycle). Returns the balance at birth and full list of periods.
curl -s -X POST http://192.168.88.10:9191/api/dhasa/vimsottari \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri","antardhasa_option":2,"dhasa_level_index":2}'
{
"balance_dhasa_at_birth": {"years":6,"months":5,"days":3},
"periods": [
{"lord":8,"bhukthi_lord":null,"start_year":1993,"start_month":9,"start_day":4,"duration_years":6,...},
{"lord":8,"bhukthi_lord":0,"start_year":1993,...},
...
]
}
Ashtottari Dasha (108-year cycle).
Narayana Dasha (rasi-based dasha system).
Yogini Dasha (36-year cycle based on nakshatra).
Sudasa / Shoola Dasha (sign-based).
Moola Dasha based on nakshatra pada of the Moon.
Get the currently running dasha for a given date/dob. Pass target_date and optional target_time fields to specify "now".
curl -s -X POST http://192.168.88.10:9191/api/dhasa/current \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"target_date":"2026-07-15","target_time":"22:50"}'
List all available dasha system names.
curl -s http://192.168.88.10:9191/api/dhasa/available-systems
All under /api/transit. Annual chart, lords, sahams, Tajaka aspects, current transit analysis, and Ithasala yoga.
Compute the annual Tajaka chart (solar return) for a given birth date.
curl -s -X POST http://192.168.88.10:9191/api/transit/annual-chart \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri"}'
Get the lord of the year (Tajaka year ruler) based on the annual chart.
Get the lord of the month in the annual chart.
Compute a single saham point. Pass saham_name query parameter. Available names: punya, vidya, yasas, mitra, mahatmaya, asha, samartha, bhratri, gaurava, pithri, rajya, maathri, puthra, jeeva, karma, roga, kali, sastra, bandhu, mrithyu, paradesa, artha, paradara, vanika, karyasiddhi, vivaha, santapa, sraddha, preethi, jadya, vyaapaara, sathru, jalapatna, bandhana, apamrithyu, laabha.
curl -s -X POST "http://192.168.88.10:9191/api/transit/saham?saham_name=artha" \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
Compute all 36 sahams at once.
curl -s -X POST http://192.168.88.10:9191/api/transit/sahams/all \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}}'
{
"count": 33,
"items": [
{"saham":"punya","longitude_degrees":136.989},
{"saham":"vidya","longitude_degrees":93.404},
...
]
}
Compute Tajaka aspects between planets for the annual chart.
Compute current planetary transit positions relative to birth chart. Use years_from_dob to specify a specific year offset from birth.
curl -s -X POST http://192.168.88.10:9191/api/transit/current-transit \
-H "Content-Type: application/json" \
-d '{"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"},"ayanamsa_mode":"Lahiri","years_from_dob":33}'
Check Ithasala yoga in the transit chart (a yoga formed when two planets exchange or aspect each other's signs).
All under /api/match. Computes horoscope matching (porutham) for marriage compatibility.
Ashtakoota (8-fold) matching based on nakshatra and padam of the boy and girl. Uses North Indian system (default).
curl -s -X POST http://192.168.88.10:9191/api/match/ashtakoota \
-H "Content-Type: application/json" \
-d '{"boy_nakshatra":21,"boy_paadam":1,"girl_nakshatra":5,"girl_paadam":3,"method":"North","minimum_score":18.0,"check_mahendra":true,"check_vedha":true,"check_rajju":true,"check_sthree_dheerga":true}'
{
"varna_porutham": 1.0,
"vasiya_porutham": 0.0,
"gana_porutham": 1.0,
...
"compatibility_score": 22.0,
"mahendra_porutham": true,
"vedha_porutham": true,
"rajju_porutham": true,
"sthree_dheerga_porutham": true,
"is_compatible": true
}
Ashtakoota matching using South Indian method.
Compute matching from full horoscope birth details (date/time/place) for both parties. Pass two sets of date, time, place fields: one for the boy, one for the girl.
curl -s -X POST http://192.168.88.10:9191/api/match/by-birth-details \
-H "Content-Type: application/json" \
-d '{
"boy": {"date":{"year":1993,"month":9,"day":4},"time":{"hour":16,"minute":48,"second":0},"place":{"name":"Bathinda, India"}},
"girl": {"date":{"year":1995,"month":3,"day":15},"time":{"hour":8,"minute":30,"second":0},"place":{"name":"Chandigarh, India"}},
"ayanamsa_mode":"Lahiri"
}'
POST /api/everything — Runs all computations (chart, dasha, panchanga, transit, sahams, yogas, and optionally matching) in a single request. Accepts EverythingInput which extends HoroscopeInput with all optional parameters.
Aggregate endpoint — returns ALL calculations in one response. Each section is wrapped in its own try/except block, so partial results are returned even if one section fails.
EverythingInput| Field | Type | Default | Description |
|---|---|---|---|
chart_method | int | 1 | Chart method for divisional charts |
antardhasa_option | int | 1 | Dasha depth level (1=Mahadasa..6=Prana) |
dhasa_level_index | int | 2 | Dasha sub-period level |
years_from_dob | int | 0 | Years from birth for transit |
target_date | str | null | null | Target date (YYYY-MM-DD) for transit |
target_time | str | null | null | Target time (HH:MM) for transit |
include_all_divisional_charts | bool | false | Compute D2–D60 charts (slower) |
boy_nakshatra | int | null | null | If provided, also computes matching |
boy_paadam | int | null | null | Boy's padam (1–4) |
girl_nakshatra | int | null | null | Girl's nakshatra |
girl_paadam | int | null | null | Girl's padam |
curl -s -X POST http://192.168.88.10:9191/api/everything \
-H "Content-Type: application/json" \
-d '{
"date": { "year": 1993, "month": 9, "day": 4 },
"time": { "hour": 16, "minute": 48, "second": 0 },
"place": { "name": "Bathinda, India" },
"ayanamsa_mode": "Lahiri",
"include_all_divisional_charts": true
}'
{
"input": { ... }, ← Echo of the request
"julian_day": 2449235.2,
"panchanga": { ← Full panchanga + limbs
"planetary_positions": [...],
"ayanamsa": 23.456,
"sunrise": {...},
"sunset": {...},
"tithi": {"index":19,"name":"Krishna Panchami",...},
"nakshatra": {"index":27,"name":"Revati",...},
"raasi": {"index":12,"name":"Pisces",...},
"vaara": {"index":6,"name":"Shani"},
"yogam": {"index":10,"name":"Vriddhi",...},
"karana": {"index":37,"name":"Kaulava",...},
"muhurthas": {...}
},
"chart": { ← Rasi chart + dosha
"planet_positions": [...],
"house_to_planet_list": [...],
"planet_to_house_dict": {...},
"D1": {...},
"dosha": {...}
},
"dhasa": { ← All dasha systems
"vimsottari": {...}, ← 81 periods
"ashtottari": {...},
"yogini": {...},
"narayana": {...},
"sudasa": {...},
"moola": {...},
"running": {...}
},
"transit": { ← Annual + current transit
"annual_chart": {...},
"lord_of_the_year": {...},
"current_transit": {...},
"tajaka_aspects": {...}
},
"sahams": { ← 33 computed sahams
"count": 33,
"items": [...]
},
"yogas": { ← Comprehensive yoga report
"comprehensive": [ ... ] ← ~30+ detailed yoga checks
},
"divisional_charts": { ... }, ← Only if include_all_divisional_charts=true
"matching": { ... } ← Only if boy_nakshatra + girl_nakshatra provided
}
curl -s -X POST http://192.168.88.10:9191/api/everything \
-H "Content-Type: application/json" \
-d '{
"date": { "year": 1993, "month": 9, "day": 4 },
"time": { "hour": 16, "minute": 48, "second": 0 },
"place": { "name": "Bathinda, India" },
"ayanamsa_mode": "Lahiri",
"boy_nakshatra": 21,
"boy_paadam": 1,
"girl_nakshatra": 5,
"girl_paadam": 3
}'
| Status | Meaning | Typical Cause |
|---|---|---|
200 OK | Request succeeded | Normal operation |
400 Bad Request | Invalid input or computation error | Invalid date, place not found, or internal library error |
404 Not Found | Endpoint does not exist | Wrong URL path |
422 Unprocessable Entity | Request body failed Pydantic validation | Missing required fields, wrong types, out-of-range values |
500 Internal Server Error | Unhandled server-side exception | Should not occur; report as a bug |
{
"detail": "Error message describing the problem"
}
{
"detail": [
{
"loc": ["body", "date", "month"],
"msg": "ensure this value is greater than or equal to 1",
"type": "value_error.number.not_ge"
}
]
}