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
- Refresh the To-do list view (forces coordinator async_refresh) and retry the update against current item data.
- Reload the Bring integration to rebuild the item uuid -> Bring itemId mapping.
- Re-authenticate if every request fails (auth expiry).
- 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
- Always update against items obtained from the latest coordinator refresh, not cached state.
- Refresh after external edits on the phone app before issuing updates from HA.
- Treat repeated update failures as a signal to reload the integration.
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
- todo_save_item_failed
- todo_rename_item_failed
- todo_delete_item_failed
- setup_request_exception
- setup_parse_exception
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/161bf742629d24eb.
Report an issue: GitHub.