Start an upload
upload_startFree. Gets a one-time signed upload URL; YOU send the file with your own HTTP client (the server never sees the bytes), then call upload_finish. The URL lives for a few minutes (attachment/project_media about 10, song about 15, video about 5). Voice uploads are not available here.
Args: kind: attachment (an image up to 10 MB, staged for AI Video / Personas; JPEG, PNG, WebP) | song (audio up to 100 MB for Music Video; MP3, WAV, M4A, AAC, FLAC, OGG) | video (your own MP4/MOV up to 500 MB, saved to the Library; 20 a day) | project_media (an image up to 10 MB added to one Studio project; needs project_id). content_type: the file's MIME type, e.g. image/png, audio/mpeg, video/mp4. size_bytes: the exact size of the file. rights_confirmed: must be true for attachment, song and project_media, and only when the user has told you they own it or have permission, including anyone shown in an image. Not needed for video. project_id: for project_media only. filename: optional, ignored by the server.
Returns: {ok, upload_id, method: PUT|POST, url, headers? (PUT: send exactly these) | fields? (POST: multipart form fields, then the file last), curl (use as the path), expires_in_s, then: 'upload_finish(upload_id)'}
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"kind": "<kind>",
"content_type": "<content_type>",
"size_bytes": "<size_bytes>"
},
"name": "upload_start"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| filename | No | ||
| project_id | No | ||
| size_bytes | Yes | ||
| content_type | Yes | ||
| rights_confirmed | No |