# API Contracts: File Storage Management & UI ## Endpoints ### GET /api/storage/files List all files in the storage system. **Query Parameters:** - `category` (optional): Filter by category (`backup` or `repository`). **Response:** - `200 OK`: List of `StoredFile` objects. ```json [ { "name": "dashboard_backup_20260124.zip", "path": "backups/dashboard_backup_20260124.zip", "size": 102400, "created_at": "2026-01-24T12:00:00Z", "category": "backup", "mime_type": "application/zip" } ] ``` ### POST /api/storage/upload Upload a file to the storage system. **Form Data:** - `file`: The file content. - `category`: Target category (`backup` or `repository`). **Response:** - `201 Created`: The uploaded `StoredFile` object. - `400 Bad Request`: Invalid category or file. ### DELETE /api/storage/files/{category}/{filename} Delete a file from storage. **Path Parameters:** - `category`: `backup` or `repository`. - `filename`: Name of the file to delete. **Response:** - `204 No Content`: File deleted successfully. - `404 Not Found`: File does not exist. ### GET /api/storage/download/{category}/{filename} Download a file. **Path Parameters:** - `category`: `backup` or `repository`. - `filename`: Name of the file to download. **Response:** - `200 OK`: File stream. - `404 Not Found`: File does not exist. ### GET /api/settings/storage Get current storage configuration. **Response:** - `200 OK`: `StorageConfig` object. ### PUT /api/settings/storage Update storage configuration. **Body:** - `StorageConfig` object. **Response:** - `200 OK`: Updated `StorageConfig`. - `400 Bad Request`: Invalid path or not writable.