---
title: "Force Leave Call"
method: POST
path: "/api/voice/force-leave/{call_id}"
tags: ["voice-control", "voice-control"]
---

# Force Leave Call

`POST /api/voice/force-leave/{call_id}`

## Request

- Base URL: `https://api.dialogbrain.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.dialogbrain.com/api/voice/force-leave/{call_id}`
- Auth: none declared

Operator escape hatch to force-leave a voice call even if terminal.

Unlike /hangup which requires status IN ('active', 'listening'), this
endpoint works on ANY status — useful for stuck terminal sessions that
need cleanup. Does NOT add new guards — workspace-scoped lookup only.

Flow:
  1. Look up session by call_id (no status filter) — workspace-scoped.
  2. For Telegram sources: POST to channel-sync /force-leave to discard.
  3. Reconcile via /internal/voice/call-ended (idempotent).
  4. Return ok=True (or 501 for unimplemented sources).

Idempotent: calling twice returns ok=True both times (downstream ensures
idempotency via status checks).

## Path parameters

- `call_id` string, required

## Response `200`

Successful Response

- ForceLeaveResponse
  - `ok` boolean, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/dialogbrain/apis/dialogbrain-v2-api-gateway.md) · [All operations](https://skmtc.dev/dialogbrain/apis/dialogbrain-v2-api-gateway/llms.txt) · [OpenAPI document](https://skmtc.dev/dialogbrain/apis/dialogbrain-v2-api-gateway/revisions/d84e7dc9977d?raw)
