---
title: "Renew stream lease"
method: POST
path: "/streams/{stream_id}/keepalive"
tags: ["Streams"]
---

# Renew stream lease

`POST /streams/{stream_id}/keepalive`

Renews the stream lease and returns a fresh publish token. Clients should renew
before the 5-minute lease expires, for example every 4 minutes, and pass the
returned token to the LiveKit SDK with `room.updateToken(...)`.

## Response `200`

Lease renewed.

- KeepaliveResponse
  - `id` string, uuid, required
  - `expires_at_ms` integer, required
  - `ttl_seconds` integer, required
  - `stream_time_ms` number — Current stream-clock position in ms.
  - `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.

## Other responses

- `401` — Missing or invalid API key.
- `404` — Stream unknown, expired, deleted, or owned by a different user.
- `409` — Wrong region.

---

[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/revisions/defe49d6c837/schema)
