BavarianData

Manual / Features

API quota

BMW caps the CarData REST API at 50 requests per 24 hours per account. The integration tracks and enforces this itself.

What spends quota#

  • Every manual fetch_* service call (Services reference).
  • The daily refresh: 2 requests every 24 h per vehicle, covering everything BMW cannot stream (see below).
  • One-off fetches at setup (basic vehicle data, the vehicle image), which are not repeated because that data does not change.

The daily refresh#

BMW cannot stream 49 of its ~295 telematic fields — service demands, Condition Based Servicing, check-control messages, tread wear, lifetime-consumption counters, door-lock status. The REST API is their only route into Home Assistant, so the integration fetches them once a day:

RequestCovers
The telematics containerAll 41 non-streamable fields the container endpoint can serve — one request for the lot
Tire diagnosisTread wear and remaining mileage per wheel — its own endpoint, so its own request

Both endpoints are per vehicle, so the refresh costs 2 requests per car: 2 a day for one car, 4 for two, 6 for three — out of 50. Daily is deliberate: these values move on the scale of days, not minutes.

What does not#

  • The MQTT stream — the primary data path. All the streamed sensors, the charging/trip/health history, statistics and export are free.
  • The get_* and export_history / import_statistics / set_trip_class services — they read or write the integration’s own local store.

Prefer the stream. Poll only what the stream genuinely cannot carry, and cache what’s fetched — the vehicle image and the tire diagnosis are both kept across restarts for exactly this reason, so a reboot never costs a request to get back what was already fetched.

Watching it#

An API Quota Remaining diagnostic sensor exposes how many of the 50 requests are left, with used, limit and next_reset attributes.

If the quota is ever exhausted, a repair issue appears under Settings → Repairs telling you when it resets. Streaming data keeps flowing throughout — only REST fetches are paused until the window rolls over.

Updated Edit this page on GitHub