# Delete record

URL: https://docs.hanzo.ai/docs/openapi/meet/meetrecordstop

> Ends a room's recording — EVERY one of them.

`DELETE /v1/meet/record`

> [Meet →](https://docs.hanzo.ai/docs/openapi/meet) · [All API references →](https://docs.hanzo.ai/docs/openapi) · [Get started →](https://docs.hanzo.ai/docs/guides)

|               |                                        |
| ------------- | -------------------------------------- |
| **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 (`&lt;space&gt;_&lt;name&gt;_&lt;id&gt;`). |

## Response

| Status    | Body            | Meaning |
| --------- | --------------- | ------- |
| `200`     | meet.recording  | ok      |
| `default` | problem-details | refused |

`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.                                                                                                                                       |
| `room`    | body | string          | —      | Room is the room this recording is of.                                                                                                                                      |
| `started` | body | integer (int64) | —      | 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 EGRESS\_LIMIT\_REACHED. |

Failure carries the platform error shape — see [Errors](https://docs.hanzo.ai/docs/errors).

## Examples

**CLI**

```bash
hanzo meet record clear --room <room>
```

**SDK**

**.ts**

```ts
import { Configuration, MeetApi } from 'hanzoai';

const api = new MeetApi(new Configuration({ accessToken: process.env.HANZO_API_KEY }));
const { data } = await api.meetRecordStop({ room: 'room' });
```

**.py**

```python
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')
```

**.go**

```go
cfg := hanzoai.NewConfiguration()
cfg.AddDefaultHeader("Authorization", "Bearer "+os.Getenv("HANZO_API_KEY"))
client := hanzoai.NewAPIClient(cfg)

resp, _, err := client.MeetAPI.MeetRecordStop(context.Background()).Execute()
if err != nil {
	return err
}
```

**.rs**

```rust
use hanzo_client::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?;
```

**.java**

```java
import ai.hanzo.cloud.ApiClient;
import ai.hanzo.cloud.api.MeetApi;

ApiClient client = new ApiClient();
client.setBearerToken(System.getenv("HANZO_API_KEY"));

var result = new MeetApi(client).meetRecordStop();
```

**HTTP**

```bash
curl -X DELETE https://api.hanzo.ai/v1/meet/record?room=%3Croom%3E \
  -H "Authorization: Bearer $HANZO_API_KEY"
```

**MCP**

Tool `meet`, op `meetRecordStop` — POST the JSON-RPC envelope to `https://api.hanzo.ai/v1/mcp`.

```bash
curl -X POST https://api.hanzo.ai/v1/mcp \
  -H "Authorization: Bearer $HANZO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
       "jsonrpc": "2.0",
       "id": 1,
       "method": "tools/call",
       "params": {
         "name": "meet",
         "arguments": {
           "op": "meetRecordStop",
           "input": {
             "room": "<room>"
           }
         }
       }
     }'
```

---

[Meet API](https://docs.hanzo.ai/docs/openapi/meet) · [All Hanzo APIs](https://docs.hanzo.ai/docs/openapi) · [Interactive reference](https://docs.hanzo.ai/docs/openapi/reference)
