Open REST API

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.app

OpenAPI 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/horoscope
Full birth chart
30/min per IP

Every 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)

  • datestringrequired

    Birth date, YYYY-MM-DD. Years 1800 to 2100.

  • timestringrequired

    Birth time, HH:MM:SS on a 24-hour clock.

  • placestringrequired

    Birth place name, echoed in the response. Coordinates decide the calculation.

  • latitudenumberrequired

    Decimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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.

  • elevationnumberoptionaldefault 0

    Metres above sea level.

  • genderstringoptional

    Optional. 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_valuenumberoptional

    Your 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_methodintegeroptionaldefault 1

    House 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_typeintegeroptionaldefault 0

    0 natal chart, 1 annual (varsha pravesha), 2 tithi pravesha.

    One of: 0, 1, 2

  • yearsintegeroptionaldefault 1

    Year number for annual charts, 1 to 120.

  • monthsintegeroptionaldefault 1

    Month number for monthly charts, 1 to 12.

  • sixty_hoursintegeroptionaldefault 1

    Sixty-hour period number for hora progressions, 1 to 1000.

  • divisional_chart_factorintegeroptionaldefault 1

    The divisional chart that chart_method applies to (1 = D-1, 9 = D-9, and so on).

  • chart_methodintegeroptionaldefault 1

    Construction 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_rasiintegeroptional

    For custom divisional charts, which this endpoint does not return. 0 to 11.

  • count_from_end_of_signbooleanoptional

    For custom divisional charts, which this endpoint does not return.

  • varnada_methodintegeroptionaldefault 1

    Method 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_methodintegeroptionaldefault 3

    How 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_yearintegeroptionaldefault 13

    Sixty-year cycle naming: 1 starts at Prabhava (South Indian), 13 at Pramaadhi (North Indian).

    One of: 1, 13

Example request

Terminal
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_revision changes, so cache by input and engine_revision.
  • With calculation_type ss the chart also carries a surya_siddhanta section. When a setting cannot be applied (for example a chart_method a chart does not have), the chart carries request_notes saying so.
POST/marriage-match
Marriage compatibility
30/min per IP

Ashtakoota (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_detailsobjectrequired

    The boy's birth details.

    • datestringrequired

      Birth date, YYYY-MM-DD. Years 1800 to 2100.

    • timestringrequired

      Birth time, HH:MM:SS on a 24-hour clock.

    • latitudenumberrequired

      Decimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.

    • longitudenumberrequired

      Decimal degrees, -180 to 180, east positive.

    • timezonenumberrequired

      UTC 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.

    • elevationnumberoptionaldefault 0

      Metres above sea level.

  • girl_birth_detailsobjectrequired

    The girl's birth details.

    • datestringrequired

      Birth date, YYYY-MM-DD. Years 1800 to 2100.

    • timestringrequired

      Birth time, HH:MM:SS on a 24-hour clock.

    • latitudenumberrequired

      Decimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.

    • longitudenumberrequired

      Decimal degrees, -180 to 180, east positive.

    • timezonenumberrequired

      UTC 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.

    • elevationnumberoptionaldefault 0

      Metres above sea level.

Example request

Terminal
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-timeline
Sade Sati and Saturn timeline
60/min per IP

Sade 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)

  • datestringrequired

    Birth date, YYYY-MM-DD. Years 1800 to 2100.

  • timestringrequired

    Birth time, HH:MM:SS on a 24-hour clock.

  • placestringoptionaldefault ""

    Place name, echoed in the response. Coordinates decide the calculation.

  • latitudenumberrequired

    Decimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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

Terminal
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-siddhanta
Surya Siddhanta chart
60/min per IP

A 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)

  • datestringrequired

    Birth date, YYYY-MM-DD. Years 1800 to 2100.

  • timestringrequired

    Birth time, HH:MM:SS on a 24-hour clock.

  • latitudenumberrequired

    Decimal degrees, north positive. Places beyond 66° north or south are rejected with 400.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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.

  • elevationnumberoptionaldefault 0

    Metres 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_valuenumberoptional

    Your own ayanamsa in degrees, -30 to 30. Used with ayanamsa_mode SIDM_USER.

Example request

Terminal
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/gochara
Transits against a birth chart
60/min per IP

Where 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)

  • datestringrequired

    Birth date, YYYY-MM-DD. Years 1800 to 2100.

  • timestringrequired

    Birth time, HH:MM:SS on a 24-hour clock.

  • placestringoptionaldefault ""

    Place name, echoed in the response. Coordinates decide the calculation.

  • latitudenumberrequired

    Decimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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.

  • elevationnumberoptionaldefault 0

    Metres 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_datestringrequired

    The 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_placestringoptional

    Name of the place the transit is read for. Defaults to the birth place.

  • event_latitudenumberoptional

    Latitude of the event place. Defaults to the birth latitude.

  • event_longitudenumberoptional

    Longitude of the event place. Defaults to the birth longitude.

  • event_timezonenumberoptional

    UTC 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_elevationnumberoptional

    Elevation of the event place, in metres.

  • includestring[]optional

    Optional sections: "ashtakavarga", "gochara_phala", "transit_charts". All three are included by default; pass [] for none, or a subset.

Example request

Terminal
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/range
Transits day by day
30/min per IP

The same transit reading as /gochara, once per day across a date range of up to 60 days.

