Oncall API
Oncall endpoints exposed by the Devotel CPaaS API Base path:/api/v1/oncall
Endpoint count: 4
title: “Resolve rotations and plan escalations” description: “Model who is on call at any instant, and flatten an escalation policy into the ordered page timeline an incident driver would walk — as pure compute, with no pages sent.”
Resolve rotations and plan escalations
On-call tooling and the incident driver both live behind these two endpoints — the call resolves who is accountable at a given instant, and the plan flattens the escalation ladder you would walk when an incident refuses an ACK. Both are pure compute: nothing is persisted, no pages are sent, and no state changes. An incident driver (the webhook-worker escalation scheduler) still fires pages through the notify channel downstream. Resolve a rotation.POST /api/v1/oncall/resolve answers “who is on call now” — a rotation is a fixed-length shift schedule anchored to an absolute start (anchor), with members rotating through it in order.
POST /api/v1/oncall/escalation/plan flattens the policy into the ordered pages timeline: each step names a target (a live rotation resolved at the page’s fire instant, or a static member list), the channels paged, and the escalate_after_seconds window before the next step. Each layer of the walk fires at a cumulative offsetSeconds from the incident start; policy.repeat loops the whole policy that many extra times if no step is ever acknowledged.
SDK surface bridge — List the on-call rotation and take a live skip-rank claim — both read (or mutate) through the SDK escape hatch with the tenant’s live key.
These three tabs mirror SDK status and coverage. Python fronts
client.request, Go fronts client.Request, and TS fronts fetch-TS — each with the live key.List the on-call rotation
Claim the next slot (skip cycle)
Plan escalation
POST /api/v1/oncall/escalation/planstring
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Tick incident
POST /api/v1/oncall/incident/tickstring
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Transition incident
POST /api/v1/oncall/incident/transitionstring
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.Resolve oncall
POST /api/v1/oncall/resolvestring
Stripe-style idempotency token. Pass a stable, client-generated value (1-255 chars) to dedupe retries on transient timeouts. The same key+credential+path replays the original response for 24h on 2xx (5min on 4xx, 30s on 5xx). Returns 409 if a concurrent request with the same key is already in flight; replayed responses include the
Idempotency-Replay: true response header.string (enum: true|false)
Sandbox opt-in for Clerk-session-authenticated requests. Set to
true to route the call through the test-mode pipeline: no real provider delivery, no credits deducted, response meta.test_mode: true. Ignored for live API keys (dv_live_sk_*) — server-to-server clients must use a test-prefixed key (dv_test_sk_*) to exercise sandbox. Test-prefixed keys unconditionally enable sandbox regardless of this header.