---
title: "Hang Up Voice Agent"
method: DELETE
path: "/events/{event_id}/voice-agent-call"
tags: ["speakers"]
---

# Hang Up Voice Agent

`DELETE /events/{event_id}/voice-agent-call`

## 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}/voice-agent-call`
- Auth: HTTP bearer

Hang the AI voice agent up and take the incident back.

Same permission and same tenant scoping as the operator's Talk Down, and
for the same reason: this is an operations power over real-world sound at a
customer site, not a configuration one.

The event id is the ONLY address. There is no call id in the request, so an
operator can only ever reach the call belonging to an event their grants
already let them open.

404 when no announcement was ever placed; 409 when one was and has already
ended; 200 otherwise — including when the device refuses to hang up, which
is logged rather than raised (see the response model).

## Path parameters

- `event_id` string, required

## Response `200`

Successful Response

- VoiceAgentHangupResponse: An operator took the incident back from the AI voice agent. ALWAYS 200, even if the device refused to hang up: a 502 would only invite the operator to press it again, and the voice platform's own duration cap ends the call regardless. A second press is 409 ("already ended"), never 404 — "already ended" and "there was never a call" are different facts. **200 IS NOT A PROMISE OF SILENCE.** When the device does not confirm the hang-up the agent may still be talking on that horn, so the call row stays OPEN (which is what keeps the speaker reserved against an operator microphone or a second agent call) and the watchdog retries until the device confirms, the platform reports the call ended, or its duration cap has certainly ended it. `device_confirmed` is how the review page tells the two apart.
  - `success` boolean, required: True when the hang-up was requested and recorded. Read device_confirmed to learn whether the speaker has actually stopped.
  - `speaker_label` string, nullable: The speaker the agent was speaking through; null if that speaker has since been retired.
  - `end_reason` string, required: Always operator_hangup on this route.
  - `announced_at` string, date-time, nullable: When the announcement was confirmed delivered, if it ever was. Null means nothing was confirmed, and the observation was cancelled so the event goes back to the human queue; a value means the deterrent did reach the site and the observation window stands.
  - `device_confirmed` boolean, required: True when the speaker confirmed it hung the SIP call up. False means the request was recorded but the device did not answer: the call may still be live, the announcement row stays open, and the watchdog keeps retrying — show "hanging up…" rather than "ended".

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