create_upload_session
Mints a browser link for a specific post. The user opens it and drag-and-drops files of any size, which upload straight to storage and attach themselves to the post.string
required
Post the uploads attach to.
Result
get_post to see the attached assets.
request_asset_upload
Returns a presigned URL for a directPUT of the raw bytes.
enum
required
image, video, or document.string
required
Must be allowed for the kind, e.g.
image/png.string
Original filename, kept for display.
Result
Upload the bytes
attach_asset with the assetId. The URL is valid for 10 minutes.
upload_asset_inline
Uploads a small file by passing its base64 contents in the tool call.enum
required
image, video, or document.string
required
Must be allowed for the kind.
string
required
File contents, base64-encoded. Decoded size must be under 5 MB — larger files
return
inline_too_large_use_presign.string
Original filename.
{ "assetId": "…", "bytes": 48213 }. The asset is ready right away;
still call attach_asset to link it to a post.
attach_asset
Links an uploaded asset to a post. This is where Studio confirms the bytes landed, enforces the size ceiling, and enforces the per-post count.string
required
Post to attach to.
string
required
Asset to attach.
{ id, postId, kind, mimeType, filename, bytes, status }.
An oversized file uploaded through a presigned URL is rejected here — the
stored object and its record are deleted and the call fails with
too_large.detach_asset
Removes an asset from a post. The stored file is kept, so it can be attached elsewhere.string
required
Post to detach from.
string
required
Asset to detach.
{ "detached": "<assetId>" }.