docs: "## Sync KOReader Progress - Multiple Books\n\nSynchronizes reading progress for multiple books in a single request.\n\n**Method:** POST\n\n**Endpoint:** /api/sync/koreader/progress\n\n**Authentication:** Bearer token\n\n**Request Body:**\n- `library_id` (string, optional): Library UUID\n- `books` (array): Multiple book progress items\n - Each item contains: uuid, title, authors, progress, percentage, last_read, chapter, epubcfi\n\n**Response:**\n- `synced` (integer): Number of books successfully synced\n- `failed` (integer): Number of books that failed\n- `results` (array): Per-book sync results\n- `timestamp` (string): Sync timestamp\n\n**Status Codes:**\n- 200: Batch sync completed\n- 207: Multi-status (partial success)\n- 401: Unauthorized\n- 413: Payload too large\n\n**Batch Sync Advantages:**\n- Efficient sync of entire library\n- Single HTTP request for multiple books\n- Faster periodic sync\n- Reduced battery usage vs individual syncs\n- Better for batch processing\n\n**KOReader\ \ Batch Behavior:**\n- Triggered on device wake from sleep\n- Occurs during \"Sync now\" operation\n- Runs on WiFi connection\n- Limited to 100 books per request\n- Automatic retry on failed books\n\n**Performance:**\n- Small batch (2-10 books): 200-500ms\n- Medium batch (10-50 books): 500ms-2s\n- Large batch (50-100 books): 2-5s\n- Timeout: 30 seconds\n\n**Use Cases:**\n- Device initialization sync\n- Periodic background sync\n- Post-offline catch-up sync\n- Library-wide progress update\n- Before firmware update" http: body: json: books: - authors: - Author One chapter: 1 epubcfi: epubcfi(/6/4/2:10) last_read: '2026-01-30T19:00:00Z' percentage: 0.25 progress: 0.25 title: Book One uuid: '{{media_item_id}}' - authors: - Author Two chapter: 8 epubcfi: epubcfi(/6/4/2:50) last_read: '2026-01-30T20:00:00Z' percentage: 0.75 progress: 0.75 title: Book Two uuid: '{{media_item_id}}' library_id: optional-library-uuid type: json headers: - key: Content-Type value: application/json method: POST url: '{{base_url}}/api/sync/koreader/progress' auth: type: bearer token: '{{koreader_device_token}}' info: name: Sync Progress - Multiple Books seq: 2 type: http