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/premium-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/premium-report ← 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/premium-report ← 60+ page PDF
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" }
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.
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.
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 | Language code |
| tz | string | Optional | IANA timezone for the civil clock, e.g. Europe/Paris. Optional: derived from lat/lon when omitted, then the region default. |
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 | ISO language code for transliterated names. Defaults to English. |
| 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 | Language code |
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 | ISO language code for transliterated names. Defaults to English. |
| 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 | Language code |
| 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 |
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 |
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.
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 |
| lang | string | Optional | Language code |
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.
| 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. |
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 | 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. |
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}verification: "verified" | "computed" | "unsupported"source
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). |
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 | 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. |
Search festivals by name or tag.
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Optional | Search query |
| tag | string | Optional | Filter by tag |
| year | integer | Optional | Four-digit year. |
| lang | string | Optional | ISO language code for transliterated names. Defaults to English. |
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 | 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. |
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. |
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. |
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 | Language code |
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 | ISO language code for transliterated names. Defaults to English. |
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).
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Year |
| location_id | integer | Optional | Supported location id. Takes precedence over lat/lon. |
| lang | string | Optional | ISO language code for transliterated names. Defaults to English. |
Get Hindu month information (Amanta, Purnimanta, Saura Maasa).
| 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. |
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. |
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. |
Muhurat Finder
Find the most auspicious date-time windows for a specific event type within a date range, ranked by classical shastric score.
| 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). |
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. |
Get all eclipses for a specific year.
| Parameter | Type | Required | Description |
|---|---|---|---|
| year | integer | Required | Four-digit year. |
Get detailed eclipse information.
| Parameter | Type | Required | Description |
|---|---|---|---|
| eclipse_id | integer | Required | Eclipse identifier. (path) |
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, and an overall compatibility assessment.
| Parameter | Type | Required | Description |
|---|---|---|---|
| person1 | object | Required | Object with name, date, time, lat, lon |
| person2 | object | Required | Object with name, date, time, lat, lon |
curl -X POST https://api.tathaastuapi.com/v1/compatibility \ -H "X-API-Key: YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{ "person1": {"name": "Arjun", "date": "1990-05-15", "time": "06:30", "lat": 28.6, "lon": 77.2}, "person2": {"name": "Priya", "date": "1992-08-22", "time": "14:15", "lat": 28.6, "lon": 77.2} }'
Retrieve a previously computed compatibility analysis by its ID.
Full human-readable compatibility report in JSON. Supports lang=en/hi.
| Parameter | Type | Required | Description |
|---|---|---|---|
| person_a | object | Required | — (body) |
| person_b | object | Required | — (body) |
Lightweight compatibility score API.
| Parameter | Type | Required | Description |
|---|---|---|---|
| bride_dob | string | Required | Bride DOB YYYY-MM-DD |
| bride_time | string | Required | Bride time HH:MM |
| bride_lat | float | Required | Bride latitude |
| bride_lon | float | Required | Bride longitude |
| groom_dob | string | Required | Groom DOB YYYY-MM-DD |
| groom_time | string | Required | Groom time HH:MM |
| 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 |
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,
"include": "timings,festivals" // optional
}
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.
Get list of all supported languages (50+).
No parameters.
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 | ISO language code for transliterated names. Defaults to English. |
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 | ISO language code for transliterated names. Defaults to English. |
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. |
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 | ISO language code for transliterated names. Defaults to English. |
Kundli Reports
A free teaser for preview and a full premium report. The teaser is the same chart the paid report is built from, so nothing changes between the two.
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 |
|---|---|---|---|
| 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 |
|---|---|---|---|
| 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 |
|---|---|---|---|
| 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 |
|---|---|---|---|
| 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: lagna, grahas, whole-sign houses with Placidus cusps alongside, validated vargas (D1/D7/D9/D10/D30) and Vimshottari dasha to three levels. Every response echoes the exact calculation conventions used. /v1/birth-chart is unchanged and remains available.
| Parameter | Type | Required | Description |
|---|---|---|---|
| include_yogas | boolean | Optional | Include classical yogas from the existing engine |
| include_shadbala | boolean | Optional | Include Shadbala from the existing engine |
| name | string | Optional | — (body) |
| 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 | — (body) |
| profile | string | Optional | — (body) |
| node_type | string | Optional | "mean" or "true" (body) |
| dasha_levels | integer | Optional | — (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 |
|---|---|---|---|
| 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.
Get list of predefined locations with coordinates.
No parameters.
Get details for a specific location.
| Parameter | Type | Required | Description |
|---|---|---|---|
| location_id | integer | Required | Supported location id. Takes precedence over lat/lon. (path) |
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 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 |
Detailed health check.
No parameters.
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 |
|---|---|---|---|
| date | string | Required | Target date, YYYY-MM-DD. REQUIRED. (body) |
| observer | object | Required | — (body) |
| language | string | Optional | — (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) |
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. |
Get API status and statistics.
No parameters.
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. |
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. |
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 95 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 95 endpoints, parameter schemas, and auto-generated code samples.