OxiCloud exposes batch endpoints for bulk file and folder operations under /api/batch. Batch requests reduce round-trips, run concurrently behind a semaphore, and return per-item success and failure details instead of aborting on the first error.
| Method | Path | Description |
|---|---|---|
POST |
/api/batch/files/move |
Move multiple files into a target folder |
POST |
/api/batch/files/copy |
Copy multiple files into a target folder |
POST |
/api/batch/files/delete |
Delete multiple files |
POST |
/api/batch/files/get |
Fetch metadata for multiple files |
| Method | Path | Description |
|---|---|---|
POST |
/api/batch/folders/delete |
Delete multiple folders |
POST |
/api/batch/folders/create |
Create multiple folders |
POST |
/api/batch/folders/get |
Fetch metadata for multiple folders |
POST |
/api/batch/folders/move |
Move multiple folders |
| Method | Path | Description |
|---|---|---|
POST |
/api/batch/trash |
Trash multiple items in one request |
POST |
/api/batch/download |
Build a batch download |
{
"file_ids": ["id-1", "id-2", "id-3"],
"target_folder_id": "folder-abc"
}{
"folder_ids": ["folder-1", "folder-2"],
"recursive": true
}{
"folders": [
{ "name": "Documents", "parent_id": null },
{ "name": "Photos", "parent_id": "folder-abc" }
]
}All batch endpoints return the same envelope:
{
"successful": [
{ "id": "id-1" }
],
"failed": [
{ "id": "bad-id", "error": "File not found" }
],
"stats": {
"total": 5,
"successful": 4,
"failed": 1,
"execution_time_ms": 245
}
}| Code | Meaning |
|---|---|
200 OK or 201 Created |
Every operation succeeded |
206 Partial Content |
Some operations succeeded and some failed |
400 Bad Request |
Every operation failed |
Batch work is coordinated by BatchOperationService and a tokio::sync::Semaphore. By default, OxiCloud caps concurrent work with max_concurrent_files = 10 so large batches do not starve the rest of the application.
Individual failures are collected in the failed array. One bad item does not cancel the whole request unless the batch cannot start at all.
# Move three files into a folder
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"file_ids":["id-1","id-2","id-3"],"target_folder_id":"folder-abc"}' \
"https://oxicloud.example.com/api/batch/files/move"
# Delete multiple folders recursively
curl -X POST \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"folder_ids":["old-1","old-2"],"recursive":true}' \
"https://oxicloud.example.com/api/batch/folders/delete"