home-assistant/core · error · HomeAssistantError

todo_delete_item_failed

Error message

todo_delete_item_failed

What it means

Raised by async_delete_todo_items when the batch_update_list REMOVE operation for the selected uids fails with BringRequestException. It reports the count of items that failed to remove. Each uid is sent as both itemId and uuid with operation REMOVE.

Source

Thrown at homeassistant/components/bring/todo.py:234

    @override
    async def async_delete_todo_items(self, uids: list[str]) -> None:
        """Delete an item from the To-do list."""

        try:
            await self.coordinator.bring.batch_update_list(
                self._list_uuid,
                [
                    BringItem(
                        itemId=uid,
                        spec="",
                        uuid=uid,
                    )
                    for uid in uids
                ],
                BringItemOperation.REMOVE,
            )
        except BringRequestException as e:
            raise HomeAssistantError(
                translation_domain=DOMAIN,
                translation_key="todo_delete_item_failed",
                translation_placeholders={"count": str(len(uids))},
            ) from e

        await self.coordinator.async_refresh()

    async def async_send_message(
        self,
        message: BringNotificationType,
        item: str | None = None,
    ) -> None:
        """Send a push notification to members of a shared bring list."""

        try:
            await self.coordinator.bring.notify(self._list_uuid, message, item or None)
        except BringRequestException as e:
            raise HomeAssistantError(

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Refresh the list and retry deletion with the current item selection.
  2. Reload the Bring integration to resynchronize item uids with Bring state.
  3. Re-authenticate if all writes fail.
  4. Reduce concurrency: avoid deleting from two clients at the same time.
Defensive patterns

Strategy: retry

Validate before calling

def filter_stale_uids(coordinator, list_uuid, uids: list[str]) -> list[str]:
    """Keep only uids still present in Bring state to avoid batch rejection."""
    live = {i.get("uuid") for i in coordinator.data.get(list_uuid, {}).get("items", [])}
    return [u for u in uids if u in live]

Try / catch

try:
    await todo_entity.async_delete_todo_items(uids)
except HomeAssistantError as err:
    if err.translation_key == "todo_delete_item_failed":
        await coordinator.async_refresh()
        await todo_entity.async_delete_todo_items(uids)  # retry with resynced ids
    else:
        raise

Prevention

When it happens

Trigger: Deleting one or many To-do items while the Bring batch endpoint fails: stale uids (items already removed elsewhere), session expiry, network timeout.

Common situations: Bulk-clearing a list that was simultaneously cleared on a phone, expired auth, Bring cloud instability, deleting items whose uuid mapping changed after list re-creation.

Related errors


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/2d0aa3326318365d. Report an issue: GitHub.