Docs
Team

Set a member's working hours

PUThttps://api.norreach.app/v1/members/{id}/schedule

Sets a member's working hours (per weekday: start and end HH:MM, on or off — days left out stay as they are), their time zone, whether their schedule is fixed or flexible, and whether they're taking calls now. Checked on the server: each day once, end after start, a real time zone. Owners, admins and managers, for anyone in the workspace. dry_run=true answers it as it would be saved.

team:schedulesRole must allow: team.schedulesSupports dry_runOperation id: update_member_schedule
PUT/members/{id}/schedule
curl -X PUT "https://api.norreach.app/v1/members/{id}/schedule" \
  -H "Authorization: Bearer $NORREACH_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "timezone": "Europe/Stockholm",
  "hours": [
    {
      "day_of_week": 5,
      "start": "08:00",
      "end": "14:00",
      "enabled": true
    }
  ]
}'
Set a member's working hours
{
  "object": "member_schedule",
  "member_id": "8e9f0a1b-2c3d-4e4f-9a5b-6c7d8e9f0a1b",
  "timezone": "Europe/Stockholm",
  "schedule_type": "scheduled",
  "is_online": true,
  "hours": [
    {
      "day_of_week": 1,
      "start": "08:00",
      "end": "16:30",
      "enabled": true
    },
    {
      "day_of_week": 2,
      "start": "08:00",
      "end": "16:30",
      "enabled": true
    },
    {
      "day_of_week": 3,
      "start": "08:00",
      "end": "16:30",
      "enabled": true
    },
    {
      "day_of_week": 4,
      "start": "08:00",
      "end": "16:30",
      "enabled": true
    },
    {
      "day_of_week": 5,
      "start": "08:00",
      "end": "16:30",
      "enabled": true
    }
  ],
  "source": "manual"
}

Authorizations

Authorizationstringheaderrequired

Bearer authentication: send Authorization: Bearer <key>, with an API key or an OAuth access token. The key needs the scope team:schedules. API keys and scopes

Path parameters

idstring (uuid)pathrequired

An id (UUID).

Query parameters

dry_runbooleanquery

Run every check and return what would happen, changing nothing.

Headers

Idempotency-Keystringheader

Any unique string (≤ 255). The same key with the same request returns the first answer for 24 hours.

Body

application/json

timezonestring
schedule_typeenum
One of:scheduledflexible
is_onlineboolean
hoursobject[]

Days left out stay as they are.

Show child attributes
hours[].day_of_weekintegerrequired

0 = Sunday … 6 = Saturday.

hours[].startstringrequired

HH:MM, 24-hour (24:00 = midnight at the end of the day).

hours[].endstringrequired

HH:MM, 24-hour (24:00 = midnight at the end of the day).

hours[].enabledbooleanrequired

Response

200application/json— Set a member's working hours

object"member_schedule"required
member_idstring (uuid)required

An id (UUID).

timezonestringrequired
schedule_typeenumrequired
One of:scheduledflexible
is_onlinebooleanrequired

Taking calls now (the team's hold queue and inbound routing read it).

hoursobject[]required
Show child attributes
hours[].day_of_weekintegerrequired

0 = Sunday … 6 = Saturday.

hours[].startstringrequired

HH:MM, 24-hour (24:00 = midnight at the end of the day).

hours[].endstringrequired

HH:MM, 24-hour (24:00 = midnight at the end of the day).

hours[].enabledbooleanrequired
sourceenumrequired

default = none saved yet: Monday–Friday 09:00–17:00 in the workspace's time zone, as the app assumes.

One of:manualcalendardefault

Errors

Errors are application/problem+json with a stable code.

StatusCodeMeaning
400bad_requestThe request couldn't be read.
400unknown_fieldThe request has a field this operation doesn't know.
401unauthorizedA valid API key is required.
403insufficient_scopeThis API key doesn't have the scope this operation needs.
403feature_not_enabledThe API isn't switched on for this workspace.
403role_forbiddenThe key's creator's role can't do this.
404not_foundThat doesn't exist.
409idempotency_in_progressA request with this Idempotency-Key is still running.
413too_largeThe request body is too large.
422validation_failedThe request has invalid fields.
422idempotency_mismatchThis Idempotency-Key was used with a different request.
429rate_limitedToo many requests. Slow down and try again.
500server_errorSomething went wrong on our side.
503unavailableThe API isn't available right now. Try again shortly.