Tesla Methodology · v2.0

How we calculate your Tesla battery health

No black boxes. Every number on your Tesla dashboard and passport is derived from raw Tesla Fleet API data using the formulas below. The same inputs always produce the same outputs — so anyone can verify our work.

How we certify your battery

The short version — what VoltValue actually does, in four steps.

We connect directly to Tesla
No screenshots, no manual entry. We use Tesla's official Fleet API with read-only access — the same data Tesla itself uses. Your credentials never touch our servers.
We collect multiple readings over time
A single battery reading can drift ±2% with temperature and charge level. We collect readings over up to 180 days and use the median — so one bad day doesn't skew your result. The system requires at least 7 days of data before a passport can be issued, so the median is reliable enough.
We cross-check two independent methods
We compare the range-based estimate from Tesla against your BMS data (if provided). If they disagree beyond our tolerance, we flag it rather than guess.
We benchmark against similar cars
Your SoH only means something in context. We compare against real vehicles with the same model, year, and mileage range — not a global average.
Technical specification — for engineers and sophisticated buyers
In plain language

Before the formulas, here's the everyday version of what VoltValue does behind the scenes — no engineering required.

  1. 1
    You connect your Tesla once
    Through Tesla's official login page (OAuth). We get a read-only key. We can never unlock, honk, drive, or change anything in your car.
  2. 2
    Once a day, automatically
    Once a day (automatically, at 2 AM UTC) we ask Tesla for your battery level, mileage, and charging sessions — whether or not you have the app open. Tapping Refresh pulls a new daily snapshot from Tesla; the SoH you see is still the weighted median of up to 180 days of snapshots.
  3. 3
    Each daily reading is saved to your account
    On the first day we immediately backfill up to 180 days of charging session history from Tesla, so kWh and cycle count data are available right away. However, daily battery health snapshots (SoH readings) are collected going forward from the day you connect — Tesla does not provide an API to retrieve historical range data.
  4. 4
    When you're ready to sell, we issue a passport
    We pull one more snapshot, fold it into your weighted-median SoH, run the formulas below, and produce a single-page certificate with a public verification link buyers can scan.
Your data stays in your account. We never sell it, never share it, and the read-only access means we physically cannot control your car.
STEP 01

Pull raw data from Tesla

When you click Generate Passport, we call the official Tesla Fleet API endpoint /api/1/vehicles/{id}/vehicle_data with three endpoint groups:

  • charge_state — usable_battery_level (%, decimal — excludes cold-locked capacity; falls back to battery_level), ideal_battery_range (km), charge_limit_soc
  • vehicle_state — odometer (km)
  • vehicle_config — car_type, trim_badging, exterior_color
We never store your Tesla password. We use OAuth 2.0 with the vehicle_device_data scope only.
STEP 02

Project full-charge range

Tesla reports the ideal_battery_range at your current state of charge. We linearly project that to a 100% charge:

range_at_100% = (ideal_battery_range / battery_level) × 100

Example: a Model 3 LR showing 354 km at 65% projects to (354 / 65) × 100 = 545 km at full charge.

We require battery_level ≥ 40% to compute SoH. Below that, the BMS estimate is noisy and we refuse rather than publish a bad number.
STEP 03

Compare to WLTP-rated range*

We divide the projected full-charge range by the original WLTP-rated range for your exact model, year, and trim:

SoH (%) = (range_at_100% / WLTP_rated_range) × 100

On your dashboard, we display the SOC-weighted median of up to 180 days of snapshots — not a single live reading. 180 days spans Thailand's two main seasons (hot and rainy), so the median isn't skewed by temperature in any single period — while remaining short enough that the Passport reflects the car's current condition. Snapshots taken at SOC ≥ 80% are weighted 2×, SOC 50–79% at 1×, SOC 40–49% at 0.5×. The median resists outlier days caused by temperature or unusual driving. Snapshots taken within 3 days of a Tesla OTA software update are excluded to avoid artificially shifting the trend. Snapshots captured while the car is actively charging are also excluded — SOC and range are unreliable mid-charge. Snapshots taken at SOC ≥ 80% are weighted 2× because they require less extrapolation to estimate full-charge range, making them more accurate than low-SOC readings.

