place.stream.media.createUpload

did:web:stream.place

Documentation

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.

main procedure

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.

Input

Encodingapplication/json
draftUri string Optional

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.

filename string Optional

Optional filename hint to attach as upload metadata.

mimeType string Required

MIME type of the content being uploaded (e.g. video/mp4).

size integer Required

Total size of the upload in bytes.

Output

Encodingapplication/json
expiresAt stringdatetime Required

When the upload token expires.

uploadId string Required

Server-side identifier for this upload.

uploadToken string Required

Short-lived bearer token bound to this upload. Send as 'Authorization: Bearer <token>' on TUS requests.

uploadUrl stringuri Required

Absolute URL to PATCH/HEAD per the TUS protocol.

Errors

UploadTooLarge The requested upload exceeds the server's maximum allowed size.
UnsupportedMimeType The server does not accept this MIME type for upload.
Try It

Requests are sent directly from your browser. Some servers may block requests due to CORS.

Base URL for XRPC calls (e.g., https://bsky.social)
Enter valid JSON for the request body
View raw schema
{
  "type": "procedure",
  "input": {
    "schema": {
      "type": "object",
      "required": [
        "size",
        "mimeType"
      ],
      "properties": {
        "size": {
          "type": "integer",
          "description": "Total size of the upload in bytes."
        },
        "draftUri": {
          "type": "string",
          "description": "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."
        },
        "filename": {
          "type": "string",
          "description": "Optional filename hint to attach as upload metadata."
        },
        "mimeType": {
          "type": "string",
          "description": "MIME type of the content being uploaded (e.g. video/mp4)."
        }
      }
    },
    "encoding": "application/json"
  },
  "errors": [
    {
      "name": "UploadTooLarge",
      "description": "The requested upload exceeds the server's maximum allowed size."
    },
    {
      "name": "UnsupportedMimeType",
      "description": "The server does not accept this MIME type for upload."
    }
  ],
  "output": {
    "schema": {
      "type": "object",
      "required": [
        "uploadUrl",
        "uploadToken",
        "expiresAt",
        "uploadId"
      ],
      "properties": {
        "uploadId": {
          "type": "string",
          "description": "Server-side identifier for this upload."
        },
        "expiresAt": {
          "type": "string",
          "format": "datetime",
          "description": "When the upload token expires."
        },
        "uploadUrl": {
          "type": "string",
          "format": "uri",
          "description": "Absolute URL to PATCH/HEAD per the TUS protocol."
        },
        "uploadToken": {
          "type": "string",
          "description": "Short-lived bearer token bound to this upload. Send as 'Authorization: Bearer <token>' on TUS requests."
        }
      }
    },
    "encoding": "application/json"
  },
  "parameters": null,
  "description": "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."
}

Lexicon Garden

@