Skip to content
API96Astro API

API reference / Festivals & muhurta

Festivals & muhurta

Recurring observances, shraddha dates, auspicious-window search and naming syllables.

7 endpoints. Every endpoint is POST with a JSON body and your key in the Authorization header. Request schemas and examples come from the OpenAPI document; each example response was captured from the live engine and its data fields are a guide to the shape, not a contract.

Vrat Calendar

POSTAvailable

https://api.96astro.com/v1/festivals-muhurta/vrat-calendar

Every date in a year on which one recurring observance falls at a place, with its tithi, paksha, lunar month and the moment it was judged at.

Credits
3 credits
Input
Date and place
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

yearintegerRequired

Calendar year, 1900-2200.

Example: 2026

observancestringOptional

Which observance; see vrat-observances.

Default: ekadashi

Allowed values: amavasyaashtamichandra-darshanchaturdashidwadashiekadashimasik-durgashtamimasik-janmashtamimasik-kalashtamimasik-karthigaimasik-shivaratrinavamipradoshampurnimasankashti-chaturthisatyanarayana-pujashashthiskanda-sashtitrayodashivinayaka-chaturthi

Example: ekadashi

ayanamshastringOptional

Default: lahiri

Allowed value: lahiri

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Options (20)
ValueMeaning
amavasyaAmavasya
ashtamiAshtami
chandra-darshanChandra Darshan
chaturdashiChaturdashi
dwadashiDwadashi
ekadashiEkadashi
masik-durgashtamiMasik Durgashtami
masik-janmashtamiMasik Janmashtami
masik-kalashtamiMasik Kalashtami
masik-karthigaiMasik Karthigai
masik-shivaratriMasik Shivaratri
navamiNavami
pradoshamPradosham
purnimaPurnima
sankashti-chaturthiSankashti Chaturthi
satyanarayana-pujaSatyanarayana Puja
shashthiShashthi
skanda-sashtiSkanda Sashti
trayodashiTrayodashi
vinayaka-chaturthiVinayaka Chaturthi

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • year · integer
  • location · object
  • observance · object
  • dates · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "year": 2026,
    "location": {
      "latitude": 28.6139,
      "longitude": 77.209,
      "timezone": "Asia/Kolkata"
    },
    "observance": {
      "id": "ekadashi",
      "label": "Ekadashi",
      "cadence": "twice a lunar month",
      "judged": "sunrise"
    },
    "dates": [
      {
        "date": "2026-01-14",
        "tithi": "Ekadashi",
        "paksha": "Krishna",
        "lunar_month": "Pausha",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Vrat Observance Catalogue

POSTAvailable

https://api.96astro.com/v1/festivals-muhurta/vrat-observances

Lists the observances the vrat calendar supports with cadence and the moment each is judged at.

Credits
1 credit
Input
No input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
observancestring | nullOptional

Return only this observance.

Default: null

Allowed values: amavasyaashtamichandra-darshanchaturdashidwadashiekadashimasik-durgashtamimasik-janmashtamimasik-kalashtamimasik-karthigaimasik-shivaratrinavamipradoshampurnimasankashti-chaturthisatyanarayana-pujashashthiskanda-sashtitrayodashivinayaka-chaturthi

Example: ekadashi

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • observances · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "observances": [
      {
        "id": "ekadashi",
        "label": "Ekadashi",
        "cadence": "twice a lunar month",
        "judged": "at sunrise",
        "note": "A sunrise-to-sunrise fast, so the tithi running at sunrise decides the day."
      }
    ]
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Muhurta Finder

POSTAvailable

https://api.96astro.com/v1/festivals-muhurta/muhurta-finder

Suitable days for one undertaking over a date range at a place, scored with clear windows; rejected days are returned with what blocked them.

Credits
3 credits
Input
Date and place
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

purposestringOptional

The undertaking; see muhurta-purposes.

Default: general

Allowed values: bhoomi-pujanbusinessengagementgold-purchasegriha-praveshpropertygeneraltravelvehiclevivah

Example: vivah

start_datestringRequired

Limits: format date

Example: 2026-11-01

daysintegerOptional

Days searched from start_date.

Default: 90

Limits: minimum 1, maximum 400

Example: 30

ayanamshastringOptional

Default: lahiri

Allowed value: lahiri

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Options (10)
ValueMeaning
bhoomi-pujanBhoomi Pujan
businessBusiness Opening
engagementEngagement
gold-purchaseGold & Valuables Purchase
griha-praveshGriha Pravesh
propertyProperty Purchase
generalShubha (general)
travelTravel
vehicleVehicle Purchase
vivahVivah (Marriage)

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • purpose · object
  • rules · object
  • start_date · string
  • days · integer
  • location · object
  • suitable_days · array of object
  • rejected_days · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "purpose": {
      "id": "vivah",
      "label": "Vivah (Marriage)",
      "tradition": "Muhurta Chintamani, as commonly published. Eleven nakshatras, the bright-fortnight tithis, and the benefic weekdays."
    },
    "rules": {
      "favourable_nakshatras": [
        "Rohini",
        "Mrigashira",
        "Magha"
      ],
      "favourable_tithis": [
        "Dvitiya",
        "Tritiya",
        "Panchami"
      ],
      "favourable_weekdays": [
        "Monday",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Muhurta Purpose Catalogue

POSTAvailable

https://api.96astro.com/v1/festivals-muhurta/muhurta-purposes

Lists the purposes the muhurta finder can search for, with each tradition's nakshatra preference and blockers.

Credits
1 credit
Input
No input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
purposestring | nullOptional

Return only this purpose.

Default: null

Allowed values: bhoomi-pujanbusinessengagementgold-purchasegriha-praveshpropertygeneraltravelvehiclevivah

Example: vivah

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • purposes · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "purposes": [
      {
        "id": "vivah",
        "label": "Vivah (Marriage)",
        "tradition": "Muhurta Chintamani, as commonly published. Eleven nakshatras, the bright-fortnight tithis, and the benefic weekdays.",
        "blockers": [
          "Bhadra (Vishti karana) runs at sunrise",
          "Amavasya",
          "Adhik masa (intercalary month)"
        ]
      }
    ]
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Shraddha Dates

POSTAvailable

https://api.96astro.com/v1/festivals-muhurta/shraddha-dates

The tithi of a death and, for a year, the annual (varshik) shraddha date and the Pitru Paksha shraddha date.

Credits
1 credit
Input
Date and place
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

latitudenumberRequired

Limits: minimum -90, maximum 90

Example: 28.6139

longitudenumberRequired

Limits: minimum -180, maximum 180

Example: 77.209

death_datestringRequired

Civil date of the death; its tithi is read at that day's sunrise.

Limits: format date

Example: 2020-05-10

yearintegerRequired

Year to find the shraddha dates in, 1900-2200.

Example: 2026

ayanamshastringOptional

Default: lahiri

Allowed value: lahiri

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • death_date · string
  • year · integer
  • location · object
  • tithi_of_death · object
  • varshik_shraddha · object
  • pitru_paksha_shraddha · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "death_date": "2020-05-10",
    "year": 2026,
    "location": {
      "latitude": 28.6139,
      "longitude": 77.209,
      "timezone": "Asia/Kolkata"
    },
    "tithi_of_death": {
      "tithi": "Tritiya",
      "paksha": "Krishna",
      "number": 3,
      "lunar_month": "Vaishakha",
      "judged_at": "sunrise"
    },
    "varshik_shraddha": {
      "date": "2026-05-04",
      "tithi": "Tritiya",
      "paksha": "Krishna",
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Sahasra Chandrodaya

POSTAvailable

https://api.96astro.com/v1/festivals-muhurta/sahasra-chandrodaya

Counts full moons after a birth to find the nth (1000th by default) and its date.

Credits
1 credit
Input
Date
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
timezonestring | nullOptional

IANA time zone, e.g. Asia/Kolkata

Default: null

Example: Asia/Kolkata

utc_offsetstring | nullOptional

Fixed offset such as +05:30, if no IANA zone is known

Default: null

birth_datestringRequired

Limits: format date

Example: 1946-01-01

countintegerOptional

Which full moon after the birth.

Default: 1000

Limits: minimum 1, maximum 2000

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • birth_date · string
  • count · integer
  • full_moon_at · string
  • date · string
  • age · object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "birth_date": "1946-01-01",
    "count": 1000,
    "full_moon_at": "2026-10-26T09:41:00+05:30",
    "date": "2026-10-26",
    "age": {
      "years": 80.82,
      "days": 29518
    }
  },
  "meta": {
    "request_id": "req_00000000000000000000",
    "api_version": "v1",
    "credits_used": 0,
    "warnings": [],
    "language": "en"
  }
}

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.

Name Syllables (Naamakshar)

POSTAvailable

https://api.96astro.com/v1/festivals-muhurta/name-syllables

Naming syllables for a nakshatra pada, or for a Moon longitude.

Credits
1 credit
Input
Specific input
Output
JSON
Delivery
Direct response
Languages
English; translated term names with labels
Headers
HeaderValue and description
AuthorizationRequiredBearer YOUR_API_KEY

Your sandbox (sk_test_...) or live (sk_live_...) key. X-API-Key: <key> is accepted instead.

Content-TypeRequiredapplication/json

The body is JSON.

Idempotency-KeyOptional<unique string>

Makes retries safe: a repeated key with the same body replays the stored response and is never charged twice. (1 to 200 characters)

Body · application/json
FieldDescription
nakshatrastring | nullOptional

Default: null

Allowed values: AshwiniBharaniKrittikaRohiniMrigashiraArdraPunarvasuPushyaAshleshaMaghaPurva PhalguniUttara PhalguniHastaChitraSwatiVishakhaAnuradhaJyeshthaMulaPurva AshadhaUttara AshadhaShravanaDhanishtaShatabhishaPurva BhadrapadaUttara BhadrapadaRevati

Example: Rohini

padainteger | nullOptional

With `nakshatra`; omit for all four.

Default: null

Limits: minimum 1, maximum 4

Example: 2

moon_longitudenumber | nullOptional

Sidereal (Lahiri) Moon longitude.

Default: null

Limits: minimum 0, less than 360

labelsstringOptional

Optional. Adds `meta.labels`: translated display names for the identifiers in the answer. `data` is unchanged. Free. Any other code is refused with 422 unsupported_language.

Allowed values: asbndeesfrguhiitknkomlmrnenlorpaplptrusitatetrur

Response · fields in data

Inferred from the example response: a guide to the shape, not a contract.

  • nakshatra · string
  • nakshatra_number · integer
  • pada · integer
  • syllable · string
  • syllables_by_pada · array of object

Try in Playground →Capability overview

Example request

Example response

200application/json
{
  "data": {
    "nakshatra": "Rohini",
    "nakshatra_number": 4,
    "pada": 2,
    "syllable": "Va",
    "syllables_by_pada": [
      {
        "pada": 1,
        "syllable": "O"
      },
      {
        "pada": 2,
        "syllable": "Va"
      },
      {
        "pada": 3,
        "syllable": "Vi"
      }
    ]
  …

Captured from the live engine with a sandbox key (so credits_used is 0) and trimmed: long arrays keep their first items.

Error responses

  • 400invalid_request
  • 401invalid_key, expired_key
  • 402payment_required
  • 403account_suspended
  • 404not_found
  • 409idempotency_conflict
  • 413payload_too_large
  • 422invalid_request, unsupported_language
  • 429rate_limited, quota_exhausted, spend_cap_reached, project_budget_exceeded
  • 500computation_failed
  • 502unavailable
  • 503unavailable
  • 504deadline_exceeded

Errors are never charged. What each status means and what to do: errors.