API Usage
Call Jagannatha Hora's Vedic calculation engine directly from your own app. Open access, no API keys required.
Send birth date, time, and location to the endpoint you need. Responses come back as structured JSON — birth charts, dashas, transits, matching, and more.
Also see MCP server setup for AI assistants.
Open, No Key Required
The Jagannatha Hora calculation API is open — no signup, no API key, no auth header. Send birth details in the request body and read structured JSON in the response.
Nothing is gated. Every calculation the engine can do — birth chart, dashas, divisional charts, transits, matching, muhurta, strengths, yogas, doshas — is available through this API.
Base URL
Prepend this base URL to any of the endpoints listed below. All requests are HTTPS; responses are JSON.
https://jagannatha-hora-359167915530.europe-west1.run.appOpenAPI Spec
Every endpoint below as an OpenAPI 3.1 file. Import it into Postman, Insomnia or any OpenAPI tool, or generate a client from it.
Everything the engine calculates
No paid tier, no private-plan gating. Every calculation the Jagannatha Hora engine produces — from ascendant to D-144 — is exposed through the same endpoints.
No API key, no daily caps
No sign-up, no request counters, no quota emails. 11 of the 15 endpoints carry a per-minute cap per IP; the rest are uncapped. Nothing accumulates against you day to day.
Same engine the site uses
The API returns exactly what the Jagannatha Hora web app renders. What you see on jagannathahora.com is what you get in JSON.
Available Endpoints
All 15 endpoints. Select one to open its full reference below.
Endpoint Reference
Request fields, an example and the response for each endpoint. Errors: 422 when a field is missing or out of range (the detail says which), 400 when an input cannot be used for the calculation (for example a date range that is too long), and 429, with an error message, when a rate limit is exceeded.
Birth charts & matching
POST/horoscopeFull birth chart30/min per IP
/horoscopeEvery calculation for one birth moment in a single response: 23 divisional charts, nakshatras and padas, yogas, doshas, chara karakas, sahams, upagrahas, special lagnas, sphutas, arudhas, planetary states, Shad Bala and the other strengths, Ashtakavarga, graha and rasi dashas, Saturn transits and longevity. The response is large (several megabytes of JSON, sent compressed), so cache it.
Request body (JSON)
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
placestringrequiredBirth place name, echoed in the response. Coordinates decide the calculation.
latitudenumberrequiredDecimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours at birth, -12 to 14 (5.5 for India). By default the API works out the historically correct offset, including daylight saving, from the coordinates and date; see timezone_mode.
elevationnumberoptionaldefault0Metres above sea level.
genderstringoptionalOptional. A few classical yogas depend on gender; when it is omitted, those yogas are left out rather than guessed.
One of: male, female
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL, SIDM_USER
ayanamsa_valuenumberoptionalYour own ayanamsa in degrees, -30 to 30. Used with ayanamsa_mode SIDM_USER.
calculation_typestringoptionaldefault"drik"drik for modern (drik) positions, ss for Surya Siddhanta.
One of: drik, ss
node_typestringoptionaldefault"mean"Rahu and Ketu as the mean or the true lunar node.
One of: mean, true
bhava_madhya_methodintegeroptionaldefault1House system for the bhava chart: 1 equal houses with the lagna at the middle, 2 equal houses with the lagna at the start, 3 Sripati, 4 KP (Placidus cusps), 5 whole sign.
One of: 1, 2, 3, 4, 5
timezone_modestringoptionaldefault"auto"auto works out the historical offset from the coordinates and date, falling back to timezone where no zone is known. file uses timezone exactly as sent. The response reports the offset used.
One of: auto, file
languagestringoptionaldefault"en"Language for names in the response: English, Hindi, Kannada, Tamil or Telugu.
One of: en, hi, ka, ta, te
pravesha_typeintegeroptionaldefault00 natal chart, 1 annual (varsha pravesha), 2 tithi pravesha.
One of: 0, 1, 2
yearsintegeroptionaldefault1Year number for annual charts, 1 to 120.
monthsintegeroptionaldefault1Month number for monthly charts, 1 to 12.
sixty_hoursintegeroptionaldefault1Sixty-hour period number for hora progressions, 1 to 1000.
divisional_chart_factorintegeroptionaldefault1The divisional chart that chart_method applies to (1 = D-1, 9 = D-9, and so on).
chart_methodintegeroptionaldefault1Construction method for that divisional chart, 1 to 6; how many exist depends on the chart. An unavailable method falls back to 1 and is reported in the response.
base_rasiintegeroptionalFor custom divisional charts, which this endpoint does not return. 0 to 11.
count_from_end_of_signbooleanoptionalFor custom divisional charts, which this endpoint does not return.
varnada_methodintegeroptionaldefault1Method for the varnada outputs (house varnadas and the varnada dasha), 1 to 4. Higher values fall back to 1 and are reported in the response.
tamil_month_methodintegeroptionaldefault3How the Tamil month is reckoned, 0 to 3: 0 an alternative traditional rule, 1 starts at sunset, 2 at 10 AM, 3 at midday UTC.
One of: 0, 1, 2, 3
kali_start_yearintegeroptionaldefault13Sixty-year cycle naming: 1 starts at Prabhava (South Indian), 13 at Pramaadhi (North Indian).
One of: 1, 13
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/horoscope" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-01-01",
"time": "06:30:00",
"place": "Bengaluru",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5
}'Response
birth_details— The inputs as used, including the UTC offset applied and where it came from.date · time · place · latitude · longitude · timezone · timezone_used · timezone_derived · timezone_source · request_settings
horoscope— The chart, one key per section.calendar_info · bhava_chart · ayanamsa_value · julian_day · divisional_charts · nakshatra_pada · amsa_rulers · yogas · doshas · chara_karakas · sahams · upagrahas · special_lagnas · house_varnadas · graha_arudhas · surya_arudhas · chandra_arudhas · house_relationships · planetary_states · shad_bala · shad_bala_required · bhava_bala · other_bala · vimsopaka_bala · vaiseshikamsa_bala · shashtiamsa_rulers · ashtakavarga · arudha_padhas · sphuta · graha_dashas · rasi_dashas · saturn_transits · longevity_prediction
engine_revision— An integer that goes up whenever calculation results change. Store it with cached charts and recompute when it changes.
Notes
- The same inputs return the same chart until
engine_revisionchanges, so cache by input andengine_revision. - With
calculation_typessthe chart also carries asurya_siddhantasection. When a setting cannot be applied (for example achart_methoda chart does not have), the chart carriesrequest_notessaying so.
POST/marriage-matchMarriage compatibility30/min per IP
/marriage-matchAshtakoota (Guna Milan) and the additional poruthams for North Indian matching, the ten poruthams for South Indian matching, each person's nakshatra and rasi, their dosha scores, and the Beeja and Kshetra rasi.
Request body (JSON)
boy_birth_detailsobjectrequiredThe boy's birth details.
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
latitudenumberrequiredDecimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours, -12 to 14. The API works out the historically correct offset for the place and date from the coordinates, and uses this value only where no time zone is known there.
elevationnumberoptionaldefault0Metres above sea level.
girl_birth_detailsobjectrequiredThe girl's birth details.
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
latitudenumberrequiredDecimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours, -12 to 14. The API works out the historically correct offset for the place and date from the coordinates, and uses this value only where no time zone is known there.
elevationnumberoptionaldefault0Metres above sea level.
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/marriage-match" \
-H "Content-Type: application/json" \
-d '{
"boy_birth_details": {
"date": "1990-01-01",
"time": "06:30:00",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5
},
"girl_birth_details": {
"date": "1992-03-15",
"time": "14:20:00",
"latitude": 13.0827,
"longitude": 80.2707,
"timezone": 5.5
}
}'Response
boy, girl— Each person's nakshatra, pada and rasi.nakshatra_number · nakshatra_name · pada_number · raasi_number · raasi_name
north_indian— Ashtakoota matching.match_system · eight_koota_porutham · four_additional_porutham · overall_compatibility
south_indian— Ten-porutham matching.match_system · ten_porutham · overall_compatibility
boy_dosha_data, girl_dosha_data— Dosha scores for each person.mars_dosha · sun_dosha · saturn_dosha · rahu_ketu_dosha · total_dosha
beeja_rasi, kshetra_rasi— Beeja and Kshetra rasi of the pair.engine_revision— Goes up whenever calculation results change.
POST/saturn-timelineSade Sati and Saturn timeline60/min per IP
/saturn-timelineSade Sati and dhaiyya periods for a birth chart, measured from the Moon sign. sadeSati describes the cycle in progress; if none is running, the next one (or the most recent, if none is ahead). nextCycle is the next cycle to begin.
Request body (JSON)
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
latitudenumberrequiredDecimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours, -12 to 14 (5.5 for India).
ayanamsa_modestringoptionaldefault"LAHIRI"LAHIRI or RAMAN only on this endpoint.
One of: LAHIRI, RAMAN
detailstringoptionaldefault"summary"summary returns the phases; full adds the month-by-month detail.
One of: summary, full
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/saturn-timeline" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-01-01",
"time": "06:30:00",
"place": "Bengaluru",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5
}'Response
saturn_timeline— The Moon sign and the Saturn periods measured from it.moonSign · moonDegree · sadeSati · dhaiyya · nextCycle
Notes
- Which cycle is current, and the months remaining, are measured from today's date, so the response changes over time for the same inputs.
POST/surya-siddhantaSurya Siddhanta chart60/min per IP
/surya-siddhantaA natal chart computed by the Surya Siddhanta method: the lagna, planetary positions and panchanga, with the ayanamsa it implies compared against the mode you choose.
Request body (JSON)
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
latitudenumberrequiredDecimal degrees, north positive. Places beyond 66° north or south are rejected with 400.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours at birth, -12 to 14 (5.5 for India). By default the API works out the historically correct offset, including daylight saving, from the coordinates and date; see timezone_mode.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
elevationnumberoptionaldefault0Metres above sea level. Echoed only.
timezone_modestringoptionaldefault"auto"auto works out the historical offset from the coordinates and date, falling back to timezone where no zone is known. file uses timezone exactly as sent. The response reports the offset used.
One of: auto, file
ayanamsa_modestringoptionaldefault"LAHIRI"The ayanamsa to compare the Surya Siddhanta result against.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL, SIDM_USER
ayanamsa_valuenumberoptionalYour own ayanamsa in degrees, -30 to 30. Used with ayanamsa_mode SIDM_USER.
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/surya-siddhanta" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-01-01",
"time": "06:30:00",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5
}'Response
birth_details— The inputs as used, including the UTC offset applied.date · time · place · latitude · longitude · elevation · timezone · timezone_used · timezone_derived · timezone_source
surya_siddhanta— The chart.method · epoch · ayanamsa · lagna · planets · panchanga
Transits
POST/gocharaTransits against a birth chart60/min per IP
/gocharaWhere the planets are at a target date and time, read against a birth chart: each planet's sign, house from the lagna and Moon, nakshatra, Ashtakavarga support and the panchanga and muhurta windows of the day.
Request body (JSON)
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
latitudenumberrequiredDecimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours at birth, -12 to 14 (5.5 for India). By default the API works out the historically correct offset, including daylight saving, from the coordinates and date; see timezone_mode.
elevationnumberoptionaldefault0Metres above sea level.
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL
node_typestringoptionaldefault"mean"Rahu and Ketu as the mean or the true lunar node.
One of: mean, true
timezone_modestringoptionaldefault"auto"auto works out the historical offset from the coordinates and date, falling back to timezone where no zone is known. file uses timezone exactly as sent. The response reports the offset used.
One of: auto, file
target_datestringrequiredThe date to read transits for, YYYY-MM-DD.
target_timestringoptionaldefault"12:00:00"Time on the target date, HH:MM:SS. Defaults to local noon.
event_placestringoptionalName of the place the transit is read for. Defaults to the birth place.
event_latitudenumberoptionalLatitude of the event place. Defaults to the birth latitude.
event_longitudenumberoptionalLongitude of the event place. Defaults to the birth longitude.
event_timezonenumberoptionalUTC offset of the event place, in hours. The API works out the offset from the event coordinates where it can; this value, or the birth offset, is the fallback.
event_elevationnumberoptionalElevation of the event place, in metres.
includestring[]optionalOptional sections: "ashtakavarga", "gochara_phala", "transit_charts". All three are included by default; pass [] for none, or a subset.
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/gochara" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-01-01",
"time": "06:30:00",
"place": "Bengaluru",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5,
"target_date": "2026-10-03"
}'Response
birth_details— The birth inputs as used.date · time · place · latitude · longitude · timezone
gochara— The transit snapshot.target · natal_ref · panchanga · muhurta · planets · person_strength · transit_charts
POST/gochara/rangeTransits day by day30/min per IP
/gochara/rangeThe same transit reading as /gochara, once per day across a date range of up to 60 days.
Request body (JSON)
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
latitudenumberrequiredDecimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours, -12 to 14. The API works out the historically correct offset for the place and date from the coordinates, and uses this value only where no time zone is known there.
elevationnumberoptionaldefault0Metres above sea level.
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL
from_datestringrequiredFirst day, YYYY-MM-DD.
to_datestringrequiredLast day, YYYY-MM-DD. The range covers at most 60 days, counting both ends (400 otherwise).
time_of_daystringoptionaldefault"12:00:00"Time used on each day, HH:MM:SS. Defaults to local noon.
event_placestringoptionalName of the place the transit is read for. Defaults to the birth place.
event_latitudenumberoptionalLatitude of the event place. Defaults to the birth latitude.
event_longitudenumberoptionalLongitude of the event place. Defaults to the birth longitude.
event_timezonenumberoptionalUTC offset of the event place, in hours. The API works out the offset from the event coordinates where it can; this value, or the birth offset, is the fallback.
event_elevationnumberoptionalElevation of the event place, in metres.
includestring[]optionalOptional sections per day: "ashtakavarga" and "gochara_phala". Both are included by default; pass [] for none, or one of them.
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/gochara/range" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-01-01",
"time": "06:30:00",
"place": "Bengaluru",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5,
"from_date": "2026-10-01",
"to_date": "2026-10-07"
}'Response
gochara_range— One entry per day.range · place · ayanamsa_mode · natal_ref · count · days
POST/gocharToday's planetary positions60/min per IP
/gocharWhere the nine planets are on a date, for a place, with no birth chart: sign, nakshatra, retrograde state and the day's highlights.
Request body (JSON)
datestringrequiredThe date, YYYY-MM-DD.
latitudenumberrequiredDecimal degrees, -90 to 90, north positive.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours, -12 to 14. The API works out the historically correct offset for the place and date from the coordinates, and uses this value only where no time zone is known there.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/gochar" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-10-03",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5
}'Response
gochar— Positions for the date.date · place · planets · highlights
Notes
- Responses can be cached for six hours.
POST/gochar/eventsUpcoming transit events60/min per IP
/gochar/eventsSign changes and other transit events for the chosen planets over a date range of up to 90 days, with no birth chart.
Request body (JSON)
from_datestringrequiredRange start, YYYY-MM-DD.
to_datestringrequiredRange end, YYYY-MM-DD. At most 90 days after from_date.
latitudenumberrequiredDecimal degrees, -90 to 90. Used for the display timezone.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset, in hours, for expressing event dates. The API works out the offset from the coordinates where it can; this value is the fallback.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
planetsstring[]optionalPlanet names. Defaults to all nine: Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu.
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/gochar/events" \
-H "Content-Type: application/json" \
-d '{
"from_date": "2026-10-01",
"to_date": "2026-10-31",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5
}'Response
gochar_events— Events in the range.range · timezone · ayanamsa_mode · planets · events
Notes
- Responses can be cached for six hours.
POST/planet-ingressWhen a planet changes sign60/min per IP
/planet-ingressThe dates each chosen planet enters a new sign over a date range of up to about five years.
Request body (JSON)
planetsstring[]optionalPlanet names (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu). Defaults to Saturn, Jupiter, Rahu and Ketu. An unknown name returns 400.
from_datestringrequiredRange start, YYYY-MM-DD.
to_datestringrequiredRange end, YYYY-MM-DD. Must be after from_date and at most about five years later (400 otherwise).
timezonenumberoptionaldefault0UTC offset, in hours, that crossing dates are expressed in. Defaults to UTC.
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/planet-ingress" \
-H "Content-Type: application/json" \
-d '{
"from_date": "2026-10-01",
"to_date": "2027-12-31",
"timezone": 5.5
}'Response
planet_ingress— Sign changes in the range.range · timezone · ayanamsa_mode · planets · ingresses
Panchang & muhurta
POST/panchangDaily panchang60/min per IP
/panchangThe panchang for a date and place: vaara, tithi, nakshatra, yoga and karana, sun and moon rise and set, auspicious and inauspicious windows, Choghadiya, the lunar month, ritu, ayana, samvat and the Sun and Moon signs.
Request body (JSON)
datestringrequiredThe date, YYYY-MM-DD.
latitudenumberrequiredDecimal degrees, north positive. Places beyond 66° north or south are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours, -12 to 14. The API works out the historically correct offset for the place and date from the coordinates, and uses this value only where no time zone is known there.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/panchang" \
-H "Content-Type: application/json" \
-d '{
"date": "2026-10-03",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5
}'Response
panchang— The day's panchang.date · place · sunrise · sunset · moonrise · moonset · day_length · vaara · paksha · tithi · nakshatra · yoga · karana · auspicious · inauspicious · choghadiya · month · ritu · ayana · samvat · signs
Notes
- Rahu Kalam is under
inauspicious.rahu_kalamand Abhijit muhurta underauspicious.abhijit_muhurta. - Responses can be cached for six hours.
POST/muhurtaAuspicious dates for an event30/min per IP
/muhurtaScores each day in a range of up to 90 days for an event type, using the classical day factors and the person's own strength on that day, and returns the scored candidates with the windows to avoid.
Request body (JSON)
datestringrequiredBirth date, YYYY-MM-DD. Years 1800 to 2100.
timestringrequiredBirth time, HH:MM:SS on a 24-hour clock.
placestringoptionaldefault""Place name, echoed in the response. Coordinates decide the calculation.
latitudenumberrequiredDecimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.
longitudenumberrequiredDecimal degrees, -180 to 180, east positive.
timezonenumberrequiredUTC offset in hours, -12 to 14. The API works out the historically correct offset for the place and date from the coordinates, and uses this value only where no time zone is known there.
elevationnumberoptionaldefault0Metres above sea level.
ayanamsa_modestringoptionaldefault"LAHIRI"Ayanamsa (sidereal zodiac) to use. Case-insensitive. Send one of the listed modes: on some endpoints an unrecognised value is not rejected and LAHIRI is used.
One of: LAHIRI, TRUE_CITRA, TRUE_LAHIRI, KP, FAGAN, RAMAN, USHASHASHI, YUKTESHWAR, SURYASIDDHANTA, SURYASIDDHANTA_MSUN, ARYABHATA, ARYABHATA_MSUN, SS_CITRA, TRUE_REVATI, SS_REVATI, TRUE_PUSHYA, TRUE_MULA, KP-SENTHIL, SENTHIL
event_typestringrequiredThe event. GET /muhurta/events lists the valid values.
from_datestringrequiredRange start, YYYY-MM-DD.
to_datestringrequiredRange end, YYYY-MM-DD. The range covers at most 90 days, counting both ends (400 otherwise).
event_placestringoptionalName of the place the transit is read for. Defaults to the birth place.
event_latitudenumberoptionalLatitude of the event place. Defaults to the birth latitude.
event_longitudenumberoptionalLongitude of the event place. Defaults to the birth longitude.
event_timezonenumberoptionalUTC offset of the event place, in hours. The API works out the offset from the event coordinates where it can; this value, or the birth offset, is the fallback.
event_elevationnumberoptionalElevation of the event place, in metres.
day_part_resolution_minutesintegeroptionaldefault155 to 60. Echoed in the response; it does not currently change the scoring.
respect_inauspicious_windowsbooleanoptionaldefaulttrueReport the Rahu Kalam, Gulika and Yamaganda windows to avoid.
Example request
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/muhurta" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-01-01",
"time": "06:30:00",
"place": "Bengaluru",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5,
"event_type": "griha_pravesha_own",
"from_date": "2026-10-05",
"to_date": "2026-10-20"
}'Response
muhurta— Scored days for the event.event_type · event_label · range · rules_applied · weights · day_part_resolution_minutes · candidates
GET/muhurta/eventsEvent types for muhurtaNo per-minute limit
/muhurta/eventsThe event types /muhurta accepts, each with a readable label.
Query parameters
None.
Example request
curl "https://jagannatha-hora-359167915530.europe-west1.run.app/muhurta/events"Response
events— One entry per event type: griha_pravesha_own, griha_pravesha_rented, travel_prayana, vehicle_purchase, business_shop_opening, property_purchase_registration.event_type · label · source
Places
GET/location/searchCoordinates for a place nameNo per-minute limit
/location/searchThe best match for a place name from an index of more than 162,000 cities, with its coordinates and UTC offset. Use it to fill latitude, longitude and timezone before calling a chart endpoint.
Query parameters
querystringoptionalPlace name, at least 2 characters, e.g. "Chennai, India". Either query or q is required.
qstringoptionalSame as query.
Example request
curl "https://jagannatha-hora-359167915530.europe-west1.run.app/location/search?query=Chennai%2C+India"Response
place— Matched place name.latitude, longitude— Coordinates in decimal degrees.timezone— The place's standard UTC offset in hours (no daylight saving).country, state, displayName— Where the place is (state when known), and a display label.source— Where the match came from.
Notes
- Returns 404 when nothing matches and 400 when the query is shorter than 2 characters.
- The query is part of the URL, so it appears in request logs (see Your Data).
GET/location/autocompletePlace suggestions as you typeNo per-minute limit
/location/autocompleteUp to 50 matching places for a partial name, for a search-as-you-type box.
Query parameters
querystringoptionalPartial place name, at least 2 characters. Either query or q is required.
qstringoptionalSame as query.
limitintegeroptionaldefault10Maximum results, up to 50.
Example request
curl "https://jagannatha-hora-359167915530.europe-west1.run.app/location/autocomplete?query=Chenn&limit=5"Response
query— The text searched.count— How many results came back.results— Matching places. Each timezone is the place's standard UTC offset (no daylight saving).place · country · state · displayName · latitude · longitude · timezone · elevation
Notes
- The query is part of the URL, so it appears in request logs (see Your Data).
Service
GET/healthHealth checkNo per-minute limit
/healthReturns 200 with a status field when the API is up. Use it for uptime checks.
Query parameters
None.
Example request
curl "https://jagannatha-hora-359167915530.europe-west1.run.app/health"Response
status— "healthy" when the API is up.service— Service name.
Sample Request
Generate a full horoscope with a single POST — no auth header.
curl -X POST "https://jagannatha-hora-359167915530.europe-west1.run.app/horoscope" \
-H "Content-Type: application/json" \
-d '{
"date": "1990-01-01",
"time": "06:30:00",
"latitude": 12.9716,
"longitude": 77.5946,
"timezone": 5.5,
"place": "Bengaluru"
}'What Comes Back
A single horoscope call returns the full chart context. Each section below is included in the JSON response.
Rate Limits & Fair Play
Limits are per client IP, and exceeding one returns a 429. /horoscope, /marriage-match, /gochara/range and /muhurta allow 30 a minute; /saturn-timeline, /surya-siddhanta, /gochara, /gochar, /gochar/events, /planet-ingress and /panchang allow 60 a minute. /muhurta/events, /location/search, /location/autocomplete and /health have no limit. There is no API key and no daily or monthly cap. A few small asks in return:
engine_revision in the response changes.Your Data
- We don't store what you send. Birth details in a request body are used to compute the response. They are not saved to a database or file, and they are never shared or sold.
- Our hosting provider keeps standard request logs for 30 days, then deletes them. They record the time, the full request URL including any query string, the status code, response time and size, your IP address, user agent and referrer. They do not record request bodies.
- Send birth details in the JSON body, as documented, never in the URL: anything in a URL is logged. The search text for
/location/searchand/location/autocompleteis part of the URL, so it is in these logs. - Diagnostic logs may also record limited details derived from a request: for example a date, a latitude rounded to whole degrees, or a short fingerprint of the chart inputs used to recognise repeat requests. They are deleted on the same 30-day schedule.
- MCP results are kept in server memory so follow-up questions about the same chart are answered quickly. They are never written to disk, and are dropped as newer charts replace them or when the server restarts.
Usage Terms
- No API key and no fee, including for low-priced paid apps.
- Credit Jagannatha Hora (jagannathahora.com) in your app.
- Cache results.
- Stay within the rate limits (30 requests a minute per IP on
/horoscope). - There is no uptime guarantee.
- Jagannatha Hora is independent and not affiliated with any desktop astrology software or its author.