⚡ Quick Start
Get Indian holiday data in under 60 seconds:
curl "https://calendar.tezzcorp.in/api/v1/holidays?country=IN&year=2026&month=6" \ -H "X-API-Key: tzc_live_your_key_here"
🔑 Authentication
All calendar endpoints require an API key. Pass it via the X-API-Key HTTP header (recommended) or the ?api_key= query parameter.
X-API-Key: tzc_live_0edc34b7343b256076a24b2cf173efa...
GET /api/v1/holidays?country=IN&year=2026&api_key=tzc_live_...
🌐 Base URL
All API endpoints are served from:
https://calendar.tezzcorp.in
All responses are Content-Type: application/json; charset=UTF-8. All requests and responses use UTF-8 encoding.
📝 Registration Flow
Account creation is a three-step process: Register → Verify OTP → Receive API Key. The API key is shown exactly once in the verify-otp response — store it immediately.
POST /api/auth/register
POST /api/auth/verify-otp
Use X-API-Key header
📅 GET /api/v1/holidays
Returns Indian holidays filtered by year, month, day, type, or exact date. Supports pagination.
Query Parameters
countryyearmonthdaydatetypeformatpageper_pageExample Request
GET /api/v1/holidays?country=IN&year=2026&month=6&type=national X-API-Key: tzc_live_your_key
Example Response
{
"status": "success",
"message": "Holidays fetched successfully.",
"data": [
{
"id": 148,
"country": "IN",
"year": 2026,
"month": 6,
"day": 17,
"date": "2026-06-17",
"name": "Eid ul-Adha (Bakrid)",
"name_hi": null,
"holiday_type": "national",
"states": null,
"description": null,
"is_public": true,
"is_gazetted": true,
"day_of_week": "Wednesday"
}
],
"meta": {
"country": "IN",
"year": 2026,
"total": 1,
"page": 1,
"per_page": 50,
"total_pages": 1,
"response_ms": 14
},
"timestamp": "2026-06-14T09:00:00+00:00"
}
🗓️ GET /api/v1/calendar
Returns a full monthly calendar grid. Every day includes weekday, is_holiday, is_working flags, and embedded holiday details. Ideal for building calendar UIs.
Query Parameters
countryyearmonthExample Request & Response
GET /api/v1/calendar?country=IN&year=2026&month=6 X-API-Key: tzc_live_your_key // Response (abbreviated) { "data": { "country": "IN", "year": 2026, "month": 6, "month_name": "June", "days_in_month": 30, "total_holidays": 1, "total_working": 25, "days": [ { "date": "2026-06-01", "day": 1, "weekday": "Monday", "weekday_num": 1, "is_weekend": false, "is_holiday": false, "is_working": true, "holidays": [] }, { "date": "2026-06-17", "day": 17, "weekday": "Wednesday", "is_holiday": true, "is_working": false, "holidays": [{ "name": "Eid ul-Adha (Bakrid)", "type": "national" }] } ] } }
POST /auth/register
Register a new user account.
Request Body (JSON)
full_nameemailpasswordcompany_namephonePOST /auth/verify-otp
Verify email OTP. On register: activates account and returns API key (shown once). On login: returns session token.
Request Body (JSON)
emailotppurposePOST /auth/login
Authenticate with email and password. Returns JWT session token.
Request Body (JSON)
emailpasswordPOST /auth/resend-otp
Resend OTP. Minimum 60 second cooldown between sends.
Request Body (JSON)
emailpurposePOST /auth/reset-password
Request a password reset OTP. Always returns success to prevent email enumeration.
Request Body (JSON)
email⚡ JavaScript / AJAX
const API_KEY = 'tzc_live_your_key_here'; const BASE = 'https://calendar.tezzcorp.in'; // Get holidays for a specific month async function getHolidays(year, month, country = 'IN') { const url = `${BASE}/api/v1/holidays?country=${country}&year=${year}&month=${month}`; const res = await fetch(url, { headers: { 'X-API-Key': API_KEY } }); if (!res.ok) throw new Error(`API error: ${res.status}`); const json = await res.json(); return json.data; } // Get full calendar grid async function getCalendar(year, month) { const res = await fetch( `${BASE}/api/v1/calendar?country=IN&year=${year}&month=${month}`, { headers: { 'X-API-Key': API_KEY } } ); return (await res.json()).data; } // Usage getHolidays(2026, 6).then(holidays => { holidays.forEach(h => console.log(`${h.date} — ${h.name}`)); });
🐘 PHP
<?php $apiKey = 'tzc_live_your_key_here'; $base = 'https://calendar.tezzcorp.in'; function tzApiGet($path, $apiKey) { $ch = curl_init($path); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-API-Key: ' . $apiKey], CURLOPT_TIMEOUT => 15, CURLOPT_SSL_VERIFYPEER => true, ]); $res = curl_exec($ch); curl_close($ch); return json_decode($res, true); } // Get June 2026 holidays $result = tzApiGet( $base . '/api/v1/holidays?country=IN&year=2026&month=6', $apiKey ); foreach ($result['data'] as $h) { echo $h['date'] . ' — ' . $h['name'] . PHP_EOL; }
🐍 Python
import requests API_KEY = "tzc_live_your_key_here" BASE = "https://calendar.tezzcorp.in" HEADERS = {"X-API-Key": API_KEY} def get_holidays(year: int, month: int = None, country: str = "IN"): params = {"country": country, "year": year} if month: params["month"] = month r = requests.get(f"{BASE}/api/v1/holidays", params=params, headers=HEADERS, timeout=15) r.raise_for_status() return r.json()["data"] def get_calendar(year: int, month: int): r = requests.get(f"{BASE}/api/v1/calendar", params={"country": "IN", "year": year, "month": month}, headers=HEADERS, timeout=15) return r.json()["data"] # Example holidays = get_holidays(2026, 6) for h in holidays: print(f"{h['date']} — {h['name']} ({h['holiday_type']})")
💻 cURL
# Get holidays curl "https://calendar.tezzcorp.in/api/v1/holidays?country=IN&year=2026&month=6" \ -H "X-API-Key: tzc_live_your_key" # Get calendar grid curl "https://calendar.tezzcorp.in/api/v1/calendar?country=IN&year=2026&month=6" \ -H "X-API-Key: tzc_live_your_key" # Register curl -X POST "https://calendar.tezzcorp.in/api/auth/register" \ -H "Content-Type: application/json" \ -d '{"full_name":"Rahul","email":"r@example.com","password":"Pass@123"}' # Verify OTP curl -X POST "https://calendar.tezzcorp.in/api/auth/verify-otp" \ -H "Content-Type: application/json" \ -d '{"email":"r@example.com","otp":"482910","purpose":"register"}' # Login curl -X POST "https://calendar.tezzcorp.in/api/auth/login" \ -H "Content-Type: application/json" \ -d '{"email":"r@example.com","password":"Pass@123"}'
📦 Response Format
All responses follow a consistent envelope. status is always success or error.
{
"status": "success",
"message": "Human-readable message",
"data": { /* response payload */ },
"meta": { /* pagination / response_ms */ },
"timestamp": "2026-06-14T09:00:00+00:00"
}
{
"status": "error",
"message": "Human-readable error description",
"code": 422,
"error_code": "VALIDATION_ERROR",
"details": { "email": "Invalid email address" },
"timestamp": "2026-06-14T09:00:00+00:00"
}
⚠️ Error Codes
📊 Rate Limits
Limits are enforced per API key. When exceeded, HTTP 429 is returned with a Retry-After header. Daily quotas reset at 00:00 UTC.
🏷️ Holiday Types
national
All India public holidays (Republic Day, Independence Day, Gandhi Jayanti)
bank
Bank holidays — banks closed but may not be public holidays
optional
Employees can choose; companies typically allow 2–3 per year
religious
Observance with religious significance (Eid, Diwali, Christmas, Holi)
regional
Specific to certain states only (states field lists which)
observance
Awareness days — not a closed holiday