1
Create the upload
size_bytes is the exact size of the file. Optional: idea_id (one of your ideas), orientation (horizontal or vertical, for a video). The answer has an upload with url, method (PUT), headers and expires_at.2
PUT the file
Send the whole file in one PUT to Any
upload.url, with exactly upload.headers and no Authorization header:2xx means it arrived. The URL is private. For video and audio it only accepts this file’s type and size; for every kind, the size and type are checked again when you complete.3
Complete it
input has the input id. Completing again is safe: it answers with the same input.4
Wait for processing (audio and video)
Call
GET /v1/inputs/{id} until neither processing.media nor processing.transcript is pending. Each ends as ready, failed or none (nothing to expect: an image has no transcript, nor does a scanned PDF). Video and audio take a few minutes; PDFs and images are ready at once. Then draft from it, or start the content agent with its input_id.Accepted files
HEIC and SVG images are not accepted. Text goes through
POST /v1/inputs/text, web pages through POST /v1/inputs/url. The text of a PDF is read from its first 200 pages (200,000 characters at most); a scanned PDF has no text.
Timing and limits
- Complete an upload within 24 hours. The upload URL lasts 6 hours (video, audio) or 2 hours (PDF, image);
POST /v1/inputs/uploads/{id}/urlgives a new one, or answersuploaded: truewhen the file is already there. - Unfinished uploads at once: 20 per key or connected app, 50 per workspace and 10 GB in total (an agency’s client workspaces share the agency’s).
- Per day, per workspace (an agency’s client workspaces share the agency’s): 20 audio or video uploads, 100 PDFs or images, 20 GB. During a trial: 5, 25 and 2 GB. Over that:
upload_budget_reached. - An upload belongs to the key or app that created it.
When something goes wrong
Retryable answers also carry
details.retry_after_seconds.
Over MCP, the upload tools need an assistant that can run HTTP requests or a shell (Claude Code, Cursor, VS Code). Claude and ChatGPT in the browser can’t PUT a file, so these tools are hidden there.

