> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sinas.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Collections & Files

> File storage with versioning and metadata

Collections are containers for file uploads with versioning, metadata validation, and processing hooks.

**Collection properties:**

| Property                  | Description                                          |
| ------------------------- | ---------------------------------------------------- |
| `namespace` / `name`      | Unique identifier                                    |
| `metadata_schema`         | JSON Schema that file metadata must conform to       |
| `content_filter_function` | Function that runs on upload to approve/reject files |
| `post_upload_function`    | Function that runs after upload for processing       |
| `max_file_size_mb`        | Per-file size limit (default: 100 MB)                |
| `max_total_size_gb`       | Total collection size limit (default: 10 GB)         |

**File features:**

* **Versioning** — Every upload creates a new version. Previous versions are preserved.
* **Metadata** — Each file carries JSON metadata validated against the collection's schema.
* **Visibility** — Files can be `private` (owner only) or `shared` (users with collection `:all` access).
* **Content filtering** — Optional function runs on upload that can approve, reject, or modify the file.

**Management endpoints:**

```
POST   /api/v1/collections                              # Create collection
GET    /api/v1/collections                              # List collections
GET    /api/v1/collections/{namespace}/{name}           # Get collection
PUT    /api/v1/collections/{namespace}/{name}           # Update
DELETE /api/v1/collections/{namespace}/{name}           # Delete (cascades to files)
```

**Runtime file endpoints:**

```
POST   /files/{namespace}/{collection}                   # Upload file
GET    /files/{namespace}/{collection}                   # List files
GET    /files/{namespace}/{collection}/{filename}        # Download file
PATCH  /files/{namespace}/{collection}/{filename}        # Update metadata
DELETE /files/{namespace}/{collection}/{filename}        # Delete file
POST   /files/{namespace}/{collection}/{filename}/url    # Generate temporary download URL
POST   /files/{namespace}/{collection}/search            # Search files
```
