# Update Reading Progress

Update reading progress for a media item. This will sync across all devices via WebSocket.

**Endpoint**: `PUT /api/media-items/{media_id}/progress`
**Auth**: Required
**Content-Type**: `application/json`

## Path Parameters

| Parameter | Type   | Required | Description     |
| --------- | ------ | -------- | --------------- |
| media_id  | string | Yes      | Media item UUID |

## Request Body

| Field                       | Type    | Required | Description                                       |
| --------------------------- | ------- | -------- | ------------------------------------------------- |
| source                      | string  | Yes      | Progress source (e.g., "web", "koreader", "kobo") |
| location                    | object  | Yes      | Location information                              |
| location.percentage         | float   | No       | Progress percentage (0-1)                         |
| location.epubcfi            | string  | No       | EPUB CFI location                                 |
| location.character          | integer | No       | Character offset                                  |
| location.chapter            | integer | No       | Chapter number                                    |
| location.page               | integer | No       | Current page                                      |
| location.total_pages        | integer | No       | Total pages                                       |
| device_metadata             | object  | No       | Device metadata                                   |
| device_metadata.device_type | string  | No       | Device type                                       |
| device_metadata.user_agent  | string  | No       | User agent string                                 |

### Example Request

```json
{
  "source": "web",
  "location": {
    "percentage": 0.45678,
    "epubcfi": "epubcfi(/6/4/2:15)",
    "character": 15432,
    "chapter": 3,
    "page": 89,
    "total_pages": 200
  },
  "device_metadata": {
    "device_type": "web",
    "user_agent": "Mozilla/5.0..."
  }
}
```

## Response (200 OK)

```json
{
  "sync_status": "success",
  "progress_updated": true,
  "devices_notified": ["device-1", "device-2"],
  "broadcast": true
}
```

## Error Responses

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