---
title: "Create stream"
method: POST
path: "/streams"
tags: ["Streams"]
---

# Create stream

`POST /streams`

Creates a live stream and returns a publish token. The current request body is
empty. The retained frame history is fixed at 600 seconds.

The publish token is scoped to this stream and grants media publish permissions.
Renew it through [`/keepalive`](#tag/Streams/operation/keepaliveStream) before it
expires.

## Headers

- `X-Overshoot-Region` 'us-west1' | 'us-central1'

## Response `201`

Stream created.

- CreateStreamResponse
  - `id` string, uuid, required — Unique stream identifier. Use this in every subsequent stream URL.
  - `state` 'active', required — Always `active` for a freshly created stream.
  - `publish` PublishInfo, required — WebRTC publish target. Connect with the LiveKit client SDK.
    - `type` 'livekit', required
    - `url` string, required — LiveKit room URL (`wss://...`).
    - `token` string, required — Short-lived publish JWT for the LiveKit client.
  - `expires_at_ms` integer, required — Wall-clock Unix ms when the lease will expire if not renewed via `/keepalive`.
  - `ttl_seconds` integer, required — Lease TTL in seconds. Currently `300` for all streams.

## Other responses

- `401` — Missing or invalid API key.
- `403` — API key has no associated user.
- `409` — Wrong region.
- `503` — Stream creation temporarily unavailable.

---

[API](https://skmtc.net/overshoot/apis/overshoot-api.md) · [All operations](https://skmtc.net/overshoot/apis/overshoot-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/overshoot/overshoot-api/versions/defe49d6c837/schema)
