Get a link to upload a file
A short-lived signed link to PUT ONE file from your own disk, so its bytes never pass through an agent's conversation.
Text (html, js, css, json; UTF-8, up to 2,000,000 bytes): pass public_url as a scene's src_url or reference it from scenes with <script src>. AUDIO you rendered yourself (wav, mp3, ogg, m4a, flac; up to 50 MB, counted against the storage quota) goes straight to storage: PUT it to the presigned upload_url with the returned headers (Content-Type is signed), then POST complete_url, which checks the stored bytes' magic number, records the file in the media library and as a music track that is transcoded and tempo/beat-analysed like any other (kind "sfx": library entry only), and returns track_id; the returned curl does both. Then PATCH /projects/{id}/music with trackId (or url: public_url) makes it the project music. Same access as landing authored compositions. Images and video also go straight to storage (see complete_url). Free.
Authorization
bearerAuth Typecut API key. Generate one in app.typecut.ai → Settings → API keys. Send as Authorization: Bearer tc_live_….
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/uploads" \ -H "Content-Type: application/json" \ -d '{ "file_name": "score.wav" }'{
"data": {
"upload_url": "http://example.com",
"method": "PUT",
"public_url": "http://example.com",
"content_type": "string",
"max_bytes": 0,
"expires_at": "string",
"curl": "string",
"next": "string",
"kind": "image",
"mode": "single",
"headers": {
"property1": "string",
"property2": "string"
},
"complete_url": "http://example.com",
"part_url": "string",
"part_count": 0,
"part_size": 0
}
}{
"error": {
"type": "string",
"code": "string",
"message": "string"
}
}{
"error": {
"type": "string",
"code": "string",
"message": "string"
}
}{
"error": {
"type": "string",
"code": "string",
"message": "string"
}
}