REST API reference

fatcalendar REST API: endpoints, parameters, response shapes, caching, errors (RFC 9457) and rate limits, with curl examples.

Overview

Base URL https://fatcalendar.com. All endpoints are GET, return JSON, need no authentication and send Access-Control-Allow-Origin: *. The machine-readable contract is /openapi.json.

Endpoints

MCP toolREST endpointWhat it returns
get_monthGET /api/v1/calendar/monthGet a month calendar
get_weekGET /api/v1/calendar/weekGet a week calendar
get_yearGET /api/v1/calendar/yearGet a year calendar
get_dayGET /api/v1/calendar/dayGet a full day (panchang) view
get_panchangGET /api/v1/panchangGet the raw normalised panchang
list_festivalsGET /api/v1/festivalsList festivals of a year
search_placesGET /api/v1/placesSearch places (geocoder)
list_traditionsGET /api/v1/traditionsList calendar traditions
list_languagesGET /api/v1/languagesList display languages
-GET /api/v1/healthLiveness check

Common parameters

ParameterTypeDescription
traditionenumgregorian, telugu, tamil, kannada, malayalam, marathi, gujarati, punjabi, bengali, hindi, muslim, christian (default gregorian)
langenumen, te, ta, kn, ml, mr, gu, pa, bn, hi, ur (default en)
variantstringTradition sub-variant, see /api/v1/traditions. tamil: thirukanithavakya; kannada: smartamadhva; malayalam: defaultnazhika; punjabi: nanakshahidesihindu; bengali: west-bengal-bisuddhawest-bengal-guptabangladesh; hindi: purnimantaamantavaranasibrajawadh; muslim: indiaastronomicaltabularhanafishia; christian: westernorthodoxcatholicprotestant
lat, lon, tznumber, number, IANA zoneExplicit location
placestringFree-text place; first geocoder hit is used
dateYYYY-MM-DDDay or week anchor (default today)
year, monthintegerGregorian year (1900-2200) and month (1-12)

If no location is given, it is inferred from the request IP (Cloudflare) and the response is private.

Examples

# Month grid in Tamil tradition, displayed in Tamil
curl 'https://fatcalendar.com/api/v1/calendar/month?tradition=tamil&lang=ta&year=2026&month=11&place=Chennai'

# Full panchang for a day
curl 'https://fatcalendar.com/api/v1/calendar/day?tradition=telugu&date=2026-11-08&lat=17.385&lon=78.4867&tz=Asia/Kolkata'

# Festivals of a year (Punjabi, Nanakshahi variant)
curl 'https://fatcalendar.com/api/v1/festivals?tradition=punjabi&variant=nanakshahi&year=2026&place=Amritsar'

# Geocode
curl 'https://fatcalendar.com/api/v1/places?q=Vijayawada'
const res = await fetch('https://fatcalendar.com/api/v1/calendar/day?tradition=muslim&place=Hyderabad');
const day = await res.json();
console.log(day.hijri, day.prayers);

Response shapes

month, week, year and day return MonthResponse, WeekResponse, YearResponse and DayResponse as defined in the OpenAPI document and in @fatcalendar/core. Each includes tradition, lang, the resolved location, a localized header (title, eras, months spanned) and notes (method and accuracy remarks). Time values are { iso, local } pairs: iso is UTC, local is wall time at the location with a trailing + after local midnight. /api/v1/panchang returns the language-independent normalised record.

Caching

Explicit-location responses: Cache-Control: public, max-age=300, s-maxage=86400, stale-while-revalidate=604800 plus a weak ETag (send If-None-Match for 304). Location-inferred responses: private, max-age=60.

Errors

Errors use application/problem+json (RFC 9457):

{ "type": "about:blank", "title": "Invalid parameters", "status": 400, "detail": "date: date must be YYYY-MM-DD", "instance": "/api/v1/calendar/day?date=tomorrow" }

Statuses: 400 invalid parameters, 404 unknown place or path, 429 rate limited, 502 upstream ephemeris failure, 500 internal error.

Rate limits

120 requests per 60 seconds per client IP across /api, /mcp, /a2a and /ask. Responses include RateLimit-Policy: "default";q=120;w=60 and RateLimit: "default";r=<remaining>;t=<seconds to reset>. A 429 response carries Retry-After. The limit is best effort per edge location; cached responses are the better route for bulk use.

Authentication

None. The API is public and anonymous.