Veritap docs
v1.0.0
Get help
● Set up

Uploads
files, sizes, disk and slots.

Images, recordings, videos and saved e-mails are sent to the server as one signed upload, checked against your caps before any provider is called, kept on disk only while the check runs, and deleted when it ends.

101 MB with the defaultstemp disk8 uploads at once

01What can be uploaded

The server reads the type from the file's content, never from its name or declared type:

KindFormatsDefault capConsole maximum
ImageJPEG, PNG, WebP, GIF, HEIC/HEIF, AVIF12 MB20 MB
Audio and voice messagesMP3, M4A/AAC, Ogg/Opus, WAV, FLAC, AMR, CAF20 MB and 300 seconds25 MB and 600 seconds
VideoMP4, MOV, WebM, Matroska, 3GP, M4V100 MB and 60 seconds200 MB and 60 seconds
Saved e-mail (.eml)message/rfc82210 MBfixed

The caps are set in the console under Media caps and thresholds. A screenshot is an image: when the language model is set, it is first read as a screenshot (see Checks).

Audio and video need ffprobe

The server reads the length of every audio and video file with ffprobe before it accepts it. Without ffprobe on the server, every audio and video upload is refused with "The length of this file could not be read". Install ffmpeg (which includes ffprobe) wherever you run audio or video checks; the shipped Docker image needs one extra line for it (see Deployment). Images and e-mails do not need it.

02The upload size limit

Every request to /v1 is limited to 256 KB, except a file check. A file check may be as large as your largest file cap plus 1 MB for the form around it: about 101 MB with the default 100 MB video cap, about 201 MB with the 200 MB maximum. If you run a reverse proxy, allow at least that request size there too (nginx: client_max_body_size).

On the phone, the share extension and the Android share entry copy a shared file only when it is within the server's default cap of its kind (image 12 MB, audio 20 MB, video 100 MB, e-mail 10 MB), and never more than 101 MB. A larger file is not copied, and the app says why.

03What happens to an upload

  1. Before any byte is read: the app's signature, its request nonce and the per-install rate limit are verified, and the upload must declare its length (Content-Length) and the SHA-256 of its body (x-rc-body-sha256).
  2. Streaming to disk: the body is written to a private folder while it is hashed. A body whose hash differs from the declared one is deleted and refused.
  3. Checking the file: not empty, a supported type, within the size cap of its type, and for audio and video within the length cap. Then it is copied once more under a random name and the streamed body is deleted.
  4. After the check: the file is deleted when the check ends, also when it fails or is stopped. Leftovers from a crash are swept at every start and every hour.

The app shows a refusal in the person's language. The reasons are: empty, unsupported type, too large, too long, and length could not be read.

04Temporary disk you need

Uploads are written to a private folder under the system temp folder of the server (owner-only, mode 0700). The server refuses to start when that folder belongs to another user or others can open it. Each upload is on disk twice for a moment (the body, then the checked copy), so plan free space for about:

2 × largest file cap × uploads at once
# defaults: 2 × 100 MB × 8 = about 1.6 GB
# 200 MB video cap: 2 × 200 MB × 8 = about 3.2 GB

In Docker the system temp folder is inside the container; give the container that much writable space.

05Upload slots

LimitValue
Uploads streaming at once, all installs together8 (UPLOAD_MAX_CONCURRENT)
Uploads at once from one install1
Uploads at once from one client address2
Idle time before an upload is dropped15 seconds without data
Total time for one uploadits length at 256 KB per second plus 10 seconds, at least 30 and at most 300 seconds

Over a slot limit the server answers 429 (too many uploads at once); a stalled upload gets 408 and its slot is freed at once; an upload without a length gets 411. Raise UPLOAD_MAX_CONCURRENT only together with the disk space above.

06What a file costs in daily units

An image is 1 media unit, audio 1 unit per started minute, and video 10 units per started 30 seconds. A screenshot read as a message costs its 1 media unit and no light check. When a provider fails on a media check, its units are given back. Units count against the install's daily allowance in Plans.

Videos and the Free plan

With the default limits a Free install has 10 media units a day: enough for one video of up to 30 seconds, or ten images, or a mix of images and recordings. Pro has 30. Change Free: media units per day and Pro: media units per day in Plans.