Gesundheitscheck #
Liveness-Probe für Uptime-Monitoring. Antwortet schnell, erfordert keine Authentifizierung und greift nicht auf die Datenbank zu. Die Antwortform ist stabil – Monitoring-Tools können auf status === "ok" prüfen.
Die Teslita-API gewährt Drittanbieter-Anwendungen Lesezugriff auf die Fahrzeug-, Fahrt-, Lade- und Akkudaten eines Teslita-Nutzers, sowie eine begrenzte Auswahl an Schreib-Endpunkten zum Auslösen serverseitiger Aktionen wie der Synchronisierung des Supercharger-Verlaufs.
Die API ist nach REST-Prinzipien aufgebaut, verwendet vorhersehbare ressourcenorientierte URLs, akzeptiert und liefert JSON und authentifiziert Anfragen mit Bearer-Tokens. Alle Anfragen laufen über TLS – einfaches HTTP wird abgelehnt.
https://api.teslita.com
Jeder API-Schlüssel gehört zu genau einem Teslita-Nutzer, und jede damit authentifizierte Anfrage greift auf dessen Daten zu. Es gibt keinen mandantenübergreifenden Schlüssel: Ein Partner, der Zugriff auf mehrere Teslita-Konten benötigt, braucht einen Schlüssel pro Konto. Schlüssel werden vom Kontoinhaber erstellt und nur einmalig bei der Erstellung angezeigt – serverseitig wird nur ein SHA-256-Hash gespeichert, sodass ein verlorener Schlüssel nicht wiederhergestellt werden kann und ersetzt werden muss.
Authentifizieren Sie Anfragen, indem Sie Ihren Schlüssel im Authorization-Header als Bearer-Token mitsenden. Schlüssel haben das Format tsk_ gefolgt von 40 URL-sicheren Zeichen (~230 Bit Entropie). Geben Sie sie niemals in die Versionskontrolle, in Logdateien oder an den Browser weiter – behandeln Sie sie wie ein Datenbank-Passwort.
Es gibt drei Geltungsbereiche. Ein Schlüssel kann beliebige Kombinationen tragen.
read |
Alle GET-Endpunkte: Fahrzeuge, Fahrten, Laden, Akkugesundheit, Einstellungen. |
write |
Serverseitige Datenoperationen – etwa das Auslösen einer Supercharger-Verlaufssynchronisation. Umfasst keine physischen Fahrzeugbefehle. |
control |
Physische Befehle an das Fahrzeug: Laden starten/stoppen heute, weitere folgen. Getrennt von write, damit Betreiber Datensynchronisation gewähren können, ohne Fahrzeugkontrolle zu erlauben. |
Wird ein Endpunkt mit einem Schlüssel aufgerufen, dem der erforderliche Geltungsbereich fehlt, antwortet die API mit 403 forbidden.
Ein fehlender, fehlerhafter oder widerrufener Schlüssel ergibt 401. Wir unterscheiden in der Fehlermeldung nicht zwischen "nicht gesendet" und "gesendet, aber ungültig", um Credential-Stuffing nicht zu erleichtern.
Jeder Zeitstempel ist im ISO-8601-Format, immer in UTC und immer mit dem Suffix Z. Beispiel: 2026-04-24T17:30:16Z.
Numerische Datenbank-IDs werden in JSON als Zeichenketten serialisiert, um die 53-Bit-Integer-Grenze in JavaScript zu umgehen. Behandeln Sie sie als opak – führen Sie keine Berechnungen damit durch. VINs (17 Großbuchstaben) sind durchgehend der Geschäftsschlüssel für Fahrzeuge in der API.
Energie in kWh, Leistung in kW, Spannung in V, Temperaturen in °C. Kosten werden in der nativen Währung der Sitzung zurückgegeben; Partner sind selbst für eventuelle Umrechnungen zuständig.
Strecke, Geschwindigkeit und Reifendruck werden sowohl in metrischen als auch in imperialen Einheiten zurückgegeben – jede Strecke hat sowohl ein _km- als auch ein _mi-Feld, jede Geschwindigkeit _kmh und _mph, jedes Reifendruck-Objekt tpms_bar neben tpms_psi, und kurze Distanzen werden als _m und _ft bereitgestellt. Der metrische Wert ist immer kanonisch (zuerst aus den Quelldaten berechnet); der imperiale Wert wird zur Serialisierungszeit abgeleitet. Partner wählen die gewünschte Einheit und ignorieren die andere.
Einheiten sind in die Feldnamen eingebaut, sodass Partner beim Lesen einer Antwort sofort erkennen, in welcher Einheit ein Wert vorliegt: _kwh, _kmh, _mph, _km, _mi, _bar, _psi, _c.
Listen-Endpunkte paginieren cursorbasiert. Senden Sie ?limit= (Standard 50, Max. 200) und ?cursor=. Die Antwort enthält next_cursor – senden Sie diesen Wert als cursor zurück, um die nächste Seite zu laden. Wenn next_cursor den Wert null hat, ist das Ende erreicht. Cursors sind opak und sollten nicht geparst werden.
?from= und ?to= akzeptieren entweder ISO-8601 (2026-04-24T00:00:00Z) oder das kürzere YYYY-MM-DD. Beide Grenzen sind inklusiv und werden als UTC interpretiert.
Fehler werden als JSON mit stabiler Form zurückgegeben, sodass Sie sie verarbeiten können, ohne nur auf den HTTP-Status zu schauen. Der code ist maschinenlesbar und stabil; die message ist menschenlesbar und kann sich ändern.
missing_auth401 Unauthorized |
Es wurde kein Authorization-Header gesendet. |
invalid_auth401 Unauthorized |
Schlüssel ist unbekannt, fehlerhaft oder widerrufen. |
forbidden403 Forbidden |
Schlüssel verfügt nicht über den erforderlichen Geltungsbereich (z. B. write). |
not_found404 Not Found |
Route existiert nicht oder Ressource gehört nicht diesem Nutzer. |
bad_request400 Bad Request |
Ein Parameter fehlt, ist fehlerhaft oder liegt außerhalb des gültigen Bereichs. |
rate_limited429 Too Many Requests |
Schlüssel-Limit überschritten. Warten Sie 60 Sekunden vor dem nächsten Versuch. |
tesla_not_connected409 Conflict |
Nutzer hat kein verknüpftes Tesla-Konto – erforderlich für Schreibzugriffe, die Tesla weiterleiten. |
upstream_error502 Bad Gateway |
Ein erforderlicher vorgelagerter Dienst (in der Regel Tesla) ist ausgefallen. |
internal_error500 Internal Error |
Unerwarteter serverseitiger Fehler. Ein erneuter Versuch kann helfen; falls er bestehen bleibt, kontaktieren Sie den Support. |
Jeder Schlüssel hat ein Festzeit-Anfragenlimit, gemessen pro 60-Sekunden-Fenster. Der Standard ist 120 Anfragen pro Minute. Betreiber können bei der Erstellung pro Schlüssel einen abweichenden Wert festlegen, wenn ein Partner einen begründeten Bedarf an einer höheren Obergrenze hat.
Beim Überschreiten des Limits antwortet die API mit 429 rate_limited. Die Obergrenze setzt sich zu Beginn des nächsten Fensters zurück. Wir empfehlen exponentielles Backoff mit Jitter für Wiederholungen; eine enge Wiederholungsschleife trifft einfach wieder auf dieselbe Grenze.
Anfragenzähler werden pro Schlüssel geteilt, nicht pro IP. Wenn Sie Aufrufe über mehrere Server mit demselben Schlüssel verteilen, zählen sie alle in denselben Topf.
Jede Route trägt die API-Version in der URL (/v1/…). Innerhalb einer Version nehmen wir nur additive Änderungen vor: Wir können neue Felder, neue Endpunkte oder neue optionale Parameter hinzufügen, aber keine bestehenden Felder entfernen, umbenennen oder ihre Typen ändern.
Inkompatible Änderungen werden als neues Versionspräfix ausgeliefert (/v2/…). Ältere Versionen werden für ein dokumentiertes Auslaufzeitfenster parallel weiter unterstützt.
Behandeln Sie unbekannte Felder als optional – wenn Sie ein Feld in einer Antwort sehen, das Sie zuvor nicht kannten, können Sie es gefahrlos ignorieren.
Liveness-Probe für Uptime-Monitoring. Antwortet schnell, erfordert keine Authentifizierung und greift nicht auf die Datenbank zu. Die Antwortform ist stabil – Monitoring-Tools können auf status === "ok" prüfen.
Gibt den Teslita-Nutzer zurück, zu dem Ihr Schlüssel gehört, samt Metadaten zum Schlüssel selbst. Nützlich für die allererste Anfrage – sie bestätigt, dass der Schlüssel gültig ist, zeigt das verknüpfte Konto und die Geltungsbereiche und hilft, einen veralteten oder ausgetauschten Schlüssel zu erkennen.
user.idstring |
The Teslita user's ID. Opaque — use for equality checks only. |
user.emailstring |
Account email. |
user.display_namestring | null |
Name the user set, if any. |
user.languagestring | null |
Two-letter language code (en, de, …). |
key.scopesarray<string> |
Scopes carried by this key. One or both of read, write. |
Die Anzeigeeinstellungen, der Heimstandort und die Locale-Konfiguration des Nutzers. Diese Werte steuern, wie die Teslita-Oberfläche selbst Zahlen und Daten darstellt – das Spiegeln dieser Werte in einer Partneranwendung sorgt für ein konsistentes Erlebnis.
languagestring | null | Two-letter code. |
pressure_unitstring | null | bar or psi. |
temperature_unitstring | null | celsius or fahrenheit. |
countrystring | null | ISO 3166-1 alpha-2 code. |
currencystring | null | ISO 4217 code (EUR, USD, …). |
timezonestring | null | IANA zone name. |
home.latitudenumber | null | Signed decimal degrees. |
home.longitudenumber | null | Signed decimal degrees. |
home_kwh_pricenumber | null | Unit price used to estimate cost of home-charging sessions. |
Alle Fahrzeuge, die mit dem Tesla-Konto des Nutzers verknüpft sind. Enthält auch archivierte Fahrzeuge, die der Nutzer nicht mehr besitzt – diese haben disconnected_at gesetzt. Ihre historischen Fahrt- und Ladedaten bleiben erhalten und sind weiterhin abfragbar.
data[].vinstring | 17-character Tesla VIN. Use as the path parameter on vehicle-scoped endpoints. |
data[].display_namestring | null | Name set in the Tesla app. |
data[].custom_namestring | null | Nickname set inside Teslita (overrides display_name in UIs). |
data[].modelstring | null | Model S, Model 3, Model X, Model Y, Cybertruck, Roadster, Semi. |
data[].telemetry_enabledboolean | Whether Fleet Telemetry is provisioned on the vehicle. |
data[].disconnected_attimestamp | null | Non-null if Tesla no longer returns this VIN on the user's fleet. |
Gleiche Form wie ein Eintrag in Fahrzeuge auflisten, eingebettet in einen data-Umschlag. Liefert 404 not_found, wenn die VIN diesem Nutzer nicht gehört.
vinstringerforderlich |
17-stellige Tesla-VIN aus Fahrzeuge auflisten. |
Aktueller Telemetrie-Schnappschuss eines Fahrzeugs aus Tesla Fleet Telemetry, gespeichert vom Teslita-Consumer-Daemon. Erwarten Sie alle paar Sekunden Updates während der Fahrt oder beim Laden, sowie seltene Updates im geparkten Zustand.
Wenn für dieses Fahrzeug noch keine Telemetrie eingegangen ist (z. B. weil die Telemetrie-Bereitstellung noch aussteht), ist data gleich null und ein menschenlesbarer reason wird mitgeliefert.
last_signal_attimestamp | When Tesla last sent us anything for this vehicle. |
charging_statestring | null | Idle, Charging, Complete, Stopped, … |
battery_levelinteger | null | State of charge, 0–100. |
charge_limit_socinteger | null | User-set charge limit, 0–100. |
energy_remaining_kwhnumber | null | Best available estimate of usable battery energy. |
odometer_kmnumber | null | Full odometer reading. |
location.latitudenumber | null | Signed decimal degrees. |
location.longitudenumber | null | Signed decimal degrees. |
gearstring | null | ShiftStateP, ShiftStateD, ShiftStateR, ShiftStateN. |
vehicle_speed_kmhnumber | null | Instantaneous speed in km/h. |
Ein Ja/Nein, abgeleitet aus der Haversine-Distanz zwischen der zuletzt bekannten Fahrzeugposition (aus Fleet Telemetry) und den vom Nutzer konfigurierten Heimkoordinaten (aus den Einstellungen). Kein Tesla-Aufruf, kein Aufwecken. Unterliegt dem Standard-Limit pro Schlüssel ohne zusätzliche Endpunkt-Begrenzung.
Schwellenwert ist der vom Nutzer eingestellte home_radius_m oder 150 m als Standard, wenn nichts konfiguriert ist – ausreichend für eine Einfahrt plus GPS-Schwankungen, ohne den Nachbarn zu erfassen. distance_m ist immer enthalten, sodass Sie eine eigene Toleranz anwenden können, falls 150 m nicht passen.
Hat der Nutzer überhaupt keinen Heimstandort gesetzt, ist data gleich null, und reason erklärt warum. Das Gleiche gilt, wenn für das Fahrzeug noch keine Telemetrie eingegangen ist.
at_homeboolean | true when distance_m ≤ home_location.radius_m. |
distance_minteger | Great-circle distance in metres between vehicle and home, rounded to the nearest metre. |
vehicle_locationobject | latitude and longitude from the last telemetry signal. |
home_locationobject | Configured latitude, longitude, radius_m, and radius_source ("configured" or "default"). |
is_freshboolean | true when the telemetry position is within 5 minutes old. |
Letzter Akkugesundheits-Snapshot eines Fahrzeugs: Zellenausgleich, Modultemperaturen, Isolationswiderstand, Antriebszustand und Reifendruck. Wird stündlich abgetastet, wenn das Fahrzeug Daten meldet.
battery.imbalance_mvinteger | null | Max − min brick voltage, in millivolts. A quick proxy for cell balance — under 30 mV is healthy. |
battery.module_temp_max_cnumber | null | Hottest module temperature at sampling time. |
battery.isolation_resistance_ohminteger | null | HV isolation, ohms. Dropping values can signal insulation degradation. |
drive_unitsobject | Per-drive-unit inverter state: front, rear, rear_left, rear_right. Nulls indicate absent units. |
tpms_bar / tpms_psiobject | Tyre pressure for each corner. Both objects always present, with identical structure (front_left, front_right, rear_left, rear_right) — pick whichever unit fits your UI. |
Historische Akkugesundheits-Datenpunkte, älteste zuerst innerhalb des Bereichs. Standardmäßig werden bis zu 500 Zeilen zurückgegeben; die harte Obergrenze beträgt 2000. Filtern Sie mit from/to für längere Zeitfenster.
fromstringoptional | ISO-8601 or YYYY-MM-DD. Inclusive lower bound on sampled_at. |
tostringoptional | ISO-8601 or YYYY-MM-DD. Inclusive upper bound on sampled_at. |
limitintegeroptional | Default 500, max 2000. |
Abgeschlossene Fahrten, neueste zuerst, cursorbasiert paginiert. Aktive (laufende) Fahrten sind hier nicht enthalten – sie erscheinen in Live-Zustand, solange sie laufen, und tauchen hier auf, sobald sie enden.
vinstringoptional | Restrict to one vehicle. |
fromstringoptional | ISO-8601 or YYYY-MM-DD. Inclusive lower bound on started_at. |
tostringoptional | ISO-8601 or YYYY-MM-DD. Inclusive upper bound. |
limitintegeroptional | Default 50, max 200. |
cursorstringoptional | Value of next_cursor from the previous response. |
data[].idstring | Opaque trip identifier. |
data[].started_attimestamp | When the vehicle shifted out of Park. |
data[].ended_attimestamp | When the vehicle returned to Park and stayed there. |
data[].distance_kmnumber | Path distance, not straight-line. |
data[].energy_used_kwhnumber | null | Derived from start/end EnergyRemaining snapshots; null when inputs are unreliable. |
data[].efficiency_wh_per_kminteger | null | Computed only when both energy and distance are usable. |
next_cursorstring | null | Pass back as cursor for the next page. null means you've reached the end. |
Gibt eine einzelne Fahrt zurück. Gleiche Felder wie ein Eintrag aus Fahrten auflisten, eingebettet in einen data-Umschlag. Eine Fahrt eines anderen Nutzers oder eine unbekannte ID liefert 404 not_found.
GPS-Wegpunkte einer einzelnen Fahrt, sortiert nach recorded_at aufsteigend. Dies sind die Datenpunkte, die Teslita aus Fleet Telemetry sammelt und zu einem Pfad zusammenfügt. Jedes einzelne Feld eines Wegpunkts kann null sein – das Fahrzeug sendet nicht jedes Signal bei jedem Tick.
Punktdichte variiert mit Geschwindigkeit und Signaltyp. Erwarten Sie sub-Sekunden-Abstände während der Fahrt und mehrere zehn Sekunden im Stehen an einer Ampel. Reduzieren Sie clientseitig, wenn Sie eine feste Frequenz benötigen.
Ladesitzungen aus allen Quellen – zu Hause, am Zielort und Supercharger – zusammengeführt zu einer Zeitleiste, neueste zuerst, cursorbasiert paginiert. Das type-Feld jeder Sitzung gibt an, wo sie stattfand.
vinstringoptional | Restrict to one vehicle. |
typestringoptional | One of home, supercharger, other. |
fromstringoptional | Inclusive lower bound on started_at. |
tostringoptional | Inclusive upper bound on started_at. |
limitintegeroptional | Default 50, max 200. |
cursorstringoptional | From previous next_cursor. |
Eine einzelne Sitzung. Form entspricht einem Eintrag aus Sitzungen auflisten, eingebettet in einen data-Umschlag. session_id-Werte von Tesla können Zeichen enthalten, die URL-codiert werden müssen – kodieren Sie sie vor dem Einsetzen in den Pfad.
Leistung, Akkustand und hinzugefügte Energie über die Lebensdauer einer Ladesitzung. Die Datenpunkte stammen vom Telemetrie-Consumer-Daemon und sind nach Zeitpunkt aufsteigend sortiert, sodass die Antwort direkt als Diagramm-Eingabe verwendbar ist.
Aus dem Tesla-Verlaufsendpunkt importierte Supercharger-Sitzungen tragen keine pro-Datenpunkt-Telemetrie; dieser Endpunkt liefert für sie ein leeres samples-Array.
Supercharger-Sitzungen, für die eine von Tesla ausgestellte PDF-Rechnung verfügbar ist. Nur diese Sitzungen haben abrufbare PDFs – Heim-Sitzungen werden von Teslita geschätzt, nicht von Tesla in Rechnung gestellt. Jeder Eintrag enthält eine pdf_url, die auf den Binär-Download-Endpunkt verweist.
vinstringoptional | Restrict to one vehicle. |
limitintegeroptional | Default 50, max 200. |
cursorstringoptional | From previous next_cursor. |
Streamt die von Tesla ausgestellte Supercharger-Rechnung als binäres application/pdf. Der erste Abruf kann eine Tesla-Rückfrage zur PDF-Beschaffung auslösen; spätere Abrufe werden in unter 50 ms aus einem lokalen Gzip-Cache ausgeliefert.
Jeder Aufruf hängt eine Zeile an das Rechnungsdownload-Audit-Log an, sodass der Kontoinhaber sehen kann, wer was heruntergeladen hat. Das gilt sowohl für Downloads über API-Schlüssel als auch über die Oberfläche.
Hat die Sitzung keine Tesla-Rechnung, antwortet die API mit 404 not_found.
Eine fokussierte Sicht darauf, was das Fahrzeug gerade jetzt tut: Ladezustand, SoC, Leistung, voraussichtliche Restladezeit. Gestützt auf den lokalen Fleet-Telemetry-Cache – dieser Endpunkt ruft niemals Tesla auf und weckt das Auto niemals auf, daher kann er gefahrlos regelmäßig abgefragt werden.
Unterliegt dem Standard-Limit pro Schlüssel (120/min), ohne zusätzliche Endpunkt-Begrenzung. Wenn das Auto schläft und folglich keine Telemetrie sendet, wird is_fresh zu false und data_age_seconds zeigt, wie veraltet die Sicht ist.
Ein dediziertes Ja/Nein für „Ist das Ladekabel gerade mit dem Auto verbunden?". Berechnet aus demselben Fleet-Telemetry-Cache wie Ladezustand – kein Tesla-Aufruf, kein Aufwecken, gefahrlos abfragbar. Unterliegt dem Standard-Limit pro Schlüssel ohne zusätzliche Endpunkt-Begrenzung.
Intern prüfen wir sowohl charging_state als auch detailed_charge_state auf jede Variante von Disconnected, weil Tesla beim Zustandsübergang manchmal eines der beiden Felder geringfügig später aktualisiert. plugged_in ist nur dann null, wenn beide Statusfelder fehlen (noch keine Telemetrie).
Löst eine inkrementelle Supercharger-Verlaufssynchronisation für ein Fahrzeug aus. Teslita fragt Tesla nach Sitzungen, die noch nicht in der eigenen Datenbank vorhanden sind, und speichert sie. Die Operation ist idempotent: Wiederholte Aufrufe gegen ein ruhiges Konto liefern inserted: 0, updated: 0.
Anfragenlimit: 24 Anfragen pro Fahrzeug pro 24 h. Dieses Limit gilt zusätzlich (und unter) dem globalen 120-pro-Minute-Limit pro Schlüssel – jeder Aufruf leitet Teslas Fleet-API weiter, die selbst teuer und limitiert ist. Der Zähler ist auf Nutzer + VIN gebunden, nicht auf den API-Schlüssel, sodass das Wechseln von Schlüsseln ihn nicht zurücksetzt. Im Schnitt sind 24/Tag etwa eine Synchronisation pro Stunde – weit über jeder realistischen Integrationskadenz.
Heim- und Zielort-Ladevorgänge werden live aus Fleet Telemetry zusammengesetzt und laufen nicht über diesen Endpunkt. Nur Supercharger-Sitzungen gehen hier durch.
vinstringerforderlich |
17-stellige Tesla-VIN. |
Fordert das Fahrzeug auf, mit dem Laden zu beginnen. Setzt voraus, dass das Auto eingesteckt ist und nicht bereits lädt. Tesla weckt das Auto bei Bedarf automatisch auf – rechnen Sie in diesem Fall mit bis zu ~60 Sekunden für den Aufruf.
Bevor wir Teslas API ansprechen, prüfen wir den lokalen Fleet-Telemetry-Cache. Wenn data_age_seconds ≤ 300 und der gecachte charging_state bereits Charging oder Starting zeigt, antwortet der Endpunkt sofort mit result: "already_charging" – kein Tesla-Aufruf, kein Aufwecken, kein Verbrauch des Anfragenlimits. Zeigt der gecachte Zustand Disconnected, schlagen wir aus denselben Gründen schnell mit 409 not_plugged_in fehl.
Nur wenn die Telemetrie veraltet ist oder der Zustand mehrdeutig, fallen wir auf einen signierten Tesla-Befehl durch. Das source-Feld in der Antwort zeigt, welcher Pfad genommen wurde.
Anfragenlimit: 24 Befehle pro Fahrzeug pro 24 h, geteilt mit charging/stop. Nur Aufrufe, die tatsächlich Tesla erreichen, verbrauchen einen Slot – kurzgeschlossene Aufrufe sind kostenlos. Auf user_id + vin gebunden, sodass das Wechseln von API-Schlüsseln den Zähler nicht zurücksetzt.
Fordert das Fahrzeug auf, das Laden zu stoppen. Spiegel von charging/start – gleiche Kurzschluss-Strategie, gleiches 24-pro-Tag-Budget, gleiche Antwortform.
Wenn frische lokale Telemetrie zeigt, dass das Auto gerade nicht lädt (jeder Zustand außer Charging oder Starting), antwortet der Endpunkt mit already_stopped, ohne Tesla zu kontaktieren. Andernfalls sendet er einen signierten charge_stop-Befehl.
Anfragenlimit: 24 Befehle pro Fahrzeug pro 24 h, geteilt mit charging/start. Start und Stopp ziehen aus demselben Topf – insgesamt 24 Tesla-Aufrufe pro Fahrzeug pro Tag, nicht 24 pro Befehl.