Open documentation ↗Overview
Download [OpenAPI 3.0 Specification](/OpenAPI-Enode-v1.4.0.json) Download [Postman Collection](/Postman-Enode-v1.4.0.json) The Enode API is designed to make smart charging applications easy to develop. We provide an abstraction layer that reduces the complexity when extracting vehicle data and sending commands to vehicles from a variety of manufacturers. The API has a RESTful architecture and utilizes OAuth2 authorization. We are always available to handle any issues or just answer your questions. Feel free to reach out on [email protected] ## Registration for API access In order to use the API you will need a `client_id` and `client_secret`. Please contact us if you are interested in using our API in production, and we will provide these credentials. # Authorization Vehicle / hardware access via the Enode API is granted to your application by the User in a standard OAuth `Authorization Code` flow. > The authorization scheme documented here is the recommended approach for most situations. However, it is also possible to user other OAuth flows, non-confidential clients, and temporary users. Please feel free to contact us if you have any questions about your use-case or the integration of your existing infrastructure. ### Preparation: Configure your OAuth client Because Enode API implements the OAuth 2.0 spec completely and without modifications, you can avoid rolling your own OAuth client implementation and instead use a well-supported and battle-tested implementation. This is strongly recommended. Information on available OAuth clients for many languages is available [here](https://oauth.net/code/) To configure your chosen OAuth client, you will need these details: - Your `client_id` - Your `client_secret` - Authorization URL: `https://link.test.enode.io/oauth2/auth` - Token URL: `https://link.test.enode.io/oauth2/token` ```javascript // Node.js + openid-client example const enodeIssuer = await Issuer.discover('https://link.test.enode.io'); const client = new enodeIssuer.Client({ client_id: 'xyz', client_secret: 'shhhhh', redirect_uris: ['http://localhost:5000/callback'], response_types: ['code'], }); ``` ### Preparation: Obtain a client access token via OAuth Client Credentials Grant Your OAuth client will have a method for using the `OAuth 2.0 Client Credentials Grant` to obtain an access token. ```javascript // Node.js + openid-client example const clientAccessToken = await client.grant({grant_type: "client_credentials"}); ``` This access token belongs to your client and is used for administrative actions, such as the next step. This token should be cached by your server and reused until it expires, at which point your server should request a new one. ### Step 1. Generate an Enode Link session for your User and launch the OAuth flow When your User indicates that they want to connect their hardware to your app, your server must call [Link User](#operation/postUsersUseridLink) to generate an Enode Link session for your User. The User ID can be any string that uniquely identifies the User, but it is recommended that you use the primary key by which you identify the User within your application. Example Request: ``` POST /users/{userId}/link HTTP/1.1 Authorization: Bearer {access_token} { "forceLanguage": "nb-NO", "vendor": "Tesla", } ``` Example Response: ``` { "linkState": "ZjE2MzMxMGFiYmU4MzcxOTU1ZmRjMTU5NGU2ZmE4YTU3NjViMzIwY2YzNG", } ``` The returned linkState must be stored by your server, attached to the session of the authenticated user for which it was generated. Your OAuth client will provide a method to construct an authorization URL for your user. That method will require these details: - Redirect URI - The URI to which your user should be redirected when the Oauth flow completes - Scope - The OAuth scope(s) you wish to request access to (see list of valid values [here](#section/Authentication/AccessTokenBearer)) - State - The value of `linkState` from the request above To launch the OAuth flow, send your user to the aut
Enode API is a geocoding API from enode.io. Requests are authenticated with OAuth. It is served over HTTPS. Its OpenAPI description documents 28 endpoints.
At a glance
- Authentication
- OAuth
- HTTPS
- Yes
- CORS
- Unknown
- Category
- Geocoding
- Base URL
https://api.test.enode.io/- Version
- 1.3.10
- Endpoints
- 28
- OpenAPI
- Specification ↗
- Spec updated
- 2021-06-21
Make a first request
Replace the placeholders; the documentation says exactly where credentials go.
curl -X GET "https://api.test.enode.io/chargers" \
-H "Accept: application/json" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("https://api.test.enode.io/chargers", {
method: "GET",
headers: {
"Accept": "application/json",
"Authorization": "Bearer YOUR_TOKEN",
},
});
const data = await response.json();
console.log(data);import requests
response = requests.request(
"GET",
"https://api.test.enode.io/chargers",
headers={
"Accept": "application/json",
"Authorization": "Bearer YOUR_TOKEN",
},
timeout=30,
)
print(response.json())Endpoints
| Method | Path | What it does |
|---|---|---|
| GET | /chargers | List Chargers |
| GET | /chargers/{chargerId} | Get Charger |
| POST | /chargers/{chargerId}/charging | Control Charging |
| GET | /charging-locations | List Charging Locations |
| POST | /charging-locations | Create Charging Location |
| GET | /charging-locations/{chargingLocationId} | Get Charging Location |
| PUT | /charging-locations/{chargingLocationId} | Update Charging Location |
| DELETE | /charging-locations/{chargingLocationId} | Delete Charging Location |
| GET | /health/ready | Check Service Readiness |
| GET | /health/vendors | Check Available Vendors |
| GET | /me | Get My User |
| DELETE | /me/vendors/{vendor} | Disconnect Vendor |
| GET | /statistics/charging | Get User Charging Statistics |
| DELETE | /users/{userId} | Unlink User |
| DELETE | /users/{userId}/authorization | Deauthorize User |
| POST | /users/{userId}/link | Link User |
| GET | /vehicles | List Vehicles |
| GET | /vehicles/{vehicleId} | Get Vehicle |
| GET | /vehicles/{vehicleId}/charge-state | Get Vehicle Charge State |
| POST | /vehicles/{vehicleId}/charging | Start / Stop Charging |
| GET | /vehicles/{vehicleId}/information | Get Vehicle Information |
| GET | /vehicles/{vehicleId}/location | Get Vehicle Location |
| GET | /vehicles/{vehicleId}/odometer | Get Vehicle Odometer |
| GET | /vehicles/{vehicleId}/smart-charging-policy | Get Vehicle Smart Charging Policy |
| PUT | /vehicles/{vehicleId}/smart-charging-policy | Update Vehicle Smart Charging Policy |
| POST | /vehicles/{vehicleId}/watch | Start Watching Vehicle |
| PUT | /webhooks/firehose | Update Firehose Webhook |
| POST | /webhooks/firehose/test | Test Firehose Webhook |
Questions
Does the Enode API API need an API key?
Yes. The Enode API API uses OAuth authentication; the documentation explains how to get credentials.
Does the Enode API API support HTTPS?
Yes, the Enode API API is served over HTTPS.
How many endpoints does the Enode API API have?
Its OpenAPI description lists 28 endpoints in version 1.3.10. All of them are shown on this page.
What are alternatives to the Enode API API?
Other Geocoding APIs include Bing Maps, ip-api, OpenStreetMap, GeographQL, IP Address Details.
Similar geocoding APIs
Compare alternatives →Bing Maps
GeocodingCreate/customize digital maps based on Bing Maps data
ip-api
GeocodingFind location with IP address or domain
OpenStreetMap
GeocodingNavigation, geolocation and geographical data
GeographQL
GeocodingA Country, State, and City GraphQL API
IP Address Details
GeocodingFind geolocation with ip address
ipapi.co
GeocodingFind IP address location information
Listed from APIs.guru (CC0).