Skip to main content
POST
Create a source upload (video, audio, image, or LUT)

Authorizations

Authorization
string
header
required

API key obtained from your Tella account settings

Body

application/json

Create a new source upload (video, audio, image, or 3D .cube LUT). Returns a pre-signed S3 URL to PUT the bytes to, plus a sourceId to reference from clips, layouts, overlays, backgrounds, and sound effects. For a LUT, upload the .cube unchanged and save it with POST /v1/library; use the returned library item id with PATCH /v1/videos/{id}/clips/{clipId}/filters.

duration
number

Duration in seconds. Required for video and audio; omit for image and lut.

Required range: x > 0
height
integer

Height in pixels. Required for video and image; omit for audio and lut.

Required range: 0 < x <= 9007199254740991
kind
enum<string>

Source kind: video (default), audio (e.g. sound effects), image, or lut (a 3D .cube LUT).

Available options:
video,
audio,
image,
lut
width
integer

Width in pixels. Required for video and image; omit for audio and lut.

Required range: 0 < x <= 9007199254740991

Response

OK

expiresAt
string<date-time>
required

ISO-8601 timestamp at which uploadUrl stops accepting uploads.

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
sourceId
string
required

ID of the new source.

uploadUrl
string<uri>
required

Pre-signed S3 URL. PUT the file bytes here (single PUT, max ~5GB). Upload the file as-is: any common container is accepted (MP4, MOV, WebM, MP3, WAV, M4A, …) — the .mp4 in the URL path is just the storage key, not a container requirement.

Last modified on October 6, 2026