--- method: POST path: /api/sync/bulk-link-books auth: jwt area: book-matching --- # Bulk Link Books Link multiple books to media items at once. **Endpoint**: `POST /api/sync/bulk-link-books` **Auth**: Required **Content-Type**: `application/json` ## Request Body | Field | Type | Required | Description | | ----- | ----- | -------- | -------------------------------- | | links | array | Yes | Array of book-media link objects | Each link object contains: | Field | Type | Required | Description | |--------|------|-----------|-------------| | device_id | string (UUID) | Yes | Device UUID | | book_id | string (UUID) | Yes | Book ID from device | | media_item_id | string (UUID) | Yes | Media item UUID to link to | ### Example Request ```json example-request { "links": [ { "unlinked_book_id": "770e8400-e29b-41d4-a716-446655440002", "media_item_id": "660e8400-e29b-41d4-a716-446655440001", "confidence_score": 0.95 }, { "unlinked_book_id": "880e8400-e29b-41d4-a716-446655440003", "media_item_id": "990e8400-e29b-41d4-a716-446655440004", "confidence_score": 0.87 } ] } ``` ## Response (200 OK) ```json example-response { "failed": null, "results": null, "successful": null, "total": null } ``` ## Error Responses | Code | Description | | ---- | ------------------------------------- | | 400 | Invalid request data | | 401 | Invalid or expired token | | 404 | Device, book, or media item not found |