# Markup Sync

Sync markup highlights and annotations from Kobo device.

**Endpoint**: `POST /api/sync/kobo/markup`
**Auth**: Required (Device authentication)

## Device Authentication

This endpoint requires device authentication (not user JWT). Kobo devices authenticate using their device credentials and access tokens.

## Request Body

| Field     | Type  | Required | Description                      |
| --------- | ----- | -------- | -------------------------------- |
| bookmarks | array | Yes      | Array of bookmark/markup objects |

### Bookmark Object

| Field         | Type    | Required | Description                |
| ------------- | ------- | -------- | -------------------------- |
| BookmarkID    | string  | Yes      | Unique bookmark ID         |
| ContentID     | string  | Yes      | Book content ID            |
| StartPosition | integer | Yes      | Highlight start position   |
| EndPosition   | integer | No       | Highlight end position     |
| Text          | string  | No       | Highlighted text           |
| Annotation    | string  | No       | User annotation            |
| DateCreated   | string  | Yes      | ISO 8601 timestamp         |
| Chapter       | string  | No       | Chapter title              |
| Hidden        | boolean | No       | Whether bookmark is hidden |

### Example Request

```json
{
  "bookmarks": [
    {
      "BookmarkID": "bookmark123",
      "ContentID": "book-uuid",
      "StartPosition": 1234,
      "EndPosition": 1456,
      "Text": "Highlighted text from book",
      "Annotation": "My annotation",
      "DateCreated": "2026-02-08T10:00:00Z",
      "Chapter": "Chapter 1",
      "Hidden": false
    }
  ]
}
```

## Response (200 OK)

```json
{
  "message": "Markup synced successfully",
  "synced_count": 1
}
```

## Error Responses

| Code | Description                  |
| ---- | ---------------------------- |
| 401  | Device authentication failed |
| 400  | Invalid request data         |
| 404  | Device or book not found     |
