Hyundai Bluelink gesperrt (Fehler 9035)? So kommt der Ladestand über die offizielle Pleos-API

· 5 Min. Lesezeit · Auch auf English

Wer seinen Hyundai, Kia oder Genesis in Home Assistant, evcc oder einem eigenen Skript eingebunden hat, kennt seit Mitte Oktober 2026 vermutlich diese Meldung: Fehler 9035. Von einem Tag auf den anderen kam kein Ladestand mehr an. Bei mir hing daran ein ganzes System – mein Energiemanagement JG Energy braucht den Ladestand des Ioniq 5, um Überschussladen und Ladepläne zu steuern.

Hier beschreibe ich, was passiert ist, wie ich das Problem mit der offiziellen Pleos Vehicle Data API gelöst habe und was man dabei beachten sollte.

Was passiert ist

Fast alle Integrationen für Hyundai und Kia nutzen dieselbe inoffizielle Schnittstelle: Sie geben sich gegenüber den Bluelink-Servern als Smartphone-App aus. In Python steckt dahinter meist die Bibliothek hyundai_kia_connect_api.

Am 13. Oktober 2026 hat Hyundai in Europa begonnen, jede Anfrage auf eine Signatur im Header zu prüfen, die nur die offizielle App erzeugen konnte. Alle anderen bekamen Fehler 9035. Die App selbst lief normal weiter – das Konto war also nicht gesperrt, nur fremde Programme waren draußen.

Zwei Tage später kam Version 4.35.3 der Bibliothek, die die Signatur nachbildet. Seitdem läuft Bluelink wieder. Aber: Das ist ein Katz-und-Maus-Spiel. Hyundai kann die Prüfung jederzeit wieder ändern.

Der offizielle Weg: EU Data Act und Pleos

Seit dem EU Data Act müssen Hersteller Fahrzeugdaten an ihre Besitzer herausgeben. Die Hyundai Motor Group (Hyundai, Kia, Genesis) macht das über Pleos und die Vehicle Data API. Für Privatnutzer in Europa ist sie kostenlos.

Die API liefert unter anderem:

EndpunktInhalt
/batteriesLadestand, Ladezustand, Kabel, Ziel-Ladestand, Restzeit
/powertrainsAntrieb, Reichweite
/drivingFahrbetrieb, Kilometerstand
/locationsStandort
/statusSensor-Status des Fahrzeugs

Wichtig für die Erwartungen: Die API liefert den Stand, den das Auto zuletzt an Hyundai übertragen hat. Sie weckt das Auto nicht, und Befehle wie „Ladelimit setzen“ oder „Klimatisierung starten“ gibt es nicht.

Einrichtung Schritt für Schritt

  1. Im Pleos Playground (pleos.ai/playground) den Bereich My Vehicle Data API öffnen und den Hersteller wählen.
  2. Mit dem Bluelink-Konto des Hauptnutzers anmelden – also mit dem Konto, unter dem das Auto in der App angelegt ist.
  3. Nach der Anmeldung zeigt der Playground eine Client-ID und ein Client-Secret. Beides sicher ablegen, z. B. in einer JSON-Datei, die nicht im Web-Verzeichnis liegt.

Falle Nr. 1: das falsche Konto. Bei uns ist der Ioniq auf ein anderes Familienmitglied registriert. Mein Browser war aber noch mit meinem eigenen Hyundai-Konto angemeldet, und der Playground hat den Schlüssel ohne Rückfrage für dieses Konto erzeugt. Der Schlüssel funktioniert dann zwar – nur ist kein Fahrzeug freigegeben. Erst ein Schlüssel, der mit dem Konto des Hauptnutzers erzeugt wurde, liefert Daten.

Falle Nr. 2: 90 Tage. Der Schlüssel ist 90 Tage gültig und wird danach automatisch widerrufen. Der Playground zeigt den Zeitraum an. Am besten gleich eine Erinnerung setzen – oder, wie in JG Energy, die Verbindung täglich testen lassen, damit ein abgelaufener Schlüssel sofort auffällt.

Der Abruf

Der Ablauf hat zwei Schritte: erst mit Client-ID und Secret ein kurzlebiges Zugriffstoken holen, dann damit die Daten.

# 1. Zugriffstoken holen
curl -s -X POST https://api.pleos.ai/v1/auth/personal-token \
  -H "Content-Type: application/json" -H "Brand: hyundai" \
  -d '{"clientId":"<CLIENT_ID>","clientSecret":"<CLIENT_SECRET>"}'
# → { "data": { "accessToken": "eyJ..." } }

# 2. Ladezustand abrufen
curl -s https://api.pleos.ai/v1/vehicles/<VIN>/batteries \
  -H "Brand: hyundai" -H "Authorization: Bearer <ACCESS_TOKEN>"

Die für Ladesteuerungen interessanten Felder (Stand meiner Tests mit einem Ioniq 5):

FeldBedeutung
charge.stateOfChargeLadestand in %
charge.plugin"connected", wenn das Kabel steckt
charge.charginglädt gerade
charge.targetStateOfCharge.standardLadelimit AC (.quick = DC)
charge.remainTimeRestladezeit in Minuten
distanceToEmpties (Typ EV) in /powertrainsReichweite
odometer.value in /drivingKilometerstand
timestamp je Endpunktwann das Auto diesen Stand gemeldet hat

Die Feldnamen sind nicht alle offiziell dokumentiert. Ich speichere deshalb die letzte Rohantwort in einer Datei – das hat bei der Fehlersuche mehrfach geholfen.

Was ich aus dem Betrieb gelernt habe

Abgelaufene Token liefern 403, nicht 401. Das Zugriffstoken ist nur begrenzt gültig. Ein abgelaufenes Token beantwortet die API bei mir mit HTTP 403 – den Statuscode erwartet man eher bei fehlenden Rechten. Mein Client holte deshalb anfangs kein neues Token und meldete einen Fehler. Die Lösung: bei 401 und 403 einmal ein neues Token holen und die Anfrage wiederholen. Zusätzlich hole ich vor jedem Abruf ein neues Token, wenn das alte älter als 30 Minuten ist.

Der Ladestand ist nur so aktuell wie die letzte Meldung des Autos. Während der Ladung meldet sich der Ioniq nur in größeren Abständen. Für eine flüssige Anzeige rechnet JG Energy deshalb hoch: letzter echter Ladestand plus die seitdem von der Wallbox gemessene Energie, geteilt durch die gelernte Akkukapazität. Über das Ende einer Ladung entscheidet aber immer ein echter Wert – oder das Auto selbst.

Einiges fehlt. Gegenüber Bluelink fehlen bei Pleos die aktuelle Ladeleistung, die 12-V-Batterie und die Ladeklappe. Und weil die API nur lesend ist, lässt sich weder das Auto wecken noch das Ladelimit setzen.

Mein Aufbau heute

Seit Bluelink wieder läuft, nutze ich beides:

Wer nur den Ladestand braucht und keine Lust auf das nächste Katz-und-Maus-Spiel hat, ist mit Pleos allein gut bedient. evcc unterstützt die Schnittstelle inzwischen ebenfalls („Hyundai EU Data Act“).

Fazit

Der EU Data Act hat hier ganz praktisch etwas gebracht: eine offizielle, kostenlose und stabile Schnittstelle zu den eigenen Fahrzeugdaten. Sie ist nur lesend und nicht ganz so aktuell wie die App – aber sie fällt nicht einfach aus, weil ein Hersteller über Nacht etwas an seinen Servern ändert.

Links