Products

Seven API surfaces, one engine

Every product below reads from the same astronomy layer and the same versioned rule set. Mixing them in one application never produces two contradictory answers.

Panchang API

The five limbs of the Hindu calendar — tithi, nakshatra, yoga, karana and vara — for any date and location, with the interval boundaries rather than just the label at sunrise.

The problem it solves

Most calendar APIs return the tithi that happened to be running at sunrise. That is fine until a user asks why their app disagrees with the temple, which is almost always because the tithi changed at 11:28 that morning.

Use cases

  • Daily panchang screens in calendar and devotional apps
  • Server-side scheduling that must respect tithi boundaries
  • Almanac and print calendar generation

Typical customers

Calendar appsDevotional platformsPublishers

Key endpoints

MethodPathPurpose
GET/v1/panchangFull day, all five limbs
GET/v1/panchang/liteReduced payload for list views
GET/v1/panchang/todayConvenience wrapper
GET/v1/tithiTithi with start and end instants
GET/v1/nakshatraNakshatra intervals
GET/v1/yogaYoga intervals
GET/v1/karanaKarana intervals
GET/v1/panchang/rangeDate range in one call
Panchang API — sample response
{
  "date": "2026-03-01",
  "tithi": {
    "num": 14,
    "name": "चतुर्दशी",
    "paksha": "KRISHNA",
    "starts_at": "2026-02-28T18:04:11+05:30",
    "ends_at": "2026-03-01T14:22:08+05:30"
  },
  "nakshatra": { "name": "स्वाति", "ends_at": "2026-03-01T09:47:52+05:30" },
  "vara": "Sunday",
  "sunrise": "06:47:12", "sunset": "18:31:44"
}

Festival API

Festivals derived at request time from versioned rules, each returned with the derivation that produced it — the rule, the authority, the overlap in minutes, and the confidence.

The problem it solves

Hardcoded festival tables go stale and cannot explain themselves. When a date is disputed you need to show the reasoning, not a row in a spreadsheet.

Use cases

  • Festival calendars that must survive a rule correction
  • Notification scheduling with a defensible date
  • Editorial and content pipelines needing provenance

Typical customers

Temple platformsMediaHR systems

Key endpoints

MethodPathPurpose
GET/v1/festivalsFestivals for a date or window
GET/v1/festivals/explainFull evaluation trace
GET/v1/festivals/yearWhole-year sweep
GET/v1/festivals/monthCalendar month
GET/v1/festivals/rangeArbitrary window
GET/v1/festivals/searchFind by name
GET/v1/vratFasting observances
GET/v1/festivals/worldMulti-religion calendar
Festival API — sample response
{
  "festival": "FESTIVAL_DIWALI",
  "selected_date": "2026-11-08",
  "confidence": 100,
  "confidence_label": "FULL_KALA_COVERAGE",
  "explain": {
    "evaluator": "PRADOSHA_VYAPINI",
    "rule_code": "DIWALI_V2",
    "rule_version": 2,
    "overlap_minutes": { "2026-11-08": 96, "2026-11-09": 0 },
    "reason": "Amavasya fully covers Pradosha on Nov 8",
    "authority": ["Dharmasindhu", "Nirnaya Sindhu"]
  }
}

Muhurat API

Auspicious and inauspicious windows computed from the same kala arithmetic the festival engine uses — abhijit, brahma muhurta, rahu kalam, yamaganda, gulika, choghadiya and hora.

The problem it solves

Muhurat windows are frequently published as fixed clock times. They are not fixed: every window is a fraction of the local day length, so they move with latitude and season.

Use cases

  • Wedding and event date selection
  • Travel departure timing
  • Trading and business-hours advisories

Typical customers

Wedding platformsTravelMatrimony

Key endpoints

MethodPathPurpose
GET/v1/muhurat/dayAll windows for a day
GET/v1/muhurat/findSearch for a suitable window
GET/v1/abhijitMidday muhurta
GET/v1/rahukaalRahu kalam
GET/v1/yamagandaYamaganda
GET/v1/gulikaalGulika kalam
GET/v1/choghadiyaChoghadiya segments
GET/v1/horaPlanetary hours
Muhurat API — sample response
{
  "date": "2026-03-01",
  "abhijit": {
    "start": "11:52:31", "end": "12:42:07",
    "available": true,
    "overlaps": []
  },
  "brahma_muhurta": { "start": "04:46:12", "end": "05:30:44" },
  "rahu_kalam": { "start": "16:42:00", "end": "18:10:00" }
}