Request body (JSON)

  • datestringrequired

    Birth date, YYYY-MM-DD. Years 1800 to 2100.

  • timestringrequired

    Birth time, HH:MM:SS on a 24-hour clock.

  • placestringoptionaldefault ""

    Place name, echoed in the response. Coordinates decide the calculation.

  • latitudenumberrequired

    Decimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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.

  • elevationnumberoptionaldefault 0

    Metres 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_datestringrequired

    First day, YYYY-MM-DD.

  • to_datestringrequired

    Last 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_placestringoptional

    Name of the place the transit is read for. Defaults to the birth place.

  • event_latitudenumberoptional

    Latitude of the event place. Defaults to the birth latitude.

  • event_longitudenumberoptional

    Longitude of the event place. Defaults to the birth longitude.

  • event_timezonenumberoptional

    UTC 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_elevationnumberoptional

    Elevation of the event place, in metres.

  • includestring[]optional

    Optional sections per day: "ashtakavarga" and "gochara_phala". Both are included by default; pass [] for none, or one of them.

Example request

Terminal
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/gochar
Today's planetary positions
60/min per IP

Where 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)

  • datestringrequired

    The date, YYYY-MM-DD.

  • latitudenumberrequired

    Decimal degrees, -90 to 90, north positive.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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

Terminal
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/events
Upcoming transit events
60/min per IP

Sign 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_datestringrequired

    Range start, YYYY-MM-DD.

  • to_datestringrequired

    Range end, YYYY-MM-DD. At most 90 days after from_date.

  • latitudenumberrequired

    Decimal degrees, -90 to 90. Used for the display timezone.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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[]optional

    Planet 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

Terminal
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-ingress
When a planet changes sign
60/min per IP

The dates each chosen planet enters a new sign over a date range of up to about five years.

Request body (JSON)

  • planetsstring[]optional

    Planet names (Sun, Moon, Mars, Mercury, Jupiter, Venus, Saturn, Rahu, Ketu). Defaults to Saturn, Jupiter, Rahu and Ketu. An unknown name returns 400.

  • from_datestringrequired

    Range start, YYYY-MM-DD.

  • to_datestringrequired

    Range end, YYYY-MM-DD. Must be after from_date and at most about five years later (400 otherwise).

  • timezonenumberoptionaldefault 0

    UTC 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

Terminal
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/panchang
Daily panchang
60/min per IP

The 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)

  • datestringrequired

    The date, YYYY-MM-DD.

  • latitudenumberrequired

    Decimal degrees, north positive. Places beyond 66° north or south are rejected with 422.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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

Terminal
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_kalam and Abhijit muhurta under auspicious.abhijit_muhurta.
  • Responses can be cached for six hours.
POST/muhurta
Auspicious dates for an event
30/min per IP

Scores 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)

  • datestringrequired

    Birth date, YYYY-MM-DD. Years 1800 to 2100.

  • timestringrequired

    Birth time, HH:MM:SS on a 24-hour clock.

  • placestringoptionaldefault ""

    Place name, echoed in the response. Coordinates decide the calculation.

  • latitudenumberrequired

    Decimal degrees, north positive. Places beyond about 66.5° north or south (inside the polar circles) are rejected with 422.

  • longitudenumberrequired

    Decimal degrees, -180 to 180, east positive.

  • timezonenumberrequired

    UTC 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.

  • elevationnumberoptionaldefault 0

    Metres 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_typestringrequired

    The event. GET /muhurta/events lists the valid values.

  • from_datestringrequired

    Range start, YYYY-MM-DD.

  • to_datestringrequired

    Range end, YYYY-MM-DD. The range covers at most 90 days, counting both ends (400 otherwise).

  • event_placestringoptional

    Name of the place the transit is read for. Defaults to the birth place.

  • event_latitudenumberoptional

    Latitude of the event place. Defaults to the birth latitude.

  • event_longitudenumberoptional

    Longitude of the event place. Defaults to the birth longitude.

  • event_timezonenumberoptional

    UTC 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_elevationnumberoptional

    Elevation of the event place, in metres.

  • day_part_resolution_minutesintegeroptionaldefault 15

    5 to 60. Echoed in the response; it does not currently change the scoring.

  • respect_inauspicious_windowsbooleanoptionaldefault true

    Report the Rahu Kalam, Gulika and Yamaganda windows to avoid.

Example request

Terminal
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/events
Event types for muhurta
No per-minute limit

The event types /muhurta accepts, each with a readable label.

Query parameters

None.

Example request

Terminal
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/autocomplete
Place suggestions as you type
No per-minute limit

Up to 50 matching places for a partial name, for a search-as-you-type box.

Query parameters

  • querystringoptional

    Partial place name, at least 2 characters. Either query or q is required.

  • qstringoptional

    Same as query.

  • limitintegeroptionaldefault 10

    Maximum results, up to 50.

Example request

Terminal
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/health
Health check
No per-minute limit

Returns 200 with a status field when the API is up. Use it for uptime checks.

Query parameters

None.

Example request

Terminal
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.

Terminal
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.

Birth details echo (validated inputs)
Ascendant, nakshatra, and pada
All grahas with sign, house, nakshatra, and degree
Panchanga (tithi, nakshatra, yoga, karana)
All 23 divisional charts (D-1 through D-144)
Vimshottari, Yogini, and Ashtottari dashas
Shad Bala, Bhava Bala, Ashtakavarga
Yogas, doshas, longevity, Sade Sati windows
Arudhas, sphutas, upagrahas, sahams
Marriage compatibility (Ashtakoota + Porutham)

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:

Cache results locally when you can — the same birth details produce the same chart until engine_revision in the response changes.
Batch requests when your workflow allows it.
Send only the fields the endpoint documents; the schema is the contract.
Reach out before large-scale scraping — we would rather help you than get surprised.

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/search and /location/autocomplete is 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.