events

Show: every clip around this alarm across chosen cameras, stably paged

The Show scene for one alarm (event_id is the anchor): every clip at the anchor's site in a window, open queue alarms and closed context (reviewed, filtered, agent_closed, classified exactly like GET /events/{id}/around) merged in ONE oldest-first pass on (created_at, id), so an alarm that closes between pages is returned once. until=anchor (default): window = anchor time minus before_seconds to plus after_seconds; until=now: the last before_seconds up to the snapshot (after_seconds ignored). camera_id (repeatable, at most 50, at the anchor's site) narrows the scene; the anchor's camera is always included; absent = every camera at the site. Membership, paging and the error rules mirror GET /events/open-alarms: every page bounds clips by creation time (created_at <= snapshot.as_of) and by current membership at that page's read (open, or closed context); a clip created at or before as_of that only becomes visible or closed after it is returned if its key is still ahead of the cursor; counts (total, by_state, by_camera) are page-one observations (total and by_state repeat unchanged from page one on later pages; by_camera is returned on page one only) and the rows returned can differ from them; on truncated, omitted is the eligible clips after the last returned one at that read (a lower bound when omitted_capped). A 200 is always a true statement, anything else is UNKNOWN, never an empty scene. Items carry media REFERENCES only (media.clip_url_path, media.snapshot_path): no presign, no S3 call, no video. Central staff only; the anchor goes through the same scope check as /around (out of scope, demo and unknown are one 404) and every row is tenant-scoped in SQL on every page. Read-only: Show never acquires, claims or marks viewed what it displays. Capability: alarm_show_read on GET /auth/me.

get/events/{event_id}/show

Request

  • Base URL
    https://api.verdun.ai (the document declares no server; this is the origin it was published from)
  • URL
    https://api.verdun.ai/events/{event_id}/show
  • Auth
    HTTP bearer

Path parameters

event_idstring uuid required

Query parameters

camera_idstring[] nullable

Narrow to these cameras at the anchor's site (repeatable)

before_secondsinteger

Seconds before the anchor (or before the snapshot when until=now)

after_secondsinteger

Seconds after the anchor (ignored when until=now)

until'anchor' | 'now'

anchor: window around the alarm. now: the last before_seconds up to the snapshot

limitinteger

Rows per page

cursorstring nullable

next_cursor from the previous page; absent = a new pass. An invalid cursor is 422 CURSOR_INVALID, an expired one 422 CURSOR_EXPIRED

Response

Successful Response

status'more' | 'complete' | 'truncated' required

more: this page is fine and next_cursor continues the pass. complete: the last page; nothing after it in scope as of snapshot.as_of. truncated: the pass hit limits.pass_ceiling; the eligible rows counted in omitted will NOT be returned (the oldest are always the ones returned).

next_cursorstring nullable

Opaque; send it back with the same parameters. Null on the last page. An invalid cursor is 422 CURSOR_INVALID, an expired one 422 CURSOR_EXPIRED

omittedinteger nullable

Set only when truncated: the eligible rows after the last returned key at this read (the page's own filters and keyset), at least this many when omitted_capped. A read-time count, not page 1's total minus the rows returned.

omitted_cappedboolean

True when the bounded remainder count hit its cap (10,000): omitted is then a lower bound. Always false unless truncated.

Changes

No recorded changes to this operation across all 2 revisions of this API.