---
title: "Claim Call Microphone"
method: POST
path: "/api/voice/calls/{call_id}/claim-mic"
tags: ["voice-control", "voice-control"]
---

# Claim Call Microphone

`POST /api/voice/calls/{call_id}/claim-mic`

## 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/calls/{call_id}/claim-mic`
- Auth: none declared

Hand the microphone to the calling tab, revoking it from the previous one.

This is the enforcement the browser-side election cannot provide.
BroadcastChannel reaches other tabs of the same profile only, so an
incognito window, a second browser, another device or an automated session
logged in as the same user would each keep a live microphone and the
operator hears themselves (prod 2026-08-03: three publishers in one room).

The operator asked for the mic HERE, so the claim is unconditional; the
displaced tab keeps hearing the call and can take it back the same way.

## Path parameters

- `call_id` string, required

## Request body

- RejoinRequest: Optional body for /rejoin and /coexist. `tab_id` is a per-tab UUID generated client-side (sessionStorage) and appended to the LK browser identity so multiple tabs/browsers logged in as the same user don't DUPLICATE_IDENTITY-kick each other in the LK room. Omit to fall back to the legacy `browser:{user}:{call}` shape (single-tab semantics — second tab WILL kick the first).
  - `tab_id` string, nullable

## Response `200`

Successful Response

- ClaimMicResponse: Result of taking the microphone for a call.
  - `granted` boolean, required
  - `previous_tab_id` string, nullable

## 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/77bef09a9209?raw)
