Upload an object
POST
/v1/storage/{project_id}/{bucket}Multipart upload of a file to a bucket. The object path is not in the URL: it is composed of the path field and the file name of the multipart part.
This English text was generated automatically from the French original and has not been reviewed yet.
#
Request
Headers
| Header | Required | Value |
|---|---|---|
apikey | yes | Clé API du projet — anon est REFUSÉ en écriture |
Authorization | no | Bearer <JWT utilisateur> — l'utilisateur devient propriétaire de l'objet |
Content-Type | yes | multipart/form-data (généré par le client HTTP) |
#
Request
Multipart form fields
| Parameter | Type | Required | Description |
|---|---|---|---|
bucket | string | yes | Bucket name, in the path. The reserved prefix _derivatives is prohibited. |
file | part (fichier) | yes | Multipart containing the file. Its client file name and content-type are preserved. |
path | part (texte) | no | Subfolder in the bucket. The final key is {bucket}/{path}/{fichier}. |
upsert | part (texte) | no | true or 1 to replace an existing object. Any other value is false. |
meta[clé] | part (texte) | no | Free metadata attached to the object. |
#
Notes
Limits
Info
The maximum size is resolved in this order: bucket limit, then project limit, then service configuration. An Content-Length clearly beyond that is rejected even before reading the body. Some extensions are blocked no matter what.
#
Notes
Large files
Astuce
For large files, the API is a three-part multipart: POST …/{bucket}/multipart/init, then PUT …/{bucket}/multipart/part for each part, then POST …/{project_id}/multipart/complete (the latter does not have a bucket segment). DELETE …/{bucket}/multipart aborts the upload. There is no tus API.
v1.0 · revised Apr 15, 2026