POST · VEDIC

Festivals

Endpoint POST https://starsapi.com/api/v3/vedic/panchang/festivals

Returns the Hindu festival calendar for a year — 155 festivals and vrats, computed from the actual panchang for the supplied location. Nothing is a static lookup: every date is derived from its defining tithi and the kaal at which the observance is decided.

Most festivals fall on the day their tithi touches sunrise (udaya), but many do not. Diwali is fixed by Amavasya during pradosh; Maha Shivaratri by Chaturdashi at nishita; Karva Chauth by Chaturthi between sunset and moonrise; Krishna Janmashtami by Ashtami and Rohini together. Each rule is applied per festival, so the returned dates match observed practice rather than a naive sunrise lookup.

Responses include English and Hindi names and descriptions, days-until labels, adhik-maas handling, kshaya-tithi notes, Bhadra windows, and dual dates where Smarta and Vaishnava traditions differ.

Authentication

MethodExample
Header (recommended)X-Api-Key: sa_live_xxxxxxxxxxxx
BearerAuthorization: Bearer sa_live_xxxxxxxxxxxx
Query?api_key=sa_live_xxxxxxxxxxxx

Request body

FieldTypeRequiredDescription
yearintegerYesCalendar year, 1800–2400.
timezonestringYesIANA timezone (e.g. Asia/Kolkata). Also fixes what “today” means for days_until.
latitudenumberYesDecimal degrees, −90 to 90.
longitudenumberYesDecimal degrees, −180 to 180.
monthintegerNo1–12. Narrows the list to one calendar month.
categorystringNomajor, important or vrat. Comma-separated for several: "major,vrat".
keystringNoOne or more festival keys: "diwali" or "diwali,holi". Keys that do not occur in that year come back in not_found.
placestringNoFree-text label, echoed back in location.place.
Location matters. Sunrise, sunset and moonrise decide most festival dates, so the same year can resolve differently for two cities. Always send the user's real coordinates.

Response shape

Top level

FieldTypeDescription
year month month_nameEcho of the request. month and month_name are null when no month filter was sent.
adhik_maasobjecthas_adhik_maas, and when true the month name plus its full start–end window. Always present; has_adhik_maas: false in ordinary years.
next_festivalobject | nullThe next festival from the returned list. Filter to March and it will be the next one in March — null if that month has already passed.
total_countintegerFestivals after all filters.
festivalsobjectGrouped by English month name. Always an object, {} when nothing matches.
not_foundarrayOnly when key was sent. Keys that do not occur in that year — e.g. padmini_ekadashi outside an adhik-maas year.

Festival object

FieldTypeDescription
keystringStable identifier — use this, not the name.
name name_hindistringDisplay names.
date day day_hindistringISO date and weekday.
categorystringmajor, important or vrat.
hindu_monthstringPurnimant month. "Adhik Jyeshtha" for adhik-maas entries.
description description_hindistringOne-line explanation.
regionstringPrimary observing region.
days_untilintegerDays from today. Negative once past (-134). Independent of any filter.
days_label days_label_hindistringReady to display: "in 2 days", "Today", "134 days ago".
traditionstring | null"smarta", "vaishnava", or "smarta,vaishnava" when both fall together.
alternateobject | nullSecond date when the traditions differ — see below.
bhadraobject | nullBhadra window for festivals where it is relevant — see below.
is_kshayabooleanTrue when the tithi never touched a sunrise.
tithi_note tithi_note_hindistring | nullExplains the kshaya case. null otherwise.

Smarta and Vaishnava dates

Ram Navami and Krishna Janmashtami are decided differently by the two traditions and can land on different days. Rather than emit two entries that the date sort would separate, the endpoint returns one entry with an alternate block.

{
  "key": "ram_navami",
  "date": "2026-03-26",
  "tradition": "smarta",
  "alternate": {
    "date": "2026-03-27",
    "day": "Friday",
    "tradition": "vaishnava",
    "days_until": -109,
    "days_label": "109 days ago"
  }
}

When both traditions agree on the day, there is a single date and alternate is null:

{
  "key": "krishna_janmashtami",
  "date": "2026-09-04",
  "tradition": "smarta,vaishnava",
  "alternate": null
}

Bhadra

Bhadra (Vishti karana) is inauspicious for Holika Dahan, so the window is reported wherever it is relevant. It is informational — the returned date already accounts for the tithi rules.

"bhadra": {
  "present": true,
  "in_pradosh": true,
  "start": "2026-03-02 17:56",
  "end": "2026-03-03 05:28",
  "vaas": "mrityu"
}

vaas is swarga, patala or mrityu, from the Moon's sidereal rashi during Bhadra.

Kshaya tithi

A tithi can begin after one sunrise and end before the next — touching no sunrise at all. The festival is not dropped; it is placed by the rule its observance demands (usually the day the tithi begins), and flagged:

"is_kshaya": true,
"tithi_note": "Kshaya tithi — the tithi does not touch any sunrise. Observed on the day the tithi begins."

Gudi Padwa 2026 is one such case, which is why some calendars disagree on it.

Monthly vrats

Three observances repeat every lunar month and are returned with category: "vrat". Their names change with the day or month:

KeyPer yearNames
pradosh_vrat~25By weekday — Ravi, Soma, Bhauma, Budha, Guru, Shukra, Shani Pradosh Vrat.
sankashti_chaturthi12–13By month — Lambodara, Dwijapriya, Bhalachandra … and Vibhuvana in an adhik month.
masik_shivratri12–13Maha Shivaratri in Phalguna, Sawan Shivaratri in Shravana, Masik Shivaratri otherwise.

Every entry shares the same key, so filter on date or hindu_month, not key, when you need a specific occurrence.

Adhik maas

In an adhik-maas year the festivals stay with the nija month, but the adhik month has observances of its own — Padmini and Parama Ekadashi, plus its own Pradosh, Sankashti and Masik Shivaratri. These appear with hindu_month: "Adhik Jyeshtha".

adhik_maas is present every year; check has_adhik_maas before reading the rest.

Errors

HTTPCodeCause
400MISSING_FIELDRequired field absent.
400INVALID_DATEYear outside 1800–2400, or month outside 1–12.
400INVALID_VALUEUnknown category, or malformed key.
400INVALID_TIMEZONENon-IANA timezone.
400INVALID_COORDINATELat/lon out of range.
405METHOD_NOT_ALLOWEDNon-POST request.

An unknown key is not an error — it comes back in not_found with an empty festivals object.

See also