API Documentation
The Calendar.lt REST API gives you access to Lithuanian public holidays, name days, and day-specific calendar information. All responses are returned as JSON.
Base URL: https://calendar.lt/api/v1
Authentication
Every request must include a valid API key. You can pass the key in three ways:
X-API-Key header (recommended)
GET /api/v1/name-days?date=2026-03-19 HTTP/1.1 Host: calendar.lt X-API-Key: clt_your_api_key_here
Authorization: Bearer header
Authorization: Bearer clt_your_api_key_here
Query parameter (testing only)
GET /api/v1/name-days?date=2026-03-19&api_key=clt_your_api_key_here
We recommend the X-API-Key header. Never expose your key in public repositories or client-side code.
Endpoints
/api/v1/laisvadienis
Public
Publicly accessible endpoint — no API key required. Returns true if the given date is a non-working day in Lithuania (Sunday or public holiday), false otherwise.
Also returns shorter_workday — per Labour Code Article 113, the workday immediately before a red public holiday is shortened by one hour. This applies even when the holiday falls on a Saturday.
Rate limit: 60 requests per minute and 10,000 requests per month, tracked by IP address.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | Yes | Date in YYYY-MM-DD format |
Response fields
| Parameter | Type | Description |
|---|---|---|
date | string | Date in YYYY-MM-DD format |
laisvadienis | boolean | true if non-working day (weekend or red holiday) |
reason | string|null | "saturday", "sunday", "public_holiday", or null |
holiday_name | string|null | Lithuanian holiday name when reason is "public_holiday", otherwise null |
shorter_workday | boolean | true when this is a workday (laisvadienis: false) and the next calendar day is a red public holiday — the workday is shortened by 1 hour per DK Art. 113. Always false on non-working days. |
Example request
curl "https://calendar.lt/api/v1/laisvadienis?date=2026-06-23"
Example response
// Tuesday before Rasos ir Joninių diena (Jun 24) — workday is shortened:
{
"date": "2026-06-23",
"laisvadienis": false,
"reason": null,
"holiday_name": null,
"shorter_workday": true
}
// The red holiday itself:
{
"date": "2026-06-24",
"laisvadienis": true,
"reason": "public_holiday",
"holiday_name": "Rasos ir Joninių diena",
"shorter_workday": false
}
// Regular working day:
{
"date": "2026-06-22",
"laisvadienis": false,
"reason": null,
"holiday_name": null,
"shorter_workday": false
}
// Saturday (holiday falls on Saturday — Friday would be shorter_workday: true):
{
"date": "2026-01-03",
"laisvadienis": true,
"reason": "saturday",
"holiday_name": null,
"shorter_workday": false
}
/api/v1/days
Public
Returns laisvadienis and shorter_workday status for every day in a date range — a batch version of /api/v1/laisvadienis. No API key required.
Rate limits (IP-based): 20 requests/min · 2 000 requests/month. Maximum range: 366 days per request.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
from | string | Yes | Start date in YYYY-MM-DD format (inclusive) |
to | string | Yes | End date in YYYY-MM-DD format (inclusive). Must not be earlier than from. |
Response fields
| Parameter | Type | Description |
|---|---|---|
from | string | Echoes the from parameter |
to | string | Echoes the to parameter |
count | integer | Number of days in the response |
days[].date | string | Date in YYYY-MM-DD format |
days[].laisvadienis | boolean | true if non-working day (weekend or red public holiday) |
days[].holiday_name | string|null | Lithuanian name of the red public holiday, or null |
days[].shorter_workday | boolean | true when this is a workday (laisvadienis: false) and the next calendar day is a red public holiday — the workday is shortened by 1 hour per DK Art. 113. Always false on non-working days. |
Example request
curl "https://calendar.lt/api/v1/days?from=2026-05-01&to=2026-05-31"
Example response
{
"from": "2026-05-01",
"to": "2026-05-31",
"count": 31,
"days": [
{
"date": "2026-05-01",
"laisvadienis": true,
"holiday_name": "Tarptautinė darbo diena",
"shorter_workday": false
},
{
"date": "2026-05-02",
"laisvadienis": false,
"holiday_name": null,
"shorter_workday": false
},
{
"date": "2026-05-03",
"laisvadienis": true,
"holiday_name": "Motinos diena",
"shorter_workday": false
},
{
"date": "2026-05-04",
"laisvadienis": false,
"holiday_name": null,
"shorter_workday": false
}
]
}
Error responses
| HTTP | Error code | Description |
|---|---|---|
| 400 | missing_param | Both from and to are required |
| 400 | invalid_date | Either date is not a valid YYYY-MM-DD value |
| 400 | invalid_range | from is later than to |
| 400 | range_too_large | Range exceeds 366 days — split into smaller requests |
| 429 | rate_limit_minute | 20 requests/minute exceeded |
| 429 | rate_limit_month | 2 000 requests/month exceeded |
/api/v1/holidays
Returns Lithuanian holidays for a given date or full year.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | Yes* | Date in YYYY-MM-DD format — returns holidays for that specific date |
year | integer | Yes* | Year (1583–2100) — returns all holidays for the entire year |
lang | string | No | Language: lt, en, pl, ru (default: lt) |
Provide either date or year — not both.
Response fields
| Parameter | Type | Description |
|---|---|---|
date / year | string / integer | Echoes the query parameter |
count | integer | Number of holidays returned |
holidays[].date | string | Date in YYYY-MM-DD |
holidays[].name | string | Name in requested language |
holidays[].name_lt/en/pl/ru | string | Names in all four languages |
holidays[].type | string | public, traditional, religious, school, other |
holidays[].is_red | boolean | true if this is a non-working day (laisvadienis) per DK 123 str. |
Example request
// By date: curl "https://calendar.lt/api/v1/holidays?date=2026-04-05&lang=en" \ -H "X-API-Key: clt_your_api_key_here" // Full year: curl "https://calendar.lt/api/v1/holidays?year=2026&lang=lt" \ -H "X-API-Key: clt_your_api_key_here"
Example response
{
"date": "2026-04-05",
"count": 1,
"holidays": [
{
"date": "2026-04-05",
"name": "Easter Sunday",
"name_lt": "Šv. Velykos",
"name_en": "Easter Sunday",
"name_pl": "Niedziela Wielkanocna",
"name_ru": "Пасха",
"type": "public",
"is_red": true
}
]
}
/api/v1/name-days
Returns name days celebrated on a given date.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | Yes | Date in YYYY-MM-DD format |
lang | string | No | Language: lt, en, pl, ru (default: lt) |
Example request
curl "https://calendar.lt/api/v1/name-days?date=2026-03-19&lang=lt" \ -H "X-API-Key: clt_your_api_key_here"
Example response
{
"date": "2026-03-19",
"lang": "lt",
"count": 3,
"name_days": [
{ "name": "Juozapas", "gender": "m" },
{ "name": "Juozas", "gender": "m" },
{ "name": "Juzė", "gender": "f" }
]
}
/api/v1/day
Returns full day data: holidays and name days combined.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
date | string | Yes | Date in YYYY-MM-DD format |
lang | string | No | Language: lt, en, pl, ru (default: lt) |
Response fields
| Parameter | Type | Description |
|---|---|---|
date | string | Date in YYYY-MM-DD |
lang | string | Language used for names |
day_of_week | integer | 0 = Sunday, 1 = Monday … 6 = Saturday |
is_weekend | boolean | true for Saturday or Sunday |
week_number | integer | ISO 8601 week number |
holidays[].name | string | Holiday name in requested language |
holidays[].name_lt/en | string | Names in Lithuanian and English |
holidays[].date | string | Holiday date (YYYY-MM-DD) |
holidays[].type | string | Holiday category |
holidays[].is_red | boolean | true if non-working day (laisvadienis) |
name_days[].name | string | Name-day name |
name_days[].gender | string | "m" or "f" |
Example request
curl "https://calendar.lt/api/v1/day?date=2026-05-03&lang=en" \ -H "X-API-Key: clt_your_api_key_here"
Example response
{
"date": "2026-05-03",
"lang": "en",
"day_of_week": 0,
"is_weekend": true,
"week_number": 18,
"holidays": [
{
"name": "Mother's Day",
"name_lt": "Motinos diena",
"name_en": "Mother's Day",
"date": "2026-05-03",
"type": "traditional",
"is_red": true
}
],
"name_days": [
{ "name": "Irma", "gender": "f" }
]
}
The is_red flag
The is_red field marks a holiday as a non-working day
(laisvadienis) per the Lithuanian Labour Code (DK 123 str.).
It is managed entirely in the database — no hardcoded lists in the application code.
The following holidays carry is_red: true:
| Holiday | Date | Computed |
|---|---|---|
| Naujųjų metų diena | Jan 1 | |
| Lietuvos valstybės atkūrimo diena | Feb 16 | |
| Lietuvos nepriklausomybės atkūrimo diena | Mar 11 | |
| Šv. Velykos (Easter Sunday) | Variable | Yes |
| Antroji Velykų diena (Easter Monday) | Variable | Yes |
| Tarptautinė darbo diena | May 1 | |
| Motinos diena (Mother's Day) | 1st Sunday of May | Yes |
| Rasos ir Joninių diena | Jun 24 | |
| Valstybės (Mindaugo karūnavimo) diena | Jul 6 | |
| Žolinė | Aug 15 | |
| Visų Šventųjų diena | Nov 1 | |
| Mirusiųjų atminimo (Vėlinių) diena | Nov 2 | |
| Kūčių diena | Dec 24 | |
| Šventosios Kalėdos (pirma diena) | Dec 25 | |
| Šventosios Kalėdos (antra diena) | Dec 26 | |
| Tėvo diena (Father's Day) | 1st Sunday of June | Yes |
Note: type reflects the holiday's cultural category (public,
traditional, religious, etc.) and is independent of
is_red. For example, Motinos diena has type: "traditional"
but is_red: true. Always use is_red (not type)
to determine whether a day is non-working.
The shorter_workday flag
Lithuanian labour law (Darbo kodeksas, Art. 113) requires that the workday immediately before a red public holiday (šventinių dienų išvakarės) be shortened by one hour. This applies to every employee regardless of working hours or sector.
The rule triggers on the calendar day directly before the holiday — not the last workday of the week. Possible cases:
| Holiday falls on | Shorter workday on |
|---|---|
| Tuesday → Monday is shortened | |
| Wednesday → Tuesday is shortened | |
| Saturday → Friday is shortened | |
| Sunday → Saturday is already non-working, no day is shortened | |
| Monday → Sunday is already non-working, no day is shortened | |
Key invariant: shorter_workday is always false when laisvadienis: true. A non-working day cannot simultaneously be a shortened workday.
Practical use
Use this flag to automate HR and payroll systems — no need to maintain your own calendar of shortened days. Query any date and act on shorter_workday: true:
const res = await fetch("https://calendar.lt/api/v1/laisvadienis?date=2026-06-23");
const { laisvadienis, shorter_workday } = await res.json();
if (laisvadienis) return "Day off";
if (shorter_workday) return "Work until 16:00 today (1 hour shorter)";
return "Normal working day";
Error codes
| HTTP | Error code | Description |
|---|---|---|
| 401 | missing_key | No API key was provided. |
| 401 | invalid_key | The API key is invalid or inactive. |
| 401 | expired_key | The API key has expired. |
| 429 | rate_limit_minute | Per-minute rate limit exceeded. |
| 429 | rate_limit_day | Daily rate limit exceeded. |
| 400 | invalid_date | Date format is invalid. Use YYYY-MM-DD. |
| 400 | missing_param | A required parameter is missing. |
| 400 | invalid_year | Year is outside the supported range (1583–2100) |
Rate limiting
Each API key is subject to two sliding-window limits: requests per minute and requests per day. When a limit is exceeded, the 429 response will indicate which limit was hit.
| Endpoint | Auth required | Rate limit |
|---|---|---|
/api/v1/laisvadienis | No | 60 req/min · 10 000 req/month (IP-based) |
/api/v1/holidays | Yes | Per API key plan |
/api/v1/name-days | Yes | Per API key plan |
/api/v1/day | Yes | Per API key plan |