Object Stores
Object store CRUD and runtime mounts.
An object store is a named reference to your own S3-compatible bucket that sandboxes can mount at an arbitrary path. Credentials are referenced by secret name — create the secrets first; their values are never stored on the object-store record or returned by any endpoint. See the Object Stores guide.
POST /object-stores
Create an object-store reference. It is ready immediately.
Request
| Field | Type | Required / default | Description |
|---|---|---|---|
name | string | required | 1–128 chars of [A-Za-z0-9._-], unique per project. |
bucket | string | required | Bucket name. |
access_key_secret | string | required | Name of the project secret holding the S3 access key id. |
secret_key_secret | string | required | Name of the project secret holding the S3 secret access key. |
session_token_secret | string | none | Name of the project secret holding an STS session token. |
endpoint | string | "" | S3 endpoint URL (http(s)://...). Empty for AWS. |
region | string | "" | S3 region. |
prefix | string | "" | Key prefix to mount (leading/trailing / trimmed). |
path_style | bool | false | Use path-style addressing (MinIO and similar). |
read_only | bool | false | Default read-only for attachments. |
provider | string | "" | Provider hint: AWS, Minio, Ceph, Cloudflare, Other, or empty. |
dir_cache_secs | int | 0 | Directory-listing cache TTL (0–86400 s); 0 uses the built-in default. |
Errors
400— invalidname, missingbucket, unknownprovider, non-http(s)endpoint, missing credential secret names, unknown secret name(s), ordir_cache_secsout of range.409— an object store with this name already exists.
GET /object-stores
List the project's object stores, newest first. ?include_deleted=true also returns retired ones. Response: { "object_stores": [ ... ] } with items shaped like the create response.
GET /object-stores/:id_or_name
Fetch one object store by UUID or name.
Errors
400— ambiguous ref (matches one store's id and another's name).404— no matching object store.
DELETE /object-stores/:id_or_name
Retire an object store. Refused while any live sandbox has it mounted. The name is immediately reusable.
Errors
404— no matching object store (or already deleted).409— mounted by a sandbox; unmount or stop it first.
Runtime mounts
Mounts can be declared at create time (the object_store_mounts array on POST /vms) or attached/detached on a running sandbox. Mount paths follow the same rules as volumes: absolute, no .., no reserved paths, no duplicates, max 8 per sandbox. See Mounting Object Stores.
POST /vms/:id/object-store-mounts
Mount an object store on a running sandbox.
| Field | Type | Required / default | Description |
|---|---|---|---|
object_store | string | required | Object store id or name (must be ready). |
mount_path | string | required | Absolute path inside the sandbox. |
read_only | bool | store default | Override the store's default read-only for this mount. |
404— unknown sandbox or object store.409— sandbox notrunning;mount_pathalready mounted; store notready; or the sandbox rejected the mount.
GET /vms/:id/object-store-mounts
The sandbox's current mount list.
DELETE /vms/:id/object-store-mounts/:name
Unmount by store name on a running sandbox.
404— unknown sandbox.409— sandbox notrunning, or the sandbox rejected the unmount.