Get a year of irregular days
GET/api/v2/markets/{market}/irregular-days/{year}
Every date in a year that departs from the regular weekly hours, with its type and reasons
One request: one year. A successful response counts as one request
Parameters
| Name | In | Description |
|---|---|---|
marketrequired | path | Market id, as listed by GET /markets (for example nyse, lse, cme-equity-futures)Example: nyse |
yearrequired | path | Calendar year, YYYYExample: 2026 |
Example
curl https://marketcalendars.com/api/v2/markets/lse/irregular-days/2026 \
-H "Authorization: Bearer mc_live_..."const res = await fetch("https://marketcalendars.com/api/v2/markets/lse/irregular-days/2026", {
headers: { Authorization: `Bearer ${process.env.MARKETCALENDARS_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://marketcalendars.com/api/v2/markets/lse/irregular-days/2026",
headers={"Authorization": f"Bearer {os.environ['MARKETCALENDARS_KEY']}"},
)
data = res.json()GET /api/v2/markets/lse/irregular-days/2026200
{
"market": "lse",
"year": 2026,
"timezone": "Europe/London",
"coverage": {
"from": "1995-01-01",
"to": "2051-12-31"
},
"days": [
{
"date": "2026-01-01",
"type": "holiday",
"name": "New Year's Day",
"isTradingDay": false,
"reasons": [
{
"type": "holiday",
"name": "New Year's Day"
}
]
},
{
"date": "2026-04-03",
"type": "holiday",
"name": "Good Friday",
"isTradingDay": false,
"reasons": [
{
"type": "holiday",
"name": "Good Friday"
}
]
},
{
"date": "2026-04-06",
"type": "holiday",
"name": "Easter Monday",
"isTradingDay": false,
"reasons": [
{
"type": "holiday",
"name": "Easter Monday"
}
]
}
]
}A live response from the API. Lists longer than seven items are cut to three here
Response fields
IrregularDays object. Fields marked | null are always present and may be null
| Field | Type | Description |
|---|---|---|
| market | string | Market id |
| year | integer | Calendar year |
| timezone | string | IANA time zone of the market |
| coverage | object | Dates we have data for |
| coverage.from | string (date) | First date with data |
| coverage.to | string (date) | Last date with data |
| days | object[] | Irregular days in date order |
| days[].date | string (date) | Trade date |
| days[].type | string | holiday for a full closure, otherwise the kind of irregular dayholidayearly_closelate_openearly_close_late_openlate_closeextra_sessionbreak_changemodified |
| days[].name | string | null | Holiday or session name from the source |
| days[].isTradingDay | boolean | False for holidays, true for irregular days |
| days[].reasons | object[] | Why the day departs from the regular hours |
| days[].reasons[].type | string | Why the day departs from the regular weekly scheduleholidayearly_closelate_openlate_closeextra_sessionbreak_changemodified_hoursinterruption |
| days[].reasons[].name | string | null | Holiday or event name from the source |
Errors
- 400invalid-parameterA path or query parameter is malformed, such as a date that is not YYYY-MM-DD
- 401unauthorizedThe Authorization header is missing, malformed, or names a revoked key
- 404unknown-marketNo market has that id. GET /markets lists every id
- 404out-of-rangeThe date or year is outside the market's coverage
- 429rate-limitedThe key sent more requests in a minute than its plan's burst limit
- 429quota-exceededThe plan's requests for this period are used up