{"info":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","description":"<html><head></head><body><p>The Iternio Telemetry API allows your application to send data to A Better Routeplanner for use in driving with live data, and helping us improve our car modelling.</p>\n<p>To be able to use the API, you will need to obtain an API key and a user token for each user. The Telemetry-Only API keys are free, and get you basic access to the Telemetry API. Contact us at <a href=\"https://mailto:contact@iternio.com\">contact@iternio.com</a> to receive a Telemetry API key. The API key identifies your application to our server for authentication.</p>\n<p>There are two ways of retrieving a user token for each telemetry, which is needed to identify the user (and vehicle) to the server so we can deliver the telemetry to them. The preferred method is via OAuth2 (See OAuth2 API), which will return a user token without any data entry. It’s also acceptable to have the user retrieve a token from our Live Data Setup screen.</p>\n<h1 id=\"api-endpoints\">API endpoints</h1>\n<p>The main endpoint is the send endpoint which transmits vehicle telemetry (live data) to the ABRP/Iternio servers. This data will be presented to the user and used while planning and driving with ABRP.<br>When telemetry data is given to us, we want to give back some data which helps you create a better user experience in your app or service. Therefore we offer also the non-telemetry-related endpoints</p>\n<ul>\n<li><p>get_next_charge: Returns the next charge-to SoC while the user is driving, so that your app can signal the user when the charging is done or similar</p>\n</li>\n<li><p>get_latest_plan: Returns the latest plan the user has created so that your app can display it or do something with it for the benefit of the user</p>\n</li>\n</ul>\n<h1 id=\"common-for-all-telemetry-api-endpoint\">Common for all Telemetry API endpoint</h1>\n<p>The base address of the version 1 API is <a href=\"https://api.iternio.com/1/\">https://api.iternio.com/1/</a></p>\n<p>You can call all endpoints using HTTP GET or POST – both works. In both cases, the parameters have to be URLencoded, either in the URL (for GET) or in the body (for POST).</p>\n<p>The API is a standard REST API with HTTP parameters and JSON input/output. The API is versioned, and the current version is 1. When we introduce non-backwards compatible changes, we will bump the API version and run the versions in parallel as long as it is possible.</p>\n<h1 id=\"authentication\">Authentication</h1>\n<p>Authentication is done vida the URL query parameter \"api_key=xxxx\" or the HTTP header \"Authorization\" with the value \"APIKEY xxxxx\". You can obtain API keys and more information by contacting us at <a href=\"https://mailto:contact@iternio.com\">contact@iternio.com</a>.</p>\n<h1 id=\"return-values\">Return values</h1>\n<p>The API uses JSON objects for return values, outside of the normal HTTP status codes. HTTP status codes are only used to indicate serious errors such as invalid API key or wrong usage of the API. Everything else is returned with an HTTP 200 and an application/json payload.</p>\n<p>The return object has two mandatory fields</p>\n<ul>\n<li><p>status: One of \"ok\", \"error\" or other more specific strings</p>\n</li>\n<li><p>result: The actual result of the operation (list of chargers, plan, etc)</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"API endpoints","slug":"api-endpoints"},{"content":"Common for all Telemetry API endpoint","slug":"common-for-all-telemetry-api-endpoint"},{"content":"Authentication","slug":"authentication"},{"content":"Return values","slug":"return-values"}],"owner":"7396339","collectionId":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","publishedId":"SWTK5a8w","public":true,"customColor":{"top-bar":"F0F0F0","right-sidebar":"303030","highlight":"E04B34"},"publishDate":"2020-02-11T13:07:15.000Z"},"item":[{"name":"send","id":"fdb20525-51da-4195-8138-54deabe907d5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api.iternio.com/1/tlm/send?token=<ABRP user token>&tlm={\"utc\":1553807658,\"soc\":80.4,\"soh\":97.7,\"speed\":0,\"lat\":29.564,\"lon\":-95.025,\"elevation\":50,\"is_charging\":0,\"power\":13.2,\"ext_temp\":25,\"batt_temp\":25,\"car_model\":\"chevy:bolt:17:60:other\",\"current\":36.66,\"voltage\":360}","description":"<p>This is the main method of the Iternio Telemetry API. It will respond with any errors encountered when processing the telemetry, or with the standard “status”: “ok” response if no issues were encountered.</p>\n<p>If the status is not \"ok\", then a number of errors may be indicated in the \"errors\" property of the returned JSON object.</p>\n<p>There are a number of required parameters which must be in every call to the API. Without these, we cannot provide a useful driving mode to the user. There are also optional (but highly desired) parameters which add insight to the vehicle and help with producing more accurate plans and car models.</p>\n<p>All parameters are expected to be received in metric. They will be converted for display to the user if required. The desired data rate is one point every 5 seconds, but slower rates are accepted. Less than one every 30 seconds is recommended against.</p>\n<h3 id=\"processing-delay\">Processing delay</h3>\n<p>The backend system works with telemetry data in batches for efficiency and to be able to merge telemetry from different sources (e.g. from the Telemetry API and GPS from the app).</p>\n<p>Currently, the system delays processing by 60 seconds to wait for all sources of telemetry to report data. A consequence of this is also that <strong>if you only send data within a 60 second window, it will not get processed</strong> until you send data outside of that window (i.e. data for the next minute).</p>\n<h2 id=\"telemetry-parameters\">Telemetry parameters</h2>\n<p>The required parameters (and expected units) in the tlm JSON object are the following, in order of priority. Nothing is strictly required, but many features in ABRP will only be usable with enough data.</p>\n<p>High priority parameters:</p>\n<ul>\n<li><p><code>utc</code> [s]: UTC timestamp of the data (epoch) in seconds (note, not milliseconds!)</p>\n</li>\n<li><p><code>soc</code> [SoC %]: State of Charge of the vehicle (what's displayed on the dashboard of the vehicle is preferred)</p>\n</li>\n<li><p><code>power</code> [kW]: Instantaneous power output/input to the vehicle. Power output is positive, power input is negative (charging)</p>\n</li>\n<li><p><code>speed</code> [km/h]: Vehicle speed</p>\n</li>\n<li><p><code>lat</code> [°]: Current vehicle latitude</p>\n</li>\n<li><p><code>lon</code> [°]: Current vehicle longitude</p>\n</li>\n<li><p><code>is_charging</code> [bool or 1/0]: Determines vehicle state. 0 is not charging, 1 is charging</p>\n</li>\n<li><p><code>is_dcfc</code> [bool or 1/0]: If is_charging, indicate if this is DC fast charging</p>\n</li>\n<li><p><code>is_parked</code> [bool or 1/0]: If the vehicle gear is in P (or the driver has left the car)</p>\n</li>\n</ul>\n<p>The lower priority parameters (and expected units) are:</p>\n<ul>\n<li><p><code>capacity</code> [kWh]: Estimated usable battery capacity (can be given together with soh, but usually not)</p>\n</li>\n<li><p><code>soe</code> [kWh]: Present energy capacity of the battery, equal to <code>SoC</code> * <code>capacity</code></p>\n</li>\n<li><p><code>soh</code> [%]: State of Health of the battery. 100 = no degradation</p>\n</li>\n<li><p><code>heading</code> [°]: Current heading of the vehicle. This will take priority over phone heading, so don't include if not accurate.</p>\n</li>\n<li><p><code>elevation</code> [m]: Vehicle's current elevation. If not given, will be looked up from location (but may miss 3D structures)</p>\n</li>\n<li><p><code>ext_temp</code> [°C]: Outside temperature measured by the vehicle</p>\n</li>\n<li><p><code>batt_temp</code> [°C]: Battery temperature</p>\n</li>\n<li><p><code>voltage</code> [V]: Battery pack voltage</p>\n</li>\n<li><p><code>current</code> [A]: Battery pack current (similar to power: output is positive, input (charging) is negative.)</p>\n</li>\n<li><p><code>odometer</code> [km]: Current odometer reading in km.</p>\n</li>\n<li><p><code>est_battery_range</code> [km]: Estimated remaining range of the vehicle (according to the vehicle)</p>\n</li>\n<li><p><code>hvac_power</code> [kW]: power usage by heating and cooling</p>\n</li>\n<li><p><code>hvac_setpoint</code> [°C]: current setpoint of the HVAC system</p>\n</li>\n<li><p><code>cabin_temp</code> [°C]: current temperature of the cabin</p>\n</li>\n<li><p><code>tire_pressure_fl</code> [kPa]: Front Left tire pressure</p>\n</li>\n<li><p><code>tire_pressure_fr</code> [kPa]: Front Right tire pressure</p>\n</li>\n<li><p><code>tire_pressure_rl</code> [kPa]: Rear Left tire pressure</p>\n</li>\n<li><p><code>tire_pressure_rr</code> [kPa]: Rear Right tire pressure</p>\n</li>\n</ul>\n<p>To enable vehicle individual consumption calibration, we need at least <em>speed</em>, <em>power</em> and <em>is_charging</em> at a rate of at least once per 10 seconds (the faster the better).</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":true,"source":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","type":"collection"}},"urlObject":{"protocol":"https","path":["1","tlm","send"],"host":["api","iternio","com"],"query":[{"key":"token","value":"<ABRP user token>"},{"key":"tlm","value":"{\"utc\":1553807658,\"soc\":80.4,\"soh\":97.7,\"speed\":0,\"lat\":29.564,\"lon\":-95.025,\"elevation\":50,\"is_charging\":0,\"power\":13.2,\"ext_temp\":25,\"batt_temp\":25,\"car_model\":\"chevy:bolt:17:60:other\",\"current\":36.66,\"voltage\":360}"}],"variable":[]}},"response":[],"_postman_id":"fdb20525-51da-4195-8138-54deabe907d5"},{"name":"bulk","id":"4f77e0b8-aa60-4a6e-83df-3c3f7fe19aec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\n    \"data\": [\n        {\n            \"token\": \"ABRP-USER-TOKEN1\",\n            \"tlm_list\": [\n                {\n                    \"utc\": 1686248362.9229777,\n                    \"soc\": 70.0,\n                    \"power\": 0.0021296592,\n                    \"speed\": 0.0\n                },\n                {\n                    \"utc\": 1686248362.9229777,\n                    \"soc\": 70.0,\n                    \"power\": 0.0021296592,\n                    \"speed\": 0.0\n                }\n            ]\n        },\n        {\n            \"token\": \"ABRP-USER-TOKEN2\",\n            \"tlm_list\": [\n                {\n                    \"utc\": 1686248362.9229777,\n                    \"soc\": 70.0,\n                    \"power\": 0.0021296592,\n                    \"speed\": 0.0\n                },\n                {\n                    \"utc\": 1686248362.9229777,\n                    \"soc\": 70.0,\n                    \"power\": 0.0021296592,\n                    \"speed\": 0.0\n                },\n            ],\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.iternio.com/1/tlm/bulk","description":"<p>This is a secondary method for sending telemetry to the API, allowing multiple data points to be handled in a single call. The individual entries in <code>tlm_list</code> can contain any valid parameter in the <code>send</code> call.</p>\n<p>This endpoint can handle multiple vehicles and multiple data points per vehicle. There is not a hard limit on the number of data points, but it is recommended to keep bulk packets relatively frequent to avoid too much delay in receipt &amp; display of data.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":true,"source":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","type":"collection"}},"urlObject":{"protocol":"https","path":["1","tlm","bulk"],"host":["api","iternio","com"],"query":[{"disabled":true,"key":"token","value":"<ABRP user token>"},{"disabled":true,"key":"tlm","value":""}],"variable":[]}},"response":[],"_postman_id":"4f77e0b8-aa60-4a6e-83df-3c3f7fe19aec"},{"name":"get_carmodels_list","id":"e3118d38-3058-49ee-b3fe-d195df4e16ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.iternio.com/1/tlm/get_carmodels_list","description":"<p>The Iternio route planner supports a large and growing number of EV models. Similar to the “get_carmodels” method of the planner API, this returns that list of EV models, but without all the extraneous planning details. You will need to include a car model typecode in your telemetry call.</p>\n<p>The method has no input parameters (except the API key). The result is a JSON array of car model name and typecode pairs. Example result:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"status\": \"ok\",\n    \"result\": [\n        {\n            \"Tesla;Model 3;Standard Range RWD (alpha)\": \"3standard\"\n        },\n        {\n            \"Tesla;Model 3;Standard Range Plus RWD (beta)\": \"tesla:m3:19:bt36:none\"\n        },\n ...\n</code></pre>","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":true,"source":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","type":"collection"}},"urlObject":{"protocol":"https","path":["1","tlm","get_carmodels_list"],"host":["api","iternio","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"e3118d38-3058-49ee-b3fe-d195df4e16ae"},{"name":"get_next_charge","id":"25662cc1-ae96-4e14-a534-9d23fe6ceeb8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.iternio.com/1/tlm/get_next_charge?token=<user token>","description":"<p>This method retrieves the user’s next charging goal for use in notifying them when their car has reached the desired charge level.</p>\n<p>The result will contain the next charge-to goal [SoC %] for that user’s most recent plan:</p>\n<p>Result properties:</p>\n<ul>\n<li>next_charge [SoC %]: User's next goal charge value in percent (0-100)</li>\n</ul>\n<p>Example response:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n    \"status\": \"ok\",\n    \"result\": {\n        \"next_charge\": 86.0\n    }\n}\n</code></pre>","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":true,"source":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","type":"collection"}},"urlObject":{"protocol":"https","path":["1","tlm","get_next_charge"],"host":["api","iternio","com"],"query":[{"description":{"content":"<p>A token identifying the user. This token can be obtained using the live data setup guides in the ABRP app, or, preferably, using our OAuth2 API.</p>\n","type":"text/plain"},"key":"token","value":"<user token>"}],"variable":[]}},"response":[],"_postman_id":"25662cc1-ae96-4e14-a534-9d23fe6ceeb8"},{"name":"set_next_charge","id":"f3488e7e-2625-4afb-afd9-64505aabc51c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.iternio.com/1/tlm/set_next_charge?token=<user token>&next_charge_to_perc=73.0","description":"<p>This method set the user’s next charging goal [SoC %]. This can be done by an application which actively tracks the users progress along the plan, for example the ABRP app driving mode.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":true,"source":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","type":"collection"}},"urlObject":{"protocol":"https","path":["1","tlm","set_next_charge"],"host":["api","iternio","com"],"query":[{"description":{"content":"<p>A token identifying the user. This token can be obtained using the live data setup guides in the ABRP app, or, preferably, using our OAuth2 API.</p>\n","type":"text/plain"},"key":"token","value":"<user token>"},{"description":{"content":"<p>The SoC % to charge to at the next charging stop.</p>\n","type":"text/plain"},"key":"next_charge_to_perc","value":"73.0"}],"variable":[]}},"response":[],"_postman_id":"f3488e7e-2625-4afb-afd9-64505aabc51c"},{"name":"send_torque","id":"7fa1b5b9-ae37-4ced-8a27-f126c8dde5bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.iternio.com/1/tlm/ampera66?eml=<eml>&time=1699342998030.0852","description":"<p>This method set the user’s next charging goal [SoC %]. This can be done by an application which actively tracks the users progress along the plan, for example the ABRP app driving mode.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":true,"source":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","type":"collection"}},"urlObject":{"protocol":"https","path":["1","tlm","ampera66"],"host":["api","iternio","com"],"query":[{"key":"eml","value":"<eml>"},{"key":"time","value":"1699342998030.0852"}],"variable":[]}},"response":[],"_postman_id":"7fa1b5b9-ae37-4ced-8a27-f126c8dde5bf"},{"name":"get_telemetry","id":"dd1ee24f-26d5-44fb-a251-a1b8ec3c950d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://api.iternio.com/1/tlm/get_telemetry?token=<user token>","description":"<p>Get the latest telemetry from a vehicle identified with a token. Returns a subset of properties from the telemetry object.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]},"isInherited":true,"source":{"_postman_id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","id":"2116fbab-059f-42e1-b6fd-30e1b96b14c6","name":"Iternio Telemetry API","type":"collection"}},"urlObject":{"protocol":"https","path":["1","tlm","get_telemetry"],"host":["api","iternio","com"],"query":[{"key":"token","value":"<user token>"}],"variable":[]}},"response":[],"_postman_id":"dd1ee24f-26d5-44fb-a251-a1b8ec3c950d"}],"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"Authorization"},{"key":"value","value":"<value>"}]}},"event":[{"listen":"prerequest","script":{"id":"32c75966-bbfc-45d3-8995-750a2bb7d89b","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"cbc83c04-351d-46d4-ad9a-507af9de5c53","type":"text/javascript","exec":[""]}}],"variable":[{"key":"api_key","value":""}]}