Files and uploads
Where an app keeps photos and documents, how big files get there, and how much space each plan includes.
Every app gets its own file storage: a private space nothing else can reach, already set up, with nothing to configure. Photos people upload, documents your app writes, a logo — they all live there.
Your AI already knows how to use it. This page is for when you want to know what it is doing, or when something is refused.
How much space you get
| Plan | Files included, for each app |
|---|---|
| Free | 1 GB |
| Personal | 10 GB |
| Family | 50 GB |
| Community | 200 GB |
For a sense of scale: 10 GB is about three thousand phone photos.
One app means one allowance. If your app is built from parts — a website and an API, say — they share the space between them rather than each getting their own.
Big files go straight to storage
A request to an app can carry about 1 MB. That is plenty for a form, a message or a small image, and nowhere near enough for a video or a scan of a passport.
So a large file does not travel through the app at all. Instead:
- The app asks the platform for an upload link (
POST /_platform/upload-url), naming the file and how big it is. - The platform answers with a link that works for fifteen minutes, for that one file, at that one size.
- The browser sends the file straight to storage.
- The app is told where it landed, and reads it back later with a link of its own (
GET /_platform/file-url, good for ten minutes).
Nothing about this needs a password or a key in the page. The link is the permission, it only fits the file it was made for, and it stops working shortly afterwards.
If a file is posted to an app the old way and it is over 1 MB, the app's reply says REQUEST_TOO_LARGE and tells your AI to use the upload link instead. Showing that message to your AI is enough — it will make the change.
A single file this way can be up to 5 GB. Bigger than that has to be split.
Who can ask for an upload link
Somebody the app knows. There are three:
- A visitor the app has signed in. Signing in sets a cookie the platform put there, and that cookie is the permission.
- You, from the dashboard, and your AI with the app's deploy token.
- An app with a key. If your app is a phone app or an API, the key it already sends on every request works here too.
A public app's visitors are none of these, and that is on purpose: if anybody who could open the page could also ask for upload links, a stranger could fill your space in an afternoon. So in a public app, the upload goes through your app's own code — it can write to its own storage directly, with settings it already has — or you ask people to sign in first. If your AI gets a message about this, showing it the message is enough.
When the space runs out
At four fifths of your allowance, the reply to the next upload carries a warning (STORAGE_ALMOST_FULL). The upload still works. It is a nudge, in time to do something about it.
Past the allowance:
- Uploads stop. Somebody trying to add a photo is refused (
STORAGE_FULL), and the app's reply says why. The app itself keeps running exactly as it was, everyone can still use it, and nothing is deleted. - You get an email, saying how much the app is storing and what your plan includes — either when the total passes the allowance, or the first time an upload is refused for want of room. At most one a day, so a busy app does not fill your inbox.
One thing that is not refused: files your app writes for itself. Your app has its own keys to its own storage and nothing stands in the way of that, which is exactly how an app gets past its allowance in the first place. Those files are counted, and they are what the email is usually about.
Two ways to make room: delete files the app no longer needs, or move to a plan with more space.
Paying for extra space
Nothing is charged for extra space today. Going over means the email and the refused uploads above, and no bill.
If that changes, it would be $0.10 for each extra gigabyte a month, and the email always comes first: nobody is charged for extra space without being told beforehand.
What your app sees
An app is given UARPIE_STORAGE_BUCKET and UARPIE_STORAGE_PREFIX, and may read, write and delete anything under its own prefix and nothing else. One app can never see another's files, whoever wrote either of them. Work your app does on its own — writing a report, saving a generated image — goes through those settings directly; the upload link above is for files that come from somebody's browser.
Removing an app removes its files with it.