Skip to content
MarketCalendars.com
Sign up

API documentation

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

Get the regular weekly hours

GET/api/v2/markets/{market}/regular-hours

The regular hours for each weekday in force on a date, with the dates that schedule starts and ends. Holidays and irregular days are not applied

One request: one schedule. 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
dateoptionalqueryDate the schedule is in force, YYYY-MM-DD. Defaults to today in the market's time zoneExample: 2026-11-27

Example

curl https://marketcalendars.com/api/v2/markets/hkex/regular-hours?date=2026-11-27 \
  -H "Authorization: Bearer mc_live_..."
GET /api/v2/markets/hkex/regular-hours?date=2026-11-27200
{
  "market": "hkex",
  "timezone": "Asia/Hong_Kong",
  "date": "2026-11-27",
  "effectiveFrom": "2011-03-01",
  "effectiveTo": null,
  "days": [
    {
      "weekday": 1,
      "name": "Monday",
      "isTradingDay": true,
      "phases": [
        {
          "type": "regular",
          "start": "09:30",
          "end": "12:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "break",
          "start": "12:00",
          "end": "13:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "regular",
          "start": "13:00",
          "end": "16:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        }
      ]
    },
    {
      "weekday": 2,
      "name": "Tuesday",
      "isTradingDay": true,
      "phases": [
        {
          "type": "regular",
          "start": "09:30",
          "end": "12:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "break",
          "start": "12:00",
          "end": "13:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "regular",
          "start": "13:00",
          "end": "16:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        }
      ]
    },
    {
      "weekday": 3,
      "name": "Wednesday",
      "isTradingDay": true,
      "phases": [
        {
          "type": "regular",
          "start": "09:30",
          "end": "12:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "break",
          "start": "12:00",
          "end": "13:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "regular",
          "start": "13:00",
          "end": "16:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        }
      ]
    },
    {
      "weekday": 4,
      "name": "Thursday",
      "isTradingDay": true,
      "phases": [
        {
          "type": "regular",
          "start": "09:30",
          "end": "12:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "break",
          "start": "12:00",
          "end": "13:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "regular",
          "start": "13:00",
          "end": "16:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        }
      ]
    },
    {
      "weekday": 5,
      "name": "Friday",
      "isTradingDay": true,
      "phases": [
        {
          "type": "regular",
          "start": "09:30",
          "end": "12:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "break",
          "start": "12:00",
          "end": "13:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        },
        {
          "type": "regular",
          "start": "13:00",
          "end": "16:00",
          "startDayOffset": 0,
          "endDayOffset": 0
        }
      ]
    },
    {
      "weekday": 6,
      "name": "Saturday",
      "isTradingDay": false,
      "phases": []
    },
    {
      "weekday": 7,
      "name": "Sunday",
      "isTradingDay": false,
      "phases": []
    }
  ]
}

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

Response fields

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

FieldTypeDescription
marketstringMarket id
timezonestringIANA time zone of the market
datestring (date)Date the schedule is in force
effectiveFromstring (date) | nullFirst date of this schedule. Null when it starts before our data
effectiveTostring (date) | nullLast date of this schedule. Null when it runs past our data
daysobject[]Seven entries, Monday first
days[].weekdayintegerISO weekday, 1 = Monday to 7 = Sunday
days[].namestringWeekday name
days[].isTradingDaybooleanWhether the weekday is a regular trading day
days[].phasesobject[]Regular phases in time order. Empty on non-trading weekdays
days[].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
days[].phases[].startstringLocal wall-clock time, HH:MM
days[].phases[].endstringLocal wall-clock time, HH:MM
days[].phases[].startDayOffsetintegerDays from the trade date: -1 when the phase starts the evening before
days[].phases[].endDayOffsetintegerDays from the trade date to the end

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