---
title: "Operator instructions that apply to this event"
method: GET
path: "/events/{event_id}/operator-instructions"
tags: ["events"]
---

# Operator instructions that apply to this event

`GET /events/{event_id}/operator-instructions`

## 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}/operator-instructions`
- Auth: HTTP bearer

Resolves the account, site and camera operator instructions for one event, server-side. Read-only context for the human reviewing the alarm: visible to every confirmed viewer of the event (operators, read_only, a scoped account_manager or location_manager) and gated by tenant scope rather than by role, the same way `ai-eval` and `clip-url` are. `account` is null for a site with no account and for a retired one; `site` and `camera` are always present. DEMO events answer 404 — they are camera-less by construction and the review panel never shows one, so there is no null-camera shape to handle. An out-of-scope event id answers 404, not 403, so this route is not an event-id oracle.

## Path parameters

- `event_id` string, required

## Response `200`

Successful Response

- EventOperatorInstructionsResponse: Every operator instruction that applies to one event, resolved server-side. THE READ THE REVIEW PANEL MAKES. Resolving camera -> site -> account here rather than in the client is what keeps the instruction text OFF the queue bundle and off both SSE broadcasts: those payloads are built for every event an operator can see and are held open all shift, while this is one scoped fetch for the one event actually being reviewed. Same shape as the `ai-eval` and `clip-url` per-event reads, and guarded the same way. THREE LEVELS, ALL THREE POSSIBLY EMPTY. `account` is null for a site that sits directly under the client with no account, and also for a site whose account has been retired — a retired account grants nothing and its text must not be served. `site` and `camera` are always present for a real event. DEMO EVENTS ANSWER 404 (Round-0 ruling Q7), not a null camera: they are camera-less by construction and the review panel never shows one, so a fourth shape would be dead code the client still had to handle. Out-of-scope and unknown event ids are indistinguishable — both 404 — so this route is not an event-id oracle.
  - `account` OperatorInstructionsLevel: One resolved level of the instruction stack, with its label for the UI.
    - `id` string, uuid, required: Id of the account, site or camera.
    - `name` string, required: Display name of the level: the account name, the site name, or the camera label. Carried so the review panel can label each row without a second fetch.
    - `operator_instructions` string, nullable: Instructions set at this level. Null means none set here.
    - `headline` string, nullable: One-line headline shown under the alarm video (site and camera only; always null for the account).
    - `updated_at` string, date-time, nullable: When this text or headline last changed (null: unchanged since tracking began). Echo it to `.../ack`.
    - `acknowledged` boolean: Caller has read the current text and headline: true when both are empty, `updated_at` is null, or they acked this version.
  - `site` OperatorInstructionsLevel, required: One resolved level of the instruction stack, with its label for the UI.
    - `id` string, uuid, required: Id of the account, site or camera.
    - `name` string, required: Display name of the level: the account name, the site name, or the camera label. Carried so the review panel can label each row without a second fetch.
    - `operator_instructions` string, nullable: Instructions set at this level. Null means none set here.
    - `headline` string, nullable: One-line headline shown under the alarm video (site and camera only; always null for the account).
    - `updated_at` string, date-time, nullable: When this text or headline last changed (null: unchanged since tracking began). Echo it to `.../ack`.
    - `acknowledged` boolean: Caller has read the current text and headline: true when both are empty, `updated_at` is null, or they acked this version.
  - `camera` OperatorInstructionsLevel, required: One resolved level of the instruction stack, with its label for the UI.
    - `id` string, uuid, required: Id of the account, site or camera.
    - `name` string, required: Display name of the level: the account name, the site name, or the camera label. Carried so the review panel can label each row without a second fetch.
    - `operator_instructions` string, nullable: Instructions set at this level. Null means none set here.
    - `headline` string, nullable: One-line headline shown under the alarm video (site and camera only; always null for the account).
    - `updated_at` string, date-time, nullable: When this text or headline last changed (null: unchanged since tracking began). Echo it to `.../ack`.
    - `acknowledged` boolean: Caller has read the current text and headline: true when both are empty, `updated_at` is null, or they acked this version.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/verdun/apis/verdun-api.md) - [All operations](https://skmtc.dev/verdun/apis/verdun-api/llms.txt) - [OpenAPI document](https://skmtc.dev/verdun/apis/verdun-api/revisions/35a2a6ebedda?raw)
