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

GET /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

ParameterTypeRequiredDescription
datestringYesDate in YYYY-MM-DD format

Response fields

ParameterTypeDescription
datestringDate in YYYY-MM-DD format
laisvadienisbooleantrue if non-working day (weekend or red holiday)
reasonstring|null"saturday", "sunday", "public_holiday", or null
holiday_namestring|nullLithuanian holiday name when reason is "public_holiday", otherwise null
shorter_workdaybooleantrue 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
}
GET /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

ParameterTypeRequiredDescription
fromstringYesStart date in YYYY-MM-DD format (inclusive)
tostringYesEnd date in YYYY-MM-DD format (inclusive). Must not be earlier than from.

Response fields

ParameterTypeDescription
fromstringEchoes the from parameter
tostringEchoes the to parameter
countintegerNumber of days in the response
days[].datestringDate in YYYY-MM-DD format
days[].laisvadienisbooleantrue if non-working day (weekend or red public holiday)
days[].holiday_namestring|nullLithuanian name of the red public holiday, or null
days[].shorter_workdaybooleantrue 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

HTTPError codeDescription
400missing_paramBoth from and to are required
400invalid_dateEither date is not a valid YYYY-MM-DD value
400invalid_rangefrom is later than to
400range_too_largeRange exceeds 366 days — split into smaller requests
429rate_limit_minute20 requests/minute exceeded
429rate_limit_month2 000 requests/month exceeded
GET /api/v1/holidays

Returns Lithuanian holidays for a given date or full year.

Parameters

ParameterTypeRequiredDescription
datestringYes*Date in YYYY-MM-DD format — returns holidays for that specific date
yearintegerYes*Year (1583–2100) — returns all holidays for the entire year
langstringNoLanguage: lt, en, pl, ru (default: lt)

Provide either date or year — not both.

Response fields

ParameterTypeDescription
date / yearstring / integerEchoes the query parameter
countintegerNumber of holidays returned
holidays[].datestringDate in YYYY-MM-DD
holidays[].namestringName in requested language
holidays[].name_lt/en/pl/rustringNames in all four languages
holidays[].typestringpublic, traditional, religious, school, other
holidays[].is_redbooleantrue 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
    }
  ]
}
GET /api/v1/name-days

Returns name days celebrated on a given date.

Parameters

ParameterTypeRequiredDescription
datestringYesDate in YYYY-MM-DD format
langstringNoLanguage: 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" }
  ]
}
GET /api/v1/day

Returns full day data: holidays and name days combined.

Parameters

ParameterTypeRequiredDescription
datestringYesDate in YYYY-MM-DD format
langstringNoLanguage: lt, en, pl, ru (default: lt)

Response fields

ParameterTypeDescription
datestringDate in YYYY-MM-DD
langstringLanguage used for names
day_of_weekinteger0 = Sunday, 1 = Monday … 6 = Saturday
is_weekendbooleantrue for Saturday or Sunday
week_numberintegerISO 8601 week number
holidays[].namestringHoliday name in requested language
holidays[].name_lt/enstringNames in Lithuanian and English
holidays[].datestringHoliday date (YYYY-MM-DD)
holidays[].typestringHoliday category
holidays[].is_redbooleantrue if non-working day (laisvadienis)
name_days[].namestringName-day name
name_days[].genderstring"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:

HolidayDateComputed
Naujųjų metų dienaJan 1
Lietuvos valstybės atkūrimo dienaFeb 16
Lietuvos nepriklausomybės atkūrimo dienaMar 11
Šv. Velykos (Easter Sunday)VariableYes
Antroji Velykų diena (Easter Monday)VariableYes
Tarptautinė darbo dienaMay 1
Motinos diena (Mother's Day)1st Sunday of MayYes
Rasos ir Joninių dienaJun 24
Valstybės (Mindaugo karūnavimo) dienaJul 6
ŽolinėAug 15
Visų Šventųjų dienaNov 1
Mirusiųjų atminimo (Vėlinių) dienaNov 2
Kūčių dienaDec 24
Šventosios Kalėdos (pirma diena)Dec 25
Šventosios Kalėdos (antra diena)Dec 26
Tėvo diena (Father's Day)1st Sunday of JuneYes

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 onShorter 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

HTTPError codeDescription
401missing_keyNo API key was provided.
401invalid_keyThe API key is invalid or inactive.
401expired_keyThe API key has expired.
429rate_limit_minutePer-minute rate limit exceeded.
429rate_limit_dayDaily rate limit exceeded.
400invalid_dateDate format is invalid. Use YYYY-MM-DD.
400missing_paramA required parameter is missing.
400invalid_yearYear 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.

EndpointAuth requiredRate limit
/api/v1/laisvadienisNo60 req/min · 10 000 req/month (IP-based)
/api/v1/holidaysYesPer API key plan
/api/v1/name-daysYesPer API key plan
/api/v1/dayYesPer API key plan

Get API access

To request an API key, contact us by email.

Contact us