Upload into a nested path
avatars, 2024 and q1 are created if they don’t already exist — no
separate folder calls, no ids to keep track of.
Three ways to name a destination
Only one may be given per request. Sending
folder together with folderId
(or with a key that has a folder prefix) returns 400.
Omit all three and the asset lands in your project’s default folder — a
real folder created with the project and named after it.
Object keys
Akey is the whole path, exactly like an S3 object key. Everything before the
last / is the folder path; the last segment becomes the stored filename.
A
key renames the stored asset — it never reinterprets the bytes. Dreep still
detects the real file type from the uploaded file. To actually convert the
file, pass format as above.How path segments are normalized
Each segment is slugified: lowercased, with anything outside letters, numbers,_, - and spaces stripped, and runs of spaces/underscores/hyphens collapsed
to a single -.
This means
Marketing Assets/2024 and marketing-assets/2024 are the same
folder — you can’t accidentally create two folders that differ only by case
or spacing. The original text is kept as the folder’s display name; the slug
is what paths resolve against.
Limits
- Depth: up to 10 levels.
- Segment length: 100 characters after normalization.
- A segment with no letters or numbers (
###,.,..) is rejected with400. Path traversal is not possible.
Turning off auto-creation
PassautoCreateFolders=false to require that the path already exists. An
unknown path then returns 404 instead of quietly creating a folder tree —
useful for catching typos in production.
Access control is inherited
When a path creates folders, each new folder inheritsaccessControlType and
defaultExpirySeconds from its parent. Creating invoices/2024/q1 under a
private invoices folder produces private subfolders — a new subfolder is
never silently public.
To set access control explicitly, create the folder first:
accessControlType applies to the leaf (q1); the intermediate folders
inherit as usual. See Folders & Access Control.
Browsing by path
folder / path, so you never have
to reconstruct a path from ids.
Coming from S3
The mapping is direct — drop the bucket, keep the key:- Folders are real records, not key prefixes. That’s what lets a folder carry access control and signed-URL expiry that its contents inherit.
- Paths are slug-normalized, so they are case-insensitive. S3 treats
Avatars/andavatars/as two different prefixes; Dreep treats them as one folder.
Only empty folders can be deleted. A folder that still contains files or
subfolders returns
409 — delete its contents first. Deleting a folder never
destroys media, so a mis-click can’t lose data. Your project’s default folder
can’t be deleted at all.