# Link Book

Link a device book to a Bookhoard media item. Supports bulk linking.

**Endpoint**: `POST /api/sync/bulk-link-books` or `POST /api/sync/auto-link-books`
**Auth**: Required
**Content-Type**: `application/json`

## Manual Link Request Body

| Field                    | Type   | Required | Description               |
| ------------------------ | ------ | -------- | ------------------------- |
| links                    | array  | Yes      | List of book links        |
| links[].unlinked_book_id | string | Yes      | Device book UUID          |
| links[].media_item_id    | string | Yes      | Bookhoard media item UUID |
| links[].confidence_score | float  | No       | Match confidence (0-1)    |

### Example Manual Link Request

```json
{
  "links": [
    {
      "unlinked_book_id": "uuid-1",
      "media_item_id": "uuid-2",
      "confidence_score": 1.0
    }
  ]
}
```

## Auto-Link Request Body

| Field                | Type    | Required | Description                                     |
| -------------------- | ------- | -------- | ----------------------------------------------- |
| confidence_threshold | float   | No       | Minimum confidence for auto-link (default: 0.8) |
| limit                | integer | No       | Maximum books to auto-link (default: 50)        |

### Example Auto-Link Request

```json
{
  "confidence_threshold": 0.8,
  "limit": 50
}
```

## Response (200 OK) - Manual Link

```json
{
  "results": [
    {
      "unlinked_book_id": "uuid-1",
      "status": "success",
      "media_item_id": "uuid-2"
    }
  ],
  "total": 1,
  "successful": 1,
  "failed": 0
}
```

## Response (200 OK) - Auto-Link

```json
{
  "auto_linked": 15,
  "results": [
    {
      "unlinked_book_id": "uuid-1",
      "title": "The Hobbit",
      "matched_media_item_id": "uuid-2",
      "confidence": 0.95,
      "match_method": "sha256_match"
    }
  ]
}
```

## Error Responses

| Code | Description              |
| ---- | ------------------------ |
| 400  | Invalid link data        |
| 401  | Invalid or expired token |
| 404  | Media item not found     |
