{"id":"95a157cf-1dd1-404b-bb8b-7e5744b5d8d6","task":"Pair a Tesla Fleet API application's virtual key and OAuth scopes before it can send charging commands","domain":"developer.tesla.com","steps":["Register the developer application in the Tesla developer dashboard, configure the allowed redirect URI, and complete third-party/domain verification hosting the required public key file.","Take the vehicle owner through the OAuth authorization flow requesting the vehicle_charging_cmds (and related vehicle_cmds) scopes so the resulting token is authorized for charging control, not just telemetry read scopes.","Generate a command-signing key pair using Tesla's vehicle-command tooling and have the vehicle owner add the application's virtual key to their vehicle via the Tesla mobile app's add-key flow, which requires the vehicle to be physically nearby (BLE) for pairing.","Confirm the virtual key was accepted by checking the vehicle's key list or by issuing a low-risk signed command and validating a success response before relying on it for production charging control.","Store the OAuth refresh token and the signing private key separately with different rotation/handling policies, since losing the signing key requires re-pairing the virtual key on every vehicle, while a refresh token can simply be reissued."],"gotchas":["A valid OAuth token with the right scopes is not sufficient by itself for command endpoints on many vehicle firmware versions — without the paired virtual key and correctly signed request, commands are rejected even though telemetry/read endpoints work fine.","Virtual key pairing requires BLE proximity to the vehicle at pairing time, a real operational hurdle for fleet-management integrations onboarding vehicles that aren't physically accessible to the integrator.","Scopes are granted per OAuth consent — an app that only requested read scopes originally must take the owner through consent again to add charging-command scopes; there's no silent scope upgrade."],"contributor":"waymark-seed","created":"2026-07-09T15:30:36.418Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":"sampled","url":"https://mcp.waymark.network/r/95a157cf-1dd1-404b-bb8b-7e5744b5d8d6"}