Astronomy API

The Swiss Ephemeris layer exposed directly — sidereal positions, sankranti instants, eclipse circumstances, moon phase and lagna.

The problem it solves

Sometimes you need the astronomy, not the calendar interpretation of it. Rather than make you reimplement the ephemeris, we expose the layer the rest of the platform is built on.

Use cases

  • Research and archival calculation
  • Astronomy features in education apps
  • Cross-checking a third-party calculation

Typical customers

EducationResearchPublishers

Key endpoints

MethodPathPurpose
GET/v1/astronomicalPlanetary positions
GET/v1/sankrantiSolar ingress instants
GET/v1/eclipseEclipse circumstances
GET/v1/eclipse/visibilityLocal visibility
GET/v1/moon-phasePhase and illumination
GET/v1/lagnaAscendant
GET/v1/sunSunrise, sunset, transit
Astronomy API — sample response
{
  "date": "2026-03-01",
  "ayanamsa": { "system": "LAHIRI", "value": 24.2118 },
  "sun":  { "sidereal_longitude": 317.4402, "rashi": "Kumbha" },
  "moon": { "sidereal_longitude": 191.8875, "rashi": "Tula" }
}

Calendar API

Month, year and range views that combine panchang, festivals and muhurat into the shape a calendar UI actually needs — one call per screen, not one per day.

The problem it solves

Rendering a month view by calling a per-day endpoint thirty times is slow and wasteful. These endpoints return the whole grid in a single response.

Use cases

  • Month-view calendar rendering
  • Year planners and printable almanacs
  • Bulk export into an existing scheduling system

Typical customers

Calendar appsERPPublishing

Key endpoints

MethodPathPurpose
GET/v1/calendar/monthFull month grid
GET/v1/calendar/yearYear overview
GET/v1/calendar/rangeArbitrary window
GET/v1/calendar/daySingle day, combined
GET/v1/hindu-monthAmanta / purnimanta month
GET/v1/samvatsaraSamvatsara name and year
GET/v1/rituSeason
Calendar API — sample response
{
  "year": 2026, "month": 11, "location_id": 1,
  "days": [
    { "date": "2026-11-08",
      "tithi": "Amavasya",
      "festivals": ["FESTIVAL_DIWALI"],
      "is_holiday": true }
  ],
  "_engine": { "festival_engine": "v2.0.0", "rule_pack": "NORTH_INDIA" }
}

Webhook Platform

HMAC-signed event delivery for festival and muhurat events, with exponential backoff and explicit idempotency semantics.

The problem it solves

Polling a calendar API every morning to find out whether today is a festival is wasteful and fragile. Events should arrive.

Use cases

  • Push notifications ahead of a festival
  • Triggering downstream jobs on calendar events
  • Keeping a local cache in sync

Typical customers

Mobile appsHR systemsNotification platforms

Key endpoints

MethodPathPurpose
POST/v1/webhooks/subscribeCreate a subscription
GET/v1/webhooks/eventsDelivery history
Webhook Platform — sample response
POST https://your-app.example/hooks
X-TathaAstu-Event-Id: evt_01JQ8Z...
X-TathaAstu-Signature: sha256=9f86d0818...

{
  "event": "festival.upcoming",
  "festival": "FESTIVAL_DIWALI",
  "date": "2026-11-08",
  "lead_days": 7
}

Enterprise APIs

Bulk endpoints, custom locations, custom rule packs, and the operational commitments that procurement asks for.

The problem it solves

A platform serving millions of users needs different primitives from a hobby project: batch calls, dedicated capacity, and a contact who answers.

Use cases

  • Precomputing a year for millions of users
  • Onboarding cities outside the default set
  • Authoring a regional rule pack for your community

Typical customers

Large platformsGovernmentEnterprise ERP

Key endpoints

MethodPathPurpose
POST/v1/bulk/panchangBatch panchang
POST/v1/bulk/festivalsBatch festivals
GET/v1/day-context/rangeRaw day context
GET/v1/shastra/conditionsRule conditions
Enterprise APIs — sample response
POST /v1/bulk/panchang
{
  "location_id": 1,
  "dates": ["2026-11-08", "2026-11-09", "2026-11-10"],
  "fields": ["tithi", "nakshatra", "festivals"]
}

All 81 endpoints, one spec

The complete OpenAPI 3.1 document describes every endpoint, parameter and response shape on this page. Import it into Postman, or generate a client in your language.