WLTP-rated values from Tesla Thailand: Model 3 Standard RWD 2024+ = 534 km, Model 3 Long Range RWD 2024+ = 750 km, Model 3 Performance 2024+ = 571 km, Model 3 Long Range AWD 2021–2023 = 614 km, Model 3 Standard RWD 2021–2023 = 491 km, Model Y Standard RWD = 488 km, Model Y Long Range RWD = 661 km, Model Y Long Range AWD = 629 km, Model Y L Long Range AWD = 681 km. We switched from EPA to WLTP because Tesla sells in Thailand with WLTP specifications, and Asian driving conditions are closer to the WLTP standard than EPA, which is tested in U.S. climate conditions. Values below 75% are flagged as LOW rather than discarded — high-mileage cars can legitimately reach this range. Values outside 70–104% are flagged as sensor anomalies and excluded from the median — never clamped or adjusted. The upper bound is 104% (not 100%) because near-new cars can legitimately project slightly above WLTP due to manufacturing tolerance.

LFP vs NMC chemistry

We detect battery chemistry from three signals in priority order: average cell voltage from your uploaded BMS CSV (< 3.5 V = LFP), VIN prefix (LRW… = China-built LFP), and model/year/trim fallback (Model Y RWD 2023+, Model 3 RWD 2021+ = LFP). LFP packs use a different energy-per-km baseline and a wider cross-check tolerance (±12 points vs ±7 for NMC) because range-based SoH is less precise for flat-voltage-curve chemistries.

STEP 04

Compute cycles & degradation rate

Cycle count is derived from the actual energy you've put through the pack. We sum every kWh logged in your daily telemetry (home + Supercharger) and divide by usable pack capacity. If you have no telemetry yet, we show an estimated value from odometer ÷ WLTP range for this model, adjusted for Bangkok's average temperature (LFP −8%, NMC −5% vs the 23°C WLTP test condition), displayed with a ~ prefix to indicate it's an estimate.

cycles = Σ(kwh_charged_home + kwh_charged_supercharger) / pack_kWh_usable

Pack capacity (usable): Model 3 LR/Performance ≈ 78 kWh, Model Y LR ≈ 75 kWh, Model Y Standard (LFP) ≈ 57.5 kWh, Model S ≈ 100 kWh (Plaid 95), Model X ≈ 100 kWh (Plaid 95).

degradation_rate (%/yr) = (100 − SoH) / vehicle_age_years
STEP 05

Compare against comparable Teslas

Your SoH is benchmarked against the rolling mean of the latest health report from every Tesla in our database that matches your model, year, and 20,000-km mileage band. No external benchmark, no hardcoded number — if 18 other 2022 Model 3s with 60–80k km are in the fleet, we average those 18. When the same-segment cell has fewer than 5 cars we widen scope to same model + year, then same model, and label the comparison accordingly. The segment average is recomputed every time a new passport is generated.

fleet_avg = mean(latest_report.soh_pct for peers in same model + year + 20k-km mileage band)

When even the broadest cohort (model only) has fewer than 5 comparable cars, the certificate omits the fleet comparison entirely rather than show a fabricated number.

STEP 06

Sign & publish the passport

Each passport is written to our database with a unique public_slug and a tamper-evident URL at /passport/{slug}. Buyers can verify authenticity at any time via the public verify endpoint — /api/public/verify/{slug} — which returns the issuance timestamp and the original SoH reading.

Transparency note

Where every number on your report comes from

Every figure on the dashboard and passport is computed from real data only. SoH is the SOC-weighted median of up to 180 days of Tesla Fleet API snapshots (or your uploaded BMS CSV, cross-checked at issue time against a fresh Fleet API range reading within ±7 points for NMC / ±12 points for LFP). Cycle count comes from your actual logged charging sessions. If no sessions exist yet, we use an estimate from odometer ÷ WLTP range for this model (shown with a ~ prefix). Fleet average is the mean of the latest passport from every Tesla currently connected to VoltValue, recomputed when a new passport is issued. If a value can't be computed (no telemetry yet, no other cars in the fleet), we show '—' rather than a fabricated number.

Glossary

Three terms worth knowing

We use these phrases throughout the dashboard and passport. Terms marked with an asterisk (*) earlier on this page are defined here.

WLTP-rated range
WLTP (Worldwide Harmonised Light Vehicle Test Procedure) is the global standard used to test electric vehicle driving range. It covers a more diverse set of driving conditions than EPA and is the standard Tesla uses for advertising in Thailand and Europe. We switched from EPA to WLTP because Tesla sells in Thailand with WLTP specifications, and Asian driving conditions are closer to the WLTP standard than EPA, which is tested in U.S. climate conditions.
Ranking (against the fleet)
Instead of saying 'your SoH is 92.3%' (a number nobody can verify perfectly), we line your car up next to other Teslas of the same model, year, and similar mileage and tell you where you stand — e.g. 'top 15% of 2021 Model 3s with 60–80k km.' The relative position is far more reliable than the absolute number, because any measurement error cancels out when every car is measured the same way.
VoltValue fleet
The full set of Teslas connected to VoltValue. We use this group as the benchmark when ranking your car. The fleet average is the mean SoH of the latest passport from each connected Tesla — recomputed every time a new passport is issued, never hardcoded. If you're the first connected Tesla, the fleet average simply won't appear yet — same idea as a third-party vehicle history database: the more cars in the database, the stronger the signal.
Should you trust these numbers?

An honest answer about accuracy

We don't claim to measure your battery cells directly — nobody outside Tesla can. Here's what we actually do, and why it still matters more than what your car's screen says.

Aren't these just estimates?
Yes. Tesla doesn't expose a true SoH value through any public API — not to us, not to independent shops, not to Tesla service centers (they use proxies too). Lithium-ion SoH naturally drifts ±1% with temperature and state-of-charge. We're transparent about that, instead of pretending otherwise.
Then what's the point?
The dashboard reading on a Tesla is easy to game — charge to 100% before listing the car and the rated range looks great. We pull up to 180 days of past behavior straight from Tesla: home vs Supercharger ratio, time spent above 90% SoC, idle-at-full-charge events, cycle count. That history can't be staged the night before a sale.
Why is comparison better than an absolute number?
Buyers don't actually need to know if the pack is at 92.3% or 92.7% — they need to know whether this car was treated better than average. We rank* you against the VoltValue fleet* so the question becomes 'is this one of the well-cared-for cars?' instead of 'is this estimate correct to the decimal?'.
What if you're wrong?
Every passport is signed, timestamped, and has a public verification URL anyone can scan. The full methodology is on this page — same inputs always produce the same outputs. If a buyer thinks the number is off, they can check the math against Tesla's own range reading within a day of taking delivery — the same input that feeds our median. That accountability is exactly why we don't overpromise.
Bottom line: we're not a battery tester — we're a statistical comparison and audit trail. Treat the score the same way you'd treat a third-party vehicle history report: not the whole truth, but a strong signal you can't fake.
Verified-tier integrity

How we keep BMS uploads honest

Verified passports use BMS data the owner uploads from Scan My Tesla, TeslaFi, or TeslaMate. CSV files can technically be edited, so we run three independent layers of defense before a Verified badge is ever issued.

  1. 1
    Sanity bounds at upload time
    We reject any nominal_full_pack value above 102% of the factory new-pack rating, or below 50% of it. A common tampering attempt — bumping 72.5 kWh to 78 kWh on a 78.5 kWh pack — is caught instantly because the gain is not physically possible.
  2. 2
    Cross-check against a fresh Tesla Fleet API range reading at issue time
    When the passport is generated, we fetch one fresh range-based SoH directly from Tesla purely for cross-check and compare it to the BMS SoH. If the two disagree by more than ±7 percentage points (NMC) or ±12 percentage points (LFP), we refuse to issue the certificate. Faking the BMS file alone is not enough — the car would actually have to drive farther on a charge.
  3. 3
    Transparent provenance on the certificate
    Verified passports explicitly say 'Verified · BMS + Fleet API cross-check' and the methodology line states the BMS data is user-submitted. Buyers see exactly what was measured and how it was confirmed — there is no hidden 'trust us' layer.
Net effect: a tampered file would have to satisfy the new-pack ceiling, match a fresh Fleet API range reading captured at issue time the seller does not control, and survive public verification. We have not found a realistic way to fake all three at once.
Further reading

Related guides