Skip to main content

A package for interacting with Subaru Starlink Remote Services API.

Project description


A python package for interacting with Subaru STARLINK remote vehicle services to obtain information about a vehicle as well as actuate exposed features such as locks, horn, lights and remote start. This package requires an active subscription to Subaru's STARLINK service, which is currently only available in the United States and Canada.

This package was developed primarily for enabling Home Assistant integration, however it may also be used for standalone applications. A basic python console application is included as an example.

This package supports Subaru STARLINK equipped vehicles with active service plans. A MySubaru account must be setup prior to using this package. The features available will depend on the model year and type of service plan (Safety Plus or Safety/Security Plus).

Model Year Safety Plus Security Plus
2016-2018 No Support Remote Lock/Unlock
Remote Horn and/or Lights
Remote Vehicle Locator
Odometer (updated every 500 miles)
2019+ Tire Pressure#
Fuel Economy#
Fuel Range#
Remote Lock/Unlock
Remote Horn and/or Lights
Remote Vehicle Locator
Remote Engine Start w/ Climate Control
PHEV Start Charge*
Door/Window Status**
Tire Pressure
Fuel Economy
Fuel Range
Battery Voltage
External Temperature

# Unclear how often this is updated
* Plug-In hybrid only
** Support varies by model

NOTE: This project was developed based upon analysis of the official MySubaru Android app. Subaru has no official public API; therefore, this library may stop working at any time without warning. Use at your own risk.


Inspired by the teslajsonpy package, licensed under Apache 2.0.

Home Assistant Integration

hass_screenshot A Home Assistant custom component is available to integrate this module into your Home Assistant instance. In addition, a PR is pending to include Subaru as part of Home Assistant Core.

Standalone Installation

For those that would like to use the standalone console application or include the package in their own application, install from PyPI:

$ pip install subarulink


The PyPI installation includes a basic interactive console application. The application can either be run interactively or used to issue a single command. The single command function requires a working config file to function properly (config file is automatically created during the first interactive run). Note that not all exposed functions are supported by all vehicles. Consult your subscription details to determine which commands apply to your vehicle.

usage: subarulink [-h] [-i] [-c CONFIG_FILE] [-v {0,1,2}]

optional arguments:
  -h, --help            show this help message and exit
  -i, --interactive     interactive mode
                        specify config file (default is ~/.subarulink.cfg
  -v {0,1,2}, --verbosity {0,1,2}
                        verbosity level: 0=error[default] 1=info 2=debug

  execute single command and exit

    status              get vehicle status information
    lock                lock doors
    unlock              unlock doors
    lights              turn on lights
    horn                sound horn
    locate              locate vehicle
    remote_start        remote engine start
    remote_stop         remote engine stop
    charge              start PHEV charging

STARLINK accounts with multiple vehicles will need to specify the VIN for single commands. This can be done in two ways:

  • Set a default VIN while in interactive mode, which will be saved to the configuration file and used for all single commands
  • Specify a VIN from the command line with --vin. This will override the default VIN in the configuration file Accounts with only one vehicle do not need to specify a VIN


A JSON file is used for configuration. A user provided file can be passed to the CLI via the --config. If no config file is provided, two default locations are searched for. First is ~/.subarulink.cfg and if that is not found, $XDG_CONFIG_DIR/subarulink/subarulink.cfg (XDG_CONFIG_HOME will be used.

Known Issues

Battery Discharge

Aggressively polling the vehicle location with subarulink.Controller.update(vin) may discharge the auxiliary battery (in a PHEV). Intermittent (every 2 hours) use isn't a problem, but polling at 5 minute intervals will drain the auxiliary battery fully after a few consecutive non-driving days. The vehicle does report the auxiliary battery voltage with every update, so this can be avoided.

Effects of aggressive polling on the battery of a gasoline-only vehicle are unknown.

Erroneous data

The data returned by the Subaru API is sometimes invalid. The returned data is checked for erroneous values. If they are invalid, the local cache will retain the last sane value.

Incomplete data

Some of the fields that would be useful are always reported back as "UNKNOWN". Examples include door lock state, window state (on some vehicles), etc.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for subarulink, version 0.3.15
Filename, size File type Python version Upload date Hashes
Filename, size subarulink-0.3.15.tar.gz (33.7 kB) File type Source Python version None Upload date Hashes View
Filename, size subarulink-0.3.15-py3-none-any.whl (31.1 kB) File type Wheel Python version py3 Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page