Set business hours
PUT/api/v1/business-hours
scope
account:writeChanges the time zone, the weekly hours, or both. Send only what you want to change. business_hours REPLACES the whole week — a day you leave out becomes closed — and null clears the hours altogether. A range that closes earlier than it opens runs past midnight.
This takes effect immediately across the account: assistants set to answer outside business hours, the website chat’s availability, and the send window for personal-WhatsApp broadcasts all read it. It does not change booking availability, which each bookable member keeps separately in Bookings → Settings.
Body
application/json| Name | Type | Description |
|---|---|---|
timezoneoptional | string | An IANA time zone, e.g. Asia/Dubai |
business_hoursoptional | object | null | The whole week, replacing what is stored; null clears it |
business_hours.monoptional | string[][] | Open ranges as [open, close]. An empty list is closed all day |
business_hours.tueoptional | string[][] | Open ranges as [open, close]. An empty list is closed all day |
business_hours.wedoptional | string[][] | Open ranges as [open, close]. An empty list is closed all day |
business_hours.thuoptional | string[][] | Open ranges as [open, close]. An empty list is closed all day |
business_hours.frioptional | string[][] | Open ranges as [open, close]. An empty list is closed all day |
business_hours.satoptional | string[][] | Open ranges as [open, close]. An empty list is closed all day |
business_hours.sunoptional | string[][] | Open ranges as [open, close]. An empty list is closed all day |
Request
curl -X PUT "https://your-crm.example.com/api/v1/business-hours" \
-H "Authorization: Bearer $RAABTA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"business_hours": {
"mon": [
[
"09:00",
"18:00"
]
],
"tue": [
[
"09:00",
"18:00"
]
],
"wed": [
[
"09:00",
"18:00"
]
],
"thu": [
[
"09:00",
"18:00"
]
],
"fri": [
[
"09:00",
"12:00"
],
[
"14:00",
"18:00"
]
]
}
}'Response · 200 OK
{
"data": {
"timezone": "Asia/Dubai",
"business_hours": {
"mon": [
[
"09:00",
"18:00"
]
],
"tue": [
[
"09:00",
"18:00"
]
],
"wed": [
[
"09:00",
"18:00"
]
],
"thu": [
[
"09:00",
"18:00"
]
],
"fri": [
[
"09:00",
"12:00"
],
[
"14:00",
"18:00"
]
]
},
"is_open_now": true
}
}Response
Wrapped in { data: … }| Name | Type | Description |
|---|---|---|
timezonerequired | string | The account’s IANA time zone; every time below is in it |
business_hoursrequired | map<string, string[][]> | null | Weekday key (mon to sun) to a list of [open, close] times as HH:MM. A missing day is closed. null means the hours have never been set |
is_open_nowrequired | boolean | null | Whether the business is open at this moment; null when no hours are set |
Errors
| Status | Code | When |
|---|---|---|
| 400 | bad_request | The request could not be parsed: malformed JSON, an invalid cursor, or a query parameter of the wrong shape. |
| 400 | validation_error | The body or query failed validation. `details` lists each failing field with a `path` and a `message`. |
| 401 | unauthorized | No usable API key: the Authorization header is missing or malformed, or the key is unknown, revoked or expired. The three are deliberately indistinguishable. |
| 403 | forbidden | The key is valid but lacks the scope this endpoint requires, or the request came from an address outside the key’s IP allowlist. The message says which. |
| 403 | account_suspended | The account this key belongs to is suspended. Rotating the key will not help; contact support. |
| 429 | rate_limited | The per-key budget, or the per-IP budget for failed authentication, is exhausted. Honour `Retry-After` before retrying. |
| 500 | internal | Something failed on our side. Safe to retry with the same Idempotency-Key; quote `request_id` if it persists. |