# Create an office hours exception

You can create an exception for an office hours schedule. Use `closed` to mark the day closed (omit `time_intervals`) or `custom_hours` to supply replacement intervals.

Endpoint: POST /office_hours_schedules/{office_hours_schedule_id}/office_hours_exceptions
Version: 2.16
Security: bearerAuth

## Path parameters:

  - `office_hours_schedule_id` (string, required)
    The unique identifier for the office hours schedule.

## Header parameters:

  - `Intercom-Version` (string)

## Request fields (application/json):

  - `exception_date` (string, required)
    The date the exception applies to, in `YYYY-MM-DD` format.
    Example: 2026-12-25

  - `exception_type` (string, required)
    The type of exception.
    Enum: "closed", "custom_hours"

  - `name` (string)
    An optional name for the exception.
    Example: Christmas Day

  - `time_intervals` (array)
    The open intervals for the exception date. Required for `custom_hours`; omit for `closed`.

  - `time_intervals.start_minute` (integer)
    Minute the interval starts. For schedules, offset from the start of the week (Monday 00:00 = 0); for exceptions, offset from midnight on `exception_date`.
    Example: 540

  - `time_intervals.end_minute` (integer)
    Minute the interval ends. For schedules, offset from the start of the week (Monday 00:00 = 0); for exceptions, offset from midnight on `exception_date`.
    Example: 1020

  - `recurring_annually` (boolean)
    Whether the exception repeats every year on the same date.
    Example: true

## Response 201 fields (application/json):

  - `type` (string)
    The type of the object - always `office_hours_exception`.
    Example: office_hours_exception

  - `id` (string)
    The unique identifier for the office hours exception.
    Example: 456

  - `office_hours_schedule_id` (string)
    The unique identifier for the schedule this exception belongs to.
    Example: 123

  - `exception_date` (string)
    The date the exception applies to, in `YYYY-MM-DD` format.
    Example: 2026-12-25

  - `exception_type` (string)
    `closed` means the workspace is closed all day; `custom_hours` replaces the regular hours with `time_intervals`.
    Enum: "closed", "custom_hours"

  - `name` (string)
    An optional name for the exception.
    Example: Christmas Day

  - `time_intervals` (array)
    The open intervals for the exception date. `null` when `exception_type` is `closed`.

  - `time_intervals.start_minute` (integer)
    Minute the interval starts. For schedules, offset from the start of the week (Monday 00:00 = 0); for exceptions, offset from midnight on `exception_date`.
    Example: 540

  - `time_intervals.end_minute` (integer)
    Minute the interval ends. For schedules, offset from the start of the week (Monday 00:00 = 0); for exceptions, offset from midnight on `exception_date`.
    Example: 1020

  - `time_intervals.day_of_week` (integer)
    Derived day of the week the interval falls on (0 = Monday … 6 = Sunday). For exceptions, this is derived from `exception_date`.
    Example: 0

  - `recurring_annually` (boolean)
    Whether the exception repeats every year on the same date.
    Example: true

  - `created_at` (integer)
    The time the exception was created as a Unix timestamp.
    Example: 1717200000

  - `updated_at` (integer)
    The time the exception was last updated as a Unix timestamp.
    Example: 1717200000

## Response 401 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

## Response 404 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

## Response 422 fields (application/json):

  - `type` (string, required)
    The type is error.list
    Example: error.list

  - `request_id` (string)
    Example: f93ecfa8-d08a-4325-8694-89aeb89c8f85

  - `errors` (array, required)
    An array of one or more error objects

  - `errors.code` (string, required)
    A string indicating the kind of error, used to further qualify the HTTP response code
    Example: unauthorized

  - `errors.message` (string)
    Optional. Human readable description of the error.
    Example: Access Token Invalid

  - `errors.field` (string)
    Optional. Used to identify a particular field or query parameter that was in error.
    Example: email

