# Create Collection

Create a new collection.

**Endpoint**: `POST /api/collections`
**Auth**: Required
**Content-Type**: `application/json`

## Request Body

| Field             | Type   | Required | Description                      |
| ----------------- | ------ | -------- | -------------------------------- |
| name              | string | Yes      | Collection name (max 255 chars)  |
| description       | string | No       | Collection description           |
| color             | string | No       | Hex color code (e.g., "#FF5733") |
| icon              | string | No       | Emoji icon (e.g., "🚀", "📖")    |
| auto_assign_rules | array  | No       | Array of rule objects            |
| view_settings     | object | No       | Per-device display preferences   |

### Auto-Assign Rule Object

| Field    | Type          | Required | Description                                                                                                       |
| -------- | ------------- | -------- | ----------------------------------------------------------------------------------------------------------------- |
| field    | string        | Yes      | Field to match on (genre, author, series, language, publisher, copyright_year, tags)                              |
| operator | string        | Yes      | Comparison operator (equals, not_equals, contains, not_contains, starts_with, ends_with, greater_than, less_than) |
| value    | string/number | Yes      | Value to compare against                                                                                          |
| priority | integer       | No       | Rule priority (1 = highest, default: 1)                                                                           |
| enabled  | boolean       | No       | Whether rule is active (default: true)                                                                            |

### Example Request

```json
{
  "name": "To Read",
  "description": "Books I want to read soon",
  "color": "#00FF00",
  "icon": "📖",
  "auto_assign_rules": [
    {
      "field": "tags",
      "operator": "contains",
      "value": "to-read",
      "priority": 1,
      "enabled": true
    }
  ],
  "view_settings": {
    "kobo": {
      "view_mode": "grid"
    },
    "koreader": {
      "view_mode": "list"
    }
  }
}
```

## Response (201 Created)

```json
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "To Read",
  "description": "Books I want to read soon",
  "color": "#00FF00",
  "icon": "📖",
  "auto_assign_rules": [
    {
      "field": "tags",
      "operator": "contains",
      "value": "to-read",
      "priority": 1,
      "enabled": true
    }
  ],
  "view_settings": {
    "kobo": {
      "view_mode": "grid"
    },
    "koreader": {
      "view_mode": "list"
    }
  },
  "created_at": "2026-02-01T10:00:00Z"
}
```

## Error Responses

| Code | Description                         |
| ---- | ----------------------------------- |
| 400  | Invalid request (validation failed) |
| 401  | Authentication required             |
| 500  | Internal server error               |

## Try It Out
