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

OperationSourceDestination
Copy / bulk-copyreadwrite
Move / bulk-moveread + deletewrite

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