---
title: "Publish a place.stream.video record for a finished upload, server-side. The caller supplies the record it would otherwise putRecord itself; the server overrides the fields it is authoritative about (source tracks and durationMs, taken from the processed upload) and, if the record carries no thumb, generates one from the video and attaches it. The record is written to the authenticated user's repo."
method: POST
path: "/xrpc/place.stream.media.publishVideo"
tags: ["place.stream.media"]
---

# Publish a place.stream.video record for a finished upload, server-side. The caller supplies the record it would otherwise putRecord itself; the server overrides the fields it is authoritative about (source tracks and durationMs, taken from the processed upload) and, if the record carries no thumb, generates one from the video and attaches it. The record is written to the authenticated user's repo.

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

## Request body

- object
  - `uploadId` string, required — The upload ID returned by place.stream.media.createUpload. Its processing must be complete (status 'done').
  - `record` unknown, required

## Response `200`

Success

- object
  - `uri` string, uri, required — AT-URI of the created place.stream.video record.
  - `cid` string, cid, required — CID of the created place.stream.video record.

## Other responses

- `400` — Bad Request

## Changes

- **2026-05-20** `879a3d81c265` — 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.publishVideo/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)
