Replace or clear the Live display
Required scopes: live.update.
Service ownership, current explicit scopes and processing policy are checked inside the serialized Live actor. Requires live.update plus translation.read for scripture or presentation.present for saved-deck publication. Updates persist before broadcasting. Shared Live sequence validators protect display/playback/metadata/queue changes; viewer counts do not. Presentation publication requires presentation_id and explicit current saved revision. Foreign decks return 404, changed/missing requested revision returns 409 presentation_revision_conflict (no historical revision archive), empty decks/stopped Lives return 409. A fresh immutable snapshot is captured, and the deck revision is rechecked under the same workspace lock as final Live save/media pins, so a concurrent deck change cannot silently publish newer content. Optional slide_id selects a stable slide. When updating the same deck already in Presentation mode, omitted slide_id preserves the selected stable ID when present (otherwise clamps the prior index), and blank/paused state are retained. A new presentation starts at slide zero unless selected explicitly. Saving drafts never publishes; source deletion leaves existing snapshots intact. Empty display clears scripture and switches to Reader without deleting a retained presentation snapshot. Also accepts finite personal bearer tokens for resources owned by the caller’s personal account. Personal tokens cannot operate organization Lives, use collaborators’/children’s authority, or publish presentations. Current personal token scopes and user permissions are rechecked after waits. Registered delegated OAuth access tokens are accepted within these personal boundaries; /me and account metadata additionally require identity.read.
Response headers:
ETag(200): Strong Live state validator; send unchanged in If-Match for display/playback writes.
Authentication
Organization-owned service token. Issue the initial token in organization credential settings. Scopes are documented per operation via x-required-scopes; they are not OAuth scopes.
Personal bearer credential issued through existing account settings or browser-approved CLI flow. Must be active, finite, unexpired, unrevoked, within any rotation overlap, and bound to an active personal membership/user/account. Explicit scopes intersect current user permissions; empty existing personal scopes inherit current user authority. Not an OAuth grant or service token. Browser cookies are ignored.
Registered public-client OAuth for personal-account resources only. Exact registered HTTPS or fixed-port literal loopback redirect; S256 required; explicit consent. No organization/presentation authority. identity.read is required for /me and account metadata. Scope intersection with current user authority; no empty-scope inheritance.
Path parameters
Headers
Use the ETag from the latest display/playback response. Missing: 428; stale: 412. Wildcards, weak validators and lists are not accepted.
Request
Explicitly capture the current saved revision of a same-organization deck. This API has no historical revision archive: if the current saved revision differs, return 409 presentation_revision_conflict. Optional slide_id selects a stable saved slide. Missing slide returns 422. Empty decks and stopped Lives return 409.
Response headers
Strong Live state validator; send unchanged in If-Match for display/playback writes.
Response
Personal-account Reader Live resource. Uses account_id instead of organization_id; only the personal account owner can access it with current personal token authority.
