Delete record
Ends a room's recording — EVERY one of them.
DELETE /v1/meet/record
| Address | https://api.hanzo.ai/v1/meet/record |
| Method | DELETE |
| Operation | meetRecordStop |
| Auth | Authorization: Bearer $HANZO_API_KEY |
Ends a room's recording — EVERY one of them.
Whoever the room admits may stop it, including someone who did not start it: a person being recorded has to be able to end it, and a rule that only the starter may stop would deny exactly that. Stopping is free — a caller made to pay to stop being recorded would be paying for the wrong thing.
200 MEANS THE ROOM IS NOT BEING RECORDED, and that is why this ends all of them rather than the first. "At most one per room" is an invariant this surface wants and cannot impose: reading the list and starting are two calls, and two replicas racing through that window both start. When the list comes back holding two, two is the truth — and ending one while answering 200 tells the person withdrawing consent that it stopped while a second worker keeps writing. A stop that cannot finish the job says so instead.
Stopping a room that is not being recorded is not an error. The answer names the room with no recording on it, which is the state the caller asked for.
Request
1 field.
| Field | In | Type | Required | Description |
|---|---|---|---|---|
room | query | string | yes | Room is the LiveKit room, named the way the office client names one (<workspace>_<name>_<id>). |
Response
| Status | Body | Meaning |
|---|---|---|
200 | recording | ok |
200 body — 7 fields.
| Field | In | Type | Always | Description |
|---|---|---|---|---|
bucket | body | string | — | Bucket is the object store bucket the recording is written to. |
error | body | string | — | Error is the media server's reason when a recording failed, and empty otherwise. |
id | body | string | — | ID is the media server's egress id — the handle a later read names. |
object | body | string | — | Object is the key inside that bucket. Empty only while the media server has not named a file yet. It says WHERE the recording is, not how to fetch it. |
room | body | string | — | Room is the room this recording is of. |
started | body | integer | — | Started is when the recording began, as the media server reports it: its own started_at, verbatim and unconverted. |
status | body | string | — | Status is the media server's own state name: EGRESS_STARTING, EGRESS_ACTIVE, EGRESS_ENDING, EGRESS_COMPLETE, EGRESS_FAILED, EGRESS_ABORTED or… |
Failure carries the platform error shape — see Errors.
Examples
hanzo meet record clear --room <room>import { Configuration, MeetApi } from 'hanzoai';
const api = new MeetApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.meetRecordStop({ room: 'room' });from hanzoai.cloud import ApiClient, Configuration
from hanzoai.cloud.api import MeetApi
client = ApiClient(Configuration(access_token=os.environ["HANZO_API_KEY"]))
result = MeetApi(client).meet_record_stop(room='room')cfg := cloud.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := cloud.NewAPIClient(cfg)
resp, _, err := client.MeetAPI.MeetRecordStop(context.Background()).Execute()
if err != nil {
return err
}use hanzo_cloud::apis::{configuration::Configuration, meet_api};
let mut cfg = Configuration::new();
cfg.bearer_access_token = std::env::var("HANZO_API_KEY").ok();
let result = meet_api::meet_record_stop(&cfg, Default::default()).await?;import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.MeetApi;
ApiClient client = new ApiClient();
client.setRequestInterceptor(b -> b.header("Authorization", "Bearer " + System.getenv("HANZO_API_KEY")));
var result = new MeetApi(client).meetRecordStop();curl -X DELETE https://api.hanzo.ai/v1/meet/record?room=%3Croom%3E \
-H "Authorization: Bearer $HANZO_API_KEY"MCP reaches meet through the meet tool, which names its 13 operations with its own verbs — this one among them, under a name only MCP declares. describe explains any of them:
curl -X POST https://api.hanzo.ai/v1/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "describe",
"arguments": {
"op": "get_meet_app"
}
}
}'How is this guide?