Skip to main content
Upload a local file, then choose how Bloom should use it: as a brand source, an image in the Brand Library, or a font asset. If the destination accepts public URLs and your file has one, use it directly.

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. In MCP, use create_upload_urls; it is available in Claude Code and ChatGPT, but hidden from Claude’s hosted app.
If neither method is available, use a publicly reachable HTTPS URL. Private attachment URLs from the host client are not supported. Use the destination’s workspace for the upload. For an existing brand, read its 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

  1. Call open_upload_ui with only workspace_id: the selected workspace ID, or null for the personal workspace. Use list_workspaces if needed.
  2. Select and upload the files. Retry failed files, or explicitly continue with the successful files.
  3. Choose Continue. The picker verifies the uploads and sends an upload reference in chat.
  4. Call get_file_picker_handoff with that reference to receive the verified workspace_id, filenames, and upload_id values. Use those IDs with a destination below.
The reference itself is not an upload ID. Pass only verified upload IDs to the destination; cancellation or zero successful uploads must not start onboarding. For 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

Call open_upload_ui with only brand_session_id instead of workspace_id. This mode saves images to the existing Brand Library and returns final image IDs in widget context, without a Continue step. Read that context before using the images. It accepts up to 10 PNG, JPEG, WebP, or AVIF images per batch, up to 10 MiB each.

Stage files through direct upload

  1. Call Upload files (POST /uploads) in REST or create_upload_urls in MCP with each filename and exact byte length.
  2. PUT the raw file bytes to the returned URL using the returned method and required headers. Do not send multipart form data.
  3. After the PUT succeeds, pass uploadId in REST or upload_id in MCP to the destination. There is no separate confirmation request.
Both staging methods accept up to 30 files, 100 MiB per file, and 256 MiB combined. Picker uploads expire after two hours; for direct uploads, follow the returned expiry time. Temporary uploads are private and reusable by authorized operations in the same workspace until expiry. Staging alone does not change a brand or add Library assets. 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.