A stream wraps an RTC room and a chat conversation. Creating one
provisions both; minting a host or viewer credential returns tokens for both,
already shaped for LiveStream.join().
See Streams & lifecycle.
Endpoints
| Method | Path | Credential |
|---|---|---|
| GET | /v1/live-streams | Project API key |
| POST | /v1/live-streams | Project API key |
| GET | /v1/live-streams/{streamId} | Project API key |
| PATCH | /v1/live-streams/{streamId} | Project API key |
| POST | /v1/live-streams/{streamId}/end | Project API key |
| POST | /v1/live-streams/{streamId}/hosts | Project API key |
| DELETE | /v1/live-streams/{streamId}/hosts/{identity} | Project API key |
| POST | /v1/live-streams/{streamId}/leave | Project API key |
| POST | /v1/live-streams/{streamId}/start | Project API key |
| POST | /v1/live-streams/{streamId}/viewer-tokens | Project API key |
| GET | /v1/projects/{projectId}/live-streams | Dashboard session (JWT) |
| POST | /v1/projects/{projectId}/live-streams | Dashboard session (JWT) |
| GET | /v1/projects/{projectId}/live-streams/{streamId} | Dashboard session (JWT) |
| PATCH | /v1/projects/{projectId}/live-streams/{streamId} | Dashboard session (JWT) |
| POST | /v1/projects/{projectId}/live-streams/{streamId}/end | Dashboard session (JWT) |
GET /v1/live-streams
List the project's live streams
Credential Project API key
No parameters.
POST /v1/live-streams
Create a live stream — a dedicated RTC room plus an attached chat conversation
Credential Project API key · Rate limit 30 per window (details) · Idempotent send Idempotency-Key to replay safely
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
title | body | string | Yes | 1–200 chars |
hostIdentity | body | string | Yes | 1–128 chars, pattern-checked — The developer's own identity for whoever is starting this stream. Registered as its HOST — the only identity a stream is created with, and the only one whose role is ever HOST rather than CO_HOST. |
description | body | string | No | 0–2000 chars |
thumbnailUrl | body | string | No | 0–2048 chars — A URL you host — Livqeno does not accept or store thumbnail uploads. |
category | body | string | No | 0–64 chars |
tags | body | string[] | No | array |
language | body | string | No | 0–16 chars |
visibility | body | LiveStreamVisibility | No | |
metadata | body | Record<string, unknown> | No | Your own JSON, capped at 4 KB — same convention as Room/Conversation metadata. |
scheduledAt | body | string | No | When set, the stream is created for a future start — see docs/live-streaming/overview.md#scheduled-streams. Livqeno does not automatically transition status at this time; your backend still calls start(). |
GET /v1/live-streams/{streamId}
Get a stream, including its live viewer count
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes |
PATCH /v1/live-streams/{streamId}
Update a stream's metadata — title, description, thumbnail, visibility, etc.
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
title | body | string | No | 1–200 chars |
description | body | string | No | 0–2000 chars |
thumbnailUrl | body | string | No | 0–2048 chars |
category | body | string | No | 0–64 chars |
tags | body | string[] | No | array |
language | body | string | No | 0–16 chars |
visibility | body | LiveStreamVisibility | No | |
metadata | body | Record<string, unknown> | No |
POST /v1/live-streams/{streamId}/end
LIVE → ENDED. Terminal — an ended stream cannot be restarted; create a new one.
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes |
POST /v1/live-streams/{streamId}/hosts
Register a host/co-host and mint their RTC + chat credentials
Credential Project API key · Rate limit 60 per window (details)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
identity | body | string | Yes | 1–128 chars, pattern-checked |
role | body | LiveStreamHostRole | No | HOST and CO_HOST get identical RTC/chat grants — the difference is bookkeeping, not permissions. A stream already has a HOST (set at creation); this is normally CO_HOST. |
DELETE /v1/live-streams/{streamId}/hosts/{identity}
Remove a co-host — soft removal, their history in the stream chat is preserved
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
identity | path | string | Yes |
POST /v1/live-streams/{streamId}/leave
Signal that a viewer left, for live_stream.viewer_left
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
identity | body | string | Yes | 1–128 chars, pattern-checked |
POST /v1/live-streams/{streamId}/start
CREATED → LIVE
Credential Project API key
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes |
POST /v1/live-streams/{streamId}/viewer-tokens
Mint a viewer's RTC + chat credentials
Credential Project API key · Rate limit 120 per window (details)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
identity | body | string | Yes | 1–128 chars, pattern-checked — The viewer's identity, from your own authenticated session — never trusted from an unauthenticated client. Always minted with subscribe-only RTC permissions; there is no field here that can request publish access. |
GET /v1/projects/{projectId}/live-streams
List a project's live streams
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
projectId | path | string | Yes |
POST /v1/projects/{projectId}/live-streams
Create a live stream in this project
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
projectId | path | string | Yes | |
title | body | string | Yes | 1–200 chars |
hostIdentity | body | string | Yes | 1–128 chars, pattern-checked — The developer's own identity for whoever is starting this stream. Registered as its HOST — the only identity a stream is created with, and the only one whose role is ever HOST rather than CO_HOST. |
description | body | string | No | 0–2000 chars |
thumbnailUrl | body | string | No | 0–2048 chars — A URL you host — Livqeno does not accept or store thumbnail uploads. |
category | body | string | No | 0–64 chars |
tags | body | string[] | No | array |
language | body | string | No | 0–16 chars |
visibility | body | LiveStreamVisibility | No | |
metadata | body | Record<string, unknown> | No | Your own JSON, capped at 4 KB — same convention as Room/Conversation metadata. |
scheduledAt | body | string | No | When set, the stream is created for a future start — see docs/live-streaming/overview.md#scheduled-streams. Livqeno does not automatically transition status at this time; your backend still calls start(). |
GET /v1/projects/{projectId}/live-streams/{streamId}
Get one stream, including its live viewer count and registered hosts
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
projectId | path | string | Yes |
PATCH /v1/projects/{projectId}/live-streams/{streamId}
Update a stream's metadata — title, description, thumbnail, visibility, etc.
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
projectId | path | string | Yes | |
title | body | string | No | 1–200 chars |
description | body | string | No | 0–2000 chars |
thumbnailUrl | body | string | No | 0–2048 chars |
category | body | string | No | 0–64 chars |
tags | body | string[] | No | array |
language | body | string | No | 0–16 chars |
visibility | body | LiveStreamVisibility | No | |
metadata | body | Record<string, unknown> | No |
POST /v1/projects/{projectId}/live-streams/{streamId}/end
LIVE → ENDED. Terminal — an ended stream cannot be restarted; create a new one.
Credential Dashboard session (JWT)
| Parameter | In | Type | Required | Notes |
|---|---|---|---|---|
streamId | path | string | Yes | |
projectId | path | string | Yes |
Next steps
- Conventions — base path, error envelope, request ids, pagination.
- Errors — every code this API can return.
- All endpoints — the whole surface on one page.