Choose an upload method
- MCP picker: clients that support MCP Apps can open a file picker with
open_upload_ui. - Direct upload: API clients and MCP clients that can read local files and make HTTP requests can reserve storage and PUT the bytes themselves. Every authenticated MCP client receives
create_upload_urls.
workspace_id with list_brands or get_brand. For a new brand, stage the files and create the brand in the same workspace.
Stage files through the MCP picker
- Call
open_upload_uiwith onlyworkspace_id: the selected workspace ID, ornullfor the personal workspace. Uselist_workspacesif needed. - Select and upload the files. Retry failed files, or explicitly continue with the successful files.
- Choose Continue. The picker verifies the uploads and sends an upload reference in chat.
- Call
get_file_picker_handoffwith thatreferenceto receive the verifiedworkspace_id, filenames,upload_idvalues, and a temporaryurlfor each file. Use the IDs with a destination below, or pass theurlto a model.
onboard_brand, pass the returned workspace_id when non-null and omit it when null. Follow the live schema for other tools.
If Continue cannot prepare the reference, try again. If the picker cannot send the message, copy the provided message into chat. If the files have expired, upload them again.
Save images directly to a Brand Library
Callopen_upload_ui with only brand_session_id instead of workspace_id. This mode saves images to the existing Brand Library without a Continue step. After each successful batch, the picker sends a chat message with all Library image IDs saved through that picker so far and also updates widget context. Use those final image IDs to continue the task; they are not temporary upload IDs.
It accepts up to 10 PNG, JPEG, WebP, or AVIF images per batch, up to 10 MiB each.
Stage files through direct upload
- Call Upload files (
POST /uploads) in REST orcreate_upload_urlsin MCP with each filename and exact byte length. If you’ll give the file to a model, also send its MIME type, such asimage/png, ascontentType(REST) orcontent_type(MCP). - PUT the raw file bytes to the returned URL using the returned method and required headers. Do not send multipart form data.
- After the PUT succeeds, pass
uploadIdin REST orupload_idin MCP to the destination. There is no separate confirmation request.
url, not the upload ID, and it stops working when the upload expires. Models can reject or ignore a file uploaded without its MIME type, so send one when reserving. The picker sends the type your browser reports. Supported types are kept: PNG, JPEG, WebP, AVIF, GIF, SVG, MP4, WebM, MOV, MP3, WAV, OGG, FLAC, AAC, M4A, and PDF; any other file is stored without a type. The destination validates the file and applies its own requirements and limits.
Use the uploaded file
To use a Library image as the primary logo or assign an uploaded font, prepare and apply a Brand Edit. Saving the asset alone does not change the active brand.
Font assets are single-use and expire after 24 hours. The Brand Edit using one must finish preparing before the returned
expiresAt (REST) or expires_at (MCP). Upload the font again after expiry, failed preparation, or for a later edit.
See Create a brand for the creation workflow. Use the linked API reference or your connected account’s live MCP schemas for exact destination fields.