Get closures on a date
GET/api/v2/dates/{date}
Which markets are closed (holiday or weekend) or trade irregular hours on a date. The date is each market's local trade date
One request: one day. A successful response counts as one request
Parameters
| Name | In | Description |
|---|---|---|
daterequired | path | Trade date, YYYY-MM-DDExample: 2026-12-24 |
Example
curl https://marketcalendars.com/api/v2/dates/2026-12-24 \
-H "Authorization: Bearer mc_live_..."const res = await fetch("https://marketcalendars.com/api/v2/dates/2026-12-24", {
headers: { Authorization: `Bearer ${process.env.MARKETCALENDARS_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://marketcalendars.com/api/v2/dates/2026-12-24",
headers={"Authorization": f"Bearer {os.environ['MARKETCALENDARS_KEY']}"},
)
data = res.json()GET /api/v2/dates/2026-12-24200
{
"date": "2026-12-24",
"regularCount": 32,
"closed": [
{
"market": "b3",
"reason": "holiday",
"name": "Christmas Eve"
},
{
"market": "xetra",
"reason": "holiday",
"name": "Christmas Eve"
},
{
"market": "frankfurt",
"reason": "holiday",
"name": "Christmas Eve"
}
],
"irregular": [
{
"market": "nyse",
"type": "early_close",
"name": "Christmas Eve",
"phases": [
{
"type": "pre_market",
"start": "2026-12-24T04:00:00-05:00",
"end": "2026-12-24T09:30:00-05:00",
"tradeDate": "2026-12-24"
},
{
"type": "regular",
"start": "2026-12-24T09:30:00-05:00",
"end": "2026-12-24T13:00:00-05:00",
"tradeDate": "2026-12-24"
},
{
"type": "after_hours",
"start": "2026-12-24T13:00:00-05:00",
"end": "2026-12-24T17:00:00-05:00",
"tradeDate": "2026-12-24"
}
]
},
{
"market": "nasdaq",
"type": "early_close",
"name": "Christmas Eve",
"phases": [
{
"type": "pre_market",
"start": "2026-12-24T04:00:00-05:00",
"end": "2026-12-24T09:30:00-05:00",
"tradeDate": "2026-12-24"
},
{
"type": "regular",
"start": "2026-12-24T09:30:00-05:00",
"end": "2026-12-24T13:00:00-05:00",
"tradeDate": "2026-12-24"
},
{
"type": "after_hours",
"start": "2026-12-24T13:00:00-05:00",
"end": "2026-12-24T17:00:00-05:00",
"tradeDate": "2026-12-24"
}
]
},
{
"market": "cme",
"type": "early_close",
"name": "Christmas Eve",
"phases": [
{
"type": "regular",
"start": "2026-12-23T17:00:00-06:00",
"end": "2026-12-24T12:00:00-06:00",
"tradeDate": "2026-12-24"
}
]
}
],
"noData": []
}A live response from the API. Lists longer than seven items are cut to three here
Response fields
DateOverview object. Fields marked | null are always present and may be null
| Field | Type | Description |
|---|---|---|
| date | string (date) | The date asked for |
| regularCount | integer | Markets trading regular hours that day |
| closed | object[] | Markets that do not trade on the date |
| closed[].market | string | Market id |
| closed[].reason | string | Why the market is closedholidayweekend |
| closed[].name | string | null | Holiday name; null at weekends |
| irregular | object[] | Markets that trade irregular hours on the date |
| irregular[].market | string | Market id |
| irregular[].type | string | Kind of irregular dayearly_closelate_openearly_close_late_openlate_closeextra_sessionbreak_changemodified |
| irregular[].name | string | null | Session name from the source |
| irregular[].phases | object[] | Phases of the session |
| irregular[].phases[].type | string | regular is core trading; break is a lunch break; pre_market and after_hours are extended hours where the source has thempre_marketregularbreakafter_hours |
| irregular[].phases[].start | string (date-time) | Start, ISO 8601 with the market's UTC offset |
| irregular[].phases[].end | string (date-time) | End, ISO 8601 with the market's UTC offset |
| irregular[].phases[].tradeDate | string (date) | Trade date the phase belongs to. Differs from the calendar date for sessions that open the evening before |
| noData | string[] | Markets without data for the date |
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
- 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