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.
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.7.15"
<?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.7.15",
"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 1700–3100 date range. Automatically detects region (India/Nepal/Kashmir) from coordinates. Nepal gets +05:45 timezone. Includes engine version attribution on every response.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | YYYY-MM-DD. Range 1700–3100 |
| lat | float | Required | Latitude −90 to 90 |
| lon | float | Required | Longitude −180 to 180 |
| region | string | Optional | Auto-detected. Override: NORTH_INDIA, SOUTH_INDIA, NEPAL, KASHMIR |
| include | string | Optional | Comma-separated extras: timings, hora, choghadiya, festivals, shastra |
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.
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. |
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. |
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 | YYYY-MM-DD |
| lat | float | Required | Latitude |
| lon | float | Required | Longitude |
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. |
/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 | YYYY-MM-DD |
| lat | float | Required | Latitude (-90 to 90) |
| lon | float | Required | Longitude (-180 to 180) |
| location_id | int | Optional | Predefined location ID for stored panchang/festivals (default: 2) |
| lang | string | Optional | Language code (default: en) |
| region | string | Optional | Region override (auto-detected if omitted) |
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. |
Webhooks
Receive push notifications instead of polling. Register an HTTPS endpoint, subscribe to events, and verify every delivery with its HMAC signature.
X-TathaAstu-Signature: sha256=<hex>. The signed payload is "<timestamp>.<raw body>" using your endpoint secret. Always verify before trusting a delivery.Events
| Event | When it fires |
|---|---|
panchang.daily | Daily digest of that day’s Panchang for your location |
festival.reminder | N days before a festival or vrat (configurable per endpoint) |
eclipse.upcoming | An eclipse falls within the next 7 days |
account.quota_threshold | Monthly usage crosses 80% or 100% |
account.key_created, account.key_revoked | API key lifecycle changes |
account.payment_succeeded, account.payment_failed | Billing outcomes |
Register an endpoint
curl -X POST https://tathaastuapi.com/api/webhooks \ -H "Authorization: Bearer YOUR_JWT" \ -H "Content-Type: application/json" \ -d '{"url":"https://yourapp.com/hooks/tathaastu", "events":["panchang.daily","festival.reminder"], "location_id":1,"reminder_days_before":1}'
The response contains secret — shown once. Store it. Roll it later with POST /api/webhooks/{id}/rotate-secret.
Verify a delivery
import hmac, hashlib def verify(secret, headers, raw_body): ts = headers["X-TathaAstu-Timestamp"] sig = headers["X-TathaAstu-Signature"] mac = hmac.new(secret.encode(), f"{ts}.".encode() + raw_body, hashlib.sha256) return hmac.compare_digest(sig, "sha256=" + mac.hexdigest())
Delivery & retries
| Behaviour | Detail |
|---|---|
| Success | Any 2xx response within 10 seconds |
| Retries | 5 attempts with backoff 1m → 5m → 30m → 2h |
| Idempotency | X-TathaAstu-Event-Id is stable per event — dedupe on it |
| Auto-disable | After 20 consecutive failures; re-enable from the dashboard |
| Delivery logs | GET /api/webhooks/{id}/deliveries |
402 plan_upgrade_required.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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date | string | Required | YYYY-MM-DD |
| region | string | Optional | IN, IN-MH, IN-TN, IN-KA, NEPAL… filters regional festivals |
| lang | string | Optional | Language code for festival names (en, hi, ta, te…) |
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 | Year |
| month | integer | Required | Month (1–12) |
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. |
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. |
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 | 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 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. |
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. |
Shastric Conditions ENTERPRISE — 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 |
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.
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. |
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.
| 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. |
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, 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, 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 | 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 |
| 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. For each graha the reading reports whether it stands in a house Phaladeepika XXVI calls benefic counted from your rashi, and whether the paired Vedha house obstructs it, with the sloka on every line. Daily, weekly, monthly and yearly, for one rashi or all twelve, in English or Hindi.
What is classical here, and what is ours. Every statement carries a basis. PRIMARY_TEXT_VERIFIED is the per-graha verdict, the Vedha obstruction, Chandrabala and the XXVI.25/30/31/32 qualifiers. ARITHMETICALLY_DERIVED is grouping consecutive days that carry the same verdict into one stretch. PRODUCT_SYNTHESIS is which stretches are surfaced, the headline, the ordering — and the idea of a weekly, monthly or yearly horoscope at all, because 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 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, so supplying any of those would mean presenting a TathaAstu construction as a classical rule. The life-area reading below is a separate resource and does not change these responses. Every response says so in not_included. Where the source is genuinely undecided the response says that too rather than choosing — the chapter sets no precedence between XXVI.30, 31 and 32, so where two apply both are returned with the conflict marked unresolved.
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.
The classical transit rule applied from your Moon sign, graha by graha, each line carrying its sloka. lang is optional: omit it for the calculation only, pass it to add rendered content.
| Parameter | Type | Required | Description |
|---|---|---|---|
rashi | string | Required | Mesha…Meena, an English sign name, or 1–12 |
date | string | Optional | YYYY-MM-DD, today, tomorrow or yesterday |
lang | string | Optional | en or hi |
tz | string | Optional | IANA zone that relative dates resolve against (default Asia/Kolkata) |
All twelve rashis for one date. The transit chart is built once and shared, so this is far cheaper than twelve separate calls.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | Optional | YYYY-MM-DD, today, tomorrow or yesterday |
lang | string | Optional | en or hi |
tz | string | Optional | IANA zone that relative dates resolve against (default Asia/Kolkata) |
period_type is daily, weekly, monthly or yearly. Weeks run Monday to Sunday; months and years are calendar ones, so date is any day inside the period you want. The response separates calculation from content.
| Parameter | Type | Required | Description |
|---|---|---|---|
rashi | string | Required | Mesha…Meena, an English sign name, or 1–12 |
date | string | Optional | YYYY-MM-DD, today, tomorrow or yesterday |
lang | string | Optional | en or hi |
tz | string | Optional | IANA zone that relative dates resolve against (default Asia/Kolkata) |
detail | string | Optional | days adds the per-day block — daily and weekly only |
The same period reading for all twelve, sharing one transit calculation. Yearly is pre-generated, so a cold yearly request is served from cache rather than computed in the request.
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | Optional | YYYY-MM-DD, today, tomorrow or yesterday |
lang | string | Optional | en or hi |
tz | string | Optional | IANA zone that relative dates resolve against (default Asia/Kolkata) |
The natal-chart daily reading. Unlike Rashifal it takes full birth details rather than a Moon sign, so it can use rules that need a natal chart.
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. |
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 an array of dates in one call. Supports region and language filtering. Max 365 dates per request on Enterprise.
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. |
What’s New
Recent additions to the TathaAstu API. Full history in CHANGELOG.md; per-SDK notes ship with each package.
Four routes serving the classical transit rule counted from your Moon sign, with the sloka on every line. Weekly, monthly and yearly are the same per-day verdict reported over a date range — not a separate methodology. One rashi or all twelve; en or hi; today and tomorrow resolved against Asia/Kolkata. There is no overall score, ranking or lucky number, because Phaladeepika XXVI establishes none — see Rashifal & Daily Jyotish ↓.
| Endpoint | Returns |
|---|---|
/v1/rashifal/vedic | Daily reading for one rashi |
/v1/rashifal/vedic/all | Daily reading for all twelve |
/v1/rashifal/vedic/{period_type} | Daily, weekly, monthly or yearly |
/v1/rashifal/vedic/{period_type}/all | Any period, all twelve rashis |
Four new calculation APIs for the Kota, Saptaśalāka, Sarvatobhadra and Śūla chakras, each returning rule-level provenance and verification metadata.
| Endpoint | Returns |
|---|---|
/v1/chakra/kota | Zone, entry/exit path, Kota Svāmī and Pāla |
/v1/chakra/saptashalaka | Nakshatra vedha pairing |
/v1/chakra/sarvatobhadra | Three vedha lines over the 81-cell lattice |
/v1/chakra/shoola | Trident points on the 28-fold cycle |
/v1/chakra/nakshatras | The accepted 28-fold vocabulary |
Available on the free plan. These calls are included within your existing free-plan monthly quota — authenticated and counted like any other endpoint, not unmetered.
Pre-resolved inputs. These endpoints take nakshatra values you have already resolved. They do not calculate planetary positions from birth date, time or location.
Calculation only. Every response carries "calculation_only": true. Each rule reports its own verification level rather than the chakra carrying a single badge, and where sources differ, the reading used is named in the response.
See Chakra Calculation APIs ↓ for full documentation.
Key creation, rotation and regeneration now always produce sk_live_ keys. TathaAstu has no sandbox environment: every key reaches production endpoints and consumes your plan quota.
Existing keys are unaffected. Nothing has been revoked or regenerated. A key created earlier with a different prefix continues to work exactly as before, and converts to sk_live_ the next time you rotate or regenerate it.
Chakra Calculation APIs FREE TIER
Four classical chakras — Kota, Saptaśalāka, Sarvatobhadra and Śūla — exposed as pure calculation endpoints, each returning the ruleset and rule-level provenance that produced the answer.
/v1/panchang or your own ephemeris, then pass the nakshatra name here."calculation_only": true and "interpretation": false. The classical sources discuss illness, danger and death at length. None of that is returned. These endpoints tell you which cells or nakshatras are struck — what that means is left to you.Provenance levels
Chakra rules differ in how well established they are, and the API says so per rule rather than stamping a whole chakra "verified".
| Level | Meaning |
|---|---|
| CROSS_VERIFIED | Independent sources agree on every value. |
| VERIFIED | Reproduces published worked examples exactly. |
| DERIVED | Computed from a source's diagram or worked example where the prose defers to a figure. |
| PROVISIONAL | Evidence leans one way without settling it. An alternative is retained. |
| UNRESOLVED | Sources conflict. The API refuses to pick silently. |
| AUTHOR_RESEARCH | A named author's own stated research, not classical material. |
Accepted nakshatra names
All four chakras count 28 nakshatras, Abhijit included. GET /v1/chakra/nakshatras returns the exact vocabulary. Abhijit's longitude arc is disputed between sources and is deliberately not resolved by these endpoints — you supply the nakshatra you have already determined.
1. Overview. The Kota chakra arranges 28 nakshatras as a four-ringed fort around the janma nakshatra. This endpoint reports which ring (zone) a transiting nakshatra occupies and whether it lies on an inbound (ENTRY) or outbound (EXIT) route, plus the fort's lord and guard.
2. Endpoint. GET /v1/chakra/kota
3. Inputs.
| Parameter | Type | Required | Description |
|---|---|---|---|
| janma_nakshatra | string | Required | Pre-resolved 28-fold nakshatra name. |
| transit_nakshatra | string | Required | Nakshatra of the transiting graha. |
| planet | string | Optional | Label for the graha. Default Saturn. Rāhu/Ketu reverse the path automatically. |
| transit_motion | string | Optional | DIRECT · RETROGRADE · STATIONARY. Retrograde reverses entry/exit. |
| moon_rashi | string | Optional | Rāśi of the natal Moon. Needed for Kota Svāmī. |
| pala_variant | string | Optional | PALA_NAKSHATRA_LORD (default) or PALA_PADA_LORD. |
4. Output. ordinal_from_janma (1–28), zone (STAMBHA · DURGANTARA · PRAAKAARA · BAHYA), path and effective_path (ENTRY/EXIT after motion reversal), path_reversed, kota_swami, kota_pala, and a summary.
5. Example request.
curl -H "X-API-Key: YOUR_KEY" \ "https://api.tathaastuapi.com/v1/chakra/kota?janma_nakshatra=Krittika&transit_nakshatra=Rohini&moon_rashi=Taurus"
6. Example response.
{
"chakra": "KOTA",
"calculation_only": true, "interpretation": false,
"inputs_are_pre_resolved": true,
"result": {
"janma_nakshatra": "Krittika",
"kota_swami": "Venus",
"kota_pala": "Sun",
"transits": [{
"planet": "Saturn", "nakshatra": "Rohini",
"ordinal_from_janma": 2, "zone": "PRAAKAARA",
"path": "ENTRY", "motion": "DIRECT",
"effective_path": "ENTRY", "path_reversed": false
}],
"summary": { "total": 1, "on_entry_path": 1, "on_exit_path": 0, "in_stambha": 0 }
},
"ruleset": {
"pala_variant": "PALA_NAKSHATRA_LORD",
"verification": {
"zones": "CROSS_VERIFIED_SECONDARY",
"entry_exit": "DERIVED_FROM_DIAGRAM_SECONDARY",
"kota_pala": "PROVISIONAL_DISPUTED"
}
}
}7. Verification / provenance. Zone membership is CROSS_VERIFIED: two sources sharing no text agree on all 28 placements. Entry/exit is DERIVED from a labelled source diagram. Motion reversal and Kota Svāmī are corroborated by three sources with no dissent.
PALA_NAKSHATRA_LORD is the default because one worked example discriminates in its favour and because the Avakahaḍa Chakra cited by the alternative contains no planetary lords at all. That is evidence, not proof. PALA_PADA_LORD is retained and requires you to supply a pada-lord table — the API will not invent one. The variant used is always named in ruleset.pala_variant.8. Scope and limitations. No interpretation of what a zone or path implies. Kota Svāmī is null rather than guessed when moon_rashi is omitted, because a nakshatra can straddle two rāśis. Abhijit's longitude arc is not resolved here.
1. Overview. Seven horizontal and seven vertical lines carry the 28 nakshatras at their ends, walking clockwise from the North-East beginning at Kṛttikā. The two nakshatras at opposite ends of a line are vedha to each other — fourteen mutual pairs.
2. Endpoint. GET /v1/chakra/saptashalaka
3. Inputs.
| Parameter | Type | Required | Description |
|---|---|---|---|
| nakshatra | string | Required | The nakshatra whose vedha partner you want. |
| sun_nakshatra | string | Optional | If supplied, the response states whether it is vedha to nakshatra. |
4. Output. The vedha_partner with its position (1–28 from Kṛttikā) and whether the line is HORIZONTAL or VERTICAL; optionally the Sun comparison.
5. Example request.
curl -H "X-API-Key: YOUR_KEY" \ "https://api.tathaastuapi.com/v1/chakra/saptashalaka?nakshatra=Krittika&sun_nakshatra=Shravana"
6. Example response.
{
"chakra": "SAPTASHALAKA",
"calculation_only": true, "interpretation": false,
"result": {
"janma": { "position": 1, "nakshatra": "Krittika" },
"vedha_partner": { "position": 21, "nakshatra": "Shravana", "line": "HORIZONTAL" },
"sun": { "nakshatra": "Shravana", "is_vedha_to_janma": true }
},
"ruleset": {
"construction": "7_HORIZONTAL_7_VERTICAL_28_ENDPOINTS",
"vedha_rule": "OPPOSITE_ENDS_OF_THE_SAME_LINE",
"pair_count": 14,
"verification": "DIAGRAM_VERIFIED_SECONDARY"
}
}7. Verification / provenance. DIAGRAM_VERIFIED_SECONDARY. The construction is stated in prose, but the fourteen pairs exist in the source only as a diagram, which was read directly. Three checks passed: the one pair the prose does state (Kṛttikā ↔ Śravaṇa) is reproduced; every nakshatra appears exactly once; and 14 lines × 2 ends = 28. Independently, this pairing agrees with the Sarvatobhadra opposition relation on all 28 stars, from an unrelated source.
i ↔ i+14 reading is wrong — it would pair Kṛttikā with Anurādhā rather than Śravaṇa.8. Scope and limitations. Returns the pairing only. The classical application concerns danger to life; no such reading is returned. Whether the pairing is motion-sensitive is not stated by the source and is therefore not modelled.
1. Overview. A 9×9 lattice of 81 cells: 28 nakshatras on the outer ring, then 20 consonants, 12 rāśis, five tithi groups at the centre, and 16 vowels on the ring corners. A graha strikes cells along three lines.
2. Endpoint. GET /v1/chakra/sarvatobhadra
3. Inputs.
| Parameter | Type | Required | Description |
|---|---|---|---|
| nakshatra | string | Required | Nakshatra occupied by the graha. |
| planet | string | Optional | Label. Default Saturn. |
| motion | string | Optional | Marks which line is dominant. |
| dignity | string | Optional | EXALTED ×3 · RETROGRADE ×2 · NORMAL ×1 · DEBILITATED ×0.5. |
| variant | string | Optional | VEDHA_ALL_THREE (default) or VEDHA_MOTION_DEPENDENT. |
4. Output. For each of OPPOSITE, FORWARD and BACKWARD: the ordered list of struck cells with row, column, kind and label, plus the border star at the end of the line and whether that direction is dominant.
OPPOSITE is the straight line across the lattice. FORWARD is the diagonal reaching a border star ahead in zodiacal order; BACKWARD the one behind. No consulted source fixes a left/right orientation, so that vocabulary is deliberately absent — a drawing convention cannot silently flip a result.5. Example request.
curl -H "X-API-Key: YOUR_KEY" \ "https://api.tathaastuapi.com/v1/chakra/sarvatobhadra?nakshatra=Krittika&planet=Mars"
6. Example response (cells abridged).
{
"chakra": "SARVATOBHADRA",
"calculation_only": true, "interpretation": false,
"result": {
"transits": [{
"planet": "Mars", "nakshatra": "Krittika",
"motion": "DIRECT", "dignity": "NORMAL",
"strength_multiplier": 1.0,
"dominant_direction": "FORWARD",
"vedha": {
"OPPOSITE": { "struck_star": "Shravana", "is_dominant": false, "cells": [ "..." ] },
"FORWARD": { "struck_star": "Vishakha", "is_dominant": true, "cells": [ "..." ] },
"BACKWARD": { "struck_star": "Bharani", "is_dominant": false, "cells": [ "..." ] }
}
}]
},
"ruleset": {
"rules": {
"lattice": "VERIFIED", "vedha_geometry": "VERIFIED",
"rasi_placement": "VERIFIED", "consonant_placement": "DERIVED",
"vowel_placement": "DERIVED", "tithi_placement": "DERIVED",
"abhijit_resolution": "UNRESOLVED", "motion_strength": "VARIANT",
"junction_rules": "NOT_IMPLEMENTED", "interpretation": "EXCLUDED"
}
}
}7. Verification / provenance. The lattice and vedha geometry are VERIFIED against 12 published known-value vectors (four stars × three directions) and all 16 cells of a published worked example. Rāśi placement is VERIFIED — the rule is explicit in the source. Consonant, vowel and tithi placement are DERIVED: the sources give those sets but defer placement to their diagrams, so a stated interpretation was fixed in advance and then reproduced the worked example exactly. That corroborates the reading without being the text settling it.
8. Scope and limitations. Motion is returned as a dominance marker and a strength multiplier, not as a filter — sources conflict on whether all three lines act or motion selects one, so both readings ship and neither is presented as correct. Three further rules are declared NOT_IMPLEMENTED rather than guessed: the junction/pada rule, paired-letter coupling, and the uncovered-consonant triplets. No interpretation is returned.
1. Overview. A trident laid over the 28-fold Sarvatobhadra framework. The reference nakshatra is the base of the staff; the three spear tips fall at the 9th (direct trine), the 15th (exactly opposite) and the 21st (reverse trine).
2. Endpoint. GET /v1/chakra/shoola
3. Inputs.
| Parameter | Type | Required | Description |
|---|---|---|---|
| reference_nakshatra | string | Required | The Sun's nakshatra for SUN_4POINT. |
| transit_nakshatra | string | Optional | Reported as a hit or not against the śūla points. |
| planet | string | Optional | Label. Default Saturn. |
| variant | string | Optional | SUN_4POINT (default) or JANMA_3POINT. |
| include_trident_parts | bool | Optional | Adds an author's-research part attribution. Default false. |
4. Output. The four shoola_points with their ordinals and nakshatra names, the reference body used, and each transit reported as a hit or not.
5. Example request.
curl -H "X-API-Key: YOUR_KEY" \ "https://api.tathaastuapi.com/v1/chakra/shoola?reference_nakshatra=Ashwini&transit_nakshatra=Anuradha"
6. Example response.
{
"chakra": "SHOOLA",
"calculation_only": true, "interpretation": false,
"result": {
"reference": { "body": "SUN_NAKSHATRA", "nakshatra": "Ashwini" },
"shoola_points": [
{ "position": 1, "ordinal": 1, "nakshatra": "Ashwini" },
{ "position": 2, "ordinal": 9, "nakshatra": "Ashlesha" },
{ "position": 3, "ordinal": 15, "nakshatra": "Swati" },
{ "position": 4, "ordinal": 21, "nakshatra": "U.Ashadha" }
],
"transits": [{ "planet": "Saturn", "nakshatra": "Anuradha", "hit": false }]
},
"ruleset": {
"variant": "SUN_4POINT",
"reference": "SUN_NAKSHATRA",
"nakshatra_scheme": "28_WITH_ABHIJIT",
"framework": "SARVATOBHADRA_28",
"verification": "SOURCED_NAMED_AUTHOR"
}
}7. Verification / provenance. SUN_4POINT is the sourced reading: a named author's dedicated chapter states that the Sun's nakshatra is the base of the staff and gives the tips as the 9th direct, the 15th opposite and the 9th reverse, presenting these as classical and traditional. The same source places the chakra on the 28-fold framework — which is what makes the rule self-consistent, since the 15th is "exactly opposite" only in a 28-fold cycle.
JANMA_3POINT is retained but unsupportedIt counts from the birth Moon instead of the Sun and appears in circulating modern implementations. No consulted source supports it. It is offered so that callers who need to match such an implementation can, not because it is correct. The variant used is always named in ruleset.variant, so it is never an invisible default.include_trident_parts=true the response attributes each of the 28 positions to a part of the trident and a graha. The author states plainly that this allocation is his own research, distinct from the four śūla nakshatras, which he presents as traditional. It is therefore off by default and labelled AUTHOR_RESEARCH when returned.8. Scope and limitations. The sources use this chakra to judge illness, accidents and death. No such reading is returned, and none should be inferred from a "hit". The API reports only which nakshatras are śūla points and whether a supplied transit occupies one.
Reference list. These endpoints take pre-resolved nakshatra names; this is the accepted vocabulary, Abhijit included.
| 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. |
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"
}
}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 | 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) |
| 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 | Required | — (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) |
| place | string | Optional | Place of birth as it should be printed on the report (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. |
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. |
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.
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 |
|---|---|---|---|---|
Trial | 200 | 5 | All endpoints — 3-day evaluation | ₹0 |
Free | 1,000 | 30 | Core panchang, timings, festivals, rahukaal | ₹0 |
Starter | 10,000 | 60 | All core endpoints + Bulk endpoints | ₹299/mo |
Pro | 100,000 | 60 | All endpoints incl. Muhurat, Bulk & Calendar | ₹999/mo |
Business | 500,000 | 120 | All endpoints + Custom rules, Priority phone + email | ₹2,999/mo |
Enterprise | Unlimited | Custom | + Bulk APIs, Full export, SLA, Dedicated support | Custom |
X-RateLimit-Limit: 50000 X-RateLimit-Remaining: 49847 X-RateLimit-Reset: 2025-04-01T00:00:00Z X-Request-Id: req_01HXXXXXXXXXXXXXXXXXX
Upgrade directly from the developer dashboard. Enterprise plans include SLA, dedicated support, and IP allowlisting.
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 136 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 136 endpoints, parameter schemas, and auto-generated code samples.