---
title: "Start a resumable upload of arbitrary media content. Returns a TUS upload URL and a short-lived bearer token used to authenticate subsequent chunk requests (no DPoP required on chunks). The DID of the authenticated user is recorded against the upload; on completion a VOD processing task is enqueued."
method: POST
path: "/xrpc/place.stream.media.createUpload"
tags: ["place.stream.media"]
---

# Start a resumable upload of arbitrary media content. Returns a TUS upload URL and a short-lived bearer token used to authenticate subsequent chunk requests (no DPoP required on chunks). The DID of the authenticated user is recorded against the upload; on completion a VOD processing task is enqueued.

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

## Request body

- object
  - `size` integer, required — Total size of the upload in bytes.
  - `mimeType` string, required — MIME type of the content being uploaded (e.g. video/mp4).
  - `filename` string — Optional filename hint to attach as upload metadata.
  - `draftUri` string — Optional ats:// URI of a draft VOD created via place.stream.vod.createDraft. When supplied, the upload's processing fills that draft (rather than creating a new one), so the user can edit metadata while the upload runs and re-upload if it fails. The draft's origin_upload_id is set to this upload.

## Response `200`

Success

- object
  - `uploadId` string, required — Server-side identifier for this upload.
  - `uploadUrl` string, uri, required — Absolute URL to PATCH/HEAD per the TUS protocol.
  - `uploadToken` string, required — Short-lived bearer token bound to this upload. Send as 'Authorization: Bearer <token>' on TUS requests.
  - `expiresAt` string, date-time, required — When the upload token expires.

## Other responses

- `400` — Bad Request

## Changes

- **2026-06-27** `56da6540694f` — 1 info
  - added the new optional request property `draftUri`
- **2026-05-20** `3e9273785059` — 1 info
  - endpoint added
- **2026-05-18** `c001420ea608` — 1 breaking
  - api path removed without deprecation
- **2026-05-11** `d2e604670d6a` — 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.createUpload/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)
