home-assistant/core · error · HomeAssistantError

todo_save_item_failed

Error message

todo_save_item_failed

What it means

Raised by the Bring To-do entity's async_create_todo_item when bring-api's save_item() raises BringRequestException, meaning the HTTP request to create the list item failed. The item is a newly generated UUID-backed entry with summary/description. HA surfaces it as a HomeAssistantError with translation key todo_save_item_failed and the item's summary as placeholder.

Solutions

  1. Retry the add after reloading the integration so the coordinator refreshes lists and the session.
  2. Re-authenticate the Bring integration if failures persist (Config > Integrations > Bring > Re-authenticate).
  3. Confirm the list still exists in the Bring app and re-create the config entry if the list was deleted/recreated.
  4. Check logs for the underlying BringRequestException message to see the HTTP status.
Defensive patterns

Strategy: retry

Try / catch

try:
    await todo_entity.async_create_todo_item(item)
except HomeAssistantError as err:
    if err.translation_key == "todo_save_item_failed":
        await coordinator.async_refresh()
        await todo_entity.async_create_todo_item(item)  # one retry after refresh
    else:
        raise

Prevention

When it happens

Trigger: Adding a To-do item (via UI or todo.add_item service) while the Bring API returns a non-2xx response or the request layer raises: invalid session cookie, list UUID stale, payload rejected, network timeout.

Common situations: Expired Bring session after HA restart, list deleted or recreated on the phone app so the stored list_uuid no longer exists, intermittent cloud errors, item summary containing characters the API rejects.

Related errors


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

Appendix: source

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

        ]

    @property
    def bring_list(self) -> BringData:
        """Return the bring list."""
        return self.coordinator.data[self._list_uuid]

    @override
    async def async_create_todo_item(self, item: TodoItem) -> None:
        """Add an item to the To-do list."""
        try:
            await self.coordinator.bring.save_item(
                self._list_uuid,
                item.summary or "",
                item.description or "",
                str(uuid.uuid4()),
            )
        except BringRequestException as e:
            raise HomeAssistantError(
                translation_domain=DOMAIN,
                translation_key="todo_save_item_failed",
                translation_placeholders={"name": item.summary or ""},
            ) from e

        await self.coordinator.async_refresh()

    @override
    async def async_update_todo_item(self, item: TodoItem) -> None:
        """Update an item in the To-do list.

        Bring has an internal 'recent' list which we want to use instead of a todo list
        status, therefore completed todo list items are matched to the recent list and
        pending items to the purchase list.

        This results in following behaviour:

        - Completed items will move to the "completed" section in home assistant todo

View on GitHub (pinned to 58a3fdb3ea)