Skip to content
MarketCalendars.com
Sign up

API documentation

REST API v2: trading hours, holidays and settlement days as JSON over HTTPS

Get a year of holidays

GET/api/v2/markets/{market}/holidays/{year}

Full-day market holidays (recurring or one-off) and irregular days such as early closes and late opens, for one year

One request: one year. A successful response counts as one request

Parameters

NameInDescription
marketrequiredpathMarket id, as listed by GET /markets (for example nyse, lse, cme-equity-futures)Example: nyse
yearrequiredpathCalendar year, YYYYExample: 2026

Example

curl https://marketcalendars.com/api/v2/markets/nyse/holidays/2026 \
  -H "Authorization: Bearer mc_live_..."
GET /api/v2/markets/nyse/holidays/2026200
{
  "market": "nyse",
  "year": 2026,
  "timezone": "America/New_York",
  "coverage": {
    "from": "1995-01-01",
    "to": "2051-12-31"
  },
  "possiblyIncomplete": false,
  "holidays": [
    {
      "date": "2026-01-01",
      "name": "New Year's Day",
      "type": "recurring",
      "disputed": null
    },
    {
      "date": "2026-01-19",
      "name": "Martin Luther King Jr. Day",
      "type": "recurring",
      "disputed": null
    },
    {
      "date": "2026-02-16",
      "name": "Presidents' Day",
      "type": "recurring",
      "disputed": null
    }
  ],
  "specialSessions": [
    {
      "date": "2026-11-27",
      "name": "Day after Thanksgiving",
      "kind": "early_close",
      "disputed": null,
      "phases": [
        {
          "type": "pre_market",
          "start": "2026-11-27T04:00:00-05:00",
          "end": "2026-11-27T09:30:00-05:00",
          "tradeDate": "2026-11-27"
        },
        {
          "type": "regular",
          "start": "2026-11-27T09:30:00-05:00",
          "end": "2026-11-27T13:00:00-05:00",
          "tradeDate": "2026-11-27"
        },
        {
          "type": "after_hours",
          "start": "2026-11-27T13:00:00-05:00",
          "end": "2026-11-27T17:00:00-05:00",
          "tradeDate": "2026-11-27"
        }
      ]
    },
    {
      "date": "2026-12-24",
      "name": "Christmas Eve",
      "kind": "early_close",
      "disputed": null,
      "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"
        }
      ]
    }
  ]
}

A live response from the API. Lists longer than seven items are cut to three here

Response fields

Holidays object. Fields marked | null are always present and may be null

FieldTypeDescription
marketstringMarket id
yearintegerCalendar year
timezonestringIANA time zone of the market
coverageobjectDates we have data for
coverage.fromstring (date)First date with data
coverage.tostring (date)Last date with data
possiblyIncompletebooleanTrue when the year has far fewer holidays than other years, which usually means the source has not published them yet
holidaysobject[]Full-day closures in date order
holidays[].datestring (date)Date the market is closed
holidays[].namestringHoliday name
holidays[].typestringRecurring every year, or a one-off closurerecurringone_off
holidays[].disputedstring | nullSet when the holidays package disagrees with the source library about this date
specialSessionsobject[]Days the market trades irregular hours: early closes, late opens and other irregular days
specialSessions[].datestring (date)Trade date of the session
specialSessions[].namestringSession or event name
specialSessions[].kindstringKind of irregular dayearly_closelate_openearly_close_late_openlate_closeextra_sessionbreak_changemodified
specialSessions[].disputedstring | nullSet when the holidays package disagrees with the source library about this date
specialSessions[].phasesobject[]Phases of the irregular day
specialSessions[].phases[].typestringregular is core trading; break is a lunch break; pre_market and after_hours are extended hours where the source has thempre_marketregularbreakafter_hours
specialSessions[].phases[].startstring (date-time)Start, ISO 8601 with the market's UTC offset
specialSessions[].phases[].endstring (date-time)End, ISO 8601 with the market's UTC offset
specialSessions[].phases[].tradeDatestring (date)Trade date the phase belongs to. Differs from the calendar date for sessions that open the evening before

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