Back to Home

Schedule configuration

A Schedule defines an on-call rotation for a Team: who is on call, in what order, how escalation works, and how VoIP calls behave. A Schedule belongs to a Team, so create the Team first.

Core fields

FieldTypeRequiredDefaultNotes
namestringYesSchedule name. Cannot be empty.
timezonestringNoOrg settingIANA timezone (e.g. Asia/Tokyo). If omitted, empty, or UTC, the Organization's timezone is used.
descriptionstringNo""Free-text description. Up to 500 characters.
labelsarrayNo[]List of string labels. Each label may contain only A-Z a-z 0-9 and - _ . : /, and is at most 200 characters (see Tags and labels).
investigation_hintsstringNoOptional free-text hints shown to responders.
rotation_periodstringYesOne of manual, daily, weekly, biweekly, monthly.
rotation_timeout_secondsnumberYesSeconds to wait for a responder before moving on. Range: 30–300.
rotation_roundsnumberYesHow many rounds to attempt. Range: 1–5.
final_escalation_user_emailstringNoEmail of the user notified as the final escalation. Resolved against the Team's members.
membersarrayYesAt least one member. Each entry is { user_id, rotation_order } or { user_email, rotation_order }. Members must belong to the Team.
configurationsarrayNo[]Overlay schedules with their own date ranges. Up to 10; date ranges must not overlap; each overlay needs at least one member.

For members, identify the user by user_id or user_email (email takes precedence). The final-escalation user and all members must be members of the Team.

Each configurations overlay entry takes a required effective_date (start, YYYY-MM-DD), an optional end_date, and its own members list (same shape as the base members above).

VoIP call behavior

These optional fields control how the automated VoIP call to the on-call responder behaves.

FieldTypeRequiredDefaultNotes
voip_skip_confirmationbooleanNoSkip the confirmation step on the call.
voip_compact_guidancebooleanNoUse shorter spoken guidance.
voip_transcript_enabledbooleanNoEnable call transcript.
voip_input_modestringNoInput modality: voice_and_dtmf or dtmf_only.
voip_barge_inbooleanNoAllow barge-in (full duplex). When voice input is enabled and barge-in is on, the confirmation step cannot be disabled.
voip_confirm_retry_interval_secondsnumberNo8Wait time (seconds) before re-prompting in confirmation mode. Range: 3–60 (default 8).
voip_confirm_max_retriesnumberNo2Maximum re-prompts in confirmation mode. Range: 1–5 (default 2).
flapping_escalation_enabledbooleanNofalseWhen ON, the server detects call flapping (caller repeatedly reconnects) and escalates to the next member early without waiting for the response timeout. Default OFF (opt-in).
reconnect_window_secondsnumberNo30Sliding window in seconds for counting reconnects to detect flapping. Range: 10–300 (default 30).
flapping_reconnect_thresholdnumberNo3Number of reconnects within the window (initial connect is not counted) that triggers early escalation. Range: 2–10 (default 3).

Panic broadcast

FieldTypeRequiredDefaultNotes
panic_broadcast_enabledbooleanNofalseWhen ON, and the rotation has run out of rounds, Unit Oncall notifies everyone on the Schedule's on-call roster at once (VoIP and push) as a buffer step before falling through to final_escalation_user_email. The first person to answer takes the alert; the other calls are cancelled. If nobody answers within the response window, the alert continues to the final-escalation step. When nobody is on the roster, the broadcast is skipped and the alert goes straight to final escalation. Default OFF (opt-in).

Like the VoIP fields above, omitting panic_broadcast_enabled from an update keeps the current value — it is not reset to false.

Default bundle (default_bundle)

Every Schedule has exactly one default bundle — the last-resort receiver for alerts that match none of the Schedule's Bundle Settings entries, including alerts that carry no tags at all. It is created together with the Schedule, so there is nothing to add or delete: you only change its parameters, and you do that here rather than on the Bundle Settings pages.

