This is unofficial documentation of the Tesla JSON API used by their iOS and Android apps. It features functionality to monitor and control their vehicle (Models S, 3, X, Y) and power (Powerwall) products. We currently have documentation for their vehicles, but always accept pull requests for improvements and additions.
If you want to use Tesla's Bluetooth Low Energy (BLE) protocol to communicate with the car instead, there is a separate documentation project for it.
The base URI for all requests is
https://owner-api.teslamotors.com/(except for the Streaming and Autopark APIs)
If you are in China, the URI for requests is going to be
owner-api.vn.cloud.tesla.cnfor you. Keep in mind to replace all
All requests require a
User-Agentheader with any value provided. For Tesla's sake, it's recommended you identify your application in some way using this header.
The API for vehicles is organized into 3 primary surfaces:
Gives point-in-time data about the state of the vehicle and basic controls over certain functions of the vehicle. The state and command APIs loosely adhere to the REST standard, but differ in some crucial ways. As a result, you may not be able to use it with many REST tools and libraries out of the box.
Streams in data about the car's telemetry at up to half second increments. The underlying protocol is simply a streaming HTTP API that provides JSON objects at regular intervals.
A streaming command mode to control the automatic parking of HW1 (older Autopilot-only) and HW2/3 (FSD-capable) cars. This API uses a standard WebSocket that exchanges JSON objects to convey state information and issue commands during the Autopark session.