Skip to main content
When a workflow input is a file, the SDK uploads it as multipart/form-data (the same shape as curl -F). No base64, no payload doubling.

Browser

Node, from disk

Node, from a Blob

Multiple files

Each file becomes a files.<fieldName> multipart part. Mix files and scalar inputs freely; scalars ride in the input JSON part automatically.

Nested files are not extracted

Only top-level file values become multipart fields. Files inside arrays or nested objects stay in the input JSON part and the server will not see them as uploads:

Do not base64 yourself

The SDK picks multipart whenever it sees a File, Blob, or { content, filename, mimeType }. Plain strings pass through as scalar inputs.