home-assistant/core · warning · UpdateFailed
Missing price data, skipping update
Error message
Missing price data, skipping update
What it means
UpdateFailed('Missing price data, skipping update') raised in the Amber Electric coordinator when amberelectric-api's get_current_prices() raises ApiException — the HTTP call to the Amber API failed (auth, rate limit, 5xx) or returned no usable interval list. The update is skipped and retried on the next poll.
Source
Thrown at homeassistant/components/amberelectric/coordinator.py:90
def update_price_data(self) -> dict[str, dict[str, Any]]:
"""Update callback."""
result: dict[str, dict[str, Any]] = {
"current": {},
"descriptors": {},
"forecasts": {},
"grid": {},
}
try:
data = self._api.get_current_prices(
self.site_id,
next=288,
_request_timeout=REQUEST_TIMEOUT,
)
intervals = [interval.actual_instance for interval in data]
except ApiException as api_exception:
raise UpdateFailed("Missing price data, skipping update") from api_exception
current = [interval for interval in intervals if is_current(interval)]
forecasts = [interval for interval in intervals if is_forecast(interval)]
general = [interval for interval in current if is_general(interval)]
if len(general) == 0:
raise UpdateFailed("No general channel configured")
result["current"]["general"] = general[0]
result["descriptors"]["general"] = normalize_descriptor(general[0].descriptor)
result["forecasts"]["general"] = [
interval for interval in forecasts if is_general(interval)
]
result["grid"]["renewables"] = round(general[0].renewables)
result["grid"]["price_spike"] = general[0].spike_status.value
tariff_information = general[0].tariff_information
if tariff_information:
result["grid"]["demand_window"] = tariff_information.demand_windowView on GitHub (pinned to 58a3fdb3ea)
Solutions
- Verify the Amber API key is valid (re-create it in the Amber app and update the config entry if needed)
- Check for 429 rate limiting and reduce update frequency
- Check Amber Electric status/announcements for outages
- Confirm the site_id in the entry matches the NMI/site in the Amber account
Defensive patterns
Strategy: retry
Try / catch
from amberelectric_api.exceptions import ApiException
try:
data = api.get_current_prices(site_id, next=288, _request_timeout=REQUEST_TIMEOUT)
except ApiException as e:
if e.status in (429, 500, 502, 503):
raise UpdateFailed("Missing price data, skipping update") from e # retried next poll
raise # 401 etc. need user action, not retry Prevention
- Keep the Amber API token current; regenerate it in the Amber app when revoked
- Respect rate limits — don't add extra parallel consumers of the same token
- Check Amber status pages during regional incidents before debugging locally
When it happens
Trigger: Coordinator polls calling self._api.get_current_prices(site_id, next=288, _request_timeout=REQUEST_TIMEOUT) which raises ApiException: expired/invalid API token (401), rate limiting (429), or server errors (5xx) from the Amber API.
Common situations: Amber API token revoked or regenerated in the Amber app, free-tier rate limits hit by aggressive polling, Amber service incidents, or site_id mismatch after account changes.
Related errors
- The Altruist {device_id} is unavailable: {ex}
- No general channel configured
- Error communicating with API: {e}
- Got invalid status from device
- update_failed
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/323c8ed62d85bcfe.
Report an issue: GitHub.