---
title: "Get Site Disarms"
method: GET
path: "/sites/{site_id}/disarms"
tags: ["sites"]
---

# Get Site Disarms

`GET /sites/{site_id}/disarms`

## 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/sites/{site_id}/disarms`
- Auth: HTTP bearer

## Path parameters

- `site_id` string, required

## Query parameters

- `limit` integer: Page size, newest first.
- `offset` integer: Rows to skip.

## Response `200`

Successful Response

- ListSiteDisarmsResponse
  - `disarms` SiteDisarmModel[], required: Newest first.
    - `id` string, uuid, required: Unique id of the record
    - `site_id` string, uuid, required: The site whose cameras this concerns
    - `kind` string: 'disarm' = the cameras were deliberately OFF (a customer or an operator turned them off). 'arm' = an operator held them ON for a bounded TEST while the schedule had them off. Arm rows always carry source 'console' and a null phone_number.
    - `source` string, required: 'sms' (the customer texted the dealer line), 'voice' (the customer called it and gave the passcode to the voice agent), 'console' (an operator) or 'app' (the customer's mobile app).
    - `auth_method` string, nullable: What proved the caller on a text or voice disarm: 'passcode' (the site code was given) or 'trusted_number' (the caller's number is on the site's trusted list and no code was needed). Null for console and app rows and for history written before trusted numbers existed.
    - `phone_number` string, nullable: The phone that texted or called, for 'sms' and 'voice' rows; null for console rows.
    - `operator_id` string, uuid, nullable: The operator who disarmed, for console rows; null once they are deleted.
    - `operator_name` string, nullable: Operator name snapshotted at the time, so history stays readable.
    - `minutes` integer, required: Minutes granted, after clamping to the site's cap.
    - `starts_at` string, date-time, required: When the cameras stopped alerting
    - `ends_at` string, date-time, required: When they were scheduled to come back on
    - `ended_at` string, date-time, nullable: When something ENDED this period early. Null past ends_at means it simply ran its course — expiry is implicit and there is no sweep.
    - `end_reason` string, nullable: Why it ended early; null when it expired on its own. The reason names the channel that ENDED the window, not the one that opened it: a call can end a window a text opened, and vice versa. The arm half adds two: 'ended_console' (an operator ended a test early) and 'disarmed' (a disarm from any channel superseded the test — off wins).
    - `created_at` string, date-time, required: When the record was written
  - `total` integer, required: Total rows for this site.

## 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)
