---
title: "Create a business-hours profile"
method: POST
path: "/business-hours"
tags: ["Business Hours"]
---

# Create a business-hours profile

`POST /business-hours`

## Request

- Base URL: `https://api.thrivedesk.com/v1`
- URL: `https://api.thrivedesk.com/v1/business-hours`
- Auth: HTTP bearer

Administrators and the account owner only.

An inbox channel belongs to at most one profile. Binding one that another profile already covers returns 422 carrying `conflicting_business_hour_id`, `inbox_id`, and `channel` in place of the usual `errors` object, and the whole write is rolled back.

Under `calendar_24_7` the server stores `schedule` and `schedule_type` as null whatever the payload carries.

Personal access token only. The API supports a second, partner-issued token class that is not part of the public surface. This endpoint does not accept that class.

## Request body

- BusinessHourCreate
  - `name` string, required: Unique within the organization.
  - `description` string
  - `mode` 'calendar_24_7' | 'business_hours', required
  - `schedule_type` 'standard' | 'custom': Required when `mode` is `business_hours`.
  - `schedule` DaySchedule[]: Required when `mode` is `business_hours`. Exactly seven entries, each weekday present once.
    - `day` 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun', required
    - `enabled` boolean, required
    - `start` string, nullable: 24-hour `HH:MM`. Required when the day is enabled, and must differ from `end`.
    - `end` string, nullable: 24-hour `HH:MM`. Required when the day is enabled.
  - `inbox_channels` InboxChannelAssignment[]
    - `inbox_id` string, required
    - `channel` 'email' | 'livechat', required

## Response `201`

Success.

- BusinessHourResponse
  - `data` BusinessHour, required: An operating-hours profile, optionally bound to inbox channels.
    - `id` string, uuid
    - `name` string
    - `description` string, nullable
    - `mode` 'calendar_24_7' | 'business_hours': `calendar_24_7` means always open. `schedule` and `schedule_type` are null in that mode.
    - `schedule_type` 'standard' | 'custom' | 'null', nullable
    - `schedule` DaySchedule[], nullable: Seven entries, one per weekday. Null when the mode is `calendar_24_7`.
      - `day` 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat' | 'sun', required
      - `enabled` boolean, required
      - `start` string, nullable: 24-hour `HH:MM`. Required when the day is enabled, and must differ from `end`.
      - `end` string, nullable: 24-hour `HH:MM`. Required when the day is enabled.
    - `inbox_channels` InboxChannelGroup[]: The inbox channels this profile covers, grouped by inbox. Writes send a flat list of `{inbox_id, channel}` pairs; reads return them grouped.
      - `inbox_id` string
      - `channels` string[]
    - `created_at` string, date-time
    - `updated_at` string, date-time

## Other responses

- `401`: Missing or invalid bearer token.
- `403`: Token is valid but does not include a required scope, or the user does not have access to the resource.
- `404`: Resource not found.
- `422`: Request body failed validation.
- `429`: Rate limit exceeded. The `Retry-After` header indicates how long to wait before retrying. See [Pagination and rate limits](/get-started/pagination) for the full rate-limit policy.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/thrivedesk/apis/thrivedesk-public-api.md) - [All operations](https://skmtc.dev/thrivedesk/apis/thrivedesk-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/thrivedesk/apis/thrivedesk-public-api/revisions/dce9c632a018?raw)
