File Upload

Upload and reference files using Anthropic's Files API in Agno.

With Anthropic's Files API, you can upload files and later reference them in other API calls. This is handy when a file is referenced multiple times in the same flow.

Usage

Install dependencies

uv pip install -U anthropic agno

Export your Anthropic API key

export ANTHROPIC_API_KEY="your_anthropic_api_key_here"

Upload a file

Initialize the Anthropic client and use client.beta.files.upload:

from pathlib import Path

from anthropic import Anthropic

file_path = Path("path/to/your/file.pdf")

client = Anthropic()
uploaded_file = client.beta.files.upload(file=file_path)

Initialize the Claude model

Reference the uploaded file with a supported Claude model. The Files API is generally available; the legacy Files beta header is no longer required. The SDK retains client.beta.files for compatibility.

from agno.agent import Agent
from agno.models.anthropic import Claude

agent = Agent(
    model=Claude(
        id="claude-sonnet-4-6",
    )
)

Reference the file

You can now reference the uploaded file when interacting with your Agno agent:

from agno.media import File

agent.print_response(
    "Summarize the contents of the attached file.",
    files=[File(external=uploaded_file)],
)

Uploaded files count against storage limits. See Anthropic's docs for the details.

Working example

cookbook/90_models/anthropic/pdf_input_file_upload.py
from pathlib import Path

from agno.agent import Agent
from agno.media import File
from agno.models.anthropic import Claude
from agno.utils.media import download_file
from anthropic import Anthropic

pdf_path = Path(__file__).parent.joinpath("ThaiRecipes.pdf")

# Download the file using the download_file function
download_file(
    "https://agno-public.s3.amazonaws.com/recipes/ThaiRecipes.pdf", str(pdf_path)
)

# Initialize Anthropic client
client = Anthropic()

# Upload the file to Anthropic
uploaded_file = client.beta.files.upload(
    file=Path(pdf_path),
)

if uploaded_file is not None:
    agent = Agent(
        model=Claude(
            id="claude-sonnet-4-6",
        ),
        markdown=True,
    )

    agent.print_response(
        "Summarize the contents of the attached file.",
        files=[File(external=uploaded_file)],
    )