---
title: "Leave Meeting Internal"
method: POST
path: "/v1/sessions/internal/{session_id}/leave-meeting"
tags: ["sessions"]
---

# Leave Meeting Internal

`POST /v1/sessions/internal/{session_id}/leave-meeting`

End the external-meeting bridge: tell the Recall bot to leave the call.

Called when the agent's session ends by ANY path — clean hang-up,
pause-timeout, or an unrecoverable LiveKit disconnect that kills the agent
process. Without it the bot lingers in the meeting as a ghost after the
agent is gone (session 06114c15: a LiveKit media-node migration killed the
agent at 16:47:13, but the Recall bot stayed in the Meet until 16:50:21,
still on camera and still transcribing into the void).

The backend owns this — not the agent — because it holds the Recall key and
the bot id, and because it must still fire when the agent process is dead.
Idempotent: a session with no recall_bot_id (a normal, non-bridged call) is
a no-op, and a double-call after the bot already left is harmless.

## Path parameters

- `session_id` string, required

## Response `200`

Successful Response

- object

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/roxels/apis/interviewer.md) · [All operations](https://skmtc.dev/roxels/apis/interviewer/llms.txt) · [OpenAPI document](https://skmtc.dev/roxels/apis/interviewer/revisions/4ef48ed226e1?raw)