FieldTypeRequiredDefaultNotes
default_bundleobjectNocurrent valuesThe default bundle's parameters. Omitting the whole section keeps the current values — it does not reset them. Sending null means the same thing as omitting it.
default_bundle.namestringYesSchedule nameDisplay name of the default bundle. Up to 100 characters, and cannot be empty.
default_bundle.descriptionstringYes""Free-text description. May be empty, but the key must be present.
default_bundle.window_secondsnumberYes30Time window in seconds for bundling incoming alerts. Range: 10–300.
default_bundle.max_alerts_per_bundlenumberYes1000How many alerts (counted in distinct fingerprints) pile up before the bundle notifies again. Not a size limit. Range: 1–1000. See Bundle Settings.
default_bundle.auto_resolve_on_infobooleanYestrueResolve the bundle automatically when an info-severity alert arrives.
default_bundle.auto_expire_hoursnumberYes24Hours after which an unclosed bundle expires automatically. Range: 1–720.
default_bundle.cooldown_after_resolve_minutesnumberYes0Minutes to wait after a bundle is resolved before opening a new one. Range: 0–60.
default_bundle.cooldown_after_dismiss_minutesnumberYes5Minutes to wait after a bundle is dismissed before opening a new one. Range: 0–60.

The section is optional, but when you send it, send all eight keys. A partial section is rejected with missing_field, which names the keys you left out — the request never falls back to defaults for them. This is deliberate: without it, an omitted key would be read as its zero value and written back, and four of the eight (description, auto_resolve_on_info, and both cooldowns) are perfectly valid at their zero value, so they would change silently. Omitting auto_resolve_on_info, for example, would quietly stop info alerts from resolving the bundle. Edit the document you read back rather than assembling a partial one — a GET always returns all eight keys.

Omitting the section entirely, or sending it as null, keeps the current values; there is no way to reset the default bundle to the plan default through this section.

The default bundle has no tags: it is the receiver for everything that matched nothing, so there is nothing to select it by. It also has no enabled flag — the last-resort receiver cannot be turned off.

Sending either of them — or any other key the section does not define — is rejected, not ignored: the request fails with unknown_field on default_bundle and lists the offending keys, and the editor flags them before you save. This matters when you paste a Bundle Settings entry as a starting point, because those entries do have tags and enabled: silently dropping them would let you believe you had switched the last-resort receiver off when you had not. The invariants themselves are also enforced by database constraints, so no path can create a default bundle that carries tags or is disabled.

Changes to this section are recorded in the Schedule's own version history, and a rollback of the Schedule configuration restores the default bundle parameters along with everything else.

Ops-mode overrides (ops_config)

ops_config is an object of temporary, safety-side overrides for the settings above. It is read-only in this document: it appears in the configuration you read, but a PUT of the configuration never changes it — it is edited only in Ops mode, and it is deliberately excluded from version history, diffs, and rollback (so an operational stop is not silently undone by rolling a spec back).

Every key is a boolean that, when true, forces the corresponding setting to its safe side regardless of what the configuration above says (effective = configured AND NOT disabled). A key that is false or absent changes nothing.

Key in ops_configForces
disable_skip_confirmationConfirmation step ON, overriding voip_skip_confirmation.
disable_compact_guidanceFull spoken guidance, overriding voip_compact_guidance.
disable_transcript_enabledCall transcripts OFF, overriding voip_transcript_enabled.
disable_barge_inHalf duplex (no barge-in), overriding voip_barge_in.
disable_panic_broadcastPanic broadcast OFF, overriding panic_broadcast_enabled.
disable_flapping_escalationEarly (flapping) escalation OFF, overriding flapping_escalation_enabled.

voip_input_mode, voip_confirm_retry_interval_seconds, voip_confirm_max_retries, reconnect_window_seconds, and flapping_reconnect_threshold have no Ops override — they are not booleans, so there is no unambiguous safe side to force. Their configured values are used as-is.