The World's Most Comprehensive
Hindu Panchang API
1,400 years of astronomical data (1700–3100), complete Shastric guidance engine, real-time festival derivation, and a p95 of ~42 ms on Panchang — powered by Swiss Ephemeris & Lahiri ayanamsa.
tz to name it yourself. No client-side conversion.Start Here
Build your first feature in 5 minutes. Follow this simple flow.
/v1/compatibility/score/v1/compatibility/report/v1/kundli/birth-report/score →
/report →
/pdf
# Get a compatibility score in one call curl "https://api.tathaastuapi.com/v1/compatibility/score?bride_dob=1992-07-18&bride_time=10:30&bride_lat=28.6139&bride_lon=77.2090&groom_dob=1989-11-25&groom_time=16:45&groom_lat=19.0760&groom_lon=72.8777" \ -H "X-API-Key: YOUR_API_KEY"
/v1/festivals/explain to see exactly why a festival falls on a given date. No other Panchang API does this. Try it below ↓Recommended Flows
Three common integration patterns. Pick the one that matches your app.
GET /v1/compatibility/score ← score + verdictPOST /v1/compatibility/report ← full reportPOST /v1/kundli/birth-report ← birth chart PDF (optional)
GET /v1/panchang/lite ← lightweight (mobile)GET /v1/panchang ← full day dataGET /v1/calendar/month ← month view
GET /v1/kundli/teaser ← free previewPOST /v1/birth-chart ← full chart dataPOST /v1/kundli/birth-report ← Birth Report PDF, 13 languages
Popular Use Cases
Authentication
Every /v1/ request requires a valid API key in the header. Public endpoints (/v1/status, /v1/health) are exempt.
Header Authentication
# Using X-API-Key header (recommended) curl "https://api.tathaastuapi.com/v1/panchang?date=2025-03-01&lat=28.6&lon=77.2" \ -H "X-API-Key: tatha_live_xxxxxxxxxxxx" # Error response when key is missing or invalid { "error": "Unauthorized", "message": "Missing or invalid API key. Pass X-API-Key header.", "docs": "https://tathaastuapi.com/docs#authentication", "get_key": "https://tathaastuapi.com/#pricing" }
Languages & localization
One rule for every /v1 endpoint: canonical fields never change; localized text is added as <field>_local. Match your code on the canonical field and display the _local one.
# GET /v1/festivals?date=2026-11-08&location_id=1&lang=hi { "festival_key": "FESTIVAL_DIWALI", "name": "Diwali", "name_local": "दिवाली" } # GET /v1/choghadiya?date=2026-11-08&lat=19.076&lon=72.8777&lang=hi { "type": "Kaal", "type_local": "काल", "auspicious": false }
| Topic | Behaviour |
|---|---|
| Sending lang | In the query (?lang=hi) on every endpoint, or in the JSON body on POST endpoints that take one. If both are sent, the query wins. Codes are listed by GET /v1/i18n/languages. |
| Missing translations | No translation means no _local field — never an English stand-in. The X-Localization-Missing header gives the count; add &i18n_detail=missing to list the paths in _i18n.missing. |
| Errors | Every error body carries a stable error code (for example invalid_date, unsupported_language). With a non-English lang it also has message_local, in the 13 report languages. Match on error, not on message text. |
| Reports | POST /v1/kundli/birth-report and POST /v1/compatibility/report support en, hi, bn, de, es, fr, gu, kn, ml, mr, pa, ta, te, and return lang and translation_status. |
| Locations | In /v1/locations the native-script place name is name_native (previously name_local). |
Never localized: ids and codes (festival_key, paksha), numbers, dates and times, coordinates, and text you send (such as name and place). Timestamps such as instant_local keep their older meaning: local wall-clock time. Endpoint reference: Languages (i18n).
Quick Start
First API call in under 2 minutes. Choose your language.
# Today's Panchang for Delhi curl "https://api.tathaastuapi.com/v1/panchang?date=2025-03-01&lat=28.6139&lon=77.2090" \ -H "X-API-Key: YOUR_API_KEY" # With timings, hora, choghadiya in one call curl "https://api.tathaastuapi.com/v1/panchang?date=2025-03-01&lat=28.6&lon=77.2&include=timings,hora,choghadiya" \ -H "X-API-Key: YOUR_API_KEY" # Full shastric conditions + event ratings curl "https://api.tathaastuapi.com/v1/shastra/conditions?date=2025-03-01&lat=28.6&lon=77.2" \ -H "X-API-Key: YOUR_API_KEY"
import requests API_KEY = "tatha_live_xxxxxxxxxxxx" BASE = "https://api.tathaastuapi.com/v1" HDR = {"X-API-Key": API_KEY} # Core Panchang r = requests.get(f"{BASE}/panchang", headers=HDR, params={"date":"2025-03-01","lat":28.6139,"lon":77.2090}) p = r.json() print(p["tithi"]["name"]) # → "Ashtami" # Event suitability for marriage s = requests.get(f"{BASE}/events/suitability", headers=HDR, params={"date":"2025-03-01","lat":28.6,"lon":77.2,"event":"marriage"}).json() print(s["rating"]) # → "AVOID" | "NEUTRAL" | "GOOD" | "EXCELLENT"
const API_KEY = 'tatha_live_xxxxxxxxxxxx'; const BASE = 'https://api.tathaastuapi.com/v1'; const HDR = { 'X-API-Key': API_KEY }; async function getPanchang(date, lat, lon) { const r = await fetch( `${BASE}/panchang?date=${date}&lat=${lat}&lon=${lon}`, { headers: HDR } ); return r.json(); } // Always call from server-side to protect your API key const p = await getPanchang('2025-03-01', 27.7172, 85.3240); console.log(p.tithi.name); // → "Chaturdashi" console.log(p.engine.version); // → "7.8.1"
<?php define('API_KEY', 'tatha_live_xxxxxxxxxxxx'); define('BASE', 'https://api.tathaastuapi.com/v1'); function tathaApi($path) { $ctx = stream_context_create(['http' => [ 'header' => 'X-API-Key: ' . API_KEY ]]); return json_decode( file_get_contents(BASE . $path, false, $ctx), true ); } $p = tathaApi('/panchang?date=2025-03-01&lat=28.6&lon=77.2'); echo $p['tithi']['name']; // → "Chaturdashi"
Example Response — /v1/panchang
{
"date": "2025-02-21",
"vara": { "name": "Friday", "name_sa": "Shukravāra", "lord": "Venus" },
"tithi": {
"number": 8, "name": "Ashtami", "paksha": "Krishna",
"period": { "start": "2025-02-20 10:13", "end": "2025-02-21 12:13" }
},
"nakshatra": { "number": 17, "name": "Anuradha", "deity": "Mitra", "gana": "Deva" },
"yoga": { "number": 13, "name": "Vyaghata" },
"karana": { "number": 46, "name": "Garija", "auspicious": true },
"hindu_calendar": { "amanta": "Magha", "purnimanta": "Phalguna", "samvat": 2081 },
"timings": {
"sunrise": "06:52:14", "sunset": "18:23:11",
"moonrise": "02:14:00", "moonset": "13:44:00"
},
"engine": {
"name": "TathaAstu Panchang", "version": "7.8.1",
"calculation": "Drik", "ayanamsa": "Lahiri (Chitrapaksha)"
}
}
Panchang Endpoints FREE TIER
The five limbs of Panchang — Vara, Tithi, Nakshatra, Yoga, Karana — plus Hindu calendar identity, special day flags, and engine attribution on every response.
Supports the 1700–3100 date range. Works anywhere in the world: the timezone is resolved from lat/lon and daylight saving is applied, so coordinates alone are enough. Pass tz to name the zone yourself. A named location_id reads that location’s precomputed row and wins over coordinates; coordinates alone are computed for those coordinates. Every response reports the zone it used and the engine version.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date in YYYY-MM-DD format |
| lat | float | Optional | Latitude |
| lon | float | Optional | Longitude |
| location_id | integer | Optional | Predefined location ID (defaults to 2 when neither location_id nor region is given) |
| lang | string | Optional | Language code |
| region | string | Optional | Canonical region (NORTH_INDIA|SOUTH_INDIA|EAST_INDIA|WEST_INDIA|NEPAL|KASHMIR|SRI_LANKA) or a supported ISO 3166-2 state code (e.g. IN-MH). Selects that region's canonical location when location_id is omitted. Unsupported values return 422. |
| include | string | Optional | Comma-separated: tithi,nakshatra,yoga,karana,hora,choghadiya,festivals,muhurat,eclipse |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Optional: derived from lat/lon when omitted, then the region default. |
Returns Panchang for today (server time, IST). Accepts all optional params except date.
Returns Panchang for tomorrow. Useful for apps that show a next-day preview widget.
Returns every available section in one response: core panchang, timings, hora, choghadiya, astronomical, shastric conditions, event suitability, festivals, panchak, bhadra, disha shool, special yogas.
Location: pass lat and lon, or location_id (see /v1/locations), or region.
conditions block (Panchak, Bhadra, Ganda Mool) and astronomical.eclipse block. These are new optional fields — the legacy data block is unchanged. Any sub-block returns null if data is unavailable for that date.Returns Tithi number, name, paksha (Shukla/Krishna), nature (Nanda/Bhadra/Jaya/Rikta/Purna), start/end times.
Returns Nakshatra number, name, pada (quarter), deity, gana (Deva/Manushya/Rakshasa), nature, ruling planet, period times. Pass time (HH:MM, local) for the nakshatra at that moment; without it the answer is the nakshatra at sunrise. basis says which.
Every key /v1/panchang/full?include=day_classification can emit, once.
Domain facts (authoritative): key, kind, type, category, priority_tier, default_priority, nature. Presentation hints (guidance for the client's own design system): presentation.icon_key, theme_key, badge_key. Icon keys are hierarchical (festival.diwali falls back to festival). No colours and no asset URLs are published.
Cache it: the response carries catalog_version and an ETag; send If-None-Match to receive 304 Not Modified until the catalogue changes.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Lightweight Panchang for mobile apps. Returns only essential data: date, tithi, nakshatra, sunrise, sunset, paksha. Response size < 1KB. For full data use /v1/panchang.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude |
| lon | float | Optional | Longitude |
| location_id | integer | Optional | Location ID. Defaults to 2 when neither location_id nor lat/lon is given; supplying lat/lon instead computes for those coordinates. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Optional: derived from lat/lon when omitted, then the region default. |
Every day of the month, each exactly as GET /v1/panchang returns it for that date with the same parameters (location_id or lat/lon/tz, region, lang, include, fields). Designed for clients that store a month of Panchang in their own database. Billing: one API request per day returned (28-31), so a month costs the same as fetching the days one by one; the response header X-Billed-Requests states the count. Requires the Starter plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Year |
| month | integer | Required | Month (1-12) |
| lat | float | Optional | Latitude |
| lon | float | Optional | Longitude |
| location_id | integer | Optional | Predefined location ID; as on /v1/panchang |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| region | string | Optional | Canonical region or ISO 3166-2 state code; as on /v1/panchang |
| include | string | Optional | Same as /v1/panchang: tithi,nakshatra,yoga,karana,hora,choghadiya,festivals,muhurat,eclipse |
| tz | string | Optional | IANA timezone; as on /v1/panchang |
| view | string | Optional | panchang (each day = GET /v1/panchang) or full (each day = GET /v1/panchang/full, Pro plan) |
Get Panchang for current moment with live running tithi/nakshatra info. Shows what's active RIGHT NOW.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lat | float | Optional | Latitude in decimal degrees. Provide with lon, or use location_id. |
| lon | float | Optional | Longitude in decimal degrees. Provide with lat, or use location_id. |
| location_id | integer | Optional | Named dataset location. Omit it and lat/lon decide the location; omit both and the historical default (1) applies. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | IANA timezone deciding which day "today" is, e.g. America/New_York. Omitted = the API server's date, which is a different day from yours for part of every day. |
Panchang for each date from start to end inclusive (end - start <= 30 days, i.e. at most 31 dates). Requires the Starter plan; single dates are available on Free from /v1/panchang. Location: location_id > lat/lon > region's canonical location > Ujjain (the historical default).
| Parameter | Type | Required | Description |
|---|---|---|---|
| start | string | Required | Start date YYYY-MM-DD |
| end | string | Required | End date YYYY-MM-DD |
| lat | float | Optional | Latitude. With lon, used when location_id is not given. |
| lon | float | Optional | Longitude. Required together with lat. |
| location_id | integer | Optional | Predefined location ID; takes precedence over lat/lon. |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-MH); its canonical location is used when neither location_id nor lat/lon is given. An unsupported value is ignored. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Every value accepted by the region parameter (on /v1/panchang, /v1/panchang/full and /v1/panchang/month): the canonical regions (NORTH_INDIA, ...) and the ISO 3166-2 subdivisions (IN-DL, IN-MH, ...), each with the location whose Panchang it returns (location_id, name, lat, lon, region, subdivision). Use it to sync Panchang per region or state without managing location ids.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get Panchang for yesterday.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lat | float | Optional | Latitude in decimal degrees. Provide with lon, or use location_id. |
| lon | float | Optional | Longitude in decimal degrees. Provide with lat, or use location_id. |
| location_id | integer | Optional | Named dataset location. Omit it and lat/lon decide the location; omit both and the historical default (1) applies. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| include | string | Optional | include parameter. |
| tz | string | Optional | IANA timezone deciding which day "today" is, e.g. America/New_York. Omitted = the API server's date, which is a different day from yours for part of every day. |
Killer endpoint: Returns today's complete Panchang data in a single call. Includes: panchang, festivals, muhurat, rahukaal, moon phase — everything. Optimized for mobile apps and dashboard widgets.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lat | float | Optional | Latitude. With lon it selects the location when location_id is omitted. |
| lon | float | Optional | Longitude. |
| location_id | integer | Optional | Named dataset location. Omit it and lat/lon decide; omit both and the historical default (2) applies. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Optional: derived from lat/lon when omitted, then the region default. |
All-Timings Endpoint FREE TIER
All auspicious and inauspicious windows for a date in one call — sunrise/sunset, all malefic periods, muhurtas, and moon times.
Returns: 🌅 Sunrise/Sunset · 🌙 Moonrise/Moonset · 🔴 Rahu Kaal · ⚫ Yamagandam · 🟠 Gulika Kaal · ⭐ Brahma Muhurta · ✨ Abhijit Muhurat · 💫 Amrit Kaal · ❌ Durmuhurta (×2) · 🚫 Varjyam.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude (or pass region) |
| lon | float | Optional | Longitude (or pass region) |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-MH); fills coords when lat/lon omitted. Unsupported values return 422. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Omit to use the region default (+05:30 / +05:45). |
Get inauspicious timings (Rahu Kaal, Yamagandam, Gulika Kaal, Durmuhurta, Varjyam).
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Required | Latitude |
| lon | float | Required | Longitude |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Hora & Choghadiya
Planetary hours and auspicious/inauspicious day segments. Durations dynamically computed from actual sunrise/sunset — never hardcoded to 60 minutes.
24 Hora periods from sunrise to next sunrise. Each ruled by a planet (Sun→Venus→Mercury→Moon→Saturn→Jupiter→Mars). Duration = (next_sunrise − today_sunrise) / 24. Nepal uses +05:45 correctly.
North/West Indian tradition. 8 day slots from sunrise→sunset and 8 night slots from sunset→sunrise. Each ~1.5 hours (dynamically computed), rated: Amrit ✅ · Shubh ✅ · Labh ✅ · Char ⚠️ · Rog ❌ · Kaal ❌ · Udveg ❌.
Inauspicious 1.5-hour window. Varies by weekday — computed from actual sunrise, not fixed times.
Another inauspicious daily period. Avoid new ventures during Yamagandam.
Third inauspicious daily window in the Vedic timekeeping system.
Abhijit Muhurat — near solar noon, ~48 minutes. Most universally auspicious window. Not applicable on Wednesdays by traditional rule.
Astronomical Data
Sun/moon positions, zodiac, sankranti, moon phase and lagna — all computed via Swiss Ephemeris with Lahiri ayanamsa.
Sun longitude/rashi, Moon longitude/rashi/nakshatra, sankranti day flag, amavasya/purnima flags, planetary positions.
Returns phase name (Waxing Crescent/Gibbous/Full/Waning etc.), illumination percentage, paksha (Shukla/Krishna), days to next full/new moon.
Lagna (ascendant) changes every ~2 hours. Returns current lagna rashi + udaya lagna (fixed at sunrise). For real-time widgets, refresh every 5 minutes.
Get sun position and timing data.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Required | Latitude |
| lon | float | Required | Longitude |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Unified Daily Context FLAGSHIP
A single B2B call returns the complete daily spiritual context — Panchang, festivals, shastric conditions, and eclipses. Built for clients who want one endpoint instead of stitching together /v1/panchang + /v1/festivals + /v1/panchak + /v1/eclipse.
Pick the right endpoint for the job
| Use Case | Endpoint | Why | |
|---|---|---|---|
| Show event listings festivals, vrats, observances |
/v1/festivals |
Stored + rule-derived festivals only. Does NOT include Panchak/Bhadra/Ganda Mool. | |
| Show calendar data tithi, nakshatra, yoga, karana, hindu month |
/v1/panchang |
Core 5 limbs + hindu calendar identity. Optimised for daily widgets. | |
| Show complete daily insights ⭐ RECOMMENDED for B2B |
/v1/day-context |
Panchang + festivals + conditions (panchak/bhadra/ganda_mool) + eclipse — in one call. Cached 6h. | |
| Personalised astrology isht devta, kundli, compatibility |
/v1/isht-devta/v1/birth-chart/v1/compatibility |
Requires birth data. Deterministic, explainable. Premium tier. | |
| Find auspicious timings muhurat, hora, choghadiya |
/v1/timings/v1/muhurat/find |
Sunrise/sunset + Rahu Kaal + Brahma Muhurta + Abhijit + scan-by-event muhurat finder. | |
| Shastric deep dive enterprise temple kiosks, exports |
/v1/panchang/full/v1/shastra/conditions |
Heavy. Every section of the engine in one response. NOT for mobile apps. | |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Omit it and the zone is resolved from lat/lon, with daylight saving applied. Abbreviations such as IST, EST and PST are rejected. The zone used is reported back in location.timezone. |
/v1/day-context. Drop down to individual endpoints only when you need a single specific signal (e.g. just /v1/rahukaal for a notification).
/v1/festivals responses. To surface them in your app alongside festivals, use /v1/day-context — it returns festivals AND conditions in one unified payload.Returns complete daily spiritual intelligence in a single response: panchang (5 limbs + hindu calendar), festivals (stored + rule-derived), conditions (panchak, bhadra, ganda_mool), and astronomical.eclipse. Internally calls the same engine functions as the individual endpoints — no logic duplication, no extra HTTP overhead. Any sub-block that cannot be computed returns null instead of failing.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Required | Latitude |
| lon | float | Required | Longitude |
| location_id | integer | Optional | Predefined location ID for stored panchang/festivals (defaults to 2 when neither location_id nor region is given) |
| lang | string | Optional | Language code |
| region | string | Optional | Canonical region (NORTH_INDIA|SOUTH_INDIA|EAST_INDIA|WEST_INDIA|NEPAL|KASHMIR|SRI_LANKA) or a supported ISO 3166-2 state code (e.g. IN-MH). Selects that region's canonical location when location_id is omitted. Unsupported values return 422. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Omit to use the region default (+05:30 / +05:45). |
curl "https://api.tathaastuapi.com/v1/day-context?date=2026-04-11&lat=28.6139&lon=77.2090" \ -H "X-API-Key: sk_live_xxxxxxxxxxxx"
{
"date": "2026-04-11",
"location": { "lat": 28.6139, "lon": 77.2090, "region": "NORTH_INDIA", "location_id": 2 },
"panchang": { /* tithi, nakshatra, yoga, karana, hindu_calendar, ... */ },
"festivals": [ /* stored + rule-derived festivals */ ],
"conditions": {
"panchak": { "is_panchak": false, "type": null, /* ... */ },
"bhadra": { "is_bhadra": false, /* ... */ },
"ganda_mool": { "is_ganda_mool": false, "nakshatra_num": 12, "nakshatra_name": "Uttara Phalguni", "gana": "Manushya" }
},
"astronomical": {
"eclipse": null
},
"_note": "Panchak, Bhadra, and Ganda Mool are NOT festivals. They are shastric conditions surfaced separately from /v1/festivals."
}
(date, lat, lon, location_id, lang, region). Lat/lon are rounded to 4 decimals (~11m precision). Each response includes a _cache field set to "hit" or "miss" for observability. Cache failures never break the request — the endpoint always falls through to live computation.Returns a personalised Isht Devta recommendation based on the caller's birth data, computed via the production Vedic astrology engine. Deterministic and explainable — no hardcoded charts.
lagna_lord, moon_sign_lord, nakshatra_lord. 3. Confidence: high if all 3 agree, medium if 2 agree, low otherwise. 4. Map dominant planet → presiding deity. 5. Surface supporting facts so the recommendation is fully explainable.Request body:
{
"date_of_birth": "1992-07-18",
"time_of_birth": "10:30",
"location": { "lat": 28.6139, "lon": 77.2090 },
"timezone": "Asia/Kolkata"
}
Response:
{
"isht_devta": {
"name": "Mahalakshmi",
"basis": "lagna_lord=Venus; moon_sign_lord=Venus; nakshatra_lord=Sun; → dominant planet: Venus",
"confidence": "medium"
},
"methodology": "lagna + moon + nakshatra convergence",
"supporting_factors": {
"nakshatra": "Punarvasu",
"nakshatra_deity": "Aditi",
"rashi": "Taurus",
"lagna": "Libra",
"lagna_lord": "Venus",
"moon_sign_lord": "Venus",
"nakshatra_lord": "Sun",
"dominant_planet": "Venus"
},
"engine": {
"name": "TathaAstu Vedic Astrology Engine",
"ayanamsa": "Lahiri",
"rule": "convergence(lagna_lord, moon_sign_lord, nakshatra_lord)"
},
"disclaimer": "Isht Devta is a personal devotional choice. This recommendation is a deterministic computation based on classical lordships and is intended as guidance, not prescription. Consult your family guru or priest for personal sadhana decisions."
}
confidence: "low"), the response includes a note field explaining the fallback and a fallback_deity field with the classical Janma Nakshatra deity. This makes the recommendation fully transparent to your end users.curl -X POST https://api.tathaastuapi.com/v1/isht-devta \
-H "X-API-Key: sk_live_xxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"date_of_birth":"1992-07-18","time_of_birth":"10:30","location":{"lat":28.6139,"lon":77.2090}}'
/v1/birth-chart.Bulk endpoint for calendar grids / monthly views / annual sync jobs.
Accepts a date range (up to 62 days per call) and returns an array of day_context payloads — avoids the 60 req/min rate limit when syncing full months or years.
Usage patterns:
- Mobile monthly calendar: 1 call per month × 7 regions = 7 calls/year
- Annual sync (single region): 12 calls (one per month)
- Annual sync (all regions): 84 calls (vs ~2,555 with daily endpoint)
Region parameter: If region=NORTH_INDIA is passed, canonical coords are auto-resolved. If region is omitted, lat + lon are required.
Location: each day is exactly /v1/day-context for the same inputs. With lat+lon (+tz) and no location_id/region, every day is computed for those coordinates and festivals equal /v1/festivals?lat&lon&tz. location_id used to default to 2 (Varanasi), so coordinate-only callers were answered for Varanasi; an explicit location_id or region still selects that stored location.
Response shape: ``json { "from": "2026-04-01", "to": "2026-04-30", "region": "NORTH_INDIA", "count": 30, "days": [ {"date": "2026-04-01", ...full day_context...}, ... ] } ``
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string | Required | Start date YYYY-MM-DD |
| to | string | Required | End date YYYY-MM-DD (inclusive). Max 62 days from start. |
| region | string | Optional | Canonical region (NORTH_INDIA|SOUTH_INDIA|EAST_INDIA|WEST_INDIA|NEPAL|KASHMIR|SRI_LANKA) or a supported ISO 3166-2 state code (e.g. IN-MH). If provided, its canonical coords are used. Unsupported values return 422. |
| lat | float | Optional | Latitude (required if region not provided) |
| lon | float | Optional | Longitude (required if region not provided) |
| location_id | integer | Optional | Predefined location ID. Given, each day's panchang and festivals are that stored location's (compatibility behaviour). Omitted with no region, every day is computed for lat/lon/tz. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. America/Argentina/Cordoba. Send it with coordinate-only requests: it decides which civil day a festival falls on. Omitted, the zone is derived from lat/lon. |
Festivals & Vrats NEW: Explainable Engine
Festivals derived on-the-fly with full explainability — every result tells you exactly why it falls on a given date.
Stories, significance and observance (content=)
142 festivals carry content: 57 kathas (the story told for the festival), 93 significance notes and an observance (vidhi) note. Read one festival with GET /v1/festivals/content/{subject} (for example karva-chauth, rishi-panchami, indira-ekadashi; GET /v1/festivals/content lists them all), or add content=story — also katha, significance, vidhi, all, comma-separated — to /v1/festivals, /v1/festivals/date, /range, /month, /year, /search, /v1/calendar/day and /v1/calendar/month: every festival in the response then has a content block (null where none is held). Without content= the responses are unchanged.
Each piece has type, title, body_html (simple HTML: paragraphs, emphasis, lists), the language actually served and provenance. The texts are original adaptations by TathaAstu and are drafts until reviewed: review_status says so, source_reference names the scriptural or traditional source adapted where one could be named, and source_reference_verified stays false until a reviewer confirms it. Folk kathas (Karva Chauth, Ahoi Ashtami, Bhai Dooj) are labelled traditional and claim no scripture. With lang, a translated piece is served in that language with its translation provenance; one not yet translated is served in English with language_note. Hindi is available for every katha; other languages are being added.
Ekadashi: Smarta and Vaishnava days (sampradaya=)
Smarta householders and Vaishnavas (with ascetics) sometimes keep the same Ekadashi on different days. Where they do, the Ekadashi item (festival_key VRAT_EKADASHI) carries an observance block: schools.smarta and schools.vaishnava, each with date and label; pattern (DVADASHI_KSHAYA_TRISPARSHA, EKADASHI_KSHAYA, DVADASHI_VRIDDHI, ARUNODAYA_VEDHA, EKADASHI_VRIDDHI_DVADASHI_KSHAYA); default_date and default_follows; and sources. Ekadashis on which the schools agree carry no block.
Default unchanged. Without the parameter, date is the canonical day it has always been: the Ekadashi at sunrise. Add sampradaya=smarta or sampradaya=vaishnava to receive that school's day instead. The day is computed from the rules of Dharmasindhu (1888, pp.11-12) and Nirnayasindhu (1940, pp.30-31), not relabelled. The parameter is accepted by /v1/festivals, /v1/festivals/date, /range, /month, /year, /explain, /v1/vrat, /v1/calendar/month and /v1/calendar/year. Only the Ekadashi vrat moves; every other festival ignores it. Items it chose are marked sampradaya with confidence_label SAMPRADAYA_RULE. Any other value is a 422 (invalid_sampradaya).
Example, Pausha Putrada Ekadashi 2027 at New Delhi:
GET /v1/festivals?date=2027-01-19: Ekadashi on 2027-01-19, with observance.schools.smarta.date 2027-01-18.
GET /v1/festivals?date=2027-01-18&sampradaya=smarta: Ekadashi on 2027-01-18.
GET /v1/festivals/year?year=2027&sampradaya=vaishnava: every Ekadashi on its Vaishnava day.
Migrating. Nothing breaks: observance is an added field, and a client that ignores it sees the same dates as before. To follow a school, pass sampradaya on every festival or vrat call you make, including range and year calls. /v1/panchang special_day_flags.is_ekadashi still means "Ekadashi at sunrise"; it is a Panchang fact, not an observance day.
Bengal Durga Puja rites (West Bengal)
For the West Bengal tradition (region=IN-WB, or a West Bengal location such as Kolkata) the Durga Puja rites are festivals of their own, beside Maha Shashthi to Vijayadashami: FESTIVAL_BILVA_NIMANTRAN (the evening of Shashthi), FESTIVAL_KALPARAMBHA (Kalparambha, Akal Bodhon, Amantran and Adhivas; the day before the Navapatrika), FESTIVAL_NAVAPATRIKA_PUJA (Kola Bou; Saptami at sunrise), FESTIVAL_KUMARI_PUJA (Maha Ashtami), FESTIVAL_SANDHI_PUJA and FESTIVAL_DURGA_VISARJAN (Bijoya Dashami, Sindoor Khela). Other regions are unchanged.
Sandhi Puja carries its time. Its item has an observance block: window.start and window.end (local time, the last 24 minutes of Ashtami and the first 24 of Navami), junction (the moment Ashtami ends) and basis. Its date is the sunrise-to-sunrise day holding the junction, so a junction before dawn is listed under the previous date. Example: GET /v1/festivals?date=2026-10-19®ion=IN-WB gives Sandhi Puja with the window 10:28 to 11:16. The rules cite Nirnayasindhu (1940) pp.125-137 and Dharmasindhu (1888) pp.70-71 (see /v1/festivals/explain) and reproduce Drik Panchang’s Kolkata dates for 2021-2030.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| location_id | integer | Optional | Predefined location ID. Defaults to 1 (New Delhi) unless region or lat/lon is given. |
| lang | string | Optional | ISO language code for transliterated names. Defaults to English. |
| type | string | Optional | Filter: VRAT, FESTIVAL, SANKRANTI |
| tags | string | Optional | Filter by tags: FASTING,SHAIVA,VAISHNAVA |
| festival_mode | string | Optional | standard or drik |
| pack | string | Optional | Rule pack (e.g. north_india) |
| observatory | boolean | Optional | Include evaluation trace per festival |
| lat | float | Optional | Latitude. With lon (and ideally tz) the occurrence date is computed for THIS location, which can differ from India's by a day. |
| lon | float | Optional | Longitude. Required together with lat. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Omit to use the region default (+05:30 / +05:45). |
| region | string | Optional | Regional tradition: a canonical region (NORTH_INDIA|SOUTH_INDIA|EAST_INDIA|WEST_INDIA|NEPAL|KASHMIR|SRI_LANKA) or a supported ISO 3166-2 state code (e.g. IN-MH). Selects the regional festival rules; without location_id it also selects that region's canonical location. For compatibility an unsupported value is ignored and reported in _engine.region_resolution.ignored_region. |
Explainability endpoint — returns the exact astronomical rule that triggered a derived festival, with per-condition match details.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | YYYY-MM-DD |
| festival | string | Required | Festival key (e.g. FESTIVAL_HOLI) |
| location_id | integer | Optional | Location ID (default: 1) |
{
"festival": "FESTIVAL_MAHA_SHIVARATRI",
"date": "2026-02-16",
"matched": true,
"rule_code": "SHIVARATRI",
"conditions": [
{ "field": "paksha", "expected": "KRISHNA", "actual": "KRISHNA", "matched": true },
{ "field": "tithi_num", "expected": 14, "actual": 14, "matched": true },
{ "field": "purnimanta_month", "expected": "Phalguna", "actual": "Phalguna", "matched": true }
],
"human_readable": "This festival was derived because the conditions in rule 'SHIVARATRI' matched the Panchang facts for 2026-02-16."
}
See exactly why a festival falls on a given date. This is unique to TathaAstu API.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Four-digit year. |
| month | integer | Required | Month number, 1-12. |
| location_id | integer | Optional | Predefined location ID. Defaults to 1 (New Delhi), or to the region's canonical location when region is given. |
| lang | string | Optional | ISO language code for transliterated names. Defaults to English. |
| region | string | Optional | Regional tradition: canonical region or supported ISO 3166-2 state code (e.g. IN-MH); same rule as /v1/festivals. An unsupported value is ignored and reported in region_resolution.ignored_region. |
Every festival that has content: its subject (slug), the piece types held (katha = the story, significance, vidhi = how it is observed) and their English titles. Draft content by TathaAstu; see notice.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
One festival's content, e.g. rishi-panchami, karva-chauth, indira-ekadashi. Each piece has title, body_html (simple HTML: p, em, strong, ul/li), language actually served, and provenance: who wrote it, the scriptural or traditional source it adapts (source_reference, always source_reference_verified: false until reviewed), review_status and, for a translation, how it was made.
| Parameter | Type | Required | Description |
|---|---|---|---|
| subject | string | Required | subject parameter. (path) |
| type | string | Optional | katha (or story), significance, vidhi or all (default all); comma-separate several. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Alias for /v1/festivals?date=X
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Target date in YYYY-MM-DD. |
| location_id | integer | Optional | Predefined location ID. Defaults to 1 (New Delhi), or to the region's canonical location when region is given. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| region | string | Optional | Regional tradition: canonical region or supported ISO 3166-2 state code (e.g. IN-MH); same rule as /v1/festivals. An unsupported value is ignored and reported in region_resolution.ignored_region. |
| content | string | Optional | Attach festival content to every festival in the response: katha (or story), significance, vidhi, or all; comma-separate several. Each piece carries provenance and review_status (draft content by TathaAstu). Omit for the unchanged response. |
| sampradaya | string | Optional | Ekadashi observance school: smarta or vaishnava. Moves the generic Ekadashi vrat (VRAT_EKADASHI) to that school's observance day, decided by the Dharmasindhu/Nirnayasindhu rules; every other festival is unaffected. Omit for the canonical date (unchanged). |
Auspicious muhurat window for a festival at a specific date and location.
TathaAstuAPI owns all festival / muhurat / regional computation; the consuming app renders recommended + explanation directly and implements NO religious or regional logic. The response contains everything needed to display the answer:
festival(id, key, name, date)location(region, lat, lon, timezone_offset)recommended{start, end, label} (null when unsupported / not applicable)avoid[{start, end, reason, label}] (Bhadra Mukha, Rahu Kaal, ...)conditions{tithi, sunrise, sunset, rahu_kaal, bhadra?, moonrise?}explanation{rule, kala, reason, source}kala{code, label} (present when the rule defines one of the four kalas)timing{type, status, windows} — the explicit timing contractverification: "verified" | "computed" | "unsupported"source
timing.type is INSTANT | WINDOW | MULTI_WINDOW | NONE, and timing.status is supported | unsupported | not_applicable | error, so the caller never has to infer capability from the shape of recommended. timing.windows carries every window the rule produced; recommended remains the single window the engine selects. not_applicable means the authored rule selects the day and states no performance hour.
verification is honest: Tier-1 festivals are source-traced ("verified"), Tier-2 are computed from the authored kala ("computed"), and unsupported festivals return recommended: null rather than a fabricated time. Times are local ISO-8601 (the location's timezone, see location.timezone_offset).
| Parameter | Type | Required | Description |
|---|---|---|---|
| festival | string | Required | Festival slug, e.g. raksha_bandhan, diwali, janmashtami, ganesh_chaturthi, dhanteras, holika_dahan, bhai_dooj, vijayadashami, maha_shivaratri |
| date | string | Required | Festival date YYYY-MM-DD (the date returned by /v1/festivals for this location) |
| lat | float | Required | Latitude - the local astronomical context (sunrise/sunset are location-specific) |
| lon | float | Required | Longitude |
| region | string | Optional | Canonical region (NORTH_INDIA|SOUTH_INDIA|EAST_INDIA|WEST_INDIA|NEPAL|KASHMIR|SRI_LANKA) or a supported ISO 3166-2 state code (e.g. IN-MH). Selects the regional convention/calendar; if omitted it is inferred from lat/lon. Unsupported values return 422. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Omit to use the region default (+05:30 / +05:45). |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
What the muhurat engine can actually time, and under which contract.
Each entry carries the canonical key, its accepted slugs, the timing contract (timing_type, timing_status) and, where the rule defines one, the kala. This is the list the consuming app should build against instead of guessing slugs or inferring capability from a null recommended.
timing_type: INSTANT | WINDOW | MULTI_WINDOW | NONEtiming_status: supported | unsupported | not_applicable
not_applicable means the authored rule selects the observance day and states no performance window. That is a property of the source, not a gap in the engine, and the engine does not invent an hour to fill it.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get all festivals in a date range using the rule engine.
Every day is evaluated exactly as /v1/festivals evaluates it, with the same region rule. A listed location without precomputed rows is computed from its coordinates; an unknown location_id is a 404; any other failure surfaces instead of silently dropping that day's festivals.
| Parameter | Type | Required | Description |
|---|---|---|---|
| start | string | Required | Start date |
| end | string | Required | End date |
| location_id | integer | Optional | Predefined location ID. Defaults to 1 (New Delhi), or to the region's canonical location when region is given. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| region | string | Optional | Regional tradition: canonical region or supported ISO 3166-2 state code (e.g. IN-MH); same rule as /v1/festivals. An unsupported value is ignored and reported in region_resolution.ignored_region. |
| content | string | Optional | Attach festival content to every festival in the response: katha (or story), significance, vidhi, or all; comma-separate several. Each piece carries provenance and review_status (draft content by TathaAstu). Omit for the unchanged response. |
| sampradaya | string | Optional | Ekadashi observance school: smarta or vaishnava. Moves the generic Ekadashi vrat (VRAT_EKADASHI) to that school's observance day, decided by the Dharmasindhu/Nirnayasindhu rules; every other festival is unaffected. Omit for the canonical date (unchanged). |
Search festivals by name or tag, with their dates in the year (2026-10-15: dates were never returned).
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Optional | Search query, e.g. Bhai Dooj (matches catalogue names and the names in that year's calendar) |
| tag | string | Optional | Filter by tag |
| year | integer | Optional | Year whose dates are returned (default: the current year) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| location_id | integer | Optional | Location for the dates (default 1, New Delhi, or the region's canonical location) |
| region | string | Optional | Regional tradition for the dates: canonical region or ISO 3166-2 code, as on /v1/festivals |
| content | string | Optional | Attach festival content to every festival in the response: katha (or story), significance, vidhi, or all; comma-separate several. Each piece carries provenance and review_status (draft content by TathaAstu). Omit for the unchanged response. |
Get all festivals for a specific year.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Four-digit year. |
| location_id | integer | Optional | Predefined location ID. Defaults to 1 (New Delhi), or to the region's canonical location when region is given. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| region | string | Optional | Regional tradition: canonical region or supported ISO 3166-2 state code (e.g. IN-MH); same rule as /v1/festivals. An unsupported value is ignored and reported in region_resolution.ignored_region. |
| content | string | Optional | Attach festival content to every festival in the response: katha (or story), significance, vidhi, or all; comma-separate several. Each piece carries provenance and review_status (draft content by TathaAstu). Omit for the unchanged response. |
| sampradaya | string | Optional | Ekadashi observance school: smarta or vaishnava. Moves the generic Ekadashi vrat (VRAT_EKADASHI) to that school's observance day, decided by the Dharmasindhu/Nirnayasindhu rules; every other festival is unaffected. Omit for the canonical date (unchanged). |
The śrāddha kālas of one civil day at your coordinates: aparāhṇa (4th of 5 parts of daylight), Kutapa (8th of 15 day-muhūrtas), Gāndharva and Rauhiṇa (7th and 9th), and the kālas in which pārvaṇa is forbidden — prātaḥ, saṅgava and sāyāhna (Dharmasindhu ch. 26).
tithis_in_aparahna lists every tithi present in that day's aparāhṇa with the overlap in minutes, which is what an annual (pratyābdika) śrāddha is decided on. Two tithis appear when one ends inside the aparāhṇa.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | YYYY-MM-DD |
| lat | float | Required | Latitude |
| lon | float | Required | Longitude |
| tz | string | Optional | IANA timezone. Omit to resolve from the coordinates. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
The fifteen tithis of Mahālaya Pakṣa — amānta Bhādrapada Kṛṣṇa Pratipadā to Amāvāsyā — with the civil day each tithi's śrāddha falls on at your coordinates.
The day rule is the Dharmasindhu's: pārvaṇa śrāddha "has to be of Aparaahna Praapti" — the tithi must be present in the aparāhṇa, the fourth of five equal parts of daylight (ch. 26). Every rule in the response carries its verbatim quotation, chapter and URL under sources.
Where the text does not decide, neither does the API. When a tithi is present in the aparāhṇa on two days, or on neither, observance_date is null, decision_status is REQUIRES_SOURCE_CERTIFICATION, and both candidate days are returned with their overlap in minutes. The consulted text gives no pūrva/para ruling for pārvaṇa Mahālaya, and borrowing one would put authority on a rule the source did not state.
Also returned: Kutapa muhūrta per day, Śastrahata Caturdaśī, the Bharaṇī and Maghā-Trayodaśī occasions, the stated phala of each tithi, and the Kanyā-to-Vṛścika extension window. Avidhavā Navamī and Yati Dvādaśī are reported as convention, because the consulted translation does not state them.
Because sunrise and sunset set the aparāhṇa, the result depends on where you are.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Gregorian year |
| lat | float | Required | Latitude. The aparāhṇa needs a sunrise and sunset, so the polar circles are excluded. |
| lon | float | Required | Longitude |
| tz | string | Optional | IANA timezone, e.g. Asia/Kolkata. Omit it to resolve from the coordinates. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Vrat and fasting observances for a date.
This used to read vrat_observance, joined to vrats and panchang_day_core. vrats holds 24 definitions; vrat_observance holds ZERO rows, in the active slot, the standby slot and the DB_NAME schema alike. It was never populated, so the join could not match and the endpoint returned {"vrats": [], "count": 0} for every date ever requested. July 2025 has two Ekadashis, two Pradosh, a Purnima, an Amavasya and a Sankashti; all thirty-one days came back empty, including 6 July, Devshayani Ekadashi, which /v1/festivals reported correctly as VRAT_EKADASHI on the same call.
It now resolves through canonical_festivals, like every other festival-producing endpoint. That was already the stated rule -- "one festival cannot come back on two different dates depending on which endpoint a client happened to call" -- and this endpoint was simply never brought across. Doing so also means it inherits the kala-aware rules, including the Caturthi-nirnaya fix, rather than a table nobody fills.
The {code, category, name} shape callers parsed is preserved; rule_code and confidence are added so a caller can see which rule decided the day.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| location_id | integer | Optional | Location ID |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| sampradaya | string | Optional | Ekadashi observance school: smarta or vaishnava. Moves the generic Ekadashi vrat (VRAT_EKADASHI) to that school's observance day, decided by the Dharmasindhu/Nirnayasindhu rules; every other festival is unaffected. Omit for the canonical date (unchanged). |
Shastric Conditions BUSINESS — Unique in Market
Your competitive differentiator. Complete classical guidance layer based on Dharma Sindhu and Nirnaya Sindhu — not available in any other Panchang API.
Returns all classical conditions affecting the date:
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | YYYY-MM-DD |
| lat | float | Required | Latitude |
| lon | float | Required | Longitude |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Omit it and the zone is resolved from lat/lon, with daylight saving applied. Abbreviations such as IST, EST and PST are rejected. The zone used is reported back in location.timezone. |
Event Suitability
Is today good for a wedding? Can I start a business? Should I buy land? The engine applies the full Shastric hierarchy and returns a verdict with explicit reasons and blocking/supporting factors.
Applies hierarchy: Eclipse → Ekadashi → Amavasya → Purnima → Bhadra → Panchak → Shool → Special Yogas. Returns AVOID / NEUTRAL / GOOD / EXCELLENT rating.
marriage · griha_pravesh · travel · mundan · vehicle_purchase · land_purchase · business_start · education_startOmit
event= to get all events at once.{
"event": "marriage",
"rating": "AVOID",
"score": 18,
"blocking_factors": ["Bhadra active until 15:30", "Panchak — Mritu Panchak"],
"supporting_factors": ["Abhijit Muhurat available 11:52–12:40"],
"hierarchy_applied": ["BHADRA", "PANCHAK"],
"disclaimer": "Guidance is based on classical shastric rules..."
}
Given a date range and event type, returns only the GOOD and EXCELLENT rated dates sorted by score. Ideal for muhurat calendar builders.
Chakra Calculation APIs FREE
Kota, Saptaśalāka, Sarvatobhadra and Śūla chakras as calculation-only endpoints. Every response carries the ruleset and a verification level for each individual rule.
/v1/panchang first, then pass the nakshatra name here."calculation_only": true. The endpoints report which nakshatras or cells are struck; they make no predictive, medical or life-event claims.Params: janma_nakshatra, transit_nakshatra (required); planet, transit_motion, moon_rashi, pala_variant. Zones are cross-verified across two independent sources; Kota Pāla is PROVISIONAL and the variant used is named in the response.
Params: nakshatra (required), sun_nakshatra. Returns the vedha partner and line orientation. Verification: DIAGRAM_VERIFIED_SECONDARY — the 14 pairs were read from a source diagram, not a manuscript.
Params: nakshatra (required), planet, motion, dignity, variant. Directions are OPPOSITE, FORWARD and BACKWARD, named by direction of travel rather than left/right, which no source fixes. Lattice and geometry are VERIFIED; consonant, vowel and tithi placement are DERIVED.
Params: reference_nakshatra (required), transit_nakshatra, variant, include_trident_parts. SUN_4POINT counts from the Sun and is the sourced reading; JANMA_3POINT is retained but unsupported. The variant used is always named in the response.
The 28 nakshatra names these endpoints accept, Abhijit included. Abhijit’s longitude arc is disputed between sources and is deliberately not resolved here.
Panchak, Bhadra & Sankranti
Granular endpoints for checking specific classical conditions.
Returns whether date falls in Panchak (5 inauspicious nakshatras: Dhanistha, Shatabhisha, Purva/Uttara Bhadrapada, Revati). Returns type (Mritu/Agni/Raja/Chora/Roga), severity, avoided activities, and specific remedies.
Bhadra is the most inauspicious Karana. Returns exact start/end time if active, and the activities to avoid (new business, haircut, auspicious ceremonies).
Checks whether the date falls in Ganda Mool nakshatras (Ashwini, Ashlesha, Magha, Jyeshtha, Mula, Revati) — considered inauspicious for birth and ceremonies.
Returns all 12 solar sankranti dates for a year with exact time, rashi transition, significance, and recommended observances.
Calendar APIs
Bulk queries for calendar UI components — month, year, and custom ranges.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Year |
| month | integer | Required | Month (1–12) |
| lat | float | Optional | Latitude for timings |
| lon | float | Optional | Longitude |
| Parameter | Type | Required | Description |
|---|---|---|---|
| start | string | Required | Start date YYYY-MM-DD |
| end | string | Required | End date (max 31 days from start) |
Get detailed calendar view for a single day.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| location_id | integer | Optional | Supported location id. Takes precedence over lat/lon. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| content | string | Optional | Attach festival content to every festival in the response: katha (or story), significance, vidhi, or all; comma-separate several. Each piece carries provenance and review_status (draft content by TathaAstu). Omit for the unchanged response. |
Get Panchang summary for an entire year.
Returns monthly summaries with key dates (Ekadashi, Purnima, Amavasya) and festival_count: the number of festivals /v1/festivals/month returns for that month and location (the same engine and regional rules).
Every summary is by observance, from the festival engine: an Ekadashi, Purnima or Amavasya is counted on the date it is observed, the date /v1/festivals gives (summary_basis: festival_observance).
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Year |
| location_id | integer | Optional | Supported location id. Takes precedence over lat/lon. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| sampradaya | string | Optional | Ekadashi observance school: smarta or vaishnava. Moves the generic Ekadashi vrat (VRAT_EKADASHI) to that school's observance day, decided by the Dharmasindhu/Nirnayasindhu rules; every other festival is unaffected. Omit for the canonical date (unchanged). |
Get Hindu month information (Amanta, Purnimanta, Saura Maasa).
Month names are machine values and stay English in every language. With a non-English lang the names in that language are added as amanta_month_local, purnimanta_month_local and saura_maasa.name_local where a translation exists; a name without one has no _local field. The paksha is returned as the engine reports it.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude. With lon, used when location_id is not given. |
| lon | float | Optional | Longitude. Required together with lat. |
| location_id | integer | Optional | Predefined location ID; takes precedence over lat/lon. |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-MH); its canonical location is used when neither location_id nor lat/lon is given. An unsupported value is ignored. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get Ritu (Hindu season) for a date.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude. With lon, used when location_id is not given. |
| lon | float | Optional | Longitude. Required together with lat. |
| location_id | integer | Optional | Predefined location ID; takes precedence over lat/lon. |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-MH); its canonical location is used when neither location_id nor lat/lon is given. An unsupported value is ignored. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get Samvatsara (Hindu year name) and year details.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude. With lon, used when location_id is not given. |
| lon | float | Optional | Longitude. Required together with lat. |
| location_id | integer | Optional | Predefined location ID; takes precedence over lat/lon. |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-MH); its canonical location is used when neither location_id nor lat/lon is given. An unsupported value is ignored. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Muhurat Finder
Find the most auspicious date-time windows for a specific event type within a date range, ranked by classical shastric score.
New: Muhurat Search (/v1/muhurat/search) returns clock windows with the book, verse and page behind every reason. Start with the guide below.
Muhurat Search guide: /v1/muhurat/search
What it is. Give it an event, a place and a date range (up to 92 days). It returns the dates and clock windows in which the classical rules for that event hold, and every reason carries its reference: the book, chapter and verse, the printed page, the edition, the Sanskrit line, and whether the page image or only the OCR text was read. A rule with no passage behind it is labelled convention and says so. Where the books disagree, the date is allowed, flagged, and the disagreement is shown. It never picks a side silently. Available on the Pro plan, as GET or POST, one API request per call.
How it differs from /v1/muhurat/find
/v1/muhurat/find | /v1/muhurat/search | |
|---|---|---|
| Answer | Whole days with a rating (EXCELLENT, GOOD, NEUTRAL, AVOID) | Dates and clock windows (start, end), with the tithi, nakshatra and lagna running inside each |
| Why | A list of block/support names | Reasons in plain sentences, each with book, verse, page, edition and the Sanskrit line |
| Events | 8, rated by the engine's general rules | 9 events plus general; each has its own classical rule set |
| Your birth details | No | Chandra-bala and Tara-bala from birth nakshatra/rashi or birth date, time and place |
| Travel direction | Bars the whole day | Blocks a direction (disha-shula), as Muhūrta Cintāmaṇi 11.10 and 11.111 say |
| Exclusions | Not listed | excluded_periods: Chaturmasya, Kharmas, Mina, Adhika masa, Guru/Shukra asta, with the reason and verse |
| Languages | English | All 56 registry languages through lang |
| Honesty | Ratings | unsupported and rules_not_evaluated say what it does not do |
Supported events
event | Basis | What the books give |
|---|---|---|
vivaha | cited | Months by the Sun's sign, Hari-shayana, 11 nakshatras, tithis, weekdays, Chandra-bala, Guru/Shukra asta. Aliases: marriage, vivah |
griha_pravesh | cited | Uttarayana, months, mridu + dhruva nakshatras, weekdays, tithis (by door direction), fixed/dual lagna |
travel | cited | Whole-day tithi bars, Tara-bala, good nakshatras, and the direction-shula as a filter. Alias: yatra |
namakarana | cited | 11th/12th day, weekdays, tithis, forenoon. Alias: namkaran |
mundan | cited | Age, uttarayana, tithis, weekdays, 12 nakshatras, Tara-bala. Alias: chaula |
vidyarambha | cited | 5th year, uttarayana, tithis, weekdays, nakshatras, non-movable lagna. Alias: education |
vehicle_purchase | cited_by_analogy | The books give rules for buying goods and horses and for mounting vehicles; none for a motor vehicle. Each reason says so |
vyapara_arambha | cited_by_analogy | Shop-opening and trade rules. Alias: business |
property | unsupported | No passage on the date of buying land or a house was found. include_convention=true returns popular-practice dates, labelled convention |
general | cited | Only the general-defect list (yoga, Bhadra, Adhika masa) that the book applies to every act |
Parameters
| Parameter | Meaning |
|---|---|
event, start, end | Required. start/end are YYYY-MM-DD, at most 92 days apart (1700-3100) |
location_id or lat+lon or region | The place (see /v1/locations). The windows are computed for it, in the civil clock of tz (IANA) or the region default |
lang | Any code from GET /v1/i18n/languages. Adds *_local beside the English; English fields never change |
birth_nakshatra, birth_rashi | Your birth Moon: a name or a number (1-27, 1-12). Switches on Chandra-bala and Tara-bala |
birth_date, birth_time, birth_tz | Instead of the above: the Moon is computed from the birth moment. birth_tz defaults to the search timezone |
partner_birth_* | Marriage: the second person (same fields). Both must pass |
direction | Travel: N, E, S or W. A date whose shula blocks that direction is not offered |
door_facing, house_type | House entry: east/south/west/north; new (default) or old |
child_birth_date, first_born | Naming (the 11th/12th day), tonsure, learning |
avoid | rahu_kaal, yamaganda, gulika (comma-separated): cut out of every window |
profile | Marriage: panchang (default; as printed panchangs do: tithi and weekday advisory, each listed yoga barred for its whole length; convention) or classical (every cited rule is a hard bar). Other events have one profile |
include_convention, include_rejected, strictness, detail | include_convention: also search events with no sourced rule. include_rejected: list the dates checked and the rule that blocked each. strictness=strict: lagna-placement cautions become binding. detail=compact: drop the Sanskrit quote and edition (60-70% smaller) |
Examples: marriage
curl -s "https://api.tathaastuapi.com/v1/muhurat/search?event=vivaha&start=2027-01-14&end=2027-01-31&location_id=1" \ -H "X-API-Key: YOUR_API_KEY"
const r = await fetch(
"https://api.tathaastuapi.com/v1/muhurat/search?event=vivaha&start=2027-01-14&end=2027-01-31&location_id=1",
{ headers: { "X-API-Key": "YOUR_API_KEY" } }
);
const data = await r.json();
for (const d of data.dates) {
const w = d.windows[0];
console.log(d.date, d.weekday, w.start, "to", w.end, d.quality);
}A real response (Delhi, 11 dates found in 18 days), shortened:
{
"event": "vivaha",
"event_label": "Marriage (Vivāha)",
"start": "2027-01-14",
"end": "2027-01-31",
"basis": "cited",
"profile": "panchang",
"dates_checked": 18,
"dates_with_windows": 11,
"location": {
"lat": 28.6139,
"lon": 77.209,
"location_id": 1,
"region": "NORTH_INDIA",
"timezone_offset_hours_at_start": 5.5
},
"dates": [
{
"date": "2027-01-15",
"weekday": "Friday",
"sunrise": "2027-01-15T07:14:47+05:30",
"sunset": "2027-01-15T17:46:15+05:30",
"tithi_at_sunrise": {
"number": 7,
"paksha": "Shukla",
"name": "Saptami"
},
"nakshatra_at_sunrise": "Revati",
"lunar_month": "Pausha",
"lunar_month_adhika": false,
"quality": "recommended",
"windows": [
{
"start": "2027-01-15T07:14:47+05:30",
"end": "2027-01-15T14:14:09+05:30",
"duration_minutes": 419,
"states": [
{
"from": "2027-01-15T07:14:47+05:30",
"to": "2027-01-15T14:14:09+05:30",
"tithi": 7,
"paksha": "Shukla",
"tithi_name": "Saptami",
"nakshatra": "Revati"
}
],
"reasons": [
{
"key": "muhurat.reason.vivaha.hari_shayana.pass",
"rule": "vivaha.hari_shayana",
"text": "It is outside the Hari-śayana (Chāturmāsya) period.",
"basis": "cited",
"status": "pass",
"values": {},
"source": {
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Vivāha-prakaraṇa (6), Pīyūṣadhārā",
"verse": "6.13",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "316",
"verification": "image-verified (leaf 369)"
},
"quote_original": "आषाढशुक्लदशम्यनन्तरं हरिशयने च सति विवाहो न स्यात्",
"also_cited": [
{
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Vivāha-prakaraṇa (6), Pīyūṣadhārā",
"verse": "6.13",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "316",
"verification": "image-verified (leaf 369)",
"quote_original": "तुलायां कार्तिको देवोत्थानादुत्तरः, वृश्चिके मार्गशीर्ष शुभ"
}
],
"coverage": "whole_window"
},
{
"key": "muhurat.reason.vivaha.nakshatra.pass",
"rule": "vivaha.nakshatra",
"text": "The Moon is in one of the nakshatras approved by all authorities for marriage.",
"basis": "cited",
"status": "pass",
"values": {
"nakshatra": "Revati"
},
"source": {
"work": "Dharmasindhu(sāra)",
"author": "Kāśīnātha Upādhyāya",
"commentary": "",
"chapter": "Tṛtīya-pariccheda, vivāha-nirṇaya §75",
"verse": "III §75",
"edition": "Nirṇaya Sāgara Press, Bombay, 1888",
"page": "181",
"verification": "image-verified"
},
"quote_original": "रोहिणीमृगमघास्तिस्त्रउत्तराहस्तस्वातीमूलानुराधारेवत्यःसर्वसंमतनक्षत्राणि हरदत्तमतेचित्राश्रवणधनिष्ठाश्विन्य इत्यधिकानि चत्वारि",
"also_cited": [
{
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Vivāha-prakaraṇa (6)",
"verse": "6.55",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "375",
"verification": "image-verified (leaf 428)",
"quote_original": "निर्वेधैः शशिकरमूलमैत्र्य-ब्राह्मान्त्योत्तरपवनैः शुभो विवाहः । रिक्तामारहिततिथौ शुभेऽह्नि"
}
],
"note": "Magha is in Dharmasindhu's list and the Pīyūṣadhārā quotes it, but the printed Muhūrta Cintāmaṇi verse in this edition omits it; the 1907 edition appears to include it.",
"coverage": "whole_window"
}
],
"general_checks": [
{
"key": "muhurat.reason.common.adhika.pass",
"rule": "common.adhika",
"text": "It is not an Adhika (extra) month.",
"basis": "cited",
"status": "pass",
"values": {
"month": "Pausha"
},
"source": {
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Śubhāśubha-prakaraṇa (1)",
"verse": "1.46-47",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "52",
"verification": "image-verified (leaf 105)"
},
"quote_original": "वाप्यारामतडागकूपभवनारम्भप्रतिष्ठे व्रतारम्भोत्सर्गवधूप्रवेशनमहादानानि … दीक्षामौञ्जिविवाहमुण्डनमपूर्वं देवतीर्थेक्षणं … गमम् । चातुर्मास्यसमावर्तौ श्रवणयोर्वेधं परीक्षां त्यजेद्वृद्धत्वास्तशिशुत्व इज्यसितयोर्न्यूनाधिमासे तथा",
"coverage": "whole_window"
}
],
"cautions": [],
"bad_periods_inside": [
{
"key": "rahu_kaal",
"name": "Rahu Kāla",
"start": "2027-01-15T11:11:35+05:30",
"end": "2027-01-15T12:30:31+05:30",
"basis": "convention",
"note": "Popular panchang practice; Rāhu Kāla, Yamagaṇḍa and Gulika are not found in the Muhūrta Cintāmaṇi, Dharmasindhu or Nirṇayasindhu editions read."
}
],
"quality": "recommended"
}
]
},
"..."
],
"excluded_periods": "[] (none in this range)",
"unsupported": [],
"rules_not_evaluated": [
{
"id": "vivaha.lagna_rules",
"text_en": "Marriage-lagna rules: kartarī, aṣṭama-lagna, lagna-gaṇḍānta, andha/badhira/paṅgu lagnas, Moon and malefic placements (MC 6.43-6.48, 6.81-6.91)",
"reason": "Windows are the hours in which the kāla rules (tithi, nakshatra, weekday, month, bala, yoga, karaṇa) hold. The choice of lagna inside a window is not made for you; the lagna sequence is not returned for marriage."
},
"..."
]
}GET or POST
Both run the same search and return the same response. Use GET for a plain query. Use POST when you send birth details, so they travel in the JSON body and stay out of URLs, access logs and browser history. The POST body takes exactly the parameters above, with the same names. If lang is given in both the query string and the body, the query wins.
Each date is a Panchang day: sunrise to sunrise
A date is the Panchang day that begins at that date’s local sunrise and ends at the next sunrise. For marriage and travel the windows can therefore run past midnight: in the example below the window of 14 February ends at 06:59 on 15 February. Windows are ISO 8601 times with the place’s UTC offset, so never re-attach a date to them. The early hours of a civil date (before sunrise) belong to the previous Panchang day. House entry, vehicle, business, naming, tonsure and learning use the daylight part of the day.
Examples: marriage with partner birth details, in Hindi (POST)
curl -s -X POST "https://api.tathaastuapi.com/v1/muhurat/search" \
-H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" \
-d '{"event":"vivaha","start":"2027-02-01","end":"2027-02-14","location_id":1,"lang":"hi",
"birth_date":"1996-05-14","birth_time":"06:30","birth_tz":"Asia/Kolkata",
"partner_birth_nakshatra":"Hasta","partner_birth_rashi":"Kanya"}'const r = await fetch("https://api.tathaastuapi.com/v1/muhurat/search", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
event: "vivaha", start: "2027-02-01", end: "2027-02-14", location_id: 1, lang: "hi",
birth_date: "1996-05-14", birth_time: "06:30", birth_tz: "Asia/Kolkata", // first person: the Moon is computed from this
partner_birth_nakshatra: "Hasta", partner_birth_rashi: "Kanya" // second person: given directly
})
});
const data = await r.json();
console.log(data.personal.persons); // the Moon used for each person
for (const d of data.dates) console.log(d.date, d.windows[0].start, d.windows[0].end);Both people must pass Chandra-bala; a house that passes only by the extra Shukla-paksha rule is returned as a variant caution, not hidden. A real response (Delhi, 1-14 February 2027), shortened:
{
"event": "vivaha",
"language": "hi",
"profile": "panchang",
"personal": {
"available": true,
"persons": [
{
"nakshatra": "Revati",
"rashi": "Meena",
"source": "birth_date_time",
"nakshatra_local": "रेवती",
"rashi_local": "मीन"
},
{
"nakshatra": "Hasta",
"rashi": "Kanya",
"source": "birth_nakshatra_rashi",
"nakshatra_local": "हस्त",
"rashi_local": "कन्या"
}
],
"notes": []
},
"dates_checked": 14,
"dates_with_windows": 1,
"dates": [
{
"date": "2027-02-14",
"weekday": "Sunday",
"sunrise": "2027-02-14T07:00:28+05:30",
"sunset": "2027-02-14T18:10:32+05:30",
"tithi_at_sunrise": {
"number": 8,
"paksha": "Shukla",
"name": "Ashtami",
"name_local": "अष्टमी",
"paksha_local": "शुक्ल"
},
"nakshatra_at_sunrise": "Krittika",
"nakshatra_at_sunrise_local": "कृत्तिका",
"lunar_month": "Magha",
"lunar_month_adhika": false,
"lunar_month_local": "माघ",
"quality": "acceptable",
"windows": [
{
"start": "2027-02-15T04:47:02+05:30",
"end": "2027-02-15T06:59:39+05:30",
"duration_minutes": 133,
"states": [
{
"from": "2027-02-15T04:47:02+05:30",
"to": "2027-02-15T06:59:39+05:30",
"tithi": 9,
"paksha": "Shukla",
"tithi_name": "Navami",
"nakshatra": "Rohini",
"tithi_name_local": "नवमी",
"paksha_local": "शुक्ल",
"nakshatra_local": "रोहिणी"
}
],
"reasons": [
{
"key": "muhurat.reason.vivaha.nakshatra.pass",
"rule": "vivaha.nakshatra",
"text": "The Moon is in one of the nakshatras approved by all authorities for marriage.",
"basis": "cited",
"status": "pass",
"values": {
"nakshatra": "Rohini",
"nakshatra_local": "रोहिणी"
},
"text_local": "चन्द्रमा विवाह के लिए सर्वसम्मत नक्षत्र में है।",
"source": {
"work": "Dharmasindhu(sāra)",
"author": "Kāśīnātha Upādhyāya",
"commentary": "",
"chapter": "Tṛtīya-pariccheda, vivāha-nirṇaya §75",
"verse": "III §75",
"edition": "Nirṇaya Sāgara Press, Bombay, 1888",
"page": "181",
"verification": "image-verified"
},
"quote_original": "रोहिणीमृगमघास्तिस्त्रउत्तराहस्तस्वातीमूलानुराधारेवत्यःसर्वसंमतनक्षत्राणि हरदत्तमतेचित्राश्रवणधनिष्ठाश्विन्य इत्यधिकानि चत्वारि",
"note": "Magha is in Dharmasindhu's list and the Pīyūṣadhārā quotes it, but the printed Muhūrta Cintāmaṇi verse in this edition omits it; the 1907 edition appears to include it.",
"note_local": "मघा धर्मसिन्धु की सूची में है और पीयूषधारा उसे उद्धृत करती है, पर इस संस्करण के छपे मुहूर्तचिन्तामणि श्लोक में वह नहीं है; १९०७ का संस्करण उसे सम्मिलित करता प्रतीत होता है।",
"coverage": "whole_window"
}
],
"general_checks": [
"..."
],
"cautions": [
{
"key": "muhurat.reason.vivaha.tithi.variant",
"rule": "vivaha.tithi",
"text": "Kṛṣṇa 11th–13th: Dharmasindhu counts it middling; Muhūrta Cintāmaṇi stops at the 10th.",
"basis": "cited",
"status": "variant",
"values": {
"tithi": 9,
"paksha": "Shukla",
"paksha_local": "शुक्ल"
},
"text_local": "कृष्ण ११–१३: धर्मसिन्धु इसे मध्यम मानता है; मुहूर्तचिन्तामणि दशमी पर रुकता है।",
"source": {
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Vivāha-prakaraṇa (6)",
"verse": "6.55",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "375",
"verification": "image-verified (leaf 428)"
},
"quote_original": "निर्वेधैः शशिकरमूलमैत्र्य-ब्राह्मान्त्योत्तरपवनैः शुभो विवाहः । रिक्तामारहिततिथौ शुभेऽह्नि",
"also_cited": [
{
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Vivāha-prakaraṇa (6), Pīyūṣadhārā",
"verse": "6.55",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "376",
"verification": "image-verified (leaf 429)",
"quote_original": "शुक्लद्वितीयादित एव कृष्णे पक्षे दशम्यन्तर्गताः प्रशस्ताः । तास्वष्टमीस्कन्दगणेशदुर्गाचतुर्दशी चापि तिथिर्विवर्ज्या"
},
{
"work": "Dharmasindhu(sāra)",
"author": "Kāśīnātha Upādhyāya",
"commentary": "",
"chapter": "Tṛtīya-pariccheda, vivāha-nirṇaya §75",
"verse": "III §75",
"edition": "Nirṇaya Sāgara Press, Bombay, 1888",
"page": "181",
"verification": "image-verified",
"quote_original": "अमावास्यानिषिद्धा रिक्ताष्टमीषष्ठ्योपफलाः अन्यास्तिथयोबहुफलाः शुक्लपक्षःश्रेष्ठः कृष्णश्चयोदशीपर्यन्तोमध्यमः"
}
],
"coverage": "whole_window"
},
{
"key": "muhurat.reason.vivaha.chandra_bala.variant",
"rule": "vivaha.chandra_bala",
"text": "The Moon is in one of the extra Shukla-paksha houses from the birth rashi (counted good by the text).",
"basis": "cited",
"status": "variant",
"values": {
"person1": {
"house": 3,
"moon_sign": "Vrishabha",
"moon_sign_local": "वृषभ"
},
"person2": {
"house": 9,
"moon_sign": "Vrishabha",
"moon_sign_local": "वृषभ"
}
},
"text_local": "चन्द्रमा जन्मराशि से शुक्लपक्ष के अतिरिक्त शुभ भाव में है (ग्रन्थ इसे शुभ मानता है)।",
"source": {
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Vivāha-prakaraṇa (6)",
"verse": "6.12",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "314",
"verification": "image-verified (leaf 367)"
},
"quote_original": "गुरुशुद्धिवशेन कन्यकानां समवर्षेषु षडब्दकोपरिष्टात् । रविशुद्धिवशाच्छुभो वराणामुभयोश्चन्द्रविशुद्धितो विवाहः",
"also_cited": [
{
"work": "Dharmasindhu(sāra)",
"author": "Kāśīnātha Upādhyāya",
"commentary": "",
"chapter": "Tṛtīya-pariccheda, vivāha-nirṇaya §75",
"verse": "III §75",
"edition": "Nirṇaya Sāgara Press, Bombay, 1888",
"page": "181",
"verification": "image-verified",
"quote_original": "चन्द्रताराबलंकन्यावरयोरुभयोरपि । अन्यतरस्यचन्द्रबलाभावेरजतादिदानंकार्यम्"
},
{
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Gocara-prakaraṇa (4)",
"verse": "4.1-4",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "193",
"verification": "image-verified (leaf 246)",
"quote_original": "चन्द्रोऽम्बराब्धौ गुणनन्दयोश्च लाभाष्टमे चाद्यशरे रसान्त्ये नागद्वये … क्रमाच्छुभो विद्ध इति ग्रहः स्यात् पितुः सुतस्यात्र न वेधमाहुः । दुष्टोऽपि खेटो विपरीतवेधाच्छुभो द्विकोणे शुभदः सितेऽजः"
}
],
"coverage": "whole_window"
}
],
"bad_periods_inside": [],
"quality": "acceptable"
}
],
"weekday_local": "रविवार"
}
]
}Examples: vehicle purchase with your birth details, in Hindi
curl -s "https://api.tathaastuapi.com/v1/muhurat/search?event=vehicle_purchase&start=2026-12-01&end=2026-12-14&location_id=1&lang=hi&birth_nakshatra=Rohini&birth_rashi=Vrishabha&avoid=rahu_kaal" \ -H "X-API-Key: YOUR_API_KEY"
const r = await fetch("https://api.tathaastuapi.com/v1/muhurat/search", {
method: "POST",
headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
event: "vehicle_purchase", start: "2026-12-01", end: "2026-12-14", location_id: 1,
birth_date: "1996-05-14", birth_time: "06:30", birth_tz: "Asia/Kolkata",
lang: "hi", avoid: "rahu_kaal"
})
});
const data = await r.json();The Hindi sentence sits beside the English one as text_local; the book name, verse and Sanskrit line are never translated. A real marriage response with lang=hi and birth Moon in Rohini/Vrishabha, shortened:
{
"event": "vivaha",
"language": "hi",
"event_label": "Marriage (Vivāha)",
"event_label_local": "विवाह",
"labels_local": {
"dates": "तिथियाँ",
"windows": "समय-खण्ड",
"reasons": "यह क्यों उपयुक्त है",
"cautions": "सावधानियाँ"
},
"personal": {
"available": true,
"persons": [
{
"nakshatra": "Rohini",
"rashi": "Vrishabha",
"source": "birth_nakshatra_rashi",
"nakshatra_local": "रोहिणी",
"rashi_local": "वृषभ"
}
],
"notes": []
},
"dates": [
{
"date": "2027-01-14",
"weekday": "Thursday",
"sunrise": "2027-01-14T07:14:52+05:30",
"sunset": "2027-01-14T17:45:26+05:30",
"tithi_at_sunrise": {
"number": 6,
"paksha": "Shukla",
"name": "Shashthi",
"name_local": "षष्ठी",
"paksha_local": "शुक्ल"
},
"nakshatra_at_sunrise": "Uttara Bhadrapada",
"nakshatra_at_sunrise_local": "उत्तर भाद्रपद",
"lunar_month": "Pausha",
"lunar_month_adhika": false,
"lunar_month_local": "पौष",
"quality": "recommended",
"windows": [
{
"start": "2027-01-14T21:10:29+05:30",
"end": "2027-01-15T07:14:47+05:30",
"duration_minutes": 604,
"states": [
{
"from": "2027-01-14T21:10:29+05:30",
"to": "2027-01-14T23:20:29+05:30",
"tithi": 7,
"paksha": "Shukla",
"tithi_name": "Saptami",
"nakshatra": "Uttara Bhadrapada",
"tithi_name_local": "सप्तमी",
"paksha_local": "शुक्ल",
"nakshatra_local": "उत्तर भाद्रपद"
}
],
"reasons": [
{
"key": "muhurat.reason.vivaha.sun_sign.pass",
"rule": "vivaha.sun_sign",
"text": "The Sun is in a sign in which the text allows marriage.",
"basis": "cited",
"status": "pass",
"values": {
"sun_sign": "Makara",
"sun_sign_local": "मकर"
},
"text_local": "सूर्य ऐसी राशि में है जिसमें ग्रन्थ विवाह की अनुमति देता है।",
"source": {
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Vivāha-prakaraṇa (6)",
"verse": "6.13",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "316",
"verification": "image-verified (leaf 369)"
},
"quote_original": "मिथुनकुम्भमृगालिवृषाजगे मिथुनगेऽपि रवौ त्रिलवे शुचेः । अलिमृगाजगते करपीडनं भवति कार्तिकपौषमधुष्वपि",
"coverage": "whole_window"
}
],
"general_checks": [
"..."
],
"cautions": [],
"bad_periods_inside": [],
"quality": "recommended"
}
],
"weekday_local": "गुरुवार"
},
"..."
]
}A vehicle search (cited by analogy) returned 5 dates for 1-14 December 2026; its applicability_note reads: “Muhūrta Cintāmaṇi gives rules for goods, animals and shops, not for this act itself; they are applied here by analogy and each reason says so.”
Examples: travel in a direction
curl -s "https://api.tathaastuapi.com/v1/muhurat/search?event=travel&start=2026-11-25&end=2026-11-30&location_id=1&direction=north" \ -H "X-API-Key: YOUR_API_KEY"
const url = new URL("https://api.tathaastuapi.com/v1/muhurat/search");
url.search = new URLSearchParams({
event: "travel", start: "2026-11-25", end: "2026-11-30", location_id: "1", direction: "north"
});
const data = await (await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } })).json();
// each window.states[] says which directions are blocked and which are open for that stretch
console.log(data.dates[0].windows[0].states[0].open_directions);The day is not blocked; the direction is. The texts name the weekday (Mon/Sat East, Thu South, Sun/Fri West, Tue/Wed North) and four nakshatras, and the commentary says the bar is on that direction “not everywhere”. A real response, shortened:
{
"event": "travel",
"inputs_used": {
"direction": "NORTH",
"house_type": "new"
},
"personal": {
"available": false,
"how": "Pass birth_nakshatra and birth_rashi, or birth_date + birth_time (+ birth_tz), to apply Chandra-bala and Tara-bala. For marriage a second person can be given as partner_birth_*."
},
"dates": [
{
"date": "2026-11-26",
"weekday": "Thursday",
"sunrise": "2026-11-26T06:52:02+05:30",
"sunset": "2026-11-26T17:24:30+05:30",
"tithi_at_sunrise": {
"number": 2,
"paksha": "Krishna",
"name": "Dwitiya"
},
"nakshatra_at_sunrise": "Mrigashira",
"lunar_month": "Kartika",
"lunar_month_adhika": false,
"quality": "good",
"windows": [
{
"start": "2026-11-26T06:52:02+05:30",
"end": "2026-11-26T12:16:44+05:30",
"duration_minutes": 325,
"states": [
{
"from": "2026-11-26T06:52:02+05:30",
"to": "2026-11-26T08:32:02+05:30",
"tithi": 2,
"paksha": "Krishna",
"tithi_name": "Dwitiya",
"nakshatra": "Mrigashira",
"lagna": "Vrishchika",
"blocked_directions": {
"South": [
"vara_shula"
]
},
"open_directions": [
"East",
"West",
"North"
]
},
{
"from": "2026-11-26T08:32:02+05:30",
"to": "2026-11-26T10:42:02+05:30",
"tithi": 2,
"paksha": "Krishna",
"tithi_name": "Dwitiya",
"nakshatra": "Mrigashira",
"lagna": "Dhanu",
"blocked_directions": {
"South": [
"vara_shula"
]
},
"open_directions": [
"East",
"West",
"North"
]
}
],
"reasons": [
{
"key": "muhurat.reason.travel.tithi.pass",
"rule": "travel.tithi",
"text": "The tithi is not one of those barred for starting a journey.",
"basis": "cited",
"status": "pass",
"values": {
"tithi": 2,
"paksha": "Krishna"
},
"source": {
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Yātrā-prakaraṇa (11)",
"verse": "11.9",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "452",
"verification": "image-verified (leaf 505)"
},
"quote_original": "न षष्ठी न च द्वादशी नाष्टमी नो सिताद्या तिथिः पूर्णिमाऽमा न रिक्ता … यात्रा प्रशस्ता",
"coverage": "whole_window"
},
{
"key": "muhurat.reason.travel.direction.pass",
"rule": "travel.direction",
"text": "Travelling in this direction is not blocked by the weekday's or nakshatra's direction-śūla.",
"basis": "cited",
"status": "pass",
"values": {
"direction": "North"
},
"source": {
"work": "Muhūrta Cintāmaṇi",
"author": "Rāma Daivajña",
"commentary": "Pīyūṣadhārā (Govinda); Pītāmbarā (Kedāradatta Joshī)",
"chapter": "Yātrā-prakaraṇa (11)",
"verse": "11.10",
"edition": "DPB Publications, Delhi, 3rd printing (archive.org: muhurta-chintamani-kedar-datt-joshi)",
"page": "454",
"verification": "image-verified (leaf 507)"
},
"quote_original": "न पूर्वदिशि शक्रभे … न पाशिदिशि धातृभे … न सौम्यककुभि व्रजेत् … विधुसौरिवारे … गुरौ यमदिशि … इनदैत्येज्ययोः … कुजबुधे",
"note": "The commentary says the direction-śūla is a bar on that direction, not on the whole day (MC 11.111).",
"coverage": "whole_window"
}
],
"general_checks": [
"..."
],
"cautions": [],
"bad_periods_inside": [
{
"key": "yamaganda",
"name": "Yamagaṇḍa",
"start": "2026-11-26T06:52:02+05:30",
"end": "2026-11-26T08:11:06+05:30",
"basis": "convention",
"note": "Popular panchang practice; Rāhu Kāla, Yamagaṇḍa and Gulika are not found in the Muhūrta Cintāmaṇi, Dharmasindhu or Nirṇayasindhu editions read."
}
],
"quality": "good"
}
]
},
"..."
]
}Reading the response
| Field | What it holds |
|---|---|
event, event_label, basis | The event as resolved from your alias; basis is cited or cited_by_analogy. applicability_note explains an analogy |
profile, profile_note | Which rule set ran (marriage: panchang or classical) and what that means |
dates[] | One entry per Panchang day (sunrise to sunrise) that has at least one window: date, weekday, sunrise, sunset, tithi_at_sunrise (number, paksha, name), nakshatra_at_sunrise, lunar_month (Amanta) and lunar_month_adhika, quality (the best of its windows) |
windows[] | Clock windows in which every hard rule holds: start, end (ISO 8601 with offset), duration_minutes. trimmed_from appears when avoid cut the window |
windows[].states[] | What runs inside the window, stretch by stretch: tithi, paksha, nakshatra, and lagna for events that use it. For travel also blocked_directions (direction to the reasons: vara_shula, nakshatra_shula, vasu_panchaka) and open_directions |
windows[].quality | recommended / good / acceptable: how many of the cited preferences are met and whether any variant or caution applies. A summary, not a classical grading |
windows[].reasons[] | Why it works. key (stable id), text, status (pass), basis, values (what was measured), source {work, author, commentary, chapter, verse, edition, page, verification}, quote_original (the Sanskrit line), also_cited[], note, coverage (whole_window). A convention reason has source: null and a convention_note |
windows[].general_checks[] | The general defects of the books (Vyatipata/Vaidhriti, Bhadra, Adhika masa, Guru/Shukra asta...) that were checked and passed. Same shape as reasons |
windows[].cautions[] | Allowed but flagged: status: variant means a source allows it and another does not (both are shown); coverage says whole or part of the window |
windows[].bad_periods_inside[] | Rahu Kala, Yamaganda and Gulika Kala that fall inside the window, labelled convention (they are not in the books read). Pass avoid= to cut them out |
personal | available, the Moon taken from your birth (persons[]: nakshatra, rashi, source) and notes about missing fields. When it is on, Chandra-bala/Tara-bala appear as reasons or cautions with their values (house, tara) |
excluded_periods[] | Whole stretches the rules exclude, with start_date, end_date, days and the full reason (Chaturmasya, Kharmas, Mina, Adhika masa, Guru/Shukra asta) |
unsupported[] | Events or features with no sourced rule (property; choghadiya is listed under rules_not_evaluated) |
rules_not_evaluated[] | What the books state but this release does not apply, and why (for example the marriage-lagna rules, nakshatra vedha, war-journey schemes) |
sources[], disclaimer | The editions used and the standing notice |
*_local, labels_local, labels | With lang: text_local beside each sentence; event_label_local; labels_local for headings (labels are the English keys); nakshatra_local, weekday_local, paksha_local, name_local for names. quote_original and book names stay in the source language. A sentence with no translation row has no _local; English is never substituted |
Showing it in an app
- Shubh Muhurat list. One row per
dates[]entry: the date and weekday, the best window as “start to end” in the place’s clock, a badge fromquality, and the nakshatra/tithi fromstates[0]. Offer the other windows of the day on tap. Sort by date, not by quality. - The “why” sheet. On tap, show each
reasons[]sentence (text_localif present, elsetext) with its source line — “Muhūrta Cintāmaṇi 6.55, p.375” — and thequote_originalbehind a “show the verse” toggle. Showcautions[]in amber with the same source line. Show abasis: conventionreason with a visibly different style and itsconvention_note. - Travel. Render
open_directionsandblocked_directionsas four compass chips for the chosen stretch; if the user picked a direction, passdirectionand the list already excludes the dates where it is blocked. - Excluded periods. Draw
excluded_periodsas grey bands on the calendar with the reason sentence on tap (“Hari-shayana: marriage barred until Devotthana”), so an empty month explains itself. - Personal. Ask for the birth nakshatra and rashi once, store them, and send them on every call. If
personal.availableis false show a one-line prompt usingpersonal.how. - Honesty line. Show
disclaimerand, forbasis: cited_by_analogy, theapplicability_note. Listrules_not_evaluatedunder “What this does not check” so users do not assume more than was done. - Payload size. A 92-day house-entry search is about 800 kB because every window carries its citations (252 kB with
detail=compact; a 2.5-week marriage search is 190 kB full and 77 kB compact). Usedetail=compactfor the list screen and fetch the full response only for the date the user opens.
Errors, plan and limits
| Case | Response |
|---|---|
| No or wrong key | 401 authentication_required |
| Plan below Pro | 402 plan_upgrade_required with required_plan: pro and an upgrade_url (the endpoint is Pro, like /v1/muhurat/find) |
| Unknown event | 422 unsupported_event, listing the valid names |
| Range over 92 days, end before start, bad date | 422 invalid_request |
| Bad birth nakshatra/rashi/time, direction, door_facing, avoid | 422 with the field named (invalid_birth_nakshatra...) |
Unknown lang | 400 unsupported_language with the supported codes |
| Rate limit | 429 as for every endpoint; the X-RateLimit-* headers show your plan and use |
Billing. One API request per call, whatever the range (up to 92 days). Limits: a range of 92 days; dates between 1700 and 3100; a 92-day search takes about half a second. Marriage defaults to profile=panchang; use profile=classical to see every cited rule applied as a bar.
Not a prediction. The windows are the hours in which the books’ kala rules hold. Choosing a lagna inside a marriage window, family facts (first-born, mourning) and many lagna-placement rules are not evaluated, and rules_not_evaluated says which. Translations in other languages are machine translations pending native review.
| Parameter | Type | Required | Description |
|---|---|---|---|
| event | string | Required | marriage, griha_pravesh, business_start, vehicle_purchase… |
| start_date | string | Required | Search range start YYYY-MM-DD |
| end_date | string | Required | Search range end YYYY-MM-DD (max 90 days) |
| lat | float | Required | Location latitude |
| lon | float | Required | Location longitude |
| min_score | integer | Optional | Minimum score 0–100 (default: 60) |
GET /v1/timings — all auspicious and inauspicious periods for a date. Equivalent to /v1/muhurat/day. Use this for a complete timing overview.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude (or pass region) |
| lon | float | Optional | Longitude (or pass region) |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-MH); fills coords when lat/lon omitted. Unsupported values return 422. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Omit to use the region default (+05:30 / +05:45). |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Dates and clock windows in which the classical rules for an event hold, for a place and a date range (at most 92 days), with the reference for every reason.
Each reason names the book, chapter and verse, the printed page, the edition, the Sanskrit line, and whether the page image or only the OCR text was read. A rule with no passage behind it is labelled convention; where the books disagree the date is allowed, flagged and the disagreement shown.
Events: vivaha (marriage), griha_pravesh, travel, namakarana, mundan, vidyarambha (cited); vehicle_purchase and vyapara_arambha (cited by analogy: the books give rules for goods, animals and shops); property (unsupported, include_convention=true for popular practice); general.
Also returned: excluded_periods (Chaturmasya, Kharmas, Mina, Adhika masa, Guru/Shukra asta), unsupported, rules_not_evaluated, a personal block when birth details are given (Chandra-bala, Tara-bala), the travel direction filter (blocked_directions / open_directions per stretch), lang for any of the 56 languages (*_local beside the English).
Marriage defaults to profile=panchang (tithi and weekday advisory, each listed yoga barred for its whole length, as printed panchangs do); profile=classical applies every cited rule as a hard bar. Pro plan; one request per call.
Full usage guide with curl and JavaScript examples, every response field and how to show it in an app: https://docs.tathaastuapi.com/#muhurat-search-guide
| Parameter | Type | Required | Description |
|---|---|---|---|
| event | string | Required | vivaha, griha_pravesh, vehicle_purchase, travel, namakarana, mundan, vidyarambha, vyapara_arambha, property, general (common aliases accepted: marriage, namkaran, business, education ...) |
| start | string | Required | Start date YYYY-MM-DD |
| end | string | Required | End date YYYY-MM-DD (at most 92 days from start) |
| location_id | integer | Optional | Predefined location (see /v1/locations); or lat/lon; or region |
| lat | float | Optional | Latitude in decimal degrees. Provide with lon, or use location_id. |
| lon | float | Optional | Longitude in decimal degrees. Provide with lat, or use location_id. |
| region | string | Optional | Canonical region or ISO 3166-2 state code |
| tz | string | Optional | IANA timezone for the civil clock |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| birth_date | string | Optional | YYYY-MM-DD, for Chandra-bala / Tara-bala |
| birth_time | string | Optional | HH:MM local time of birth |
| birth_tz | string | Optional | IANA timezone of the birth place (default: the search timezone) |
| birth_nakshatra | string | Optional | Name or 1-27, instead of birth_date/time |
| birth_rashi | string | Optional | Name or 1-12, instead of birth_date/time |
| partner_birth_date | string | Optional | partner_birth_date parameter. |
| partner_birth_time | string | Optional | partner_birth_time parameter. |
| partner_birth_tz | string | Optional | partner_birth_tz parameter. |
| partner_birth_nakshatra | string | Optional | partner_birth_nakshatra parameter. |
| partner_birth_rashi | string | Optional | partner_birth_rashi parameter. |
| direction | string | Optional | Travel: the direction of the journey (N, E, S, W; inter-cardinals are accepted but the texts speak of the four) |
| door_facing | string | Optional | Griha pravesh: the direction the main door faces |
| house_type | string | Optional | Griha pravesh: new (default) or old |
| child_birth_date | string | Optional | Namakarana / mundan / vidyarambha: the child's birth date |
| first_born | boolean | Optional | Mundan: the child is the first-born |
| avoid | string | Optional | Cut these out of every window: rahu_kaal, yamaganda, gulika (comma-separated) |
| include_convention | boolean | Optional | Also search events that have no sourced rule, using popular practice, clearly labelled |
| include_rejected | boolean | Optional | List the dates that were checked and rejected, with the rule that blocked each |
| strictness | string | Optional | standard or strict (strict also makes the lagna-placement cautions binding) |
| detail | string | Optional | full (verse quote and edition on every reason) or compact |
| profile | string | Optional | Marriage: panchang (default; tithi and weekday advisory, whole-yoga bar, as printed panchangs do; convention) or classical (every cited rule is a hard bar). Other events have only classical. |
Same as GET, with birth details in the body
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| event | string | Required | — (body) |
| start | string | Required | — (body) |
| end | string | Required | — (body) |
| location_id | integer | Optional | — (body) |
| lat | float | Optional | — (body) |
| lon | float | Optional | — (body) |
| region | string | Optional | — (body) |
| tz | string | Optional | — (body) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. (body) |
| birth_date | string | Optional | — (body) |
| birth_time | string | Optional | — (body) |
| birth_tz | string | Optional | — (body) |
| birth_nakshatra | string | Optional | — (body) |
| birth_rashi | string | Optional | — (body) |
| partner_birth_date | string | Optional | — (body) |
| partner_birth_time | string | Optional | — (body) |
| partner_birth_tz | string | Optional | — (body) |
| partner_birth_nakshatra | string | Optional | — (body) |
| partner_birth_rashi | string | Optional | — (body) |
| direction | string | Optional | — (body) |
| door_facing | string | Optional | — (body) |
| house_type | string | Optional | — (body) |
| child_birth_date | string | Optional | — (body) |
| first_born | boolean | Optional | — (body) |
| avoid | string | Optional | — (body) |
| include_convention | boolean | Optional | — (body) |
| include_rejected | boolean | Optional | — (body) |
| strictness | string | Optional | — (body) |
| detail | string | Optional | — (body) |
| profile | string | Optional | — (body) |
Eclipses
Solar and lunar eclipse data with Sutak timings and visibility by location.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Year to query |
| type | string | Optional | lunar or solar (default: both) |
| lat | float | Optional | For visibility check |
| lon | float | Optional | For visibility check |
Whether a given eclipse is visible from a location, and when.
A thin layer over the engine's own local-circumstances calculation (get_eclipse_for_date, which drives Swiss Ephemeris sol_eclipse_when_loc / lun_eclipse_how and checks that the body is actually above the horizon). No astronomy is implemented here: the same code that produces eclipse data everywhere else in the API produces it here, so the two can never disagree.
magnitude and obscuration_percent are deliberately NOT returned. The engine does not compute them, and inventing a plausible number is worse than omitting a field.
local_times are clock times in the tz offset supplied (UTC by default).
| Parameter | Type | Required | Description |
|---|---|---|---|
| eclipse_id | integer | Required | Eclipse ID from /v1/eclipse |
| lat | float | Required | Latitude |
| lon | float | Required | Longitude |
| tz | string | Optional | UTC offset in hours (e.g. 5.5) or an IANA zone (e.g. Asia/Kolkata); local_times and sutak are returned in it. Omitted = UTC. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get all eclipses for a specific year.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Four-digit year. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get detailed eclipse information.
| Parameter | Type | Required | Description |
|---|---|---|---|
| eclipse_id | integer | Required | Eclipse identifier. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Birth Chart (Kundli) PRO
Generate a complete Vedic birth chart (Kundli) with planetary positions, Lagna, Nakshatras, Dashas, and Yogas based on Swiss Ephemeris + Lahiri ayanamsa. Supports profiles for retrieval.
Generates a full Vedic birth chart. Pass the native's birth date, time, and location. Returns planetary positions in signs and nakshatras, house placements, Vimshottari Dasha periods, and notable Yogas.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Name of the person |
| date | string | Required | Birth date YYYY-MM-DD |
| time | string | Required | Birth time HH:MM (24-hr) |
| lat | float | Required | Birth place latitude |
| lon | float | Required | Birth place longitude |
| tz | string | Optional | Timezone (e.g. Asia/Kolkata). Auto-detected from coordinates if omitted |
curl -X POST https://api.tathaastuapi.com/v1/birth-chart \ -H "X-API-Key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Arjun", "date": "1990-05-15", "time": "06:30", "lat": 28.6139, "lon": 77.2090 }'
Retrieve a previously generated birth chart by its profile ID. Returns the same full chart data without re-computing.
Compatibility (Kundli Matching) PRO
Ashtakoot (8-fold) Gun Milan compatibility matching. Computes Varna, Vashya, Tara, Yoni, Graha Maitri, Gana, Bhakoot, and Nadi scores with Manglik analysis and Dasha compatibility.
Provide birth details for two individuals. Returns Ashtakoot Guna score (out of 36), individual Kuta scores, Manglik Dosha analysis, Nadi Dosha check, relationship dynamics, a narrative and an overall compatibility assessment.
| Parameter | Type | Required | Description |
|---|---|---|---|
| person_a | object | Required | name, date_of_birth (YYYY-MM-DD), time_of_birth (HH:MM), latitude, longitude, timezone (IANA, default Asia/Kolkata); optional gender, place_name, name_local |
| person_b | object | Required | Same fields as person_a |
| lang | string | Optional | Response language, in the body or as ?lang= (the query parameter wins) |
| name_local | string | Optional | Inside person_a / person_b: the person’s name in the response language’s script (e.g. "वीरेन" for lang=hi). Used in every localized sentence and echoed as person_a_local / person_b_local. Names are never machine-transliterated: without it, localized sentences use name as sent. |
Response language
With lang=hi every English sentence keeps its field and gains a _local companion in Hindi: domain_details.*.reasons_local, soul_compatibility.reasons_local, mangal_dosha.*.conditions[].condition_local, basis_local, summary_local, label_local, conventions.label_local / items_local, dynamics.*.<x>_label_local, dominant_traits_local, archetype_local, triggers_local, advice_local, strengths_local, risk_factors_local, recommendation_local, factors_local, concerns_local, narrative.<section>_local, summary_local, marriage_outcome_local, risk_flags_local and remedies_local (an object with the same keys as remedies); koota names and details, grades and chart signs, nakshatras and dignities were already localized (kuta_local, detail_local, nakshatra_local, dignity_local). Numbers and keys stay exactly as they are; show the matching label beside the value: domains_local, domain_details_local, dynamics_local and guna_milan_local have the same keys as domains, domain_details, dynamics and guna_milan, and field_labels_local labels the field names inside them (score, max, anger_score…). labels_local (Hindi) is an object of every section heading and field label an app shows (mangal_dosha, personality_dynamics, relationship_outlook, marriage_stability, separation_risk, strengths, risk_factors, triggers, birth_charts, planet, sign, house, degree, nakshatra, lagna, moon, sun, the trait names and more). When name_local is not sent, a Hindi name is supplied from a name dictionary with rule-based fallback and reported in person_a_name_local_source / person_b_name_local_source (client, dictionary or transliterated); a name you send always wins, so send the native-script name when you have it. A *_local list always lines up item for item with its English list. Default and lang=en responses are unchanged. Other report languages (bn, de, es, fr, gu, kn, ml, mr, pa, ta, te) localize the koota, reasons, Mangal conditions, risk flags and remedies; dynamics, narrative and summary are Hindi only, and have no _local in those languages rather than English.
curl -X POST "https://api.tathaastuapi.com/v1/compatibility?lang=hi" -H "X-API-Key: YOUR_KEY" -H "Content-Type: application/json" -d '{ "person_a": {"name": "Arjun", "name_local": "अर्जुन", "date_of_birth": "1990-05-15", "time_of_birth": "06:30", "latitude": 28.6, "longitude": 77.2}, "person_b": {"name": "Priya", "name_local": "प्रिया", "date_of_birth": "1992-08-22", "time_of_birth": "14:15", "latitude": 28.6, "longitude": 77.2} }'
Retrieve a previously computed compatibility analysis by its ID.
Full human-readable compatibility report in JSON, in the requested language (lang), and -- unless pdf=false -- the same report as a PDF: pdf_url is a signed download link (report storage, branding and retention rules of the account).
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Report language: the report is produced entirely in one of these languages (en and hi authored; the others translations pending native review, stated in translation_status). May also be sent as lang in the body; the query wins. Any other registry code is 422 language_not_available_for_reports; an unknown code is 400 unsupported_language. |
| boolean | Optional | Also produce the report as a PDF and return its signed link (pdf_url), exactly as the Birth Report does. false returns the JSON only. | |
| person_a | object | Required | — (body) |
| person_b | object | Required | — (body) |
| lang | string | Optional | Report language: the report is produced entirely in one of these languages (en and hi authored; the others translations pending native review, stated in translation_status). May also be sent as lang in the body; the query wins. Any other registry code is 422 language_not_available_for_reports; an unknown code is 400 unsupported_language. (body) |
Lightweight compatibility score API.
| Parameter | Type | Required | Description |
|---|---|---|---|
| bride_dob | string | Required | Bride DOB YYYY-MM-DD |
| bride_time | string | Optional | Bride time HH:MM (required unless bride_time_unknown=true) |
| bride_lat | float | Required | Bride latitude |
| bride_lon | float | Required | Bride longitude |
| groom_dob | string | Required | Groom DOB YYYY-MM-DD |
| groom_time | string | Optional | Groom time HH:MM (required unless groom_time_unknown=true) |
| groom_lat | float | Required | Groom latitude |
| groom_lon | float | Required | Groom longitude |
| mode | string | Optional | full or lite |
| bride_tz | string | Optional | IANA timezone of the bride's birth place |
| groom_tz | string | Optional | IANA timezone of the groom's birth place |
| bride_time_unknown | boolean | Optional | true = the bride's birth time is not known: bride_time may be omitted; Guna Milan is computed from the Moon only (see the Birth time unknown guide). |
| groom_time_unknown | boolean | Optional | true = the groom's birth time is not known: groom_time may be omitted; Guna Milan is computed from the Moon only. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
World Festivals FREE TIER
Multi-religion world festival calendar covering Christian, Orthodox, Islamic, Sikh, Jewish, Buddhist, Jain, Bahá'í, Zoroastrian and Shinto observances, together with the Chinese and East Asian festival year. Where a tradition is not unanimous, the variants are returned as separate entries with their own festival_id — Sunni and Shia, Svetambara and Digambara, and the two Orthodox reckonings of the fixed feasts. Currently covers 2024–2030; call /v1/festivals/world/religions for the exact range in force.
Multi-religion world festival calendar. Query by date, year, month, religion, or search by name. Returns paginated results sorted by date.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD — get festivals for a specific date |
| year | integer | Optional | Year (1700–3100) |
| month | integer | Optional | Month (1–12), requires year |
| religion | string | Optional | Filter: christian, orthodox, islamic, sikh, jewish, buddhist, jain, bahai, zoroastrian, shinto, east_asian |
| festival_id | string | Optional | Exact festival_id filter |
| search | string | Optional | Search festival names (partial match) |
| limit | integer | Optional | Results per page (1–1000, default: 100) |
| offset | integer | Optional | Pagination offset (default: 0) |
# All Islamic festivals for 2025 curl "https://api.tathaastuapi.com/v1/festivals/world?year=2025&religion=islamic" \ -H "X-API-Key: YOUR_KEY" # Search for Eid festivals curl "https://api.tathaastuapi.com/v1/festivals/world?search=eid&year=2025" \ -H "X-API-Key: YOUR_KEY" # Jewish festivals in March 2025 curl "https://api.tathaastuapi.com/v1/festivals/world?year=2025&month=3&religion=jewish" \ -H "X-API-Key: YOUR_KEY"
{
"total": 28,
"limit": 100,
"offset": 0,
"festivals": [
{
"year": 2025,
"religion": "islamic",
"festival_id": "ramadan_start",
"festival_name": "Ramadan Begins",
"gregorian_date": "2025-03-01",
"display_date": "2025-03-01",
"day_of_week": "Saturday",
"calendar_ref": "1 Ramadan 1446 AH",
"notes": "Astronomical new moon calculation"
}
],
"filters": { "year": 2025, "religion": "islamic" }
}Returns all available religions with total festival counts, unique festival types, and year coverage range. Use this to discover what data is available.
curl "https://api.tathaastuapi.com/v1/festivals/world/religions" \ -H "X-API-Key: YOUR_KEY"
{
"religions": [
{ "religion": "islamic", "total_festivals": 24843, "unique_festivals": 36, "min_year": 1700, "max_year": 2400 },
{ "religion": "christian", "total_festivals": 21861, "unique_festivals": 31, "min_year": 1700, "max_year": 2400 },
{ "religion": "jewish", "total_festivals": 19245, "unique_festivals": 28, "min_year": 1700, "max_year": 2400 },
{ "religion": "sikh", "total_festivals": 14700, "unique_festivals": 21, "min_year": 1700, "max_year": 2400 },
{ "religion": "orthodox", "total_festivals": 13700, "unique_festivals": 20, "min_year": 1700, "max_year": 2400 }
],
"total_records": 94349,
"year_range": { "min": 1700, "max": 2400 }
}Returns upcoming world festivals from the current date, across all religions or filtered by a specific religion. Ideal for calendar widgets and notifications.
| Parameter | Type | Required | Description |
|---|---|---|---|
| religion | string | Optional | Filter: christian, orthodox, islamic, sikh, jewish, buddhist, jain, bahai, zoroastrian, shinto, east_asian |
| limit | integer | Optional | Max results (1–100, default: 20) |
# Upcoming Sikh festivals curl "https://api.tathaastuapi.com/v1/festivals/world/upcoming?religion=sikh&limit=10" \ -H "X-API-Key: YOUR_KEY"
Bulk APIs
Process multiple dates or locations in a single HTTP request. Ideal for pre-computing calendar data or batch analysis.
{
"dates": ["2025-03-01", "2025-03-02", "2025-03-15"],
"lat": 28.6139,
"lon": 77.2090
}
Returns festivals for a date range (start_date..end_date, up to 366 days) in one call, from the same festival engine and regional rules as /v1/festivals/range. Accepts location_id, region and lang.
Languages (i18n)
All names are phonetically transliterated — not machine translated. "एकादशी" renders with the same sound in every script.
Localized values: _local fields
Requesting lang never changes a value you already receive. It adds a <field>_local beside each field it can localize, holding the requested-language value (a field named <base>_key gains <base>_local). Display the _local value; keep matching on the original. The same field name serves every language: lang=hi, lang=ta and lang=de all fill name_local.
{
"festival_key": "FESTIVAL_DIWALI",
"name": "Diwali",
"name_local": "दिवाली",
"display_name": "Diwali",
"display_name_local": "दिवाली",
"category": "SHASTRIC"
}{
"type": "Kaal",
"type_local": "काल",
"meaning": "Inauspicious - Avoid important work",
"meaning_local": "अशुभ - महत्वपूर्ण कार्य न करें"
}Localized values appear throughout the API: Panchang limbs, festival and vrat names, choghadiya and hora, muhurat labels, signs, grahas and nakshatras on chart routes, rashifal content, the Compatibility Report (summary_local, sections.*.text_local, kootas[].kuta_local / detail_local) and error messages (message_local beside the stable error code). Never localized: ids and codes, numbers, dates and times, coordinates, your own text (name, place), Sanskrit sources and citations. Timestamp fields such as instant_local predate this contract and mean local time; their values are always ISO-8601. Locations return their native-script name as name_native.
Every language lang accepts, from the language registry.
This used to list the distinct languages present in one vocabulary table, which could disagree with the languages the API actually accepts, and it said every translation was a phonetic transliteration, which is not true.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get transliteration strings for a category and language.
| Parameter | Type | Required | Description |
|---|---|---|---|
| category | string | Required | Category: TITHI, NAKSHATRA, YOGA, KARANA, WEEKDAY, MONTH, FESTIVAL |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Individual Limb Calculators
One limb at a time, when a full Panchang response is more than you need. Each returns the same values the full endpoint would, computed by the same engine.
Get detailed Karana information for a date.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Target date in YYYY-MM-DD. |
| location_id | integer | Optional | Supported location id. Takes precedence over lat/lon. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get special yogas (Sarvartha Siddhi, Amrita Siddhi, Dwipushkar, Tripushkar).
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude. With lon, used when location_id is not given. |
| lon | float | Optional | Longitude. Required together with lat. |
| location_id | integer | Optional | Predefined location ID; takes precedence over lat/lon. |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-MH); its canonical location is used when neither location_id nor lat/lon is given. An unsupported value is ignored. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get detailed Yoga information for a date.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Target date in YYYY-MM-DD. |
| location_id | integer | Optional | Supported location id. Takes precedence over lat/lon. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Kundli Reports
A free teaser for preview, and the full Birth Report: a signed PDF link from POST /v1/kundli/birth-report, in 13 languages.
What /v1/kundli returns
The response is {"data": {…}, "meta": {…}}. meta carries engine_version, calculation_version and generated_at. Everything in data is computed from one chart, so the blocks always agree with each other.
| Field | Type | What it holds |
|---|---|---|
birth | object | The birth data as used: date, time, latitude, longitude, timezone, julian_day_ut. |
calculation | object | The exact conventions of this chart: profile, zodiac, ayanamsa, node_type, house_system, the ephemeris requested and actually used, engine_version and calculation_version. Store it with the chart to reproduce it later. |
lagna | object | Ascendant: longitude, sign, degree within the sign, nakshatra, pada, lord. |
planets[] | array of 9 | Sun to Ketu: longitude, sign, degree, house, nakshatra, pada, nakshatra_lord, sign_lord, retrograde, stationary, dignity (with dignity_reason), speed, navamsa_sign. |
houses | object | houses[]: the 12 whole-sign houses with number, sign, lord and the planets in each; cusps: Placidus cusps, alongside, for reference. |
vargas | object | All 16 Parashari divisional charts, keyed D1_Rasi, D2_Hora, D3_Drekkana, D4_Chaturthamsa, D7_Saptamsa, D9_Navamsa, D10_Dasamsa, D12_Dwadasamsa, D16_Shodasamsa, D20_Vimsamsa, D24_Siddhamsa, D27_Bhamsa, D30_Trimsamsa, D40_Khavedamsa, D45_Akshavedamsa, D60_Shashtiamsa. Each maps Lagna and every graha to its sign in that chart. |
varga_metadata | object | For each varga: code, name, divisions, the counting convention, tradition, formula_version and its classical source. |
dashas.vimshottari | object | start_lord and balance_at_birth; current = the mahadasha, antardasha and pratyantardasha running at the moment of birth (not today — to find today’s period, pick the entry in mahadashas whose start–end contains today); mahadashas[] = the full 120-year timeline, each with antardasha[] and, within those, pratyantardasha[]. dasha_levels (1–3, default 3) controls the depth. |
karakas | object | Chara karakas (Atmakaraka to Darakaraka) with the planet, its degree in sign, sign and house; default_convention (seven_with_rahu) ranked them, and conventions gives all three schemes: seven_with_rahu, seven_without_rahu, eight_with_rahu. |
special_lagnas | object | arudha_lagna, upapada_lagna, badhaka, maraka and gulika_mandi, each with how it was derived. |
aspects | object | Parashari graha drishti: aspects[] lists each aspect (from, to_house, to_planets, rule). Rahu and Ketu are given no drishti, as BPHS gives none. |
dispositors | object | Per graha: its dispositor, the full chain, and the final_dispositor. |
planetary_relationships | object | combustion (separation from the Sun and whether combust) and planetary_war. |
planetary_nature | object | Per graha: natural benefic/malefic and functional nature for this lagna, with the houses it owns. |
argala | object | Argala (intervention) from the lagna and from each graha, with obstruction (virodha) and the rule and source used. |
Optional additions. ?include_yogas=true adds yogas from the legacy yoga detector (not source-reviewed; its known defects are listed in yogas_known_defects). ?include_shadbala=true adds shadbala. lang (query or body) adds *_local companion fields in that language; the English values never change.
Request body. Required: date_of_birth (YYYY-MM-DD), time_of_birth (HH:MM or HH:MM:SS, local time), latitude, longitude. Optional: name, timezone (IANA, default Asia/Kolkata), profile (default vedic-lahiri), node_type (mean or true), dasha_levels (1–3), lang.
/v1/kundli or /v1/birth-chart? /v1/birth-chart is the older endpoint: a flatter chart (planets keyed by name, house_cusps, four divisional_charts: D9, D7, D10, D30) that can be stored as a profile and fetched again by profile_id. /v1/kundli is the complete calculation: all 16 vargas, the dasha timeline, karakas, special lagnas, aspects and the rest. Both are kept; use /v1/kundli for new work.
A real response for 15 May 1990, 14:30, New Delhi, shortened (“…” marks what was cut):
{
"data": {
"birth": {
"date": "1990-05-15",
"time": "14:30:00",
"latitude": 28.6139,
"longitude": 77.209,
"timezone": "Asia/Kolkata",
"julian_day_ut": 2448026.875
},
"calculation": {
"profile": "vedic-lahiri",
"zodiac": "sidereal",
"house_system": "whole_sign",
"node_type": "mean",
"ephemeris_actual": "swiss_ephemeris",
"calculation_version": "1.2.0"
},
"lagna": {
"longitude": 151.904621,
"sign": "Virgo",
"degree": 1.904621,
"nakshatra": "Uttara Phalguni",
"pada": 2,
"lord": "Mercury"
},
"planets": [
{
"name": "Sun",
"longitude": 30.549776,
"sign": "Taurus",
"degree": 0.549776,
"house": 9,
"nakshatra": "Krittika",
"pada": 2,
"nakshatra_lord": "Sun",
"sign_lord": "Venus",
"retrograde": false,
"stationary": false,
"dignity": "Neutral",
"dignity_reason": null,
"speed": 0.964203,
"navamsa_sign": "Capricorn"
},
"… 8 more grahas"
],
"houses": {
"system": "whole_sign",
"houses": [
{
"number": 1,
"sign": "Virgo",
"lord": "Mercury",
"planets": []
},
"… 11 more"
]
},
"vargas": {
"D9_Navamsa": {
"Lagna": "Capricorn",
"Sun": "Capricorn",
"Moon": "Capricorn",
"Mars": "Taurus",
"Mercury": "Leo",
"Jupiter": "Aquarius",
"Venus": "Sagittarius",
"Saturn": "Capricorn",
"Rahu": "Gemini",
"Ketu": "Sagittarius"
},
"…": "D1 to D60, 16 charts"
},
"varga_metadata": {
"D9_Navamsa": {
"code": "D9",
"name": "Navamsa",
"divisions": 9,
"convention": "movable from itself, fixed from the 9th, dual from the 5th",
"tradition": "Parashari"
}
},
"dashas": {
"vimshottari": {
"start_lord": "Sun",
"balance_at_birth": {
"lord": "Sun",
"years": 3.647829
},
"current": {
"mahadasha": {
"lord": "Sun",
"start": "1988-01-07T11:22:09.676349",
"end": "1994-01-06T23:22:09.676349"
},
"antardasha": {
"lord": "Jupiter",
"start": "1990-01-25T05:40:09.676349",
"end": "1990-11-13T10:28:09.676349"
},
"pratyantardasha": {
"lord": "Mercury",
"start": "1990-04-20T11:04:09.676349",
"end": "1990-05-31T20:32:57.676349"
}
},
"mahadashas": [
{
"lord": "Sun",
"start": "1988-01-07T11:22:09",
"end": "1994-01-06T23:22:09",
"years": 6.0,
"antardasha": [
{
"lord": "Sun",
"start": "1988-01-07T11:22:09",
"end": "1988-04-26T01:10:09",
"pratyantardasha": [
"…"
]
},
"…"
]
},
"… 8 more"
]
}
},
"karakas": {
"default_convention": "seven_with_rahu",
"karakas": {
"Atmakaraka": {
"planet": "Mars",
"degree_in_sign": 24.515207,
"ranking_degree": 24.515207,
"sign": "Aquarius",
"house": 6,
"retrograde": false,
"reversed_for_ranking": false
},
"…": "Amatyakaraka … Darakaraka"
}
},
"special_lagnas": {
"arudha_lagna": {
"sign": "Scorpio",
"house_from_lagna": 3
},
"…": "upapada_lagna, badhaka, maraka, gulika_mandi"
},
"aspects": {
"system": "parashari_graha_drishti",
"aspects": [
{
"from": "Sun",
"from_sign": "Taurus",
"to_sign_index": 7,
"distance": 7,
"to_house": 3,
"to_planets": [],
"type": "graha_drishti",
"basis": "rashi",
"rule": "all grahas aspect the 7th"
},
"…"
]
},
"dispositors": {
"Sun": {
"dispositor": "Venus",
"chain": [
"Sun",
"Venus",
"Jupiter",
"Mercury",
"Mars",
"Saturn"
],
"final_dispositor": "Saturn"
},
"…": "one per graha"
},
"planetary_relationships": {
"combustion": "{…}",
"planetary_war": "{…}"
},
"planetary_nature": {
"lagna": "Virgo",
"planets": {
"Sun": {
"natural": "malefic",
"functional": {
"nature": "neutral",
"houses_owned": [
12
]
}
}
}
},
"argala": {
"convention": "bphs_argala",
"from_lagna": "{…}",
"from_planets": "{…}"
}
},
"meta": {
"engine_version": "tathaastu-chart_generator-1",
"calculation_version": "1.2.0"
}
}Birth time unknown (time_unknown)
Many people do not know the time they were born. Send "time_unknown": true and leave out time_of_birth: the chart is calculated for 12:00 local time at the birthplace and the Moon’s sign is counted as the first house (Chandra Lagna, चन्द्र लग्न). Chandra Lagna is the traditional fallback when the time is unknown; it is a convention, and this API cites no verse for it. Nothing in the calculation changes: it is an input mode. Without the flag every response is exactly what it was before.
Where it works. time_unknown (boolean, default false) on POST /v1/kundli, POST /v1/birth-chart (nothing is stored or cached for such a chart), POST /v1/kundli/birth-report (JSON and PDF), and POST /v1/compatibility (per person: person_a.time_unknown, person_b.time_unknown). GET /v1/compatibility/score takes bride_time_unknown and groom_time_unknown. The other birth-data endpoints (dosha, ashtakavarga, upagraha and so on) still require time_of_birth. /v1/compatibility/report also still requires the time.
| Shown | Hidden (null) | Approximate |
|---|---|---|
Planets: signs, degrees, nakshatras, padas, retrograde, dignity, combustion, aspects, dispositors, Chara karakas. houses[] counted from the Moon’s sign (house 1 = Moon’s sign). chandra_lagna. Guna Milan. Mangal Dosha counted from the Moon. | lagna (ascendant), house cusps, vargas and varga_metadata (D9 and all others), navamsa_sign, special_lagnas, planetary_nature (lagna-lord and house-lord readings), argala, yogas and Shadbala, and in compatibility the domain scores, overall percentage and dynamics. Each is null and the response carries unavailable_reason: "birth_time_unknown" with the list in unavailable. | Vimshottari dasha: approximate: true, basis: "moon_nakshatra", uncertainty_years and a note; the dates can be off by months or more. When the Moon changes nakshatra during that day (it does on most days) the dasha is withheld: vimshottari: null, unavailable_reason: "moon_nakshatra_changes_on_birth_date" and possible_start lists the candidate starting lords. |
The Moon across the day. The API also computes the Moon at 00:00 and 23:59 local time (and in between). If its sign or nakshatra changes that day the response adds moon_uncertain: {sign: […], nakshatra: […], changes_at: "…", changes: […]} and moon_certain: false. The 12:00 values stay the primary values. Show the warning and offer the user the choice.
Compatibility. Guna Milan needs only the Moon. If a person’s Moon changes nakshatra that day, guna_milan_possible lists every combination with its total, guna_milan_range gives the lowest and highest, and guna_milan_certain is false; guna_milan holds the 12:00 value. Mangal Dosha from the lagna is unavailable; mangal_dosha.person_x is counted from the Moon, with basis: "moon_sign" and labelled a convention. The pair’s overall score, domains and dynamics are null because they read the lagna houses.
Birth Report. The PDF keeps the same design and chart boxes with the label “चन्द्र लग्न / Chandra Lagna” (the local word then the English term, in every report language) and prints “Birth time not known — chart based on Moon sign.” on the cover and the chart page, in the report language (Hindi: जन्म समय ज्ञात न होने के कारण कुंडली चन्द्र राशि पर आधारित है।). The Navamsa and divisional-chart pages and the house-lord interpretation are left out. Only the calculation edition can be honest without a birth time, so a request for edition=predictive returns the calculation edition and says so (edition_requested, edition_note).
How an app should display it. Read lagna_type: "chandra" means the first house is the Moon’s sign. Draw the chart exactly as for a normal chart (same houses[] shape, house 1 = chandra_lagna.sign) but print the label chandra_lagna.label (label_local with lang) where you print “Lagna”, and show notice.note / notice.note_local beside the chart. Do not draw the ascendant, the D9 or other vargas, or house-lord text: those fields are null. When lagna_type is "lagna" or absent, nothing changes. lagna_type: "lagna" is added only when you send time_unknown: false.
Languages. Notes and labels carry a *_local companion (and labels_local) in all 56 languages with lang; Hindi is authored, the rest are machine translated (Google Gemini) and pending native review. The English and machine fields never change with lang.
{
"name": "Asha",
"date_of_birth": "2026-08-11",
"latitude": 28.6139,
"longitude": 77.209,
"timezone": "Asia/Kolkata",
"time_unknown": true
}The Bhinnashtakavarga of the seven grahas and the Lagna, with the contributors of every point; the Samudaya with its favourable / middling / difficult bands; and Trikona and Ekadhipatya reduction with Rashi, Graha and Yoga Pinda. The point table is decoded from the karana verses of BPHS 66 and checked against their counts, the fixed totals and Santhanam's worked example. Ekadhipatya reduction is read differently by the editions; all three readings are returned and the primary one is named.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local to timezone (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone (body) |
| name | string | Optional | — (body) |
Evaluates the birth moment against BPHS ch. 85-96: Amāvasyā, the six parts of Kṛṣṇa Caturdaśī, Viṣṭi karaṇa, Vyatīpāta yoga, a kṣaya tithi, tithi / nakṣatra / lagna Gaṇḍānta, Abhukta Mūla, saṅkrānti and solar or lunar eclipse, with the junction times and the Sanskrit verse for each. Family nakṣatra and birth-order conditions are evaluated only when supplied. Names the text lists but does not define (Yamaghaṇṭa, Dagdha yoga, Pāta) are listed as not computed. Remedies are returned as text, not advice.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local to timezone (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone (body) |
| name | string | Optional | — (body) |
| family_janma_nakshatras | array | Optional | Optional. Evaluates BPHS ch. 89: birth in the janma nakshatra of a parent or sibling. (body) |
| born_after_three_of_other_sex | boolean | Optional | Optional. Evaluates BPHS ch. 95: a daughter after three sons, or a son after three daughters. (body) |
The avasthas of BPHS ch. 45 for every graha: Baladi, Jagradadi, Deeptadi, Lajjitadi and Shayanadi with Drishti / Cheshta / Vicheshta, together with the natural, temporary and compound relationships of ch. 3 they depend on. Every state carries its verse. Where the Pathak edition, the transcription and Santhanam's translation read a rule differently, each reading is returned; the effect verses are returned as text, not as a prediction.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local to timezone (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone (body) |
| name | string | Optional | — (body) |
| name_syllable_number | integer | Optional | The value (1-5) of the first syllable of the native's name, used for the Drishti / Cheshta / Vicheshta of the Shayanadi avasthas (BPHS 45.34). Neither edition prints the syllable table legibly, so it is not derived from name; without it the Cheshta is not evaluated. (body) |
Kuja (Mangal) dosha from BPHS 80.47-49 and Phaladeepika XI.3, and the serpent's and father's curse yogas of BPHS ch. 83 judged by the Sanskrit text, each with its verse. Where R. Santhanam's translation reads a verse differently, that reading is evaluated and returned beside the verdict. Conditions the text does not let a chart decide (strength without a stated threshold, Gulika) are returned as null, never guessed. Kaal Sarp and Sade Sati have no classical locus; they are returned under conventions.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local to timezone (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone (body) |
| name | string | Optional | — (body) |
| partner | object | Optional | Partner's birth data. Applies BPHS 80.49: the Kuja yoga in both charts ceases to have effect. (body) |
| sade_sati_date | string | Optional | YYYY-MM-DD. When given, Sade Sati (a convention) is evaluated for that date at local noon at the birth place. (body) |
Complete Vedic calculation from one canonical chart. The response is {data, meta}; data holds: birth (the input as used, with Julian day), calculation (ayanamsa, node, house system, ephemeris and versions used), lagna, planets (9 grahas: sign, degree, house, nakshatra and pada, lords, retrograde, dignity, speed, navamsa sign), houses (whole-sign houses with Placidus cusps alongside), vargas and varga_metadata (all 16 Parashari divisional charts, D1 to D60, each with its rule and source), dashas (Vimshottari: balance at birth; current = the periods running at the moment of birth, not today; the full mahadasha > antardasha > pratyantardasha timeline; dasha_levels 1-3), karakas (Chara karakas), special_lagnas (Arudha, Upapada, Badhaka, Maraka, Gulika/Mandi), aspects (Parashari graha drishti), dispositors, planetary_relationships (combustion, planetary war), planetary_nature (natural and functional) and argala. include_yogas=true adds the legacy yoga list; include_shadbala=true adds Shadbala. Every response echoes the exact calculation conventions used. /v1/birth-chart (the older, flatter chart) is unchanged and remains available.
| Parameter | Type | Required | Description |
|---|---|---|---|
| include_yogas | boolean | Optional | Include the LEGACY yoga detection (not source-reviewed; known defects listed in yogas_known_defects). |
| include_shadbala | boolean | Optional | Include Shadbala from the existing engine |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| name | string | Optional | — (body) |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Optional | HH:MM or HH:MM:SS, local to timezone. Required unless time_unknown is true. (body) |
| time_unknown | boolean | Optional | true = the birth time is not known: the chart is computed at 12:00 local time and the Moon's sign is counted as the first house (Chandra Lagna). Lagna, house cusps, vargas and lagna-based readings are returned null with unavailable_reason "birth_time_unknown"; the dasha is approximate. time_of_birth may then be omitted. Omit the flag for the normal chart; sending false adds lagna_type "lagna". (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | — (body) |
| profile | string | Optional | — (body) |
| node_type | string | Optional | "mean" or "true" (body) |
| dasha_levels | integer | Optional | — (body) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. (body) |
The Birth Report generated from the frozen Calculation Engine (calculation 1.2.0).
edition=predictive (default): birth chart and D9, personality, life areas (career, finance, marriage, family, children, education, property, health, spiritual, travel), current and next mahadasha, a year-by-year outlook (forecast_years, 1-20, default 10, from the current calendar year) from Jupiter/Saturn/Rahu/Ketu transits, a lifetime view of every mahadasha, and the sources used. edition=calculation: the chart, every table and the traditional interpretation, without predictions.
Returns a signed PDF link (report storage, branding and retention rules of the account). English and Hindi text is authored; the other languages are translations pending native review, and the report says so.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Report language: the report is produced entirely in one of these languages (en and hi authored; the others translations pending native review, stated in translation_status). May also be sent as lang in the body; the query wins. Any other registry code is 422 language_not_available_for_reports; an unknown code is 400 unsupported_language. |
| edition | string | Optional | predictive (chart, life areas, dashas and a year-by-year outlook) or calculation (chart, tables and traditional interpretation only). |
| forecast_years | integer | Optional | Years of year-by-year outlook, from the current calendar year (predictive edition). 1-20, default 10. |
| name | string | Optional | — (body) |
| date_of_birth | string | Required | — (body) |
| time_of_birth | string | Optional | HH:MM or HH:MM:SS, local to timezone. Required unless time_unknown is true. (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| lang | string | Optional | Report language: the report is produced entirely in one of these languages (en and hi authored; the others translations pending native review, stated in translation_status). May also be sent as lang in the body; the query wins. Any other registry code is 422 language_not_available_for_reports; an unknown code is 400 unsupported_language. (body) |
| timezone | string | Optional | — (body) |
| time_unknown | boolean | Optional | true = the birth time is not known: the report is built at 12:00 local time from the Moon's sign (Chandra Lagna). The cover and the chart page say so, the Lagna, house-lord and divisional-chart pages are left out and the report is the calculation edition. time_of_birth may be omitted. Omit the flag for the normal report; false adds lagna_type "lagna" to the response. (body) |
| place | string | Optional | Place of birth as it should be printed on the report. If omitted, the nearest town to latitude/longitude is printed. (body) |
| name_local | string | Optional | The person's name in the report language's script (e.g. Devanagari for lang=hi), printed instead of name on non-English reports. Optional: with lang=hi and no name_local, the name is transliterated automatically (dictionary, then rules) and the response says so in name_local_source (client / dictionary / transliterated). (body) |
| place_local | string | Optional | Place of birth in the report language's script, printed instead of place on non-English reports. Optional: with lang=hi and no place_local, the place (your place text, or the nearest town to latitude/longitude) is printed in Devanagari when it is a known IN/NP place, and place_local_source says client or geo_mt (machine translation). (body) |
The five aprakāśa grahas (Dhūma, Vyatīpāta, Pariveṣa, Indracāpa, Upaketu) from BPHS ch. 3 and the five kālavelās (Kāla, Mṛtyu, Ardhaprahara, Yamaghaṇṭaka, Gulika) from BPHS ch. 4, each with its Sanskrit verse from the Pathak edition and R. Santhanam's translation. Kālavelās are counted from the vāra that began at the sunrise before the birth, and the longitude rising at the start and at the end of each part are both returned. Above the polar circles on days without sunrise or sunset the kālavelās are reported unavailable.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local to timezone (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone (body) |
| name | string | Optional | — (body) |
Locations
The precomputed locations served from the dataset. Passing a location_id reads that location’s stored row and takes precedence over lat/lon.
How location and region are resolved
Every endpoint answers two separate questions the same way.
Where — whose sunrise, tithi and timings are computed: location_id, else lat+lon, else the canonical location of region, else the endpoint’s default.
Which tradition — which regional festival rules apply: an explicit region, else the location_id’s region and state, else New Delhi’s. Coordinates choose where, never the tradition. Tradition is independent of place, so region=IN-MH&location_id=1 means “Maharashtrian festivals, observed in Delhi”, and region=IN-MH with coordinates means “Maharashtrian festivals, observed there”.
region accepts a canonical region (NORTH_INDIA, SOUTH_INDIA, EAST_INDIA, WEST_INDIA, NEPAL, KASHMIR, SRI_LANKA) or the ISO 3166-2 code of a state recorded on a supported location (e.g. IN-MH Maharashtra, IN-GJ Gujarat), case-insensitive. On /v1/panchang, /v1/day-context and the timing endpoints anything else returns 422 with the supported list. The festival endpoints historically ignored region, so there an unsupported value is still ignored and is named in region_resolution.ignored_region. A state code applies its region’s rules and the state’s own: Gudi Padwa is a Maharashtra rule, so it appears for location_id=8 (Mumbai) or region=IN-MH, but not for region=WEST_INDIA or Ahmedabad. Festival responses report what was used in _engine.region_resolution and _engine.rule_pack_chain; Panchang responses report the served location’s location.region and location.subdivision.
Finding a place
/v1/locations/search takes a name and returns the places that match, each with its exact coordinates, its IANA timezone and its administrative hierarchy. Those coordinates are what you pass to /v1/panchang, /v1/kundli and the rest; they are used as given and are never rounded or moved.
A name is not an answer. India has hundreds of places called Rampur and three called Somnath, only one of which is the temple. When the context you supply does not narrow the field the response sets ambiguous: true and returns the candidates; it does not choose one and present it as the answer. Narrow with state, district or subdistrict: ?q=Somnath returns three, ?q=Somnath&district=Gir Somnath returns one.
Nothing is substituted. A place we do not hold returns an empty result, never the nearest city. An empty search box is recoverable; a Panchang silently computed for somewhere else is not.
Alternate names are searched too. ?q=Cochin finds Kochi and ?q=Khatushyamji finds Khatu in Sikar. The result reports which name matched in matched_on.
Two fields describe how far to trust a result. confidence is about the coordinate: CURATED for a coordinate TathaAstu has verified, HIGH for an ordinary GeoNames position, LOW where its precision is poor or its stored timezone disagrees with the polygon for its own coordinate. selection_risk is about the choice: it is HIGH when several places share the name in the same state and none carries a population, so any automatic pick would be a guess. Treat a risky result as a prompt to ask the user which one they meant.
Where the place data comes from
Place names, coordinates, administrative hierarchy and timezones served by the location endpoints are derived from GeoNames, used under the Creative Commons Attribution 4.0 International licence (CC BY 4.0). GeoNames does not endorse TathaAstu API. Every location response repeats this credit in its attribution field, so an application that surfaces our data can pass the credit on.
Coordinates for a small set of curated locations are TathaAstu’s own and take precedence over the GeoNames value; those rows report confidence: CURATED, and every response names the source it used. Timezone polygons are derived from timezone-boundary-builder, used under the ODbL.
Coverage: India, Nepal and Sri Lanka to village level; every other country to city level
India, Nepal and Sri Lanka are held down to villages and localities (about 664,000 places). Every other country — 243 of them, 163,531 places — is held at city level: every populated place of 1,000 people or more, from GeoNames cities1000. Both come from GeoNames under CC BY 4.0; show the attribution returned with the data.
Search scope. /v1/locations/search without country searches India, Nepal and Sri Lanka, exactly as it always has. Pass country=GB (any ISO 3166-1 alpha-2 code) to search one country, or scope=world to search them all: ?q=Toronto&scope=world, ?q=Edison&country=US&state=US-NJ.
State codes. Outside India, state.code is an ISO 3166-2 code (US-NJ, GB-ENG, CA-ON, DE-BY) only where the GeoNames state matches exactly one ISO subdivision; otherwise it is null and state.name still names it. A code we cannot vouch for is not served.
Calculations. Every place carries latitude, longitude and an IANA timezone; pass them as lat, lon and tz to any Panchang, Kundli or Muhurat endpoint. Festival traditions (region) are defined for India, Nepal and Sri Lanka, so for other countries region is null; pass region explicitly to apply a tradition. A place whose stored timezone disagreed with the timezone map on its UTC offset is held back rather than served with a doubtful zone (354 such places, mostly in Xinjiang, where legal time is Beijing time).
Place names are given in their English/romanised form (name, name_en); name_native is null. lang localizes the surrounding fields, not the place name.
Get list of predefined locations with coordinates.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
gn:<geonames id>, or a bare numeric id.
Deliberately not /v1/locations/{id}: that path already belongs to the 27 predefined locations and customers hold those ids, so taking it over would change what an existing call returns.
| Parameter | Type | Required | Description |
|---|---|---|---|
| location_id | string | Required | Supported location id. Takes precedence over lat/lon. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Search places by name, with administrative filtering
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Required | Place name, or any alternate name it is known by. "Cochin" finds Kochi and "Khatushyamji" finds Khatu. |
| country | string | Optional | ISO 3166-1 alpha-2 country code. IN, NP and LK are covered down to village level; every other country at city level (places of 1,000 people or more). Without it, the search covers IN, NP and LK unless scope=world. |
| state | string | Optional | State or union territory, as an ISO 3166-2 code (IN-RJ) or a name. Current ISO codes are used: IN-CG, IN-UK, IN-TS, IN-OD. |
| district | string | Optional | Narrows to one district by name, e.g. Gir Somnath. This is usually what resolves a name that matches several places. |
| subdistrict | string | Optional | Narrows to one sub-district / tehsil / taluk by name, e.g. Sujangarh. The most specific filter available. |
| type | string | Optional | Restrict to a kind of place: CITY, TOWN, VILLAGE, LOCALITY, SEAT or OTHER. |
| limit | integer | Optional | Maximum results to return, 1-50. Default 10. |
| scope | string | Optional | home (default): India, Nepal and Sri Lanka, when no country is given. world: every country - use it, or country=, to find places such as London or Toronto. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get details for a specific location.
| Parameter | Type | Required | Description |
|---|---|---|---|
| location_id | integer | Required | Supported location id. Takes precedence over lat/lon. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Government Holidays
Civil government holiday calendars for the Indian states, union territories and the Central Government, each date carried with the notification it comes from. This is civil data: it never decides or adjusts a religious festival date, and the Festival Engine does not read it.
Coverage is part of the answer
A year is authoritative only as far as its official notifications have been obtained. Every response carries coverage.status: COMPLETE when the base notification was read on a government host and nothing is open against it, PARTIAL when the list rests on a copy or an item is still open, and NOT_OBTAINED when no notification has been obtained. A short list is never padded from news reports or another state’s calendar, and a year we do not hold answers NOT_OBTAINED rather than an empty success.
Rows whose notification was read from a copy that is not on a government host are provisional. They are left out by default and returned, flagged, with include=provisional.
Every date names its notification
Each holiday carries a source: the issuing authority, the notification number and date, the gazette reference where there is one, the URL it was read at, and evidence_grade — OFFICIAL for the government’s own publication, GOVT_BODY_COPY or THIRD_PARTY_COPY for a copy held elsewhere. /v1/government-holidays/sources lists every document a region’s year rests on.
Amendments, and reading the calendar as it stood
Governments move dates during the year. Odisha declared Id-ul-Zuha on 27 May 2026 in notification 42428, then moved it to 28 May in notification 21787 of 25 May 2026. The original row is kept and marked superseded rather than overwritten, and as_of reconstructs what the calendar said on any given day: as_of=2026-04-01 returns 27 May, as_of=2026-07-01 returns 28 May. Both answers are reproducible, which is what makes the change auditable. Add include=amendments to see what a row replaced.
Three fields, because the states do not agree
The documents use their own words: Arunachal says “Gazetted Holidays”, Karnataka and Telangana say “General Holidays”, Kerala and Tamil Nadu say “Public Holidays”, Lakshadweep says “closed holidays”, and Odisha’s main annexure states no class at all. So each row carries category (the class as the document sets it out), category_as_written (its exact wording, including the original script) and canonical_class (the normalised class you can filter on across states: PUBLIC, RESTRICTED, OPTIONAL, LOCAL, BANK, COURT, SPECIAL, OTHER). The canonical class is ours; the other two are the government’s and are never rewritten. Where the evidence does not settle a class, canonical_class is null rather than a guess.
A list is not classified from the law it was issued under. West Bengal, Jharkhand and Andaman & Nicobar publish their main closure list under the Negotiable Instruments Act; because those notifications also close government offices, they are PUBLIC, while a list that binds only banks is BANK.
Who actually closes
Office and bank calendars differ in at least twelve subjects, so applicability is data, not a flag. Each row lists its audiences (STATE_GOVERNMENT_OFFICES, BANKS, COURTS, EDUCATIONAL_INSTITUTIONS, and others), the scope where it applies — whole region, a district such as Kodagu, or a sub-region such as Mahe — any per-employee limit a restricted or optional list sets, and the document’s own wording. Filter with applies_to=BANKS or scope=Kodagu.
Some rows have no date: Arunachal’s local festivals are fixed later by each Deputy Commissioner, and twelve Central holidays are chosen by State Coordination Committees. They are evidence of an entitlement rather than of a day, so they are left out unless you ask for include=undated.
Region codes
ISO 3166-2 is the identity: IN-MH, IN-TS, IN-OD, and IN-CENTRAL for the Central Government list. Short codes (MH) and codes a subject used to carry (IN-OR, IN-TG) resolve to it, and the response says which alias was used. /v1/government-holidays/regions lists them all with their coverage.
Government holidays for one region and year, with their sources.
Returns only what a government notification attests. Where a notification has not been obtained, coverage.status says PARTIAL or NOT_OBTAINED and the list is short on purpose — it is never padded from news reports or another state's calendar.
Rows that rest on a copy of a notification that was not read on a government host are provisional. They are left out unless you ask for them with include=provisional, and they are flagged when returned.
| Parameter | Type | Required | Description |
|---|---|---|---|
| region | string | Required | ISO 3166-2 code, e.g. IN-MH, IN-TS, or IN-CENTRAL for the Central Government list. Short and former codes resolve to it. |
| year | integer | Required | Calendar year |
| category | string | Optional | Comma-separated. Canonical classes (PUBLIC, RESTRICTED, OPTIONAL, LOCAL, BANK, COURT, SPECIAL, OTHER) or the source category (GAZETTED, GENERAL, UNCLASSIFIED, INDUSTRIAL). |
| applies_to | string | Optional | Audience filter, e.g. BANKS, STATE_GOVERNMENT_OFFICES, COURTS |
| scope | string | Optional | District or sub-region name, e.g. Kodagu, Mahe |
| date | string | Optional | A single day, YYYY-MM-DD |
| as_of | string | Optional | Reconstruct the calendar as it stood on this date, before later amendments |
| include | string | Optional | Comma-separated extras: amendments, provisional, undated |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
How far this year's data is attested, subject by subject.
A subject is COMPLETE only when its base notification was read on a government host and no verification item is open against it.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Four-digit year. |
| status | string | Optional | COMPLETE, PARTIAL or NOT_OBTAINED |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Every region this dataset covers, with its aliases.
The ISO 3166-2 code is the identity. Short codes ('MH') and codes a region used to carry ('IN-OR' for Odisha, 'IN-TG' for Telangana) are aliases that resolve to it, and never the other way round.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Optional | Include each region's coverage for this year |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
The notifications a region's year rests on, in the order they were issued.
| Parameter | Type | Required | Description |
|---|---|---|---|
| region | string | Required | ISO 3166-2 code |
| year | integer | Required | Four-digit year. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Rashifal & Daily Jyotish
Moon-sign readings from the classical transit rule. Each graha is reported against the houses Phaladeepika XXVI calls benefic counted from your rashi, with the Vedha obstruction applied and the sloka on every line. Daily, weekly, monthly and yearly, for one rashi or all twelve, in English or Hindi. A separate life-area reading groups the classical transit results by the areas the text itself names.
What is classical here, and what is ours
Every statement in a Rashifal response carries a basis, because the reading mixes two different kinds of claim and a customer is entitled to know which is which.
PRIMARY_TEXT_VERIFIED — the per-graha transit verdict, the Vedha obstruction, Chandrabala and the XXVI.25/30/31/32 qualifiers. These are Phaladeepika XXVI (tr. V. Subrahmanya Sastri, 2nd ed. 1950) and each names its sloka.
ARITHMETICALLY_DERIVED — grouping consecutive days carrying the same verdict into one stretch, and detecting sign changes. No judgement is involved: the verdicts are the text’s, the grouping is arithmetic.
PRODUCT_SYNTHESIS — which stretches are surfaced as favourable or as ones to watch, the headline, the ordering, and the idea of a weekly, monthly or yearly horoscope at all. Phaladeepika XXVI contains no period horoscope. It gives a verdict for a transit, and a transit has a duration. Arranging those durations into a period reading is TathaAstu’s arrangement, and it is labelled rather than presented as scripture.
What the response deliberately does not contain
The transit reading (/v1/rashifal/vedic, its /all form and the daily, weekly, monthly and yearly routes) carries no overall score, no percentage, no ranking of the grahas and no career, money, love or health breakdown. Phaladeepika XXVI gives a verdict for each graha and no rule for combining them, no categories and no ordering, so supplying any of those would mean presenting a TathaAstu construction as a classical rule. Every response states this in not_included, so the absence reads as a boundary rather than as a missing feature. The life-area reading described below is a separate resource; it does not change these responses.
Where the source is genuinely undecided the response says so instead of choosing. The chapter establishes no precedence between XXVI.30, 31 and 32, so where two apply both are returned with the conflict marked unresolved; and because XXVI.30 does not say at which layer “inimical” is judged, the naisargika and compound readings are both reported, with sensitive_to_grade_reading flagging where they differ.
Periods, dates and languages
period_type is daily, weekly, monthly or yearly. Weeks run Monday to Sunday; months and years are calendar ones. date is any day inside the period you want and accepts YYYY-MM-DD, today, tomorrow or yesterday. Relative dates resolve against tz, default Asia/Kolkata — a request at 02:00 IST is still the previous UTC day, so resolving in UTC would serve the wrong reading every night.
lang is en or hi. Hindi is not a translation of the English text and is not recalculated; both render from the same canonical result, so they cannot disagree about the astrology. On the two daily routes lang is optional — omit it and the response is exactly what it was before content existed.
detail=days adds the exhaustive per-day block and is accepted for daily and weekly only. For a month it is about 950 KB and for a year about 10 MB, all of it duplicating what intervals already carries, so longer periods refuse it with DETAIL_NOT_AVAILABLE.
Life areas: career, money, relationships, wellbeing, fortune, travel
/v1/rashifal/vedic/life-areas/daily (one rashi) and /v1/rashifal/vedic/life-areas/daily/all (all twelve) read the same transits as the daily reading and add, for each graha, the result Phaladeepika XXVI.9–24 states for that graha in that house from your Moon sign. A result is placed under an area only where the text itself names that area; a house is never turned into an area by convention. Every factor carries its graha, its house from the rashi, its direction (POSITIVE or NEGATIVE), its state, its contribution and the verse it comes from.
Factor states. EFFECTIVE counts (+1 or −1). OBSTRUCTED (a favourable result blocked by Vedha), VOIDED and RESCUED (cancelled or relieved by the classical qualifying rules) and UNRESOLVED (the classical rules do not settle it) are shown but count 0. Each area reports signal: PRESENT, NEUTRALISED when factors exist but none counts, or NO_SIGNAL when no transit speaks to that area today — in which case nothing is invented to fill it.
Levels are a presentation convention, not a classical score
Career, money and fortune carry a level: VERY_FAVOURABLE, FAVOURABLE, MIXED, NEUTRAL, CHALLENGING, VERY_CHALLENGING or NO_SIGNAL. It is a TathaAstu PRODUCT CONVENTION (versions.score_model), derived from the effective factors with equal weight per factor, and it is not a classical score: the text gives a verdict per graha and no rule for combining them. The counts and the factors behind every level are in the response. There is no numeric score, no percentage and no overall rating across areas. confidence (LOW or MEDIUM, never higher) describes how much classical evidence agrees, not how likely anything is; Moon-sign transit is by the tradition’s own account a broad reading.
Relationships, wellbeing and travel return their factors with level: null and level_status: NOT_PROVIDED.
Wellbeing, money and withheld statements
Health is wellbeing only. The health area speaks of energy, rest, calm and recovery (wellbeing_themes) and always carries a disclaimer. It never diagnoses, never names a disease or injury and never predicts illness; it is not medical advice. Money is a traditional reading, not financial advice, and carries its own disclaimer.
Some classical statements for a placement concern death, injury, a named disease, or the illness of a spouse, child or other person. These are never rendered. Where one was withheld, the area sets restricted_factors_withheld: true with a restricted_note; withheld statements are not counted towards any level.
Colour and gem
attributes.lucky_color is a product presentation convention (classification: PRODUCT_CONVENTION). The colours are the classical ones Phaladeepika II gives each graha, preserved as written; choosing one for the day is TathaAstu’s rule, named in selection_rule: the colour of the first graha whose favourable result is effective today, in a fixed order, otherwise the colour of the weekday’s ruling graha. The texts do not prescribe a daily colour, and the response says so in note.
attributes.gem_reference is reference information only (classification: REFERENCE_ONLY): the gem Phaladeepika II.29 associates with the same graha. It is not a recommendation to wear or buy any gemstone.
Languages and versions
lang follows the platform localization contract. en and hi are rendered: the English document is always returned, and Hindi is added beside it as <field>_local (prediction_local, name_local, level_label_local, …); machine values never change with the language. The localization block echoes language and gives status. Any other supported language returns English with status: NOT_AVAILABLE_ENGLISH_RETURNED and the X-Localization-Missing header — never a silent fallback; an unsupported code is rejected. versions names the calculation, methodology, level model, admitted interpretation table and content release behind every response, and a change to any of them is a new version.
PRO. A personalized daily reading computed from the caller's natal chart and the transits of an explicit target date.
Historical and future dates are supported identically — the target date is required and nothing in the calculation reads the clock.
This is a traditional, rule-based reading, not a prediction. It applies classical Jyotish factors and explicitly declared engine conventions. It is not a scientifically validated prediction or guarantee of future events. reading_basis on each domain says how many factors contributed and is not a confidence, accuracy, likelihood or probability.
Every domain reading references factor_ids in the factors array, and every factor carries the rule and source it came from, so a reading can always be traced back to what produced it. The weights that turn factors into domain scores are engine decisions, published in the response and carrying no classical authority; the rules they weigh do carry sources.
Natal data comes from the stored birth profile. The observer block is where the user is now and fixes the daily Panchang, the sunrise that anchors Tara Bala, and the transit ascendant — it is not the birthplace.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date | string | Required | Target date, YYYY-MM-DD. REQUIRED. (body) |
| observer | object | Required | — (body) |
| language | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. (body) |
| dasha_depth | integer | Optional | — (body) |
| profile_id | integer | Optional | — (body) |
| date_of_birth | string | Optional | — (body) |
| time_of_birth | string | Optional | — (body) |
| latitude | float | Optional | — (body) |
| longitude | float | Optional | — (body) |
| timezone | string | Optional | — (body) |
| profile | string | Optional | — (body) |
PRO. A traditional reading, not a prediction.
For each graha, whether it stands in a house the text calls benefic from your Moon sign, and whether the paired Vedha house obstructs it.
What this does not return, and why. No overall score, no career/money/relationship breakdown, no ranking. Phaladeepika XXVI gives a verdict for each graha and no rule for combining them, no categories and no ordering. Supplying those would mean presenting a TathaAstu construction as a classical rule.
Passing lang adds a rendered content block; omitting it returns exactly the original response.
| Parameter | Type | Required | Description |
|---|---|---|---|
| rashi | string | Required | Mesha..Meena, an English sign name, or 1-12 |
| date | string | Required | Target date, YYYY-MM-DD, or today / tomorrow. REQUIRED. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | IANA timezone that today and tomorrow resolve against. |
PRO. All twelve rashis for one date, identical to twelve single calls. The transit chart is built once and shared.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Target date, YYYY-MM-DD, or today / tomorrow. REQUIRED. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | tz parameter. |
PRO. A traditional, rule-based reading, not a prediction.
Every factor is a classical transit result (Phaladeepika XXVI.9-24) for a graha in a house counted from your Moon sign, admitted through TathaAstu's source and interpretation gates. Death, injury, named disease and the illness of others are never rendered. Levels are a TathaAstu presentation convention, not a classical score; health, relationship and travel carry no level. The existing /v1/rashifal/vedic/daily response is unchanged.
| Parameter | Type | Required | Description |
|---|---|---|---|
| rashi | string | Required | Mesha..Meena, an English sign name, or 1-12 |
| date | string | Optional | YYYY-MM-DD, or today / tomorrow / yesterday. Defaults to today in tz. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | IANA timezone that today resolves against. |
PRO. All twelve rashis for one date; each entry equals the single call.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Optional | YYYY-MM-DD, or today / tomorrow / yesterday. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | tz parameter. |
PRO. One rashi, one period, one language.
period_type is daily, weekly, monthly or yearly. Weeks run Monday to Sunday; months and years are calendar ones. date is any day inside the period you want, so weekly?date=today is this week.
What the classical source supplies and what it does not. Phaladeepika XXVI contains no weekly, monthly or yearly horoscope; it gives a verdict for a transit, and a transit has a duration. Reporting that duration is arithmetic. Arranging those durations into a period reading is TathaAstu's, and every section says which it is. There is no score, no percentage and no ranking anywhere in the response.
By default the response carries intervals, which is every verdict run-length encoded. detail=days adds the exhaustive per-day block for daily and weekly; for monthly and yearly it is refused, because it would be megabytes of duplication.
| Parameter | Type | Required | Description |
|---|---|---|---|
| period_type | string | Required | period_type parameter. (path) |
| rashi | string | Required | Mesha..Meena, an English sign name, or 1-12 |
| date | string | Optional | Any date inside the period: YYYY-MM-DD, today or tomorrow. Defaults to today. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| detail | string | Optional | days adds the exhaustive per-day block; daily and weekly only. |
| tz | string | Optional | tz parameter. |
PRO. All twelve rashis for one period.
The transit spine is computed once and shared across the twelve, rather than recomputing identical planetary positions twelve times.
Yearly all-twelve is several seconds of ephemeris work when cold, so it is meant to be pre-generated; the response reports how many of the twelve had to be built on the spot so that a cold cache is visible in monitoring rather than showing up only as latency.
| Parameter | Type | Required | Description |
|---|---|---|---|
| period_type | string | Required | period_type parameter. (path) |
| date | string | Optional | Target date in YYYY-MM-DD. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| tz | string | Optional | tz parameter. |
Numerology & Gemstones
Lucky number, lucky colour and gemstone reference from the date of birth, in one call. Labelled for what it is: the numbers are modern numerology, not Jyotish; colours and gems are classical reference data, never a prescription.
What one call returns
From date_of_birth alone: birth_number (Mulank, the day of the month reduced to one digit), destiny_number (Bhagyank, every digit of the date reduced to one digit) and lucky_number (the birth number), each with its working, its planet, and that planet’s classical colour and gem; plus lucky_colour. Add time_of_birth, latitude and longitude and the same call adds chart_gem_reference: the rulers of the lagna and Moon sign of the canonical Vedic chart, with their gems and colours.
What is classical and what is not
Numbers: MODERN_NUMEROLOGY, not Jyotish. No classical Jyotish work assigns lucky numbers. The planet for each number follows Cheiro’s table (Cheiro’s Book of Numbers, c. 1926, pp. 33–34) with Rahu and Ketu in place of Uranus and Neptune, as Indian practice does. The response says so in classification, is_classical_jyotish: false and note.
Colours and gems: REFERENCE_ONLY. The planet–gem association is Phaladeepika II.29 (confirmed by Jataka Parijata II.21); the colours are Phaladeepika II.8–14 and II.33–34. lucky_colour joins the numerology step to the classical colour and is labelled PRODUCT_CONVENTION. Choosing a stone by the lagna or Moon-sign ruler is modern practice and is labelled MODERN_PRACTICE; the classical texts that use gems in remedies give them away in donation (Jatakabharanam ch. 34, BPHS ch. 84) rather than wear them. Nothing in the response recommends wearing or buying a gemstone, claims any benefit, or is intended for gambling, lotteries or betting. Every response lists its sources.
Languages
lang follows the platform contract: the English document is always returned and the requested language is added as <field>_local. Prose, gem and colour names are rendered in en, hi, mr, gu, bn, ta, te, kn, ml, pa, de, es and fr; graha and sign names localize in every language the vocabulary has. localization.content_provenance states whether the prose is authored (en, hi) or a machine translation (the other eleven). Any other supported language returns English with status: NOT_AVAILABLE_ENGLISH_RETURNED.
PRO. One call, from the date of birth.
Numbers (MODERN_NUMEROLOGY, not classical Jyotish). birth_number (Mulank) is the day of the month reduced to one digit; destiny_number (Bhagyank) is every digit of the date reduced to one digit; lucky_number is the birth number. Each number's planet comes from Cheiro's table (*Book of Numbers*, pp. 33-34) with Rahu and Ketu in place of Uranus and Neptune. No classical Jyotish work assigns lucky numbers, and the response says so.
Colours and gems. Each number carries its planet's classical colour (Phaladeepika II.8-14, II.33-34) and gem (Phaladeepika II.29), as REFERENCE_ONLY. lucky_colour is the colour of the lucky number's planet, a labelled PRODUCT_CONVENTION. Given time_of_birth, latitude and longitude, chart_gem_reference adds the rulers of the lagna and Moon sign of the canonical Vedic chart and their gems; choosing a stone that way is modern practice and is labelled so. The classical texts that use gems in remedies give them away in donation, not wear them. Nothing here recommends wearing or buying a gemstone, and no benefit is claimed. Never intended for gambling, lotteries or betting.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_of_birth | string | Required | YYYY-MM-DD |
| time_of_birth | string | Optional | HH:MM or HH:MM:SS, local. With latitude and longitude, adds the chart-based gemstone reference. |
| latitude | float | Optional | latitude parameter. |
| longitude | float | Optional | longitude parameter. |
| timezone | string | Optional | IANA timezone of the birth place |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Classical Readings
What the classical texts teach about a birth chart, with book, chapter and verse for every statement. Readings, not predictions: where a text leaves a point undefined or two texts disagree, the response says so instead of choosing.
Appearance
Form. Bṛhat Jātaka 5.23, repeated by Phaladīpikā XVI.1 and Jātaka Pārijāta III.76, teaches that the body resembles the lord of the navāṁśa rising at birth; the response names that planet and gives its described form (Bṛhat Jātaka 2.8-2.11). Signs. The features the texts give for the lagna sign (Phaladīpikā IX) and for the Moon’s sign (Bṛhat Jātaka 17) are returned side by side, with the signs where the two lists disagree. 1st house. Planets in the lagna add the texts’ bodily clauses (only neutral or favourable ones are served). Not computed: the verse’s alternative “or the strongest planet” (no text defines strength), complexion (the texts disagree on colours), height, weight and limb proportions.
Soul origin
Bṛhat Jātaka 25.14 (Jātaka Pārijāta V-A.14 has the same verse) associates the lord of the drekkāṇa held by the stronger of the Sun and Moon with the world a soul is said to come from: Jupiter, the gods; Moon or Venus, the ancestors; Sun or Mars, tiraśca (tiryak); Saturn or Mercury, the infernal world. The rank is high, middling or low as that lord is exalted, elsewhere or debilitated. Verse 25.15 gives the world a soul is said to go to (a planet in the 7th, with the commentator Bhaṭṭotpala adding the 6th and 8th, else the 6th- and 8th-house drekkāṇa lords) and one mokṣa yoga. The text does not define the stronger luminary, so both the Sun-based and Moon-based results are returned and selected is set only when they agree.
Nature
The disposition Bṛhat Jātaka 16 gives for the Moon’s nakshatra (Jātaka Pārijāta IX as a second witness) and Bṛhat Jātaka 17 for the Moon’s sign, with Sārāvalī 23 as a second witness (no published translation of that chapter was available, so its English is TathaAstu’s rendering of the Sanskrit), and Phaladīpikā IX for the lagna. Only temperament traits are served, each with its Sanskrit and verse. Clauses about wealth, family, health or events are predictions and abusive wording is withheld; both are counted in withheld, never printed. A trait that is not flattering is served as the text gives it, with tone: unfavourable. Bṛhat Jātaka 17.13 makes the full results depend on the strength of the sign, its lord and the Moon; the text gives no measure, so this is stated, not evaluated.
reading (plain sentences, each with its verse) and interpretation: a readable paragraph with strengths, challenges, relationships and work, written by TathaAstu from the verses, the planets’ classical nature and common tradition, and labelled as such in interpretation.authorship. The spouse reading also gives partner_any_chart from the 7th lord, labelled a modern convention.
Spouse
The texts are one-way, and the response keeps their frame. The husband, from a woman’s chart: Bṛhat Jātaka 24.11-12 (Sārāvalī 45.21-24) describes him by the lord of the 7th sign or of the 7th sign in the navāṁśa; both are returned and selected is set only when they agree. Jātaka Pārijāta XVI.49 and XVI.53 add planets in the 7th. The wife, from a man’s chart: the texts give no general rule, only single conditions (Sārāvalī 30.68, Phaladīpikā VIII.12, BPHS Pathak 13.56), returned when the chart meets them. TathaAstu never infers the person’s gender; frame filters the two cases (default both). Derogatory, caste and chastity verdicts, and the timing, number or loss of marriages, are not served.
Every response carries notice, sources per item and texts_differ. The wording is always “the text teaches”, never a statement about the person. BPHS is not cited for appearance or soul origin: the Pathak edition has no such verses.
A classical reading, not a prediction. Form: Bṛhat Jātaka 5.23 (repeated by Phaladīpikā XVI.1 and Jātaka Pārijāta III.76) teaches that the body resembles the lord of the navāṁśa rising at birth; that planet's described form is returned (BJ 2.8-2.11). Lagna sign features (Phaladīpikā IX) and Moon sign features (Bṛhat Jātaka 17) are returned side by side, and planets in the 1st house add the texts' bodily clauses. Every item cites book and verse; points where the texts disagree are listed under texts_differ, and what the texts leave undefined (the strongest planet, complexion, height) is not computed.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local time (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone of the birth place (body) |
A classical reading, not a prediction. Moon sign: Bṛhat Jātaka 17 (with Sārāvalī 23 as a second witness); lagna: Phaladīpikā IX. Only temperament traits are served, each with its verse; clauses about wealth, family, health or events (predictions) and abusive wording are withheld and only counted. Unflattering classical traits are served with tone: unfavourable. Where the texts or translators disagree it is listed under texts_differ.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local time (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone of the birth place (body) |
A classical reading, not a prediction. Bṛhat Jātaka 25.14 associates the lord of the drekkāṇa held by the stronger luminary with the world a soul is said to come from (Jupiter: gods; Moon/Venus: ancestors; Sun/Mars: tiryak; Saturn/Mercury: infernal), and 25.15 gives the world it is said to go to and the mokṣa yoga. The text does not define the stronger luminary, so the Sun- and Moon-based results are both returned and selected is set only when they agree. Every item cites book and verse.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local time (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone of the birth place (body) |
A classical reading, not a prediction. The texts are one-way: Bṛhat Jātaka 24.11-12 (with Sārāvalī 45.21-24) describes the husband, from a woman's chart, by the lord of the 7th sign or of the 7th navāṁśa sign; single conditions in Sārāvalī, Phaladīpikā and BPHS describe the wife, from a man's chart. Every statement keeps that frame; gender is never inferred (use frame to filter). Derogatory verdicts, timing and loss of marriage are not served; where the two lords differ both are returned and none is selected.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| date_of_birth | string | Required | YYYY-MM-DD (body) |
| time_of_birth | string | Required | HH:MM or HH:MM:SS, local time (body) |
| latitude | float | Required | — (body) |
| longitude | float | Required | — (body) |
| timezone | string | Optional | IANA timezone of the birth place (body) |
| frame | string | Optional | both | husband_in_womans_chart | wife_in_mans_chart. The texts frame every rule one way; this only filters, it never infers gender. (body) |
Enterprise Data Delivery (bulk datasets)
Complete, versioned datasets for local storage: an Annual Calendar for a location and year, Life-Area Rashifal for a month or year, and the Location Catalogue for a country or state. Requested asynchronously and delivered as a signed, compressed download. Enterprise plan required (no separate grant).
Who can use these endpoints
Enterprise Data Delivery is included in the Enterprise plan (and in Enterprise Evaluation keys). There is no separate per-account grant: every Enterprise account may request any year the API serves, every language and calculation-ready location, and the Location Catalogue for every country, state and place type. Other plans answer 402 plan_upgrade_required. GET …/datasets/coverage shows what your account may request and what it has used.
Monthly dataset allowance
Each Enterprise account may generate up to 30 new datasets per month for each dataset family (Annual Calendar, Life-Area Rashifal, Location Catalogue). Downloading a dataset again, and a re-issue that TathaAstu causes by updating the data, never count. When the month’s allowance is used up the answer is 429 dataset_quota_exhausted; previously issued datasets stay downloadable. Paging the catalogue (/v1/locations/catalogue/pages) is an ordinary API request and does not use this allowance. A year outside the range the API serves answers 422 year_out_of_range.
How a dataset is delivered
POST the request (send an Idempotency-Key to make retries safe). The answer is 202 while the dataset builds and 200 once it is ready; poll the links.self URL. A ready dataset carries a self-describing manifest (versions, filter, row counts, SHA-256) and a signed download.url under /v1/files/…, valid for two hours, for your account only, needing no API key. Datasets are immutable and content-addressed: asking again for the same data returns the same dataset and is not charged again. Each dataset first issued to your account counts as one dataset unit; these requests do not use your monthly request quota.
What is in each dataset
Annual Calendar: every date of the year for one calculation-ready location (/v1/locations 1–27) and language — Panchang limbs, sunrise/sunset/moonrise/moonset, Hindu calendar, festivals and Ekadashi/Purnima/Amavasya by observance, Hora, Choghadiya, Muhurat including durmuhurta, varjyam and amrit kaal, conditions and eclipses — exactly as /v1/calendar/day and /v1/day-context return them. Life-Area Rashifal: every day of a month or year, all twelve rashis, exactly as /v1/rashifal/vedic/life-areas/daily/all; no monthly or yearly synthesis. Location Catalogue: the gazetteer behind /v1/locations/search for a country, state and place type, with GeoNames attribution (CC BY 4.0); only places linked to a curated /v1/locations id are calculation_ready.
Creates or reuses an immutable, compressed annual calendar for one calculation-ready location, one year and one language: every date with Panchang, sunrise/sunset, moonrise/moonset, festivals, observances, Hora, Choghadiya, Muhurat (incl. durmuhurta, varjyam, amrit kaal), Hindu calendar, conditions and eclipse. 202 while it builds, 200 when ready; poll the returned link or subscribe to the calendar.dataset.ready webhook. Enterprise plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| location_id | integer | Required | A calculation-ready curated location (1-27), see /v1/locations. (body) |
| year | integer | Required | Calendar year inside the available window (see /coverage). (body) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. (body) |
| format | string | Optional | json.gz (one document) or ndjson.gz (manifest line, 12 month summaries, then one line per day). (body) |
List this account's Annual Calendar Dataset requests
| Parameter | Type | Required | Description |
|---|---|---|---|
| before | integer | Optional | Cursor: next of the previous page |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Annual Calendar Dataset: what this account may request
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Annual Calendar Dataset status and download
| Parameter | Type | Required | Description |
|---|---|---|---|
| request_id | string | Required | request_id parameter. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Cancel a queued Annual Calendar Dataset request
| Parameter | Type | Required | Description |
|---|---|---|---|
| request_id | string | Required | request_id parameter. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
The file a READY dataset's download.url points to. No API key: the link itself is the credential, valid for 2 hours and only for the account and request it was issued for.
| Parameter | Type | Required | Description |
|---|---|---|---|
| dataset_id | string | Required | dataset_id parameter. (path) |
| u | integer | Required | Account the link was issued to |
| r | string | Required | Request id |
| exp | integer | Required | Expiry (Unix seconds) |
| sig | string | Required | HMAC signature |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
The file a READY dataset's download.url points to. No API key: the link itself is the credential, valid for 2 hours and only for the account and request it was issued for.
| Parameter | Type | Required | Description |
|---|---|---|---|
| dataset_id | string | Required | dataset_id parameter. (path) |
| u | integer | Required | Account the link was issued to |
| r | string | Required | Request id |
| exp | integer | Required | Expiry (Unix seconds) |
| sig | string | Required | HMAC signature |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
The file a READY dataset's download.url points to. No API key: the link itself is the credential, valid for 2 hours and only for the account and request it was issued for.
| Parameter | Type | Required | Description |
|---|---|---|---|
| dataset_id | string | Required | dataset_id parameter. (path) |
| u | integer | Required | Account the link was issued to |
| r | string | Required | Request id |
| exp | integer | Required | Expiry (Unix seconds) |
| sig | string | Required | HMAC signature |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
A versioned, signed-download copy of the gazetteer behind /v1/locations/search for one country, optionally one state and one place type: stable ids (gn:<geonames id>), names, administrative hierarchy, coordinates and their precision, IANA timezone, confidence and ambiguity, GeoNames attribution (CC BY 4.0). Only places linked to a curated /v1/locations id are calculation_ready. 202 while it builds, 200 when ready. Enterprise plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| country | string | Required | ISO 3166-1 alpha-2. IN, NP and LK to village level; any other country at city level. (body) |
| state | string | Optional | ISO 3166-2 state/province code (e.g. IN-MH); omitted = the whole country. (body) |
| type | string | Optional | CITY, TOWN, VILLAGE, LOCALITY, SEAT or OTHER; omitted = every type. (body) |
| format | string | Optional | ndjson.gz (lines tagged by record: one manifest, one per place, one end line with the row count and content hash) or json.gz. (body) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. (body) |
List this account's Location Catalogue requests
| Parameter | Type | Required | Description |
|---|---|---|---|
| before | integer | Optional | Cursor: next of the previous page |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Location Catalogue: what this account may request
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Location Catalogue status and download
| Parameter | Type | Required | Description |
|---|---|---|---|
| request_id | string | Required | request_id parameter. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Cancel a queued Location Catalogue request
| Parameter | Type | Required | Description |
|---|---|---|---|
| request_id | string | Required | request_id parameter. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
The Location Catalogue dataset, read through the API in pages: the same rows, fields and order as the dataset for the same country/state/type, with items, limit, offset, total and next_offset (null on the last page). Pass catalogue_version from the first page to every later page; if the catalogue is refreshed meanwhile the API answers 409 instead of mixing versions. Available on the Enterprise plan (and Enterprise Evaluation keys). Each page is one API request against your quota and rate limit. Place data (c) GeoNames contributors, CC BY 4.0 - attribution required.
representation=locations_v1 returns each item with the /v1/locations field names: id (the GeoNames id - not a /v1/locations id; the calculation endpoints' location_id accepts only curated ids, given here as curated_location_id), name_en (the romanised GeoNames name, not an English translation), latitude, longitude, timezone (source IANA zone), timezone_offset (hours, on the envelope's timezone_offset_as_of; set it with offset_date), country_code, region (the tradition the engine's coordinate resolver applies; region_confidence HIGH/MEDIUM/LOW, null when the point cannot be placed), subdivision_code, is_default (1 only for the curated default location) and name_native (null: no verified native-script name). The catalogue's identity, provenance and quality fields are kept, and review_flags lists source-data items under review (e.g. timezone_outside_country).
Calculating for a selected place: if curated_location_id is set, pass it as location_id; otherwise pass lat, lon and tz (the item's latitude, longitude, timezone). calculation_ready=false means the place is not a verified curated location - coordinate-based calculations are still available.
Types: CITY, TOWN, VILLAGE, LOCALITY, SEAT, OTHER (OTHER is mostly GeoNames PPLQ - abandoned places). To fetch settlements only, page each type separately.
| Parameter | Type | Required | Description |
|---|---|---|---|
| country | string | Optional | Required. ISO 3166-1 alpha-2. IN, NP and LK to village level; any other country at city level (places of 1,000 people or more). |
| offset | integer | Optional | Rows to skip. 0 for the first page; then next_offset. |
| limit | integer | Optional | Rows per page, 1-2000. Default 100. |
| state | string | Optional | ISO 3166-2 state code, e.g. IN-MH. |
| type | string | Optional | CITY, TOWN, VILLAGE, LOCALITY, SEAT or OTHER. |
| catalogue_version | string | Optional | Pass back the value from the first page; a refresh between pages then answers 409. |
| representation | string | Optional | catalogue (default: the original item shape) or locations_v1 (items with the /v1/locations field names plus catalogue identity and quality fields). |
| offset_date | string | Optional | locations_v1 only. YYYY-MM-DD: the date timezone_offset is computed for. Default: today (UTC). Pass the same date on every page of one import. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Every day of the month or year for all twelve rashis, exactly as /v1/rashifal/vedic/life-areas/daily/all returns it: career, money, relationship, health & wellbeing, fortune and travel, with the same versions, levels, restrictions and disclaimers. A delivery format only: no monthly or yearly synthesis and no score. 202 while it builds, 200 when ready. Enterprise plan.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
| period | string | Optional | month (one calendar month) or year (one calendar year). (body) |
| year | integer | Required | Year inside the available window (see /coverage). (body) |
| month | integer | Optional | 1-12; required when period is month. (body) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. (body) |
| format | string | Optional | json.gz or ndjson.gz (manifest line, then one line per day with the twelve readings). (body) |
List this account's Life-Area Rashifal Dataset requests
| Parameter | Type | Required | Description |
|---|---|---|---|
| before | integer | Optional | Cursor: next of the previous page |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Life-Area Rashifal Dataset: what this account may request
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Life-Area Rashifal Dataset status and download
| Parameter | Type | Required | Description |
|---|---|---|---|
| request_id | string | Required | request_id parameter. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Cancel a queued Life-Area Rashifal Dataset request
| Parameter | Type | Required | Description |
|---|---|---|---|
| request_id | string | Required | request_id parameter. (path) |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Status, Pricing & Change History
Service health, the published plans, and the machine-readable change history behind the NEW / MODIFIED badges shown across the reference.
What an account's reports will look like. Read only.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
The day's Chandrabala and Tarabala for everyone at once, as a printed panchang lists them: which birth signs have good Chandrabala and which birth nakshatras have good Tarabala, for each part of the Panchang day (sunrise to next sunrise) in which the Moon's sign or nakshatra is unchanged, with the times it changes.
Chandrabala: the Moon's house from the birth sign; 1, 3, 6, 7, 10, 11 are good (Phaladeepika XXVI.4). Tarabala: the nine-fold tara from the birth nakshatra; Sampat, Kshema, Sadhaka, Mitra and Parama Mitra are good, Vipat, Pratyari and Vadha are not (Muhurta Chintamani 4.11-13). The Janma tara is listed as mixed: good for most work, avoided for travel, medicine, shaving, disputes and surgery (MC 5.17). For one person's reading use POST /v1/jyotish/daily; both use the same rules.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | Date YYYY-MM-DD |
| lat | float | Optional | Latitude (or pass region) |
| lon | float | Optional | Longitude (or pass region) |
| region | string | Optional | Canonical region or supported ISO 3166-2 state code (e.g. IN-TN); fills coords when lat/lon omitted. Unsupported values return 422. |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Asia/Kolkata. Omit to use the region default (+05:30 / +05:45). |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
What changed in the API, when, and what it used to do.
Entries are append-only and newest first. A modified endpoint gets a new entry rather than an edit to the old one, so the previous contract stays readable — which is what you need if a change broke you.
breaking is true only where a request that worked before now fails or means something different. The same source feeds the NEW/MODIFIED badges in the API reference, so a badge and this list cannot disagree.
| Parameter | Type | Required | Description |
|---|---|---|---|
| endpoint | string | Optional | Only entries touching this path, e.g. /v1/panchang |
| status | string | Optional | NEW | MODIFIED | DEPRECATED | FIXED |
| since | string | Optional | Only entries on or after this date, YYYY-MM-DD |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Detailed health check.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Every plan the website shows, priced in one currency. Read from the same plans table the admin panel edits, so a price change needs no deploy. No API key required.
| Parameter | Type | Required | Description |
|---|---|---|---|
| currency | string | Optional | INR or USD. Defaults by visitor country, then INR. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Get API status and statistics.
| Parameter | Type | Required | Description |
|---|---|---|---|
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
PRO. Find Tara Asta (heliacal setting) and Tara Udaya (heliacal rising) events for Budh (Mercury), Shukra (Venus), Mangal (Mars), Guru (Jupiter) or Shani (Saturn).
The calculation follows Sūrya Siddhānta IX.2–IX.9: the kālāṃśa — the interval between the Sun's and the planet's horizon crossings — is compared against the classical threshold. Mars 17, Saturn 15 and Jupiter 11 each have a single limit (IX.6). Mercury and Venus have two, and which applies is fixed by the conjunction the apparition belongs to, not by the planet's motion on the day: Venus 8 approaching or leaving inferior conjunction and 10 for superior (IX.7), Mercury 12 and 14 respectively (IX.8). The limit is set at the Asta and held until the Udaya, so a retrograde station occurring inside a disappearance cannot change it.
It is not an ecliptic longitude separation, and it is not the chart-combustion orb.
The Moon is deliberately not served here: Sūrya Siddhānta treats its heliacal rising and setting at the head of chapter X, under a different rule, so answering for it under this one would apply the wrong rule.
Because the criterion is a horizon relationship, the result depends on where you are. New Delhi and Lima differ by about a week for Shukra Asta 2026. Supplying a timezone does not substitute for supplying coordinates.
astronomical_date is the local civil date *containing* the calculated event instant. It is not an assertion of the date printed by any particular Panchang or almanac; see provenance.date_assignment in the response.
Range is limited to 366 days per request.
| Parameter | Type | Required | Description |
|---|---|---|---|
| planet | string | Required | budh|mercury, shukra|venus, mangal|kuja|mars, guru|jupiter, shani|saturn |
| lat | float | Required | Observer latitude. REQUIRED — Tara Asta/Udaya is a local horizon event and the coordinates drive the astronomy. |
| lon | float | Required | Observer longitude. REQUIRED. |
| start_date | string | Required | Window start, YYYY-MM-DD |
| end_date | string | Required | Window end, YYYY-MM-DD (inclusive) |
| tz | string | Optional | IANA timezone for presentation only, e.g. Asia/Kolkata. It never changes the astronomy. Omit it and the zone is resolved from the coordinates. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
PRO. Is the planet currently Asta?
The verdict is read off this engine's own Asta/Udaya events: the instant is Asta when it falls at or after an Asta and before the Udaya that closes it, and visible otherwise. governing_event names the event the answer came from, so it can be checked against /v1/tara/events directly.
This endpoint does not evaluate visibility independently, and that is deliberate. Sūrya Siddhānta IX specifies event computation and provides no separate point-in-time visibility rule, so deriving the state from the event stream keeps one implementation of the criterion rather than two that can disagree. It is an engineering architecture chosen to stay faithful to the source's event-oriented model; the text is not claimed to prescribe it.
kalamsa is descriptive, not the verdict. Comparing it against threshold will disagree with is_asta near opposition, where the kālāṃśa folds through ±180° — a superior planet twelve hours from the Sun is as visible as it ever gets, and the folded value can read negative. That is the fold, not a contradiction.
Resolving the enclosing apparition costs a bounded scan, so this is not a single-sample lookup: expect roughly 100–500 ms depending on the planet's synodic period. If no governing event is found inside the search, the response is status: "indeterminate" rather than an assumption of visibility — absence of an Asta in the searched span is not evidence that none occurred.
Omitting at uses the current moment in the resolved zone, via the same now_in_zone helper the /now family already uses — this endpoint does not invent its own idea of "now".
| Parameter | Type | Required | Description |
|---|---|---|---|
| planet | string | Required | budh|mercury, shukra|venus, mangal|kuja|mars, guru|jupiter, shani|saturn |
| lat | float | Required | Observer latitude. REQUIRED. |
| lon | float | Required | Observer longitude. REQUIRED. |
| at | string | Optional | Instant to evaluate, ISO-8601. A naive value is read in the resolved zone; omit it entirely for the current moment there. |
| tz | string | Optional | IANA timezone for presentation only. Omit it and the zone is resolved from the coordinates. |
| lang | string | Optional | Response language: one of the codes below (GET /v1/i18n/languages lists them with their names and coverage; hi-IN is accepted as hi, en-IN/en-GB/en-US as en). Canonical fields never change with the language; localized values are ADDED as <field>_local. Accepted does not mean fully translated: a value with no verified translation in that language has no _local field (never an English stand-in), and the response header X-Localization-Missing counts them. An unknown code is 400 unsupported_language. |
Error Codes
All errors return JSON with error, message, and optional docs link.
error: "plan_upgrade_required", required_plan and current_plan.Caching & Data Reuse
You are expected to cache. A fresh API call per end user is not required.
Permitted: cache API responses on your own servers, store them in your own database, and serve them to the users of your own application.
Not permitted: redistributing, reselling, sublicensing or publishing the underlying TathaAstu dataset as a standalone dataset or service, presenting it as your own independently sourced data, or using caching to stay within a plan limit you would otherwise exceed.
Retention: You may retain cached responses for as long as reasonably necessary to operate your application, subject to the terms applicable to your account. If our published data is materially corrected or updated, we recommend refreshing affected cached results using the data-version information described below.
Knowing when to refresh: Panchang responses carry
engine.data_version and festival responses carry
_engine.rules_snapshot_version. Store the value with the data you cache and compare it
later; when it changes, refresh. /v1/changelog lists dated changes to endpoints and data.
For planned material changes to published data we aim to give two to three days’ advance notice where reasonably practicable; this does not cover routine deployments. Corrections for accuracy, security or legal compliance may be applied sooner.
Full terms: tathaastuapi.com/terms (Caching and Data Storage).
Rate Limits & Plans
Limits are per-API-key. Every response includes headers so you can track usage in real-time.
| Plan | Requests / Month | Requests / Min | Endpoints | Price |
|---|---|---|---|---|
Free | 500 | 10 | Core panchang, timings, festivals, rahukaal | ₹0 |
Starter | 10,000 | 60 | All core endpoints + Bulk endpoints | ₹299/mo |
Pro | 100,000 | 200 | All endpoints incl. Muhurat, Bulk & Calendar | ₹999/mo |
Business | 500,000 | 500 | All endpoints + Shastric conditions, Event suitability, Day context | ₹2,999/mo |
Enterprise | Unlimited | Custom | + Negotiated volume; SLA and dedicated support by agreement | Custom |
X-RateLimit-Plan: free X-RateLimit-Limit: 500 X-RateLimit-Remaining: 347 X-RateLimit-Used: 153
The monthly quota resets on the 1st of each calendar month. The request that would exceed it — the 501st on Free — returns 429 with error: "quota_exceeded". X-RateLimit-Warning appears once 75% and 90% of the quota is used. Endpoints outside your plan return 402 plan_upgrade_required and do not count toward the quota.
Upgrade directly from the developer dashboard. Enterprise plans are arranged by agreement — negotiated volume, SLA and dedicated support.
Upgrade Plan →Coverage & Engine
TathaAstu uses a two-path architecture — transparent to clients.
lat/lon and the Panchang is computed for that place: sunrise, sunset and the tithi/nakshatra boundaries are derived for those coordinates, not mapped onto an Indian city. The civil clock is resolved from the coordinates with daylight saving applied, or name the zone yourself with tz (any IANA zone, e.g. Europe/Paris, America/New_York). Every response reports the zone it used in location.timezone. The 15 pre-computed locations are a fast path, not a limit — coordinates anywhere on Earth are computed live.engine.name, engine.version, engine.calculation, and engine.ayanamsa so clients can always verify the calculation method.⚡ Interactive API Reference
Explore and test every endpoint in your browser. Powered by Swagger UI. Requires a valid API key from your dashboard.
Make sure your FastAPI server is running at
api.tathaastuapi.com.All 141 endpoints, parameters, and response schemas will be available here.
🧪 Try It Live
Real calls to the production API. Enter your key once and all panels will use it.
Switch to API Reference for Swagger UI with all 141 endpoints, parameter schemas, and auto-generated code samples.