Skip to main content

Tesla

Tesla logo

Tesla Energy is one of the most recognized names in distributed energy, offering a vertically integrated ecosystem that includes Powerwall batteries, solar panels, EVs, and the Powerhub platform for grid services. Their systems are widely deployed across residential, commercial, and utility settings, and Tesla continues to expand its footprint through both retail and partner channels. The Tesla Energy ecosystem is unified through robust software platforms, enabling real-time monitoring and intelligent control across all assets.

Texture supports Tesla’s Fleet API and Grid Services API (Powerhub). These integrations allow us to enroll and manage fleets of Tesla Powerwalls for grid programs, pull live and historical telemetry, and initiate control actions — all in a secure and standardized way. We’re working closely with Tesla to enable large-scale integrations for Co-ops, DERMS providers, and utility-aligned aggregators, helping them access and orchestrate behind-the-meter Tesla systems at scale.

These integrations unlock the ability to not only monitor and optimize performance, but also automate participation in grid services with minimal overhead — bridging the gap between distributed Tesla devices and centralized utility systems.

Common Use Cases

  • Grid Services Participation (e.g., frequency response, load shifting)
  • Virtual Power Plants (VPPs)
  • Co-op and CCA Program Integration
  • DERMS Integration
  • Performance Monitoring & Fleet Management
  • Load Flexibility & Peak Shaving
  • Resiliency Planning & Backup Power Coordination

Website: Tesla Website

Support Status

Support Level: ✅ Production-ready, fully supported integration

Grid Services Support: ✅ Supported

Supported Device Types

Electric Vehicles, EV Chargers, Batteries, Solar Inverters

Integration Details

Tesla devices are integrated into the Texture platform using our standard OEM integration approach. We never use web scraping or reverse engineering in our device integrations.

Integration Method: 🔌 Direct API integration with the manufacturer

Manufacturer Documentation

Overview

We are using the official Tesla FleetAPI or their Powerhub to connect to Tesla accounts.

For Fleet API connections, a typical OAuth flow is used to authenticate the user and obtain consent to access their Tesla account and thus devices.

For Powerhub/Grid Services the flow is a bit more involved and custom, contact us for more details. As a result, the docs below pertain mostly to Fleet API and not Powerhub.

Authorization

In the majority of cases, if the user simply clicks "Select All" when connecting their Tesla account, the necessary authorization scopes will be granted.

However, in cases where the user wants to manually select the authorization scopes, the authorization scopes required would depend on the level of access you would like to have. Specifically what kind of device data you would like to access, vehicles vs. energy products (inverters, powerwalls, etc.).

User flow

When authorizing the Tesla connection, the user will be prompted to select the authorization scopes they would like to grant to Texture.

Note: At minimum the user must grant the necessary scopes for reading data from the devices you would like to access. If you would like to execute commands on the devices, they must also grant the necessary scopes for that.

The following sections contain images of the checkboxes required for various levels of access.

Vehicles

Minimum required scopes for reading vehicle data:

Additional required scopes for executing commands on vehicles (at least one of these is required):

Energy Products

Minimum required scopes for reading energy product data:

Additional required scopes for executing commands on energy products:

Additional resources on authorization scopes

For an overview on Tesla's authorization scopes, please refer to the official Tesla FleetAPI documentation.

They additionally have an endpoint listing the authorization scopes required for various endpoints here.

Insufficent Scopes

If the user does not grant the necessary scopes, you will unfortunately either not be able to access their devices, or not be able to access all the data you would like to.

To rectify this situation, direct the user to update the access the Texture application has to their Tesla account. They can also revoke access their as well and then go through the Connect flow again, ensuring the necessary scopes are granted this time around.

  1. Send the user to update the access Texture has to their Tesla account
  2. They will be prompted to log in, and then can revoke or update access the Texture app has to their account
  3. Afterward, they must go through the Connect flow again to grant the necessary scopes or re-grant access to their account under the new scopes.

Battery Import/Export Limitations

Before you can successfully issue a discharge or charge command to a Tesla Powerwall via the Texture Platform to export or import energy to/from the grid, you must first ensure that the customer's Powerwall is configured to allow this.

Tesla provides detailed information about this in their Advanced Settings documentation.

Some details from the above page are also captured in the following sections.

Permission to Export

Details can be found at: https://www.tesla.com/support/energy/powerwall/mobile-app/advanced-settings#permission-to-export

In the Tesla App, the customer should be able to see and adjust the following option:

If this option is unavailable or can't be found, the customer should contact Tesla or their installer to enable this feature.

If it is available, ensure the customer has it enabled or set to "Yes" to allow exporting energy to the grid.

Energy Export Preferences

Details can be found at: https://www.tesla.com/support/energy/powerwall/mobile-app/advanced-settings#energy-exports

Assuming the user has permission to export enabled, they should also be able to see and adjust the following option:

If this option is unavailable or can't be found, the customer should contact Tesla or their installer to enable this feature.

If it is available, ensure the customer has it set to "Everything" to allow exporting the battery in addition to solar energy to the grid.

Note: When sending a discharge command to a battery with the enableGridInteraction flag set to true, we will attempt to adjust the export preferences to allow exporting the battery in addition to solar energy to the grid.

Grid Charging

Details can be found at: https://www.tesla.com/support/energy/powerwall/mobile-app/advanced-settings#grid-charging

In the Tesla App, the customer should be able to see and adjust the following option:

Even if the customer doesn't have this option enabled, the battery still will be capable of charging from the grid when it has low energy, assuming of course it is connected to the grid.

Solar will still be prioritized over grid charging in most cases when set to "Yes", unless there is a financial incentive to charge from the grid or there is insufficient solar energy available.

Note: When sending a charge command to a battery with the enableGridInteraction flag set to true, we will attempt to adjust the grid charging preferences to allow charging the battery from the grid.

Vehicle Command Execution

The new Tesla FleetAPI has some additional requirements when it comes to executing commands on vehicles.

The user must first grant the scope in the above section to allow executing commands on their vehicles, but additionally must register a virtual key with their vehicle.

The basic process for this is as follows:

  1. Open the Tesla app and select a vehicle
  2. Visit https://www.tesla.com/_ak/cdn.texturehq.com from their phone or desktop

The user will then be prompted to add the key to their selected vehicle.

After adding the key, Texture can now send commands to the vehicle over the internet on your behalf.

Troubleshooting

If you are attempting to execute one of the vehicle commands via our api, you may notice when querying for the status of the command, that you receive back a reason field indicating the following:

vehicle rejected request: your public key has not been paired with the vehicle

This indicates that the user has not yet paired our virtual key with their vehicle. The user must follow the steps in the previous section to pair the virtual key with their vehicle before Texture can send commands to it.