File Uploads
Learn how to upload files and use provider references with the AI SDK.
The AI SDK provides the uploadFile
function to upload files to a provider and get back a ProviderReference that can be
used in subsequent API calls.
In the AI SDK, the uploaded file is identified by a ProviderReference — a
Record<string, string> mapping provider names to provider-specific identifiers.
This concept is used for other provider specific asset references too, such as
uploaded skills.
As a shorthand, you can pass a provider instance directly to api instead of calling .files() explicitly — the SDK will call .files() for you:
Supported File Types
You can upload images, PDFs, text files, and other documents depending on the provider. The media type is auto-detected from the file bytes when not specified explicitly:
Use the providerReference in a file content part with its media type:
Provider-Specific Options
Some providers accept additional options through providerOptions.
For example, OpenAI requires a purpose field:
Streaming Uploads
Providers that support streaming uploads (e.g. OpenAI, xAI) accept a tagged
{ type: 'stream', stream } shape, sending the bytes without buffering the
full file in memory. Providers without streaming support reject stream data
with an UnsupportedFunctionalityError.
The provider consumes the stream: any failed upload — including validation
failures before a request is made — cancels it, and it must not be reused. Stream data cannot be sniffed, so mediaType defaults to
application/octet-stream when omitted, and multipart-based providers default
the filename to "blob".
Uploads can be cancelled with abortSignal and carry request-specific
headers. Results include byteSize, createdAt, and expiresAt (the
provider-applied retention expiry) when the provider reports them.
Provider References
A ProviderReference is a Record<string, string> that maps provider names to
provider-specific file identifiers:
When you pass a ProviderReference as the data or image field of a message content
part, the provider looks up its own file ID from the reference. If the reference doesn't
contain an entry for the current provider, an error is thrown.
Multi-Provider Usage
If you switch providers mid-conversation (for example, continuing a chat started with OpenAI using Anthropic), you need to upload the file to both providers and merge the references:
The merged reference can then be used in messages regardless of which provider processes the request — each provider will find its own file ID.
Supported Providers
The following providers support files() and file uploads:
| Provider | Factory Method |
|---|---|
| Anthropic | anthropic.files() |
google.files() | |
| OpenAI | openai.files() |
| xAI | xai.files() |
Providers without file upload support will throw an UnsupportedFunctionalityError
if they encounter a provider reference in a message.