cure / cryptotsla

A simple JSON api that exposes the current Bitcoin spot price for a Tesla, optionally taking model variants and options into account.

Home Page:https://api.cryptotsla.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Overview

cryptotsla calculates the current Bitcoin spot price of a specific Tesla vehicle configuration, optionally taking a currency and regionally available Tesla vehicle configurations into account.

The information is made available via a JSON API that can be queried via http, e.g.:

curl -s "https://api.cryptotsla.com/model/Y" |jq .
{
  "Model": "Y",
  "BasePrice": 41990,
  "Variant": "StandardRange",
  "Options": {
    "DestinationFee": 1200
  },
  "BTCSpotPrice": "48026.86",
  "Currency": "USD",
  "Total": 43190,
  "TotalBTC": "0.8992884398438707",
  "GeneratedByURL": "https://api.cryptotsla.com",
  "Timestamp": "2021-02-15T17:28:59.903489389-05:00"
}

To get just the BTC total:

curl -s "https://api.cryptotsla.com/model/Y"  |jq .TotalBTC
0.8992884398438707

The default model Y variant, "StandardRange", was selected automatically. To request a different variant:

curl -s "https://api.cryptotsla.com/model/Y/LongRange" |jq .
{
  "Model": "Y",
  "BasePrice": 49990,
  "Variant": "LongRange",
  "Options": {
    "DestinationFee": 1200
  },
  "BTCSpotPrice": "48192.08",
  "Currency": "USD",
  "Total": 51190,
  "TotalBTC": "1.0622077320588777",
  "GeneratedByURL": "https://api.cryptotsla.com",
  "Timestamp": "2021-02-15T17:36:50.646497513-05:00"
}

It is also possible to specify vehicle options:

curl -s "https://api.cryptotsla.com/model/Y/LongRange?options=TowHitch,SevenSeatInterior" |jq .
{
  "Model": "Y",
  "BasePrice": 49990,
  "Variant": "LongRange",
  "Options": {
    "DestinationFee": 1200,
    "SevenSeatInterior": 3000,
    "TowHitch": 1000
  },
  "BTCSpotPrice": "48108.21",
  "Currency": "USD",
  "Total": 55190,
  "TotalBTC": "1.147205435413207",
  "GeneratedByURL": "https://api.cryptotsla.com",
  "Timestamp": "2021-02-15T17:37:36.980907053-05:00"
}

If an option is requested that does not exist, it will be ignored. Some options only exist in certain territories and will only be included when the relevant currency is selected.

A different currency can be selected. This also limits the response to the models, variants and options available in the relevant territory, for example:

curl -s "https://api.cryptotsla.com/model/3/LongRange?options=Red&currency=GBP" |jq .
{
  "Model": "3",
  "BasePrice": 46990,
  "Variant": "LongRange",
  "Options": {
    "Red": 2000
  },
  "BTCSpotPrice": "34697.26",
  "Currency": "GBP",
  "Total": 48990,
  "TotalBTC": "1.4119270513003044",
  "GeneratedByURL": "https://api.cryptotsla.com",
  "Timestamp": "2021-02-15T17:50:49.112942967-05:00"
}

Model, variant and option names are case insensitive.

Get a list of available models and options:

curl -s "https://api.cryptotsla.com/available" |jq .
{
  "Models": [
    {
      "Name": "S",
      "Options": [
        "Black",
        "Silver",
        "EnhancedAutopilot",
        "DestinationFee",
        "Blue",
        "CreamInterior",
        "ArachnidWheels",
        "BlackAndWhiteInterior",
        "FSD",
        "Red"
      ],
      "Variants": [
        "PlaidPlus",
        "LongRange",
        "Plaid"
      ]
    },
    {
      "Name": "3",
      "Options": [
        "TowHitch",
        "BlackAndWhiteInterior",
        "FSD",
        "Wintertires",
        "Blue",
        "Black",
        "Silver",
        "SportWheels",
        "DestinationFee",
        "Red",
        "EnhancedAutopilot"
      ],
      "Variants": [
        "StandardRangePlus",
        "LongRange",
        "Performance"
      ]
    },
    {
      "Name": "X",
      "Options": [
        "BlackAndWhiteInterior",
        "EnhancedAutopilot",
        "Black",
        "DestinationFee",
        "FSD",
        "TurbineWheels",
        "CreamInterior",
        "Red",
        "SixSeatInterior",
        "SevenSeatInterior",
        "Blue",
        "Silver"
      ],
      "Variants": [
        "LongRange",
        "Plaid"
      ]
    },
    {
      "Name": "Y",
      "Options": [
        "InductionWheels",
        "Silver",
        "TowHitch",
        "Black",
        "BlackAndWhiteInterior",
        "SevenSeatInterior",
        "DestinationFee",
        "FSD",
        "Red",
        "Blue"
      ],
      "Variants": [
        "LongRange",
        "Performance",
        "StandardRange"
      ]
    }
  ]
}

Room for improvement

  • There is no BTC-CAD order book via this Coinbase API. Use a different API? The Coinbase developer API seems to have a price endpoint for CAD.
  • We need some sort of locale option. Particularly for the Euro pricing, where there are differences between the countries that use the Euro.
  • Many currencies are missing from config.yml.example
  • Add tests

Building the software

GNU Make and a Go compiler, version 1.11 or higher are required.

Build with the make command from the root of the tree.

Running the software

Copy the config.yml.example file to config.yml and adjust as necessary. Run the software with the ./cryptotsla command. A sample systemd unit file is provided in the systemd subdirectory.

Hacking

GNU Make and a Go compiler, version 1.11 or higher are required. In addition, GolangCI-Lint is needed.

Build the software with the make dev command.

Licensing

cryptotsla is Free Software, released under the GNU Affero GPL v3 or later. See the LICENSE file for the text of the license.

About

A simple JSON api that exposes the current Bitcoin spot price for a Tesla, optionally taking model variants and options into account.

https://api.cryptotsla.com

License:GNU Affero General Public License v3.0


Languages

Language:Go 92.0%Language:Shell 5.9%Language:Makefile 2.2%