Sherman Web Design Docs: switch app
Open the studio

File uploads from visitors

Let a form on your site take a screenshot or a PDF from the visitor, kept in private storage that only the right people can open. Off until you turn it on.

Turn it on

Ask the assistant, or call set_visitor_uploads (site admins; it always asks you to confirm). The settings:

SettingDefaultWhat it does
enabledoffThe switch. Turning it off also stops showing files that were already uploaded.
max_mb5Largest file, up to 10 MB.
allowed_typesPNG, JPEG, GIF, WebP, PDFChecked from the file's contents, not its name. SVG and HTML files are never accepted.
per_visitor_hour10Uploads per visitor per hour.
per_site_day200Uploads for the whole site per day.
view_levelyour highest sign-in levelSigned-in visitors at this level or above can open every uploaded file (for example your staff).

The form and the flow

The form needs enctype="multipart/form-data" and a file field. In its flow, a store_upload step saves the file and gives you its id to keep in a record:

<form method="post" action="/api/flows/report" enctype="multipart/form-data">
  <textarea name="body"></textarea>
  <input type="file" name="attachment" accept="image/*,application/pdf">
  <button>Send</button>
</form>
[{"id": "f", "type": "store_upload", "field": "attachment", "on_fail": {"redirect": "/report?error=file"}},
 {"type": "store_record", "collection": "reports", "record_id": "{{random.r}}",
  "data": {"body": "{{input.body}}", "file": "{{steps.f.file_id}}", "file_name": "{{steps.f.name}}"}},
 {"type": "respond", "redirect": "/thanks"}]
  • If the visitor chose no file, the flow goes on without one. Add "required": true to insist.
  • A file that is too big, of the wrong type or over a limit stops the flow with a clear message (or goes to your on_fail page).
  • Upload forms must be sent from your own site's pages. A flow can have up to 3 upload steps.

Who can open a file

Link to /api/files/<file id> on your site. The file opens only for:

  • the visitor who uploaded it (signed in with the same Studio ID or session),
  • signed-in visitors at the site's view_level or above,
  • anyone holding a short-lived signed link that a site admin made with get_visitor_file_url (10 minutes by default, at most an hour).

Everyone else gets "not found". Files are never public, never listed on your site and never served from /media. Images open in the browser; PDFs download.

Site admins can list files with list_visitor_files and delete one with delete_visitor_file.

Price

As of October 23, 2026: 15.20 credits per 1,000 stored files, plus their size in your site's file storage. Opening a file is an ordinary page request. Current prices are on the Billing page under "What credits pay for".

Updated October 23, 2026