
# Storage & Files

Every project gets a file storage system for handling uploads and attachments. You can use the built-in default storage or connect your own provider.

## Default storage

Every project automatically gets a **Default Storage** pre-configured with 1 GB of quota. It uses a shared S3 bucket managed by the platform. You do not need to configure anything to start uploading files.

The default storage cannot be deleted or have its provider type changed.

## Custom storage providers

You can add additional storage providers connected to your own infrastructure.

### S3-compatible storage

Supported providers include AWS S3, Hetzner Cloud Storage, DigitalOcean Spaces, MinIO, and any S3-compatible service.

Required configuration:

| Field | Required | Notes |
|---|---|---|
| Access Key ID | Yes | |
| Secret Access Key | Yes | |
| Bucket name | Yes | |
| Region | No | Required for some providers |
| Custom endpoint | No | Required for non-AWS providers |

### Microsoft SharePoint

Stores files in a SharePoint Online document library.

Required configuration:

| Field | Required | Notes |
|---|---|---|
| Site URL | Yes | e.g., `https://yourcompany.sharepoint.com/sites/MyProject` |
| Azure AD Client ID | Yes | From your App Registration |
| Azure AD Client Secret | Yes | From your App Registration |
| Azure AD Tenant ID | Yes | |
| Drive ID | No | Defaults to the site's default document library |

## Managing storage

Navigate to **Project Settings → Storages** to:

- View all configured storages with usage stats
- Create a new custom storage
- Edit an existing storage's configuration
- Delete a custom storage (the default storage cannot be deleted)

## Permissions

Storage uses a **dual permission model**:

- **Storage management permissions** (`access`) — who can view, edit, or delete the storage *configuration*
- **File operation permissions** (`fileAccess`) — who can upload, download, or delete *files* within the storage

Both default to project-level permissions if not explicitly set.

You can configure a storage to allow **anonymous file access** — for example, letting event attendees upload photos without logging in — by setting the `fileAccess` field to allow anonymous operations.

→ Developer details: [Storage Permissions](/developer/storage-permissions)

## API endpoints

| Method | Path | Description |
|---|---|---|
| `GET` | `/api/projects/{projectId}/storages` | List all storages |
| `POST` | `/api/projects/{projectId}/storages` | Create a storage |
| `GET` | `/api/projects/{projectId}/storages/{storageId}` | Get storage details |
| `PUT` | `/api/projects/{projectId}/storages/{storageId}` | Update a storage |
| `DELETE` | `/api/projects/{projectId}/storages/{storageId}` | Delete a storage |

## Security

- Storage credentials are stored encrypted
- Password fields are masked in the UI
- Storage management requires project update permissions by default
- File operations require project read/update permissions by default
- Anonymous access must be explicitly configured (it is off by default)

## Related

- [SharePoint Templates](/data/sharepoint) — configure SharePoint folder templates for data types
- [Storage Permissions](/developer/storage-permissions) — developer reference for the permission model
