404, never 403.
The pause record
Every endpoint below reads or writes the same record shape:Pause request body
All create endpoints accept the same body; every field is optional.Global (break-glass)
Holds every Domain in your organization at once. Prefer the Domain, lane, or batch endpoints when anything narrower will do.
The break-glass pause accepts
duration_seconds and reason only. A body carrying lane or bucket is refused with 422 rather than silently widened to global — if you meant a narrower hold, use the narrower endpoint.
Resume releases every active global hold and returns them; holds at Domain, lane, or batch scope are untouched. It is idempotent: resuming when nothing is held returns an empty list, not an error.
include_released (default false), a scope filter, sort_by (created_at or expires_at), order (asc/desc, default desc), and limit (1–500, default 100) / skip pagination.
Domain and lane
Holds one Five9 Domain — or one named lane on it. These are records only: no batch document is rewritten and nothing in the queue is touched; the hold is visible here and on the pause listing.
Pausing without
lane holds the whole Domain; with lane, only that lane, while the rest of the Domain keeps flowing. A bucket in the body is refused with 422 — bucket holds are opened automatically by rate-limit backoff and cannot be created here.
Resume mirrors pause’s scoping: without a lane it releases the Domain-wide holds only; with ?lane=bulk (query parameter) it releases that lane’s holds only, leaving any Domain-wide hold in force. An unknown lane is a 422. Automatic backoffs are never released here — they self-resume at the window boundary.
Extending a scheduled resume
PATCH .../pauses/{pause_id} pushes a pause’s scheduled resume further out, in place — the record keeps its identity and gains an entry in extensions. Provide duration_seconds (relative to now) or an absolute expires_at; when both are sent, the absolute expires_at wins.
Extension is forward-only. Three cases return 409, each with its own message: the record is already released; the requested expiry is not later than the current one; or the record changed concurrently between your read and the write. Shortening a hold is an explicit resume-and-re-pause, never a silent edit. An explicit JSON null for a field is rejected with 422 — omit the field instead.
Batch
The one scope that touches a batch’s status: pausing flips the batch topaused, and resuming restores the exact status it held before — a batch paused while queued goes back to queued. Nothing is cancelled or deleted, and nothing already sent can be re-sent.
The pause body accepts
duration_seconds and reason only; lane or bucket is refused with 422 — those scopes belong to the Domain endpoints. Pausing an already-paused batch is idempotent and returns the existing hold. A batch in a terminal state (completed, partially_failed, failed, cancelled) has nothing left to dispatch and returns 409; a 409 also comes back if the batch’s status changed concurrently while the pause was being applied — re-read the batch and retry.
Errors
All endpoints use the standard{"detail": "..."} envelope.