---
title: "Turn a finished livestream into a VOD. The server concatenates the MUXL segments it recorded for the livestream into a single content blob, derives the playback sidecars, and publishes the place.stream.media.track records. Processing completes server-side and creates a draft VOD; the client does not need to poll or publish — the user publishes the draft later via place.stream.vod.publishDraft. Returns the draft's ats:// URI so the client can navigate to it, alongside an uploadId for backwards compatibility."
method: POST
path: "/xrpc/place.stream.media.finalizeLivestream"
tags: ["place.stream.media"]
---

# Turn a finished livestream into a VOD. The server concatenates the MUXL segments it recorded for the livestream into a single content blob, derives the playback sidecars, and publishes the place.stream.media.track records. Processing completes server-side and creates a draft VOD; the client does not need to poll or publish — the user publishes the draft later via place.stream.vod.publishDraft. Returns the draft's ats:// URI so the client can navigate to it, alongside an uploadId for backwards compatibility.

`POST /xrpc/place.stream.media.finalizeLivestream`

## Request body

- object
  - `livestream` string, uri, required — AT-URI of the place.stream.livestream record to finalize into a VOD. Must belong to the authenticated user.

## Response `200`

Success

- object
  - `uploadId` string, required — Identifier for the finalize job. Retained for backwards compatibility; the draft flow no longer requires the client to poll getUploadStatus.
  - `draftUri` string, required — The ats:// URI of the draft VOD created for this finalize. The draft reaches status 'ready' when processing completes; the user publishes it from the Drafts tab via place.stream.vod.publishDraft.

## Other responses

- `400` — Bad Request

## Changes

- **2026-06-26** `fd7251637ba9` — 1 info
  - added the required property `draftUri` to the response with the `200` status
- **2026-06-07** `2057274d4578` — 1 info
  - endpoint added
- **2026-01-21** `b21cd7605630` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/streamplace/apis/generated-lexicon-api-schema/changes/xrpc/place.stream.media.finalizeLivestream/post.md)

---

[API](https://skmtc.dev/streamplace/apis/generated-lexicon-api-schema.md) · [All operations](https://skmtc.dev/streamplace/apis/generated-lexicon-api-schema/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/streamplace/generated-lexicon-api-schema/revisions/8e2ce7f5d85b/schema)
