Skip to main content
See Assets for kinds, size limits, and which upload path to pick.

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
The link carries its own signed token — the user does not need to be signed in to use it, and it stops working after 30 minutes. After they upload, call get_post to see the attached assets.

request_asset_upload

Returns a presigned URL for a direct PUT 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
Then call 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.
Returns { "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.
Returns the asset view: { 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.
Returns { "detached": "<assetId>" }.