Copy, Move & Bulk
s3BEAR copies objects server-side via S3's CopyObject API — no data passes through
the backend or the browser. A move is a copy followed by deleting the source. Both work
across buckets and prefixes in a single operation.
Single copy / move
In the UI, use the copy to or move to action in an object's row, then pick a destination bucket and edit the destination key.
# Copy
curl -X POST http://localhost:8200/api/v1/buckets/DEST/objects/copy \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"source_bucket": "SRC",
"source_key": "old/path/file.bin",
"dest_key": "new/path/file.bin"
}'
# Move (copy + delete source) — same body at /objects/move
curl -X POST http://localhost:8200/api/v1/buckets/DEST/objects/move \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{ "source_bucket": "SRC", "source_key": "old/path/file.bin", "dest_key": "new/path/file.bin" }'
Bulk copy / move
Select multiple objects in the bucket browser (checkboxes) — the toolbar shows
cp (N) / mv (N) / rm (N). Pick a destination bucket and an optional prefix;
each object keeps its filename under that prefix (dest_prefix + basename).
# Copy many objects into archive/ of another bucket
curl -X POST http://localhost:8200/api/v1/buckets/DEST/objects/bulk-copy \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{
"source_bucket": "SRC",
"keys": ["a/1.png", "a/2.png", "b/3.png"],
"dest_prefix": "archive/2026/"
}'
# → { "succeeded": ["archive/2026/1.png", ...], "errors": [] }
# Bulk move uses the same body at /objects/bulk-move
Bulk operations are partial-failure tolerant: each object is attempted independently,
and the response lists both succeeded keys and per-object errors (e.g. a missing
source), so one bad object doesn't abort the batch.
Required permissions
| Operation | Source | Destination |
|---|---|---|
| Copy / bulk-copy | read | write |
| Move / bulk-move | read + delete | write |
A 403 on copy/move almost always means a missing permission on the source or destination pattern. See Group Permissions.
Use case: promoting build artifacts
CI uploads nightly builds to builds-staging. After QA approves a release, an operator
clicks Move on the approved binary and sends it to builds-production. Server-side
copy means a 2 GB binary moves in seconds — no re-upload.
Related: Group Permissions · Uploading Objects
