home-assistant/core · error · HomeAssistantError

todo_update_item_failed

Error message

todo_update_item_failed

What it means

Raised by async_update_todo_item when the batch_update_list call that applies the update fails with BringRequestException. The update path either re-adds the item (for items only in Bring's 'recent' list) or patches the existing item by its current itemId. The error means the multi-item batch request was rejected or failed in transport.

Source

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

        if TYPE_CHECKING:
            assert item.uid
            assert current_item

        if item.summary == current_item.itemId:
            try:
                await self.coordinator.bring.batch_update_list(
                    self._list_uuid,
                    BringItem(
                        itemId=item.summary or "",
                        spec=item.description or "",
                        uuid=item.uid,
                    ),
                    BringItemOperation.ADD
                    if item.status == TodoItemStatus.NEEDS_ACTION
                    else BringItemOperation.COMPLETE,
                )
            except BringRequestException as e:
                raise HomeAssistantError(
                    translation_domain=DOMAIN,
                    translation_key="todo_update_item_failed",
                    translation_placeholders={"name": item.summary or ""},
                ) from e
        else:
            try:
                await self.coordinator.bring.batch_update_list(
                    self._list_uuid,
                    [
                        BringItem(
                            itemId=current_item.itemId,
                            spec=item.description or "",
                            uuid=item.uid,
                            operation=BringItemOperation.REMOVE,
                        ),
                        BringItem(
                            itemId=item.summary or "",
                            spec=item.description or "",

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Refresh the To-do list view (forces coordinator async_refresh) and retry the update against current item data.
  2. Reload the Bring integration to rebuild the item uuid -> Bring itemId mapping.
  3. Re-authenticate if every request fails (auth expiry).
  4. Check whether the item still exists in the Bring app; if deleted remotely, re-create it instead of updating.
Defensive patterns

Strategy: retry

Validate before calling

async def item_exists(coordinator, list_uuid, uid) -> bool:
    """Verify the uid is still present in Bring's current list state."""
    items = coordinator.data.get(list_uuid, {}).get("items", [])
    return any(i.get("uuid") == uid for i in items)

Try / catch

try:
    await todo_entity.async_update_todo_item(item)
except HomeAssistantError as err:
    if err.translation_key == "todo_update_item_failed":
        await coordinator.async_refresh()  # resync uuid -> itemId mapping, then let the user retry
    else:
        raise

Prevention

When it happens

Trigger: Marking a To-do item complete/incomplete or editing it via the UI/services while Bring's batch endpoint fails: stale uuid/itemId, session expiry, network error. Triggered specifically by coordinator.bring.batch_update_list raising BringRequestException.

Common situations: Updating an item that was concurrently modified or removed from another device (item id no longer valid), expired auth session, Bring cloud hiccup, updating items whose uid came from HA's recent-list mapping.

Related errors


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