---
title: "Disable a line, POST /ext/line/{uuid}/disable"
description: "Disable an active line without deleting it. Suspends streaming while preserving expiry, credentials, and every other field."
---

# Disable a line, POST /ext/line/{uuid}/disable

> [!NOTE]
> If you are starting a new integration instead of migrating, prefer the [native v1 API](/docs/?page=xai-ref-lines-disable) with the [official SDKs](/docs/?page=panel-api-sdks). The OneStream dialect exists to let existing OneStream code point at Xtream AI with only a base URL change.

Suspend a line's ability to stream without deleting it. The row is preserved. Expiry, credentials, bouquets, connection cap, and adult-content flag stay untouched. When you re-enable the line with [POST /ext/line/{uuid}/enable](/docs/?page=os-ref-line-enable) it comes back exactly as it was.

Use this during a refund investigation, a chargeback pause, or when a customer asks for a temporary hold on a subscription they want to resume later. If the intent is permanent removal, use [POST /ext/line/{uuid}/terminate](/docs/?page=os-ref-line-terminate) instead.

Disabling an already disabled line is a no-op and still returns `200 OK`.

## Endpoint

`POST https://<your-panel-domain>/panel-api/onestream/ext/line/{uuid}/disable`

## Authentication

`X-Api-Key`. `X-Auth-User` and `Authorization: Bearer` also accepted. See [Authentication](/docs/?page=panel-api-authentication).

## Required scope

`lines:write`.

## Idempotency

Optional. Disable is naturally idempotent (the outcome is the same whether the line was enabled or disabled), but a `rid` still lets you use [GET /ext/transaction/{rid}](/docs/?page=panel-api-onestream-compatibility#idempotency-via-rid) to confirm the operation reached the panel after a timeout.

## Path parameters

| Name | Type | Description |
| ---- | ---- | ----------- |
| `uuid` | string | The opaque line UUID. |

## Request body

Optional. If sent, only `rid` is meaningful.

| Field | Type | Required | Default | Description |
| ----- | ---- | -------- | ------- | ----------- |
| `rid` | string | no | | Idempotency key. |

```json
{
  "rid": "disable-user-42-2026-08"
}
```

## Response

`200 OK` with the opaque `line_id`. No other fields are returned.

```json
{
  "line_id": "b32c1a04-11ea-4c67-8fd1-0001000000f1"
}
```

## Examples

### cURL

```bash
curl -X POST "https://<your-panel-domain>/panel-api/onestream/ext/line/b32c1a04-11ea-4c67-8fd1-0001000000f1/disable" \
  -H "X-Api-Key: <your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{"rid": "disable-user-42-2026-08"}'
```

### PHP raw

```php
$uuid = 'b32c1a04-11ea-4c67-8fd1-0001000000f1';
$ch = curl_init("https://<your-panel-domain>/panel-api/onestream/ext/line/{$uuid}/disable");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST           => true,
    CURLOPT_HTTPHEADER     => [
        'X-Api-Key: <your-api-key>',
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'rid' => 'disable-user-42-2026-08',
    ]),
]);
$body   = json_decode(curl_exec($ch), true);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
```

### Python raw

```python
import requests

uuid_ = "b32c1a04-11ea-4c67-8fd1-0001000000f1"
r = requests.post(
    f"https://<your-panel-domain>/panel-api/onestream/ext/line/{uuid_}/disable",
    headers={"X-Api-Key": "<your-api-key>"},
    json={"rid": "disable-user-42-2026-08"},
    timeout=30,
)
r.raise_for_status()
print(r.json())
```

## Errors

| HTTP | Error slug (or message) | When it happens | How to fix |
| ---- | ----------------------- | --------------- | ---------- |
| 401 | `Invalid API key` | Token is unknown, expired, disabled, or deleted. | Check the token or issue a new one. |
| 403 | `insufficient_scope` | Token lacks `lines:write`. | Issue a key with the scope. |
| 409 | `Transaction already processed` | Same `rid` was reused with a different body. | Use a fresh `rid`, or replay with the exact original body. |
| 422 | `line_id not found or invalid` | The UUID in the URL is malformed, was not issued by this panel, or belongs to a different panel. Uniform on purpose. | Verify the UUID you stored on line-creation. |
| 429 | `Rate limit exceeded` | The key hit its per-minute cap. | Back off and retry after `Retry-After` seconds. |
| 501 | `not_implemented` | A `GET` request was sent to this URL. | Only `POST` is accepted. |

## See also

- [Enable a line, POST /ext/line/{uuid}/enable](/docs/?page=os-ref-line-enable)
- [Terminate a line, POST /ext/line/{uuid}/terminate](/docs/?page=os-ref-line-terminate)
- [Renew a line, POST /ext/line/{uuid}/renew](/docs/?page=os-ref-line-renew)
- [OneStream compatibility overview](/docs/?page=panel-api-onestream-compatibility)
