Skip to main content
STOP. Do not read past this section until you have read and followed /quickstart.md.Goal: produce a reliable SDK automation script. The intended authoring flow is generate then edit, not write browser automation from scratch.Do not hand-write SDK code with element IDs, selectors, or form fields from memory. Element IDs, selectors, and field mappings must come from a live observe() call, CLI notte page observe output, or generated workflow code. Guessed browser targets fail on real pages.Use the Notte skill and CLI to inspect the live site, validate actions/selectors, handle auth/session state, and export workflow code with notte sessions workflow-code before using SDK docs or SDK code.SDK reference pages are for understanding, running, or editing generated workflow code. They are not the starting point for manually authoring the initial browser automation. SDK-first code is guesswork on real-world pages with dynamic selectors, auth state, CAPTCHAs, and anti-bot behavior.
File Storage provides a cloud bucket for uploading files to use in your automations and downloading files that agents retrieve from websites.

Quick Start

quickstart.py

How It Works

File Storage has two buckets:

Uploading Files

Upload files from your local machine to make them available in sessions:
Each uploaded file must be under 100 MB. For larger files, contact the team at support@notte.cc.

Attaching a URL directly to a form

In a cloud session, pass a public HTTP(S) file URL, including a signed URL, to session.execute(type="upload_file", file_path=...) along with the upload element’s selector or observed ID. Notte downloads and attaches the file without navigating away from the form or requiring a separate session.storage.upload() call.
The download runs on the API server and does not use browser cookies, browser proxy settings, or custom authentication headers. URLs must resolve to public addresses; redirects are checked too. Downloads have a 120-second overall limit, up to five redirects, and the server’s configured per-file and aggregate temporary-upload size limits. Temporary files are removed when the session is cleaned up and are not added to its persistent file catalog. This requires cloud backend support, with no SDK update. Standalone local sessions retain their existing storage/path behavior. storage.upload() still accepts local files; URL support belongs to the browser’s upload_file action.

Downloading Files

Download files that agents retrieved from websites:
downloading_files.py

Force Overwrite

Overwrite existing local files: Before running this example, set session_id (Python) or sessionId (Node) to your storage’s session ID, and file_id or fileId to the ID returned by uploading or listing the file. The Node example uses the client initialized above.

Using with Agents

Agents can interact with files on websites when storage is attached:
using_with_agents.py

Using with Sessions

Use file storage with scripted automation:
using_with_sessions.py

API Reference

FileStorage Methods

Parameters

upload()
  • file_path - Path to the local file to upload
  • upload_file_name - Optional custom name for the uploaded file
download()
  • file_name - Name of the file in storage
  • local_dir - Local directory to save the file
  • force - Overwrite existing file (default: False)

Supported File Types

File storage supports all common file types:
  • Documents: PDF, DOCX, XLSX, TXT, CSV
  • Images: PNG, JPG, JPEG, GIF, WEBP
  • Archives: ZIP, RAR, TAR, GZ
  • Media: MP4, MP3
  • Data: JSON, XML

Best Practices

1. Attach Storage Before Starting

Always create and attach storage before starting the session:

2. Use Descriptive Filenames

3. Check Downloads After Session

Always check for downloaded files after the session ends:
check_downloads.py

Next Steps

Sessions

Learn about browser sessions

Vaults

Store credentials securely

Personas

Create browser identities