Rank
70
AI Agents & MCPs & AI Workflow Automation โข (~400 MCP servers for AI agents) โข AI Automation / AI Agent with MCPs โข AI Workflows & AI Agents โข MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Xpersona Agent
Use when integrating with Tesla's official Fleet API to read vehicle/energy device data or issue remote commands (e.g. start HVAC preconditioning, wake vehicle, charge controls). Covers onboarding (developer app registration, regions/base URLs), OAuth token flows (third-party + partner tokens, refresh rotation), required domain/public-key hosting, and using Tesla's official vehicle-command/tesla-http-proxy for signed vehicle commands.
clawhub skill install kn7c7fek4a503rbvj0bxbwx6dx7yw25e:tesla-fleet-apiOverall rank
#62
Adoption
2.5K downloads
Trust
Unknown
Freshness
Feb 28, 2026
Freshness
Last checked Feb 28, 2026
Best For
Tesla Fleet Api is best for general automation workflows where OpenClaw compatibility matters.
Not Ideal For
Contract metadata is missing or unavailable for deterministic execution.
Evidence Sources Checked
CLAWHUB, CLAWHUB, runtime-metrics, public facts pack
Key links, install path, reliability highlights, and the shortest practical read before diving into the crawl record.
Overview
Use when integrating with Tesla's official Fleet API to read vehicle/energy device data or issue remote commands (e.g. start HVAC preconditioning, wake vehicle, charge controls). Covers onboarding (developer app registration, regions/base URLs), OAuth token flows (third-party + partner tokens, refresh rotation), required domain/public-key hosting, and using Tesla's official vehicle-command/tesla-http-proxy for signed vehicle commands. Capability contract not published. No trust telemetry is available yet. 2.5K downloads reported by the source. Last updated 4/15/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Feb 28, 2026
Vendor
Clawhub
Artifacts
0
Benchmarks
0
Last release
1.5.0
Install & run
clawhub skill install kn7c7fek4a503rbvj0bxbwx6dx7yw25e:tesla-fleet-apiInstall using `clawhub skill install kn7c7fek4a503rbvj0bxbwx6dx7yw25e:tesla-fleet-api` in an isolated environment before connecting it to live workloads.
No published capability contract is available yet, so validate auth and request/response behavior manually.
Review the upstream CLAWHUB listing at https://clawhub.ai/odrobnik/tesla-fleet-api before using production credentials.
Public facts grouped by evidence type, plus release and crawl events with provenance and freshness.
Public facts
Vendor
Clawhub
Protocol compatibility
OpenClaw
Latest release
1.5.0
Adoption signal
2.5K downloads
Handshake status
UNKNOWN
Parameters, dependencies, examples, extracted files, editorial overview, and the complete README when available.
Captured outputs
Extracted files
3
Examples
6
Snippets
0
Languages
Unknown
bash
command.py [VEHICLE] <command> [options]
bash
command.py climate start command.py climate stop command.py flash climate start # specific vehicle
bash
command.py climate temps <driver_temp> [passenger_temp] command.py climate temps 21 # both seats 21ยฐC command.py climate temps 22 20 # driver 22ยฐC, passenger 20ยฐC
bash
command.py climate keeper <mode>
bash
command.py seat-heater --level <level> [--position <position>] command.py seat-heater -l <level> [-p <position>]
bash
command.py seat-heater -l high # driver (default) command.py seat-heater -l medium -p passenger command.py seat-heater --level low --position rear_left command.py seat-heater -l 2 -p 4 # medium, rear center command.py seat-heater -l off -p driver # turn off
SKILL.md
---
name: tesla-fleet-api
description: Use when integrating with Tesla's official Fleet API to read vehicle/energy device data or issue remote commands (e.g. start HVAC preconditioning, wake vehicle, charge controls). Covers onboarding (developer app registration, regions/base URLs), OAuth token flows (third-party + partner tokens, refresh rotation), required domain/public-key hosting, and using Tesla's official vehicle-command/tesla-http-proxy for signed vehicle commands.
version: 1.5.0
homepage: https://github.com/odrobnik/tesla-fleet-api-skill
metadata:
openclaw:
emoji: "๐"
requires:
bins: ["python3", "openssl"]
env: ["TESLA_CLIENT_ID", "TESLA_CLIENT_SECRET"]
optionalEnv: ["TESLA_AUDIENCE", "TESLA_REDIRECT_URI", "TESLA_DOMAIN", "TESLA_BASE_URL", "TESLA_CA_CERT", "TESLA_ACCESS_TOKEN", "TESLA_REFRESH_TOKEN", "TESLA_SCOPE"]
---
# Tesla Fleet API
Control Tesla vehicles via the official Fleet API.
## Scripts Overview
| Script | Purpose |
|--------|---------|
| `command.py` | Vehicle commands (climate, charging, locks, etc.) |
| `vehicle_data.py` | Read vehicle data (battery, climate, location, etc.) |
| `vehicles.py` | List vehicles + refresh cache |
| `auth.py` | Authentication and configuration |
| `tesla_oauth_local.py` | OAuth helper with local callback server |
| `start_proxy.sh` | Start the signing proxy (for vehicle commands) |
| `stop_proxy.sh` | Stop the signing proxy |
---
## Setup / Configuration
Setup is documented in **`SETUP.md`**:
- [SETUP.md](SETUP.md)
State directory: `{workspace}/tesla-fleet-api/`
- `config.json` (provider creds + non-token config)
- `auth.json` (tokens)
- `vehicles.json` (cached vehicle list)
- `places.json` (named locations)
- `proxy/` (TLS material for signing proxy)
No `.env` file loading โ credentials in `config.json` or environment variables.
---
## command.py - Vehicle Commands
Execute commands on your Tesla. Vehicle is auto-selected if you only have one.
### Usage
```bash
command.py [VEHICLE] <command> [options]
```
- `VEHICLE` - Vehicle name or VIN (optional if single vehicle)
- Commands can be run without specifying vehicle: `command.py honk`
- Or with vehicle name: `command.py flash honk` (vehicle "flash", command "honk")
---
### Climate Control
#### Start/Stop Climate
```bash
command.py climate start
command.py climate stop
command.py flash climate start # specific vehicle
```
#### Set Temperature
```bash
command.py climate temps <driver_temp> [passenger_temp]
command.py climate temps 21 # both seats 21ยฐC
command.py climate temps 22 20 # driver 22ยฐC, passenger 20ยฐC
```
#### Climate Keeper Mode
```bash
command.py climate keeper <mode>
```
Modes: `off`, `keep`, `dog`, `camp`
---
### Seat Heater
```bash
command.py seat-heater --level <level> [--position <position>]
command.py seat-heater -l <level> [-p <position>]
```
**Levels:**
| Value | Name |
|-------|------|
| 0 | off |
| 1 | low |
| 2 | medium |
| 3 | high |
**Posi_meta.json
{
"ownerId": "kn7c7fek4a503rbvj0bxbwx6dx7yw25e",
"slug": "tesla-fleet-api",
"version": "1.5.0",
"publishedAt": 1771003588072
}SETUP.md
# Tesla Fleet API Skill โ Setup Guide
This guide covers **setup + configuration** for the Tesla Fleet API skill.
If you just want the CLI command reference, see `SKILL.md`.
---
## Prerequisites
- Tesla Developer Account + an app created
- A domain you control (for public key hosting + virtual key enrollment)
- `python3`
- `openssl` (for key generation + TLS certs)
- macOS (scripts tested on macOS)
- For proxy setup: `go` (on macOS: `brew install go`) โ only needed once to compile the proxy binary
---
## State / Files
All runtime state lives in your workspace:
`{workspace}/tesla-fleet-api/`
Files:
- `config.json` โ provider creds (client id/secret), non-token config (audience, base_url, ca_cert, redirect_uri, domain)
- `auth.json` โ tokens (access/refresh)
- `vehicles.json` โ cached vehicle list
- `places.json` โ named locations (`{"home": {"lat": ..., "lon": ...}}`)
- `proxy/` โ TLS material for the signing proxy
- `private-key.pem` โ your Tesla EC private key (fixed name)
Credentials come from `config.json` or environment variables (`TESLA_CLIENT_ID`, `TESLA_CLIENT_SECRET`). No `.env` file loading.
---
## 1) Create & host your EC keypair
```bash
# Generate P-256 keypair
openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem
# Host public key at:
# https://YOUR_DOMAIN/.well-known/appspecific/com.tesla.3p.public-key.pem
```
Store your private key in the workspace with a fixed name:
`{workspace}/tesla-fleet-api/private-key.pem`
---
## 2) Configure provider credentials
```bash
python3 scripts/auth.py config set \
--client-id "YOUR_CLIENT_ID" \
--client-secret "YOUR_CLIENT_SECRET" \
--redirect-uri "http://localhost:18080/callback" \
--audience "https://fleet-api.prd.eu.vn.cloud.tesla.com"
```
This writes to `{workspace}/tesla-fleet-api/config.json`.
---
## 3) OAuth login (creates auth.json)
Interactive login (manual code paste):
```bash
python3 scripts/auth.py login
```
Automatic login via local callback server:
```bash
python3 scripts/tesla_oauth_local.py --prompt-missing-scopes
```
---
## 4) Register domain + enroll virtual key
```bash
python3 scripts/auth.py register --domain YOUR_DOMAIN.com
```
Then, on your phone (Tesla app installed):
`https://tesla.com/_ak/YOUR_DOMAIN.com`
---
## 5) Proxy Setup (for signed commands only)
> **Note:** The proxy is only needed for **sending signed commands** to the vehicle (climate, locks, charging, honk, etc.). Reading vehicle data (battery, location, temperatures) works without the proxy โ those requests go directly to the Tesla Fleet API.
### Install tesla-http-proxy
Requires Go (`brew install go` on macOS).
```bash
# Pin to a specific version for supply-chain safety
go install github.com/teslamotors/vehicle-command/cmd/tesla-http-proxy@v0.4.1
```
This installs `tesla-http-proxy` to `~/go/bin/`.
### Generate TLS certificates
```bash
mkdir -p {workspace}/tesla-fleet-api/proxy
cd {workspace}/tEditorial read
Docs source
CLAWHUB
Editorial quality
thin
Skill: Tesla Fleet Api Owner: odrobnik Summary: Use when integrating with Tesla's official Fleet API to read vehicle/energy device data or issue remote commands (e.g. start HVAC preconditioning, wake vehicle, charge controls). Covers onboarding (developer app registration, regions/base URLs), OAuth token flows (third-party + partner tokens, refresh rotation), required domain/public-key hosting, and using Tesla's offi
Skill: Tesla Fleet Api
Owner: odrobnik
Summary: Use when integrating with Tesla's official Fleet API to read vehicle/energy device data or issue remote commands (e.g. start HVAC preconditioning, wake vehicle, charge controls). Covers onboarding (developer app registration, regions/base URLs), OAuth token flows (third-party + partner tokens, refresh rotation), required domain/public-key hosting, and using Tesla's official vehicle-command/tesla-http-proxy for signed vehicle commands.
Tags: latest:1.5.0
Version history:
v1.5.0 | 2026-02-13T17:26:28.072Z | auto
v1.4.2 | 2026-02-12T18:21:45.162Z | auto
Changelog for tesla-fleet-api v1.4.2
bash or git for basic operation..env file support; credentials are now loaded only from config.json or environment variables.setup_proxy.sh, added explicit start_proxy.sh and stop_proxy.sh for controlling the signing proxy.v1.3.0 | 2026-02-12T13:15:24.540Z | auto
seat-climate commands to control seat auto climate modes.v1.2.0 | 2026-02-12T07:32:08.391Z | user
Replace .env loading with config.json for provider creds (legacy .env fallback kept)
v1.1.9 | 2026-02-11T18:22:38.413Z | user
Remove local-only calendar automation (school-precondition.sh) from published package; keep local copy outside skill.
v1.1.8 | 2026-02-11T17:40:00.777Z | user
Mitigate supply-chain risk: setup_proxy uses pinned vehicle-command version via go install; document TESLA_VEHICLE_COMMAND_VERSION override.
v1.1.7 | 2026-02-11T15:56:59.323Z | user
Default state dir is ~/.openclaw; update remaining docs/help strings (legacy ~/.moltbot noted).
v1.1.6 | 2026-02-11T15:56:13.732Z | user
Prefer ~/.openclaw state dir (fallback to legacy ~/.moltbot). Update scripts + docs.
v1.1.5 | 2026-02-11T15:52:34.116Z | user
Declare TESLA_PRIVATE_KEY + document proxy build (vehicle-command clone) and calendar access.
v1.1.4 | 2026-02-11T15:37:26.342Z | user
Declare required env/bins + state dir; make proxy setup script non-installing (no automatic brew install)
v1.1.3 | 2026-01-26T07:09:34.686Z | user
Docs: remove legacy migration note from SETUP.md.
v1.1.2 | 2026-01-26T07:07:12.605Z | user
Docs: remove tesla_fleet.py from scripts overview table.
v1.1.1 | 2026-01-26T07:03:09.924Z | user
Docs: move setup/config into SETUP.md; SKILL.md now references it.
v1.1.0 | 2026-01-26T06:41:51.632Z | user
Split state: config.json/auth.json/vehicles.json/places.json; provider creds via .env; added places + vehicles commands.
Archive index:
Archive v1.5.0: 12 files, 33731 bytes
Files: scripts/auth.py (12479b), scripts/command.py (33317b), scripts/start_proxy.sh (2622b), scripts/stop_proxy.sh (1056b), scripts/store.py (4599b), scripts/tesla_fleet.py (3224b), scripts/tesla_oauth_local.py (8710b), scripts/vehicle_data.py (18280b), scripts/vehicles.py (4664b), SETUP.md (4978b), SKILL.md (11654b), _meta.json (134b)
File v1.5.0:SKILL.md
name: tesla-fleet-api description: Use when integrating with Tesla's official Fleet API to read vehicle/energy device data or issue remote commands (e.g. start HVAC preconditioning, wake vehicle, charge controls). Covers onboarding (developer app registration, regions/base URLs), OAuth token flows (third-party + partner tokens, refresh rotation), required domain/public-key hosting, and using Tesla's official vehicle-command/tesla-http-proxy for signed vehicle commands. version: 1.5.0 homepage: https://github.com/odrobnik/tesla-fleet-api-skill metadata: openclaw: emoji: "๐" requires: bins: ["python3", "openssl"] env: ["TESLA_CLIENT_ID", "TESLA_CLIENT_SECRET"] optionalEnv: ["TESLA_AUDIENCE", "TESLA_REDIRECT_URI", "TESLA_DOMAIN", "TESLA_BASE_URL", "TESLA_CA_CERT", "TESLA_ACCESS_TOKEN", "TESLA_REFRESH_TOKEN", "TESLA_SCOPE"]
Control Tesla vehicles via the official Fleet API.
| Script | Purpose |
|--------|---------|
| command.py | Vehicle commands (climate, charging, locks, etc.) |
| vehicle_data.py | Read vehicle data (battery, climate, location, etc.) |
| vehicles.py | List vehicles + refresh cache |
| auth.py | Authentication and configuration |
| tesla_oauth_local.py | OAuth helper with local callback server |
| start_proxy.sh | Start the signing proxy (for vehicle commands) |
| stop_proxy.sh | Stop the signing proxy |
Setup is documented in SETUP.md:
State directory: {workspace}/tesla-fleet-api/
config.json (provider creds + non-token config)auth.json (tokens)vehicles.json (cached vehicle list)places.json (named locations)proxy/ (TLS material for signing proxy)No .env file loading โ credentials in config.json or environment variables.
Execute commands on your Tesla. Vehicle is auto-selected if you only have one.
command.py [VEHICLE] <command> [options]
VEHICLE - Vehicle name or VIN (optional if single vehicle)command.py honkcommand.py flash honk (vehicle "flash", command "honk")command.py climate start
command.py climate stop
command.py flash climate start # specific vehicle
command.py climate temps <driver_temp> [passenger_temp]
command.py climate temps 21 # both seats 21ยฐC
command.py climate temps 22 20 # driver 22ยฐC, passenger 20ยฐC
command.py climate keeper <mode>
Modes: off, keep, dog, camp
command.py seat-heater --level <level> [--position <position>]
command.py seat-heater -l <level> [-p <position>]
Levels: | Value | Name | |-------|------| | 0 | off | | 1 | low | | 2 | medium | | 3 | high |
Positions:
| Value | Names |
|-------|-------|
| 0 | driver, front_left, fl |
| 1 | passenger, front_right, fr |
| 2 | rear_left, rl |
| 3 | rear_left_back |
| 4 | rear_center, rc |
| 5 | rear_right, rr |
| 6 | rear_right_back |
| 7 | third_left |
| 8 | third_right |
Examples:
command.py seat-heater -l high # driver (default)
command.py seat-heater -l medium -p passenger
command.py seat-heater --level low --position rear_left
command.py seat-heater -l 2 -p 4 # medium, rear center
command.py seat-heater -l off -p driver # turn off
command.py seat-cooler --level <level> [--position <position>]
command.py seat-cooler -l <level> [-p <position>]
Same levels and positions as seat heater.
Examples:
command.py seat-cooler -l medium -p driver
command.py seat-cooler -l high -p passenger
command.py seat-climate [--position <position>] <mode>
command.py seat-climate [-p <position>] <mode>
Modes: auto, on, off
Examples:
command.py seat-climate auto # driver auto
command.py seat-climate -p passenger auto
command.py seat-climate -p driver off # disable auto
command.py steering-heater <on|off>
Examples:
command.py steering-heater on
command.py steering-heater off
Modern API for scheduling departure preconditioning (replaces deprecated set_scheduled_departure).
command.py precondition add --time <HH:MM> [--days <days>] [--id <id>] [--one-time] [--disabled]
command.py precondition add -t <HH:MM> [-d <days>] [--id <id>]
Days options:
| Value | Description |
|-------|-------------|
| all | Every day (default) |
| weekdays | Monday through Friday |
| weekends | Saturday and Sunday |
| mon,tue,wed,... | Specific days (comma-separated) |
Day names: sun, mon, tue, wed, thu, fri, sat (or full names)
Examples:
command.py precondition add -t 08:00 # every day at 8am
command.py precondition add -t 08:00 -d weekdays # Mon-Fri
command.py precondition add -t 07:30 -d mon,wed,fri
command.py precondition add -t 09:00 --one-time # one-time only
command.py precondition add -t 08:30 --id 123 # modify existing schedule
command.py precondition add -t 08:00 --disabled # create but disabled
command.py precondition remove --id <id>
Examples:
command.py precondition remove --id 123
command.py precondition remove --id 1
command.py charge start
command.py charge stop
command.py charge limit <percent>
Percent must be 50-100.
Examples:
command.py charge limit 80
command.py charge limit 90
command.py flash charge limit 70 # specific vehicle
command.py lock # lock all doors
command.py unlock # unlock all doors
command.py honk # honk the horn
command.py flash # flash the lights
command.py wake # wake vehicle from sleep
With vehicle name:
command.py flash wake # wake vehicle named "flash"
command.py flash flash # flash lights on vehicle "flash"
Fetch vehicle data with human-readable output by default.
vehicle_data.py [VEHICLE] [flags] [--json]
VEHICLE - Vehicle name or VIN (optional if single vehicle)--json = raw JSON output| Flag | Long | Data |
|------|------|------|
| -c | --charge | Battery level, charge limit, charging status |
| -t | --climate | Interior/exterior temp, HVAC status |
| -d | --drive | Gear, speed, power, heading |
| -l | --location | GPS coordinates |
| -s | --state | Locks, doors, windows, odometer, software |
| -g | --gui | GUI settings (units, 24h time) |
| | --config-data | Vehicle config (model, color, wheels) |
# All data
vehicle_data.py
vehicle_data.py flash
# Specific data
vehicle_data.py -c # charge only
vehicle_data.py -c -t # charge + climate
vehicle_data.py flash -c -l # charge + location
# Raw JSON
vehicle_data.py --json
vehicle_data.py -c --json
๐ My Tesla (online)
VIN: 5YJ... (redacted)
โก Charge State
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Battery: [โโโโโโโโโโโโโโโโโโโโ] 78%
Limit: 80%
State: Charging
Power: 11 kW (16A ร 234V ร 3ฯ)
Added: 37.2 kWh
Remaining: 10m
Range: 438 km (272 mi)
Cable: IEC
๐ก๏ธ Climate State
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Inside: 11.9ยฐC
Outside: 6.0ยฐC
Set to: 20.5ยฐC
Climate: Off
Manage OAuth tokens and configuration.
auth.py <command> [options]
auth.py login
Interactive: generates auth URL, prompts for code, exchanges for tokens.
auth.py exchange <code>
Exchange authorization code for tokens (non-interactive).
auth.py refresh
Refresh access token. Note: refresh tokens rotate - the new one is saved automatically.
auth.py register --domain <domain>
Register your app domain with Tesla (required for signed commands).
After registration, enroll your virtual key:
https://tesla.com/_ak/<domain>
auth.py config
Display current configuration (secrets redacted).
auth.py config set [options]
Options:
--client-id <id>--client-secret <secret>--redirect-uri <uri>--audience <url>--base-url <url>--ca-cert <path>--domain <domain>Examples:
# Initial setup
auth.py config set \
--client-id "abc123" \
--client-secret "secret" \
--redirect-uri "http://localhost:18080/callback"
# Configure proxy
auth.py config set \
--base-url "https://localhost:4443" \
--ca-cert "/path/to/tls-cert.pem"
List vehicles with human-readable output.
python3 scripts/tesla_fleet.py vehicles
python3 scripts/tesla_fleet.py vehicles --json
๐ Name: My Tesla
๐ VIN: 5YJ... (redacted)
๐ข Status: Online
๐ค Access: Owner
All setup + configuration is documented in SETUP.md.
| Region | Audience URL |
|--------|--------------|
| Europe | https://fleet-api.prd.eu.vn.cloud.tesla.com |
| North America | https://fleet-api.prd.na.vn.cloud.tesla.com |
| China | https://fleet-api.prd.cn.vn.cloud.tesla.cn |
OAuth token endpoint (all regions):
https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3/token
Wake the vehicle first:
command.py wake
Ensure the signing proxy is running and configured. See SETUP.md ยง Proxy Setup.
auth.py refresh
Specify vehicle by name or VIN:
command.py flash climate start
command.py 5YJ... honk
climate start|stop
climate temps <driver> [passenger]
climate keeper off|keep|dog|camp
seat-heater -l <level> [-p <position>]
seat-cooler -l <level> [-p <position>]
seat-climate [-p <position>] auto|on|off
steering-heater on|off
precondition add -t <HH:MM> [-d <days>] [--id <id>] [--one-time]
precondition remove --id <id>
charge start|stop
charge limit <percent>
lock
unlock
honk
flash
wake
[VEHICLE] [-c] [-t] [-d] [-l] [-s] [-g] [--config-data] [--json]
login
exchange <code>
refresh
register --domain <domain>
config
config set [--client-id] [--client-secret] [--redirect-uri] [--audience] [--base-url] [--ca-cert] [--domain]
File v1.5.0:_meta.json
{ "ownerId": "kn7c7fek4a503rbvj0bxbwx6dx7yw25e", "slug": "tesla-fleet-api", "version": "1.5.0", "publishedAt": 1771003588072 }
File v1.5.0:SETUP.md
This guide covers setup + configuration for the Tesla Fleet API skill.
If you just want the CLI command reference, see SKILL.md.
python3openssl (for key generation + TLS certs)go (on macOS: brew install go) โ only needed once to compile the proxy binaryAll runtime state lives in your workspace:
{workspace}/tesla-fleet-api/
Files:
config.json โ provider creds (client id/secret), non-token config (audience, base_url, ca_cert, redirect_uri, domain)auth.json โ tokens (access/refresh)vehicles.json โ cached vehicle listplaces.json โ named locations ({"home": {"lat": ..., "lon": ...}})proxy/ โ TLS material for the signing proxyprivate-key.pem โ your Tesla EC private key (fixed name)Credentials come from config.json or environment variables (TESLA_CLIENT_ID, TESLA_CLIENT_SECRET). No .env file loading.
# Generate P-256 keypair
openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem
# Host public key at:
# https://YOUR_DOMAIN/.well-known/appspecific/com.tesla.3p.public-key.pem
Store your private key in the workspace with a fixed name:
{workspace}/tesla-fleet-api/private-key.pem
python3 scripts/auth.py config set \
--client-id "YOUR_CLIENT_ID" \
--client-secret "YOUR_CLIENT_SECRET" \
--redirect-uri "http://localhost:18080/callback" \
--audience "https://fleet-api.prd.eu.vn.cloud.tesla.com"
This writes to {workspace}/tesla-fleet-api/config.json.
Interactive login (manual code paste):
python3 scripts/auth.py login
Automatic login via local callback server:
python3 scripts/tesla_oauth_local.py --prompt-missing-scopes
python3 scripts/auth.py register --domain YOUR_DOMAIN.com
Then, on your phone (Tesla app installed):
https://tesla.com/_ak/YOUR_DOMAIN.com
Note: The proxy is only needed for sending signed commands to the vehicle (climate, locks, charging, honk, etc.). Reading vehicle data (battery, location, temperatures) works without the proxy โ those requests go directly to the Tesla Fleet API.
Requires Go (brew install go on macOS).
# Pin to a specific version for supply-chain safety
go install github.com/teslamotors/vehicle-command/cmd/tesla-http-proxy@v0.4.1
This installs tesla-http-proxy to ~/go/bin/.
mkdir -p {workspace}/tesla-fleet-api/proxy
cd {workspace}/tesla-fleet-api/proxy
openssl req -x509 -newkey rsa:4096 \
-keyout tls-key.pem -out tls-cert.pem \
-days 365 -nodes -subj "/CN=localhost"
chmod 600 tls-key.pem
python3 scripts/auth.py config set \
--base-url "https://localhost:4443" \
--ca-cert "proxy/tls-cert.pem"
The ca_cert path is stored relative to the config directory and resolved at runtime.
Use the convenience scripts:
# Start (uses {workspace}/tesla-fleet-api/private-key.pem)
./scripts/start_proxy.sh
# Stop
./scripts/stop_proxy.sh
The proxy runs in the background on https://localhost:4443. Logs go to {workspace}/tesla-fleet-api/proxy/proxy.log.
# Data (no proxy needed)
python3 scripts/vehicles.py
python3 scripts/vehicle_data.py -c
# Commands (proxy required)
python3 scripts/command.py honk
# list
python3 scripts/command.py places list
# set explicit coords
python3 scripts/command.py places set home --lat 48.10033 --lon 17.04217
# set from current vehicle location
python3 scripts/command.py places set school --here
# use in precondition
python3 scripts/command.py precondition add -t 08:00 -d weekdays --place home
| Region | Audience URL |
|--------|--------------|
| Europe | https://fleet-api.prd.eu.vn.cloud.tesla.com |
| North America | https://fleet-api.prd.na.vn.cloud.tesla.com |
| China | https://fleet-api.prd.cn.vn.cloud.tesla.cn |
OAuth token endpoint (all regions):
https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3/token
Token expired (401):
python3 scripts/auth.py refresh
Vehicle asleep / unavailable:
python3 scripts/command.py wake
Command not signed / rejected:
Ensure the proxy is running and base_url + ca_cert are configured (step 5).
Archive v1.4.2: 12 files, 33979 bytes
Files: scripts/auth.py (12479b), scripts/command.py (33317b), scripts/start_proxy.sh (3040b), scripts/stop_proxy.sh (1056b), scripts/store.py (4599b), scripts/tesla_fleet.py (3224b), scripts/tesla_oauth_local.py (8710b), scripts/vehicle_data.py (18280b), scripts/vehicles.py (4664b), SETUP.md (5017b), SKILL.md (11714b), _meta.json (134b)
File v1.4.2:SKILL.md
name: tesla-fleet-api description: Use when integrating with Tesla's official Fleet API to read vehicle/energy device data or issue remote commands (e.g. start HVAC preconditioning, wake vehicle, charge controls). Covers onboarding (developer app registration, regions/base URLs), OAuth token flows (third-party + partner tokens, refresh rotation), required domain/public-key hosting, and using Tesla's official vehicle-command/tesla-http-proxy for signed vehicle commands. version: 1.4.2 homepage: https://github.com/odrobnik/tesla-fleet-api-skill metadata: openclaw: emoji: "๐" requires: bins: ["python3", "openssl", "go"] env: ["TESLA_CLIENT_ID", "TESLA_CLIENT_SECRET"] optionalEnv: ["TESLA_AUDIENCE", "TESLA_REDIRECT_URI", "TESLA_DOMAIN", "TESLA_BASE_URL", "TESLA_CA_CERT", "TESLA_ACCESS_TOKEN", "TESLA_REFRESH_TOKEN", "TESLA_SCOPE", "TESLA_PRIVATE_KEY", "TESLA_VEHICLE_COMMAND_VERSION"]
Control Tesla vehicles via the official Fleet API.
| Script | Purpose |
|--------|---------|
| command.py | Vehicle commands (climate, charging, locks, etc.) |
| vehicle_data.py | Read vehicle data (battery, climate, location, etc.) |
| vehicles.py | List vehicles + refresh cache |
| auth.py | Authentication and configuration |
| tesla_oauth_local.py | OAuth helper with local callback server |
| start_proxy.sh | Start the signing proxy (for vehicle commands) |
| stop_proxy.sh | Stop the signing proxy |
Setup is documented in SETUP.md:
State directory: {workspace}/tesla-fleet-api/
config.json (provider creds + non-token config)auth.json (tokens)vehicles.json (cached vehicle list)places.json (named locations)proxy/ (TLS material for signing proxy)No .env file loading โ credentials in config.json or environment variables.
Execute commands on your Tesla. Vehicle is auto-selected if you only have one.
command.py [VEHICLE] <command> [options]
VEHICLE - Vehicle name or VIN (optional if single vehicle)command.py honkcommand.py flash honk (vehicle "flash", command "honk")command.py climate start
command.py climate stop
command.py flash climate start # specific vehicle
command.py climate temps <driver_temp> [passenger_temp]
command.py climate temps 21 # both seats 21ยฐC
command.py climate temps 22 20 # driver 22ยฐC, passenger 20ยฐC
command.py climate keeper <mode>
Modes: off, keep, dog, camp
command.py seat-heater --level <level> [--position <position>]
command.py seat-heater -l <level> [-p <position>]
Levels: | Value | Name | |-------|------| | 0 | off | | 1 | low | | 2 | medium | | 3 | high |
Positions:
| Value | Names |
|-------|-------|
| 0 | driver, front_left, fl |
| 1 | passenger, front_right, fr |
| 2 | rear_left, rl |
| 3 | rear_left_back |
| 4 | rear_center, rc |
| 5 | rear_right, rr |
| 6 | rear_right_back |
| 7 | third_left |
| 8 | third_right |
Examples:
command.py seat-heater -l high # driver (default)
command.py seat-heater -l medium -p passenger
command.py seat-heater --level low --position rear_left
command.py seat-heater -l 2 -p 4 # medium, rear center
command.py seat-heater -l off -p driver # turn off
command.py seat-cooler --level <level> [--position <position>]
command.py seat-cooler -l <level> [-p <position>]
Same levels and positions as seat heater.
Examples:
command.py seat-cooler -l medium -p driver
command.py seat-cooler -l high -p passenger
command.py seat-climate [--position <position>] <mode>
command.py seat-climate [-p <position>] <mode>
Modes: auto, on, off
Examples:
command.py seat-climate auto # driver auto
command.py seat-climate -p passenger auto
command.py seat-climate -p driver off # disable auto
command.py steering-heater <on|off>
Examples:
command.py steering-heater on
command.py steering-heater off
Modern API for scheduling departure preconditioning (replaces deprecated set_scheduled_departure).
command.py precondition add --time <HH:MM> [--days <days>] [--id <id>] [--one-time] [--disabled]
command.py precondition add -t <HH:MM> [-d <days>] [--id <id>]
Days options:
| Value | Description |
|-------|-------------|
| all | Every day (default) |
| weekdays | Monday through Friday |
| weekends | Saturday and Sunday |
| mon,tue,wed,... | Specific days (comma-separated) |
Day names: sun, mon, tue, wed, thu, fri, sat (or full names)
Examples:
command.py precondition add -t 08:00 # every day at 8am
command.py precondition add -t 08:00 -d weekdays # Mon-Fri
command.py precondition add -t 07:30 -d mon,wed,fri
command.py precondition add -t 09:00 --one-time # one-time only
command.py precondition add -t 08:30 --id 123 # modify existing schedule
command.py precondition add -t 08:00 --disabled # create but disabled
command.py precondition remove --id <id>
Examples:
command.py precondition remove --id 123
command.py precondition remove --id 1
command.py charge start
command.py charge stop
command.py charge limit <percent>
Percent must be 50-100.
Examples:
command.py charge limit 80
command.py charge limit 90
command.py flash charge limit 70 # specific vehicle
command.py lock # lock all doors
command.py unlock # unlock all doors
command.py honk # honk the horn
command.py flash # flash the lights
command.py wake # wake vehicle from sleep
With vehicle name:
command.py flash wake # wake vehicle named "flash"
command.py flash flash # flash lights on vehicle "flash"
Fetch vehicle data with human-readable output by default.
vehicle_data.py [VEHICLE] [flags] [--json]
VEHICLE - Vehicle name or VIN (optional if single vehicle)--json = raw JSON output| Flag | Long | Data |
|------|------|------|
| -c | --charge | Battery level, charge limit, charging status |
| -t | --climate | Interior/exterior temp, HVAC status |
| -d | --drive | Gear, speed, power, heading |
| -l | --location | GPS coordinates |
| -s | --state | Locks, doors, windows, odometer, software |
| -g | --gui | GUI settings (units, 24h time) |
| | --config-data | Vehicle config (model, color, wheels) |
# All data
vehicle_data.py
vehicle_data.py flash
# Specific data
vehicle_data.py -c # charge only
vehicle_data.py -c -t # charge + climate
vehicle_data.py flash -c -l # charge + location
# Raw JSON
vehicle_data.py --json
vehicle_data.py -c --json
๐ My Tesla (online)
VIN: 5YJ... (redacted)
โก Charge State
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Battery: [โโโโโโโโโโโโโโโโโโโโ] 78%
Limit: 80%
State: Charging
Power: 11 kW (16A ร 234V ร 3ฯ)
Added: 37.2 kWh
Remaining: 10m
Range: 438 km (272 mi)
Cable: IEC
๐ก๏ธ Climate State
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Inside: 11.9ยฐC
Outside: 6.0ยฐC
Set to: 20.5ยฐC
Climate: Off
Manage OAuth tokens and configuration.
auth.py <command> [options]
auth.py login
Interactive: generates auth URL, prompts for code, exchanges for tokens.
auth.py exchange <code>
Exchange authorization code for tokens (non-interactive).
auth.py refresh
Refresh access token. Note: refresh tokens rotate - the new one is saved automatically.
auth.py register --domain <domain>
Register your app domain with Tesla (required for signed commands).
After registration, enroll your virtual key:
https://tesla.com/_ak/<domain>
auth.py config
Display current configuration (secrets redacted).
auth.py config set [options]
Options:
--client-id <id>--client-secret <secret>--redirect-uri <uri>--audience <url>--base-url <url>--ca-cert <path>--domain <domain>Examples:
# Initial setup
auth.py config set \
--client-id "abc123" \
--client-secret "secret" \
--redirect-uri "http://localhost:18080/callback"
# Configure proxy
auth.py config set \
--base-url "https://localhost:4443" \
--ca-cert "/path/to/tls-cert.pem"
List vehicles with human-readable output.
python3 scripts/tesla_fleet.py vehicles
python3 scripts/tesla_fleet.py vehicles --json
๐ Name: My Tesla
๐ VIN: 5YJ... (redacted)
๐ข Status: Online
๐ค Access: Owner
All setup + configuration is documented in SETUP.md.
| Region | Audience URL |
|--------|--------------|
| Europe | https://fleet-api.prd.eu.vn.cloud.tesla.com |
| North America | https://fleet-api.prd.na.vn.cloud.tesla.com |
| China | https://fleet-api.prd.cn.vn.cloud.tesla.cn |
OAuth token endpoint (all regions):
https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3/token
Wake the vehicle first:
command.py wake
Ensure the signing proxy is running and configured. See SETUP.md ยง Proxy Setup.
auth.py refresh
Specify vehicle by name or VIN:
command.py flash climate start
command.py 5YJ... honk
climate start|stop
climate temps <driver> [passenger]
climate keeper off|keep|dog|camp
seat-heater -l <level> [-p <position>]
seat-cooler -l <level> [-p <position>]
seat-climate [-p <position>] auto|on|off
steering-heater on|off
precondition add -t <HH:MM> [-d <days>] [--id <id>] [--one-time]
precondition remove --id <id>
charge start|stop
charge limit <percent>
lock
unlock
honk
flash
wake
[VEHICLE] [-c] [-t] [-d] [-l] [-s] [-g] [--config-data] [--json]
login
exchange <code>
refresh
register --domain <domain>
config
config set [--client-id] [--client-secret] [--redirect-uri] [--audience] [--base-url] [--ca-cert] [--domain]
File v1.4.2:_meta.json
{ "ownerId": "kn7c7fek4a503rbvj0bxbwx6dx7yw25e", "slug": "tesla-fleet-api", "version": "1.4.2", "publishedAt": 1770920505162 }
File v1.4.2:SETUP.md
This guide covers setup + configuration for the Tesla Fleet API skill.
If you just want the CLI command reference, see SKILL.md.
python3go and openssl (on macOS: brew install go)All runtime state lives in your workspace:
{workspace}/tesla-fleet-api/
Files:
config.json โ provider creds (client id/secret), non-token config (audience, base_url, ca_cert, redirect_uri, domain)auth.json โ tokens (access/refresh)vehicles.json โ cached vehicle listplaces.json โ named locations ({"home": {"lat": ..., "lon": ...}})proxy/ โ TLS material for the signing proxy*.tesla.private-key.pem โ your Tesla EC private keyCredentials come from config.json or environment variables (TESLA_CLIENT_ID, TESLA_CLIENT_SECRET). No .env file loading.
# Generate P-256 keypair
openssl ecparam -name prime256v1 -genkey -noout -out private-key.pem
openssl ec -in private-key.pem -pubout -out public-key.pem
# Host public key at:
# https://YOUR_DOMAIN/.well-known/appspecific/com.tesla.3p.public-key.pem
Store your private key in the workspace:
{workspace}/tesla-fleet-api/YOUR_DOMAIN.tesla.private-key.pem
python3 scripts/auth.py config set \
--client-id "YOUR_CLIENT_ID" \
--client-secret "YOUR_CLIENT_SECRET" \
--redirect-uri "http://localhost:18080/callback" \
--audience "https://fleet-api.prd.eu.vn.cloud.tesla.com"
This writes to {workspace}/tesla-fleet-api/config.json.
Interactive login (manual code paste):
python3 scripts/auth.py login
Automatic login via local callback server:
python3 scripts/tesla_oauth_local.py --prompt-missing-scopes
python3 scripts/auth.py register --domain YOUR_DOMAIN.com
Then, on your phone (Tesla app installed):
https://tesla.com/_ak/YOUR_DOMAIN.com
Note: The proxy is only needed for sending signed commands to the vehicle (climate, locks, charging, honk, etc.). Reading vehicle data (battery, location, temperatures) works without the proxy โ those requests go directly to the Tesla Fleet API.
# Pin to a specific version for supply-chain safety
go install github.com/teslamotors/vehicle-command/cmd/tesla-http-proxy@v0.4.1
This installs tesla-http-proxy to ~/go/bin/. Override the version with TESLA_VEHICLE_COMMAND_VERSION only if you explicitly want a different one.
mkdir -p {workspace}/tesla-fleet-api/proxy
cd {workspace}/tesla-fleet-api/proxy
openssl req -x509 -newkey rsa:4096 \
-keyout tls-key.pem -out tls-cert.pem \
-days 365 -nodes -subj "/CN=localhost"
chmod 600 tls-key.pem
python3 scripts/auth.py config set \
--base-url "https://localhost:4443" \
--ca-cert "proxy/tls-cert.pem"
The ca_cert path is stored relative to the config directory and resolved at runtime.
Use the convenience scripts:
# Start (auto-detects private key in workspace, or pass path explicitly)
./scripts/start_proxy.sh
./scripts/start_proxy.sh /path/to/private-key.pem
# Stop
./scripts/stop_proxy.sh
The proxy runs in the background on https://localhost:4443. Logs go to {workspace}/tesla-fleet-api/proxy/proxy.log.
# Data (no proxy needed)
python3 scripts/vehicles.py
python3 scripts/vehicle_data.py -c
# Commands (proxy required)
python3 scripts/command.py honk
# list
python3 scripts/command.py places list
# set explicit coords
python3 scripts/command.py places set home --lat 48.10033 --lon 17.04217
# set from current vehicle location
python3 scripts/command.py places set school --here
# use in precondition
python3 scripts/command.py precondition add -t 08:00 -d weekdays --place home
| Region | Audience URL |
|--------|--------------|
| Europe | https://fleet-api.prd.eu.vn.cloud.tesla.com |
| North America | https://fleet-api.prd.na.vn.cloud.tesla.com |
| China | https://fleet-api.prd.cn.vn.cloud.tesla.cn |
OAuth token endpoint (all regions):
https://fleet-auth.prd.vn.cloud.tesla.com/oauth2/v3/token
Token expired (401):
python3 scripts/auth.py refresh
Vehicle asleep / unavailable:
python3 scripts/command.py wake
Command not signed / rejected:
Ensure the proxy is running and base_url + ca_cert are configured (step 5).
Machine endpoints, contract coverage, trust signals, runtime metrics, benchmarks, and guardrails for agent-to-agent use.
Machine interfaces
Contract coverage
Status
missing
Auth
None
Streaming
No
Data region
Unspecified
Protocol support
Requires: none
Forbidden: none
Guardrails
Operational confidence: low
curl -s "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/snapshot"
curl -s "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/contract"
curl -s "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/trust"
Operational fit
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Do not use if
Raw contract, invocation, trust, capability, facts, and change-event payloads for machine-side inspection.
Contract JSON
{
"contractStatus": "missing",
"authModes": [],
"requires": [],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": null,
"outputSchemaRef": null,
"dataRegion": null,
"contractUpdatedAt": null,
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "CLAWHUB",
"generatedAt": "2026-04-17T03:45:58.755Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile"
}Facts JSON
[
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceUrl": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "2.5K downloads",
"href": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceUrl": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-04-15T00:45:39.800Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.5.0",
"href": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceUrl": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-02-13T17:26:28.072Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/clawhub-odrobnik-tesla-fleet-api/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[
{
"eventType": "release",
"title": "Release 1.5.0",
"description": "- Dropped the Go runtime dependency; Go is no longer required to use the skill. - Updated required environment variables and optional settings, removing obsolete entries related to signing proxy and public key. - Improved documentation for setup, reflecting dependency changes. - start_proxy.sh script and related requirements simplified due to proxy/signing changes. - Version bumped to 1.5.0.",
"href": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceUrl": "https://clawhub.ai/odrobnik/tesla-fleet-api",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-02-13T17:26:28.072Z",
"isPublic": true
}
]Sponsored
Ads related to Tesla Fleet Api and adjacent AI workflows.