Back to bug 40550

Who When What Removed Added
pedro.amorim 2025-07-30 11:34:36 UTC CC pedro.amorim
Assignee koha-bugs pedro.amorim
pedro.amorim 2025-07-30 11:35:31 UTC CC andrew, martin.renvoize
pedro.amorim 2025-07-30 11:36:38 UTC Status NEW Needs Signoff
pedro.amorim 2025-07-30 11:38:13 UTC Blocks 40551
andrew 2025-08-18 20:03:25 UTC Depends on 40552
andrew 2025-08-18 20:04:57 UTC Status Needs Signoff Signed Off
andrew 2025-08-18 20:05:00 UTC Attachment #184863 Attachment is obsolete 0 1
andrew 2025-08-18 20:05:02 UTC Attachment #184864 Attachment is obsolete 0 1
andrew 2025-09-26 20:24:02 UTC Status Signed Off Passed QA
andrew 2025-09-26 20:24:04 UTC Attachment #185522 Attachment is obsolete 0 1
andrew 2025-09-26 20:24:07 UTC Attachment #185523 Attachment is obsolete 0 1
andrew 2025-09-26 20:30:42 UTC QA Contact testopia andrew
lucas 2025-09-26 21:56:50 UTC Keywords release-notes-needed
CC lucas
martin.renvoize 2025-09-29 15:26:42 UTC Keywords release-notes-needed
Text to go in the release notes progress

**For developers:**

This endpoint is used by the staff interface patron holds tables (Bug 40551) to handle bulk hold cancellations. The background job approach ensures reliable processing even when dealing with hundreds of holds, then queues a background job to process the cancellations asynchronously. This prevents timeouts and improves performance when cancelling large numbers of holds.

**Endpoint details:**
- **Method:** POST
- **Path:** A new REST API endpoint `/api/v1/holds/cancellation_bulk` has been added to support cancelling multiple holds in a single request, and allows the user interface to remain responsive.

**Required permissions:**
- `reserveforothers` - Place and modify holds for patrons `/api/v1/holds/cancellation_bulk`
- **Parameters:**
- `hold_ids` (required): Array of hold IDs to cancel
- `cancellation_reason` (optional): Reason for cancellation
- **Response:** Returns a background job ID for tracking the cancellation, with the cancellations processed as a background job.

This endpoint accepts an array of hold IDs and optionally a cancellation reason

Back to bug 40550