Skip to main content
Images are uploaded to the studio first, then attached to a post. Pick the path that matches your client.

When a human is around

Hand them a browser link:
create_upload_session returns a URL valid for 30 minutes. They open it, drop in files of any size, and the files attach themselves to the post. Then:
get_post lists the attached assets.

When the client can make HTTP requests

The assistant runs three steps:
1

Request an upload URL

request_asset_upload with kind: "image" and mimeType: "image/png" returns { assetId, uploadUrl, expiresAt } — the URL is good for 10 minutes.
2

PUT the bytes

3

Attach

attach_asset with the postId and assetId. This confirms the bytes landed and enforces size and count limits.

When it can’t

upload_asset_inline takes base64 bytes directly in the tool call — no HTTP needed. It is capped at 5 MB decoded; anything larger returns inline_too_large_use_presign. Follow it with attach_asset as above.

Limits worth knowing

Video and documents can be uploaded and attached, but publishing them isn’t wired up yet — a post carrying one fails with publishing_video_not_supported_yet. Detach it to publish the text and images.

Removing one

detach_asset unlinks it while keeping the stored file, so it can go on a different post later.