Cloud Storage API
API endpoints for cloud storage provider management.
Configure and manage cloud storage providers for backups.
Endpoints Overview
| Method | Endpoint | Description |
|---|---|---|
| GET | /cloud-storage | List providers |
| POST | /cloud-storage | Create provider |
| GET | /cloud-storage/:id | Get provider |
| DELETE | /cloud-storage/:id | Delete provider |
| POST | /cloud-storage/:id/test | Test connection |
| POST | /cloud-storage/:id/default | Set as default |
List Providers
GET /api/v1/cloud-storage
Permission: cloudStorage:read
Response:
{
"providers": [
{
"id": "provider-123",
"name": "Production S3",
"type": "s3",
"isDefault": true,
"config": {
"bucket": "my-backups",
"region": "us-east-1",
"accessKeyId": "AKIA****XXXX"
},
"createdAt": "2026-01-01T00:00:00Z"
}
]
}
Note: Sensitive values (secrets, keys) are masked.
Create Provider
POST /api/v1/cloud-storage
Permission: cloudStorage:write
AWS S3
{
"name": "Production S3",
"type": "s3",
"isDefault": true,
"s3Config": {
"accessKeyId": "AKIAXXXXXXXXXXXXXXXX",
"secretAccessKey": "your-secret-key",
"region": "us-east-1",
"bucket": "my-backups"
}
}
Google Cloud Storage
{
"name": "Production GCS",
"type": "gcs",
"gcsConfig": {
"bucket": "my-backups",
"credentials": {
"type": "service_account",
"project_id": "my-project",
"private_key": "...",
"client_email": "..."
}
}
}
Azure Blob Storage
{
"name": "Production Azure",
"type": "azure",
"azureConfig": {
"accountName": "mystorageaccount",
"accountKey": "your-account-key",
"containerName": "backups"
}
}
Cloudflare R2
{
"name": "Production R2",
"type": "r2",
"s3Config": {
"accessKeyId": "your-r2-access-key",
"secretAccessKey": "your-r2-secret-key",
"endpoint": "https://account-id.r2.cloudflarestorage.com",
"bucket": "my-backups",
"region": "auto"
}
}
MinIO
{
"name": "Local MinIO",
"type": "minio",
"s3Config": {
"accessKeyId": "minioadmin",
"secretAccessKey": "minioadmin",
"endpoint": "http://minio:9000",
"bucket": "backups",
"region": "us-east-1",
"pathStyle": true
}
}
Backblaze B2
{
"name": "Backblaze B2",
"type": "backblaze",
"s3Config": {
"accessKeyId": "your-key-id",
"secretAccessKey": "your-application-key",
"endpoint": "https://s3.us-west-002.backblazeb2.com",
"bucket": "my-backups",
"region": "us-west-002"
}
}
Local Path
{
"name": "Network Storage",
"type": "local",
"localConfig": {
"path": "/mnt/nas/backups"
}
}
Response:
{
"success": true,
"provider": {
"id": "provider-456",
"name": "Production S3",
"type": "s3",
"isDefault": true,
"createdAt": "2026-01-19T12:00:00Z"
}
}
Get Provider
GET /api/v1/cloud-storage/:id
Permission: cloudStorage:read
Response:
{
"id": "provider-123",
"name": "Production S3",
"type": "s3",
"isDefault": true,
"config": {
"bucket": "my-backups",
"region": "us-east-1",
"accessKeyId": "AKIA****XXXX"
},
"createdAt": "2026-01-01T00:00:00Z"
}
Delete Provider
DELETE /api/v1/cloud-storage/:id
Permission: cloudStorage:write
Response:
{
"success": true,
"message": "Provider deleted"
}
Test Connection
POST /api/v1/cloud-storage/:id/test
Permission: cloudStorage:write
Response (success):
{
"success": true,
"message": "Connection successful"
}
Response (failure):
{
"success": false,
"error": "Access denied: Invalid credentials"
}
Set as Default
POST /api/v1/cloud-storage/:id/default
Permission: cloudStorage:write
Response:
{
"success": true,
"message": "Provider set as default"
}
Provider Types
| Type | Description |
|---|---|
s3 | AWS S3 or S3-compatible |
gcs | Google Cloud Storage |
azure | Azure Blob Storage |
r2 | Cloudflare R2 |
minio | MinIO (self-hosted) |
backblaze | Backblaze B2 |
local | Local filesystem |
Error Responses
Invalid Credentials
{
"success": false,
"error": "Invalid credentials"
}
Status: 400
Bucket Not Found
{
"success": false,
"error": "Bucket 'my-bucket' not found"
}
Status: 400
Provider Not Found
{
"success": false,
"error": "Provider not found"
}
Status: 404
Cannot Delete Default
{
"success": false,
"error": "Cannot delete default provider. Set another as default first."
}
Status: 400