Get your API Key

Chargetrip API

The Chargetrip API gives you the ability to integrate smart, EV-specific routing into products built for drivers of electric cars. This API gives developers access to the same powerful EV routing engine that is already used and trusted by car manufacturers and e-mobility services around the world. Our GraphQL API and documentation are always on the latest stable version and fully backward compatible. For new features and bug-fixes, see the changelog.

To integrate the API in your application, you need an API key. You can request an API key from the side menu.


Base URL

https://api.chargetrip.io/graphql

Tooling

We have several tools available to explore our API. Try the Voyager for an interactive overview of the API Graph or head over to the API playground to start planning routes.

Introduction

Calculating routes for Electric Vehicles is different from routing for traditional cars. Both EV's and internal combustion engines consume energy; however, the consumption of energy for battery-powered vehicles is impacted by a greater set of variables resulting in complex calculations based on vast sets of dynamic data. The introduction of electric mobility calls for a new approach to route optimization engines and navigation paradigms.

EV specific routing

The range of an EV is impacted by situational variables such as topography, temperature, road conditions, and charge station availability. There are also different plug types, tariffs, and charge speeds to take into account. Mostly, people don't know where to charge, when to charge, how much it will cost, and how long the journey will take. Fast-charge stations can have long waiting times and offer little to do while you wait. This makes the 'charge and drive' experience problematic for new and potential drivers.

The Chargetrip API enables you to calculate EV specific routes for all Electric Vehicle brands and models. When calculating routes, our engine takes all the different situational variables into account that impact the range of the battery. Additionally, the API gives you detailed information on the different car models, stations, journey specs and more, to help you build intuitive EV driver front-ends.

Who is this API for?

Whether you are a car manufacturer, charge point operator, utility provider, or fleet operator, you need EV-specific routing to remove adoption barriers, improve the electric driving and charging experience, and optimize your operation. Integrating the Chargetrip API into your end-user mobile or in-car products or telematics dashboard will give you instant access to intelligent route computations for Electric Vehicles and electric fleets.

Getting Started

The Chargetrip API is built around GraphQL. If you aren't familiar with GraphQL, going over the specs will be helpfull. Don't worry; you don't need to be an expert to use this API, this getting started guide should be enough to get going.

What is GraphQL?

GraphQL is a query language and a runtime system. Clients form requests (called queries and mutations) by using the GraphQL query language, and the GraphQL server executes these requests and returns the data in a response. Unlike REST APIs, which expose a different endpoint for each resource object, a GraphQL API makes all data available at a single endpoint. A client specifies exactly the data that it wants, and the server responds with only that data. GraphQL is seen as a modern alternative to a REST-based architecture and aimed at solving its shortcomings.

The documentation for a GraphQL API lives side-by-side with the code that constitutes it. Combined with the typed Schema, this means that we can generate accurate and up-to-date documentation whenever something changes. Using GraphQL's introspection feature, you can query the Schema itself to explore its contents and documentation.

Deprecation is a first-class citizen. We can easily mark a part of our Schema as deprecated, and this will also be reflected in the documentation. GraphQL tooling, such as client libraries, is also expected to communicate to the developer that they're using a deprecated tool.

GraphQL basics

Everything that's available through a GraphQL API is typed and included in its Schema. You can use this Schema to build queries that return only the data that you need. This solves the problem of over-fetching data. It also means that we know which fields each app is using, making it easier for us to evolve our APIs over time. You can find our entire Schema in the side-menu or view a visual representation of our schema using Chargetrip Voyager.

Having a Schema before querying helps you validate a query before you make it. This eliminates unwelcome surprises like unavailable data or erroneous structures.

All GraphQL requests are sent to the same endpoint, which means that you can often retrieve all the data that you need in a single request. Using GraphQL features such as connections, variables, and aliases, you can make your queries incredibly efficient and retrieve data about many resource types in a single request. Learn about query features here.

Primary operations

GraphQL has three primary operations: ❓Queries, 🧬 Mutations, and 🔔Subscriptions. Below are examples of each.

Query Example

query {
  carList {
    id
    carModel
  }
}

Adding a review to a station.

Mutation Example

mutation {
  addReview(
    review: {
      stationId: "5dc401b04ecd176cfb0d74ef"
      rating: 5
      message: "My review message"
      tags: { working: true, recommended: true }
      locale: "en-US"
      ev: "5d161be5c9eef46132d9d20a"
      plugType: CHADEMO
    }
  ) {
    id
  }
}

Subscribing to a route to receive real-time data over time.

Subscription Example

subscription {
  routeUpdatedById(id: "5e4d4a8738ef04d2b4206d2a") {
    status
  }
}

All of these operations are used in the Chargetrip API. You can read more about how to write queries, combine queries, write mutations and subscriptions at GraphQL.org

API Reference

The Chargetrip API has three main sections. Cars to access and retrieve car data. Stations to acccess, retrieve and subscribe to station data. Routes to create, modify and subscribe to routes. These sections all have their own associated set of queries, mutations and subscriptions.

Cars

Operation Type Description
QUERY car Get all types for a single car ID
QUERY carList Get a list of all cars

Stations

Operation Type Description
MUTATION addReview Add a new review to a station
QUERY station Get all types for a single station ID
QUERY stationList Get a list of all stations
QUERY stationAround Get a list of all stations around a GeoJSON point with a specific distance in meters
QUERY operator Get all types for a single operator
QUERY amenityList Get all amenities for a single station
QUERY reviewList Get all reviews for a single station
SUBSCRIPTION stationAdded Get dynamic updates for every new station added
SUBSCRIPTION stationUpdated Get dynamic updates for when a station is updated
SUBSCRIPTION stationDeleted Get dynamic updates for when a station is deleted
SUBSCRIPTION stationUpdatedById Get dynamic updates for when a specific station ID is updated
SUBSCRIPTION stationDeletedById Get dynamic updates for when a specific station ID is deleted
SUBSCRIPTION operatorAdded Get dynamic updates for every new operator added
SUBSCRIPTION operatorUpdated Get dynamic updates for when an operator is updated
SUBSCRIPTION operatorDeleted Get dynamic updates for when an operator is deleted
SUBSCRIPTION operatorUpdatedById Get dynamic updates for when a specific operator ID is updated
SUBSCRIPTION operatorDeletedById Get dynamic updates for when a specific operator ID is deleted

Routes

Operation Type Description
MUTATION newRoute Create a new route
QUERY route Get all types for an existing route ID
SUBSCRIPTION routeUpdatedById Get dynamic updates for a route ID

Authorisation

Authorisation is done by setting an x-client-id as an HTTP header. Once you have an x-client-id from your account manager you can start using the full API. This is what an x-client-id looks like:

"x-client-id": "5e8c22366f9c5f23ab0eff39"

Return values

The API uses JSON objects to return values. HTTP status codes are only used to indicate serious errors such as an invalid x-client-id or broken queries.

The return object has two possible states:

😞 An error, when something went wrong.

👍 Data, the result of the operation (list of chargers, route, etc)

Cars

Chargetrip operates an extensive database of EV makes, editions, and versions, each with their specific consumption models. These advanced consumption models take into account properties like the drag-coefficient and rolling resistance in relation to your speed, the elevation, the charging speed, the charging temperature, the battery temperature etc. Additionally, each car model includes car specifications and images to be used in the front-end. When requesting a route, the ID of a car must be included, and the associated consumption model will be applied to the routing engine.

The Car database can only be modified by Chargetrip. New vehicles are added as soon as the OEM specifications are released which tends to happen months before a release. We currently have 151 EV Car Models in our Database. A list of all supported vehicles can be found by using the carList query. Data for a specific model can be retrieved using the car query.

Please note the Playground includes only four car model from the database. You need a registered x-client-id to access the full car database.

These are all the available output parameters for the car type:

Attribute Type Description
id String The car's unique ID
externalId String Spec ID. Only needed for support purposes
make String Car manufacturer
carModel String Car model
edition String Car model edition
version String Car model version
mode CarMode The current status of the car. Concept, Production, Index-only (old models)
power Float Power in kW
acceleration Float The acceleration from zero to 100 km/h
topSpeed Float Max speed reached by the car in km/h
torque Float Engine torque
batteryUsableKwh Float Usable battery capacity in kWh
batteryFullKwh Float Listed battery capacity in kWh
batteryEfficiency CarBatteryEfficiency Battery efficiency in kWh for city, highway and combined use, depending on weather conditions
range CarRange Battery range in km for city, highway and combined use, depending on weather conditions
connectors [CarPlug] List of connectors (plug types)
adapters [CarPlug] List of known connector adapters
seats Int The number of seats
weight Float The weight in kg
height Int The height in mm
width Int The width in mm
consumption CarExtraConsumption The exposed consumption model
petrolConsumption Float The amount of petrol a similar weight ICE car would consume per 100km
images [CarImage] A list of images of the car
imagesData CarImageData Images of the car as structured data

Getting a list of all cars

You can access a list of all available cars using the carList query. You can see a live example of this query including all available output parameters here.

Using GraphQL you can query only the data you need. For example, here is a query to return a list of all cars with a select number of output parameters.

Example Query

query carListAll {
  carList {
    id
    make
    carModel
    edition
    seats
  }
}

Example Response

{
  "data": {
    "carList": [
      {
        "id": "5d161beec9eef4c250d9d225",
        "make": "BMW",
        "carModel": "i3s",
        "edition": "94 Ah",
        "seats": 4
      },
      {
        "id": "5d161befc9eef48216d9d228",
        "make": "Kia",
        "carModel": "Soul EV",
        "edition": "30 kWh",
        "seats": 5
      },
      {
        "id": "5d161bdbc9eef45824d9d1ec",
        "make": "Nissan",
        "carModel": "Leaf",
        "edition": "30 kWh",
        "seats": 5
      },
      {
        "id": "5d161be5c9eef46132d9d20a",
        "make": "Tesla",
        "carModel": "Model S",
        "edition": "75D",
        "seats": 5
      }
    ]
  }
}

Using graphQL you can filter a query by adding query filters. Here is a Playground example where we filter the carList query by maker.

Example Query

query carListFilterByMaker {
  carList(query: { make: "Tesla" }) {
    id
    externalId
    make
    carModel
    edition
    version
  }
}

Example Response

{
  "data": {
    "carList": [
      {
        "id": "5d161be5c9eef46132d9d20a",
        "externalId": "1070",
        "make": "Tesla",
        "carModel": "Model S",
        "edition": "75D",
        "version": null
      }
    ]
  }
}

You can also lazy load cars from the carList using the size and page parameters. Here is a Playground example using lazyloading.

Lazy loading cars

query carListLasyLoading {
  carList(size: 2, page: 0) {
    id
    externalId
    make
    carModel
    edition
  }
}

Example response

{
  "data": {
    "carList": [
      {
        "id": "5d161bdbc9eef45824d9d1ec",
        "externalId": "1020",
        "make": "Nissan",
        "carModel": "Leaf",
        "edition": "30 kWh",
      },
      {
        "id": "5d161be5c9eef46132d9d20a",
        "externalId": "1070",
        "make": "Tesla",
        "carModel": "Model S",
        "edition": "75D",
      }
    ]
  }
}

Read more about Filtering, Pagination & Sorting in GraphQL on howtographql.com.

Getting all details of a car

You can access the data of a specific car using the car query. You can see a live example with all available output parameters here.

Here is an example query to get some specific output parameters for a Tesla Model S:

Example Query

query car {
  car(id: "5d161be5c9eef46132d9d20a") {
    make
    edition
    power
    acceleration
    topSpeed
    torque
    seats
    weight
    width
  }
}

Example Response

{
  "data": {
    "car": {
      "make": "Tesla",
      "edition": "75D",
      "power": 245,
      "acceleration": 4.4,
      "topSpeed": 225,
      "torque": 525,
      "seats": 5,
      "weight": 2108,
      "width": 2037
    }
  }
}

Stations

The Chargetrip station database is OCPI 2.2 compliant and must be populated with station data before any routes can be planned. This will be either your own station data or station data from one of many database providers like Hubject, Gireve, EcoMovement, NZTA or Nobil. We have pre-integrations with most of these databases but for some you need a commercial contract. We can arrange this for you. Our Playground has a station database that is populated with freely available European station data from OCM so you can try planning routes across Europe.

Our station module includes a custom Vector Tile service based on Chargetrip Clusterbuster. This service allows you to render large amounts of dynamic charge station data on a visualization layer like Mapbox. If you have ever build a charging map or have seen a charging map before, you know how challenging it is to render a map with a lot of dynamic stations. More About ClusterBuster.

Importing your own station data, both static and dynamic, into Chargetrip is a breeze. Contact us to discuss the posibilities.

Station

{
  "id": "5e8583c2d3406cac673b90bb",
  "external_id": "155228",
  "country_code": "GB",
  "party_id": null,
  "name": "50 KW Charger At Bruce House, Wellgate, Arbroath",
  "address": "Bruce House",
  "city": "Wellgate",
  "postal_code": "DD11 3TP",
  "state": "Arbroath",
  "country": "GBR",
  "coordinates": {
    "latitude": "56.56188",
    "longitude": "-2.58951"
  },
  "related_locations": [],
  "parking_type": null,
  "evses": [
    {
      "uid": "218514",
      "evse_id": "0",
      "status": "UNKNOWN",
      "status_schedule": [],
      "capabilities": [],
      "connectors": [
        {
          "id": null,
          "standard": "IEC_62196_T2_COMBO",
          "format": null,
          "power_type": null,
          "max_voltage": 0,
          "max_amperage": 0,
          "max_electric_power": 50000,
          "power": 50,
          "tariff_ids": null,
          "terms_and_conditions": null,
          "last_updated": "2020-04-02T13:24:26.711Z",
          "properties": null
        }
      ],
      "floor_level": null,
      "coordinates": {
        "latitude": "56.56188",
        "longitude": "-2.58951"
      },
      "physical_reference": null,
      "parking_restrictions": [],
      "images": [],
      "last_updated": "2020-04-02T13:24:26.711Z",
      "parking_cost": null,
      "properties": null
    },
    {
      "uid": "218515",
      "evse_id": "0",
      "status": "UNKNOWN",
      "status_schedule": [],
      "capabilities": [],
      "connectors": [
        {
          "id": null,
          "standard": "CHADEMO",
          "format": null,
          "power_type": null,
          "max_voltage": 0,
          "max_amperage": 0,
          "max_electric_power": 50000,
          "power": 50,
          "tariff_ids": null,
          "terms_and_conditions": null,
          "last_updated": "2020-04-02T13:24:26.711Z",
          "properties": null
        }
      ],
      "floor_level": null,
      "coordinates": {
        "latitude": "56.56188",
        "longitude": "-2.58951"
      },
      "physical_reference": null,
      "parking_restrictions": [],
      "images": [],
      "last_updated": "2020-04-02T13:24:26.711Z",
      "parking_cost": null,
      "properties": null
    },
    {
      "uid": "218516",
      "evse_id": "0",
      "status": "UNKNOWN",
      "status_schedule": [],
      "capabilities": [],
      "connectors": [
        {
          "id": null,
          "standard": "IEC_62196_T2",
          "format": null,
          "power_type": null,
          "max_voltage": 0,
          "max_amperage": 0,
          "max_electric_power": 43000,
          "power": 43,
          "tariff_ids": null,
          "terms_and_conditions": null,
          "last_updated": "2020-04-02T13:24:26.711Z",
          "properties": null
        }
      ],
      "floor_level": null,
      "coordinates": {
        "latitude": "56.56188",
        "longitude": "-2.58951"
      },
      "physical_reference": null,
      "parking_restrictions": [],
      "images": [],
      "last_updated": "2020-04-02T13:24:26.711Z",
      "parking_cost": null,
      "properties": null
    }
  ],
  "directions": null,
  "operator": {
    "id": "5e85839ad3406cd1333b8f52",
    "external_id": "3315",
    "name": "Chargeplace Scotland",
    "website": "http://chargeplacescotland.org/",
    "logo": null,
    "country": null,
    "contact": {
      "phone": "0141 648 0750",
      "email": "",
      "website": "http://chargeplacescotland.org/",
      "facebook": null,
      "twitter": null,
      "properties": null
    }
  },
  "suboperator": null,
  "owner": null,
  "facilities": [],
  "time_zone": null,
  "opening_times": {
    "twentyfourseven": false,
    "regular_hours": [],
    "exceptional_openings": [],
    "exceptional_closings": []
  },
  "charging_when_closed": true,
  "images": [],
  "last_updated": "2020-04-02T13:24:26.711Z",
  "location": {
    "type": "Point",
    "coordinates": [
      -2.58951,
      56.56188
    ]
  },
  "elevation": 0,
  "chargers": [
    {
      "standard": "IEC_62196_T2_COMBO",
      "power": 50,
      "price": "",
      "speed": "fast",
      "status": {
        "free": 0,
        "busy": 0,
        "unknown": 1,
        "error": 0
      },
      "total": 1
    },
    {
      "standard": "CHADEMO",
      "power": 50,
      "price": "",
      "speed": "fast",
      "status": {
        "free": 0,
        "busy": 0,
        "unknown": 1,
        "error": 0
      },
      "total": 1
    },
    {
      "standard": "IEC_62196_T2",
      "power": 43,
      "price": "",
      "speed": "fast",
      "status": {
        "free": 0,
        "busy": 0,
        "unknown": 1,
        "error": 0
      },
      "total": 1
    }
  ],
  "physical_address": {
    "continent": "EU",
    "country": "GB",
    "county": "Arbroath",
    "city": "Wellgate",
    "street": "Bruce House",
    "number": null,
    "postalCode": "DD11 3TP",
    "what3Words": "fats.pots.piano",
    "formattedAddress": [
      "Bruce House, DD11 3TP",
      "Wellgate, Arbroath",
      "United Kingdom"
    ]
  },
  "amenities": null,
  "properties": null,
  "realtime": false,
  "power": {
    "43": {
      "total": 1,
      "available": 0
    },
    "50": {
      "total": 2,
      "available": 0
    }
  },
  "speed": "fast",
  "status": "unknown",
  "review": {
    "rating": 0,
    "count": 0
  }
}

The Station type is used to represent and access information on individual charging stations. Each instance of the Station type contains all the information for that particular station.

Attribute Type Description
id String The internal ID
external_id String This is the ID provided by the station data source as the row ID
country_code String ISO-3166 alpha-2 country code of the CPO that 'owns' this Location.
party_id String CPO ID of the CPO that 'owns' this Location (following the ISO-15118 standard).
name String The name of the charging station
address String Street/block name and house number if available.
city String City or town.
postal_code String Postal code of the location, may only be omitted when the location has no postal code: in some countries charging locations at highways don't have postal codes.
state String State or province of the location, only to be used when relevant.
country String ISO 3166-1 alpha-3 code for the country of this location.
coordinates OCPIGeoLocation Coordinates of the location.
related_locations [OCPIAdditionalGeoLocation] Geographical location of related points relevant to the user.
parking_type OCPIParkingType The general type of parking at the charge point location.
evses [Evse] An array of embedded Charger
directions [OCPIDisplayText] Human-readable directions on how to reach the location.
operator Operator Information of the operator. When not specified, the information retrieved from the Credentials module should be used instead.
suboperator Operator Information of the suboperator if available.
owner Operator Information of the owner if available.
facilities [OCPIFacility] Optional list of facilities this charging location directly belongs to.
time_zone String One of IANA tzdata’s TZ-values representing the time zone of the location. Examples: "Europe/Oslo", "Europe/Zurich". (http://www.iana.org/time-zones)
opening_times OCPIHours The times when the EVSEs at the location can be accessed for charging.
charging_when_closed Boolean Indicates if the EVSEs are still charging outside the opening hours of the location. E.g. when the parking garage closes its barriers over night, is it allowed to charge till the next morning? Default: true
images [OCPIImage] Links to images related to the location such as photos or logos.
energy_mix OCPIEnergyMix Details on the energy supplied at this location.
last_updated DateTime Timestamp when this Location or one of its EVSEs or Connectors were last updated (or created).
location Point The geographic location coordinates
elevation Int The elevation (altitude) level in meters above sea level
chargers [Charger] Groups of EVSEs by power and type
amenities JSON An object with amenity types as key and number of amenities as value
physical_address Address The embedded Address
properties JSON Optional object containing client specific fields of the station
realtime Boolean A flag which indicates if the station has realtime information about the availability of the connectors
private Boolean A flag which indicates if the station is on a private property
power JSON The connectors grouped by power
speed StationSpeedType The global charging speed type for the station
status EvPlugStatus The global status for the station
review ReviewStats Statistical information for the reviews of a station

Get a list of all stations

You can get the entire list of stations using stationList query. You can see a live example here

Get all stations

query stationListAll {
  stationList {
    id
    external_id
    country_code
    party_id
    name
    address
    city
    postal_code
    state
    country
    coordinates {
      latitude
      longitude
    }
    related_locations {
      latitude
      longitude
    }
    parking_type
    evses {
      uid
      evse_id
      status
      status_schedule {
        period_begin
        period_end
        status
      }
      capabilities
      connectors {
        id
        standard
        format
        power_type
        max_voltage
        max_amperage
        max_electric_power
        power
        tariff_ids
        terms_and_conditions
        last_updated
        properties
      }
      floor_level
      coordinates {
        latitude
        longitude
            }
      physical_reference
      parking_restrictions
      images {
        url
        thumbnail
        category
        type
        width
        height
      }
      last_updated
      parking_cost
      properties
    }
    directions  {
      language
      text
    }
    operator {
      id
      external_id
      name
      website
      logo {
        url
        thumbnail
        category
        type
        width
        height
      }
      country
      contact {
        phone
        email
        website
        facebook
        twitter
        properties
      }
    }
    suboperator {
      id
      name
    }
    owner {
      id
      name
    }
    facilities
    time_zone
    opening_times {
      twentyfourseven
      regular_hours {
        weekday
        period_begin
        period_end
      }
      exceptional_openings {
        period_begin
        period_end
      }
      exceptional_closings {
        period_begin
        period_end
      }
    }
    charging_when_closed
    images {
      url
      thumbnail
      category
      type
      width
      height
    }
    last_updated
    location {
      type
      coordinates
    }
    elevation
    chargers {
      standard
      power
      price
      speed
      status {
        free
        busy
        unknown
        error
      }
      total
    }
    physical_address {
      continent
      country
      county
      city
      street
      number
      postalCode
      what3Words
      formattedAddress
    }
    amenities
    properties
    realtime
    power
    speed
    status
    review {
      rating
      count
    }
  }
}

Example response

{
  "data": {
    "stationList": [
      {
        "id": "5e8583c0d3406c6cb23b90a2",
        "external_id": "155240",
        "country_code": "GB",
        "party_id": null,
        "name": "Cofton Country Holidays-Static Caravans",
        "address": "Starcross",
        "city": "Exeter",
        "postal_code": "EX6 8RP",
        "state": null,
        "country": "GBR",
        "coordinates": {
          "latitude": "50.612321",
          "longitude": "-3.460562"
        },
        "related_locations": [],
        "parking_type": null,
        "evses": [
          {
            "uid": "218532",
            "evse_id": "0",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 230,
                "max_amperage": 32,
                "max_electric_power": 7000,
                "power": 7,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.321Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "50.612321",
              "longitude": "-3.460562"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.321Z",
            "parking_cost": null,
            "properties": null
          },
          {
            "uid": "218532",
            "evse_id": "1",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 230,
                "max_amperage": 32,
                "max_electric_power": 7000,
                "power": 7,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.321Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "50.612321",
              "longitude": "-3.460562"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.321Z",
            "parking_cost": null,
            "properties": null
          }
        ],
        "directions": null,
        "operator": {
          "id": "5e8583a3d3406c13803b901e",
          "external_id": "3",
          "name": "POD Point (UK)",
          "website": "http://www.pod-point.com/",
          "logo": null,
          "country": null,
          "contact": {
            "phone": "020 7247 4114",
            "email": "enquiries@pod-point.com",
            "website": "http://www.pod-point.com/",
            "facebook": null,
            "twitter": null,
            "properties": null
          }
        },
        "suboperator": null,
        "owner": null,
        "facilities": [],
        "time_zone": null,
        "opening_times": {
          "twentyfourseven": false,
          "regular_hours": [],
          "exceptional_openings": [],
          "exceptional_closings": []
        },
        "charging_when_closed": true,
        "images": [],
        "last_updated": "2020-04-02T13:24:25.321Z",
        "location": {
          "type": "Point",
          "coordinates": [
            -3.460562,
            50.612321
          ]
        },
        "elevation": 0,
        "chargers": [
          {
            "standard": "IEC_62196_T2",
            "power": 7,
            "price": "",
            "speed": "slow",
            "status": {
              "free": 0,
              "busy": 0,
              "unknown": 2,
              "error": 0
            },
            "total": 2
          }
        ],
        "physical_address": {
          "continent": "EU",
          "country": "GB",
          "county": null,
          "city": "Exeter",
          "street": "Starcross",
          "number": null,
          "postalCode": "EX6 8RP",
          "what3Words": "eyelid.excavate.cheek",
          "formattedAddress": [
            "Starcross, EX6 8RP",
            "Exeter",
            "United Kingdom"
          ]
        },
        "amenities": null,
        "properties": null,
        "realtime": false,
        "power": {
          "7": {
            "total": 1,
            "available": 0
          }
        },
        "speed": "slow",
        "status": "unknown",
        "review": {
          "rating": 0,
          "count": 0
        }
      },
      {
        "id": "5e8583c0d3406c396c3b90a4",
        "external_id": "155239",
        "country_code": "GB",
        "party_id": null,
        "name": "Cofton Country Holidays-Cottages",
        "address": "Starcross",
        "city": "Exeter",
        "postal_code": "EX6 8RP",
        "state": null,
        "country": "GBR",
        "coordinates": {
          "latitude": "50.613074",
          "longitude": "-3.460541"
        },
        "related_locations": [],
        "parking_type": null,
        "evses": [
          {
            "uid": "218531",
            "evse_id": "0",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 230,
                "max_amperage": 32,
                "max_electric_power": 7000,
                "power": 7,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.408Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "50.613074",
              "longitude": "-3.460541"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.408Z",
            "parking_cost": null,
            "properties": null
          },
          {
            "uid": "218531",
            "evse_id": "1",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 230,
                "max_amperage": 32,
                "max_electric_power": 7000,
                "power": 7,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.408Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "50.613074",
              "longitude": "-3.460541"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.408Z",
            "parking_cost": null,
            "properties": null
          }
        ],
        "directions": null,
        "operator": {
          "id": "5e8583a3d3406c13803b901e",
          "external_id": "3",
          "name": "POD Point (UK)",
          "website": "http://www.pod-point.com/",
          "logo": null,
          "country": null,
          "contact": {
            "phone": "020 7247 4114",
            "email": "enquiries@pod-point.com",
            "website": "http://www.pod-point.com/",
            "facebook": null,
            "twitter": null,
            "properties": null
          }
        },
        "suboperator": null,
        "owner": null,
        "facilities": [],
        "time_zone": null,
        "opening_times": {
          "twentyfourseven": false,
          "regular_hours": [],
          "exceptional_openings": [],
          "exceptional_closings": []
        },
        "charging_when_closed": true,
        "images": [],
        "last_updated": "2020-04-02T13:24:25.408Z",
        "location": {
          "type": "Point",
          "coordinates": [
            -3.460541,
            50.613074
          ]
        },
        "elevation": 0,
        "chargers": [
          {
            "standard": "IEC_62196_T2",
            "power": 7,
            "price": "",
            "speed": "slow",
            "status": {
              "free": 0,
              "busy": 0,
              "unknown": 2,
              "error": 0
            },
            "total": 2
          }
        ],
        "physical_address": {
          "continent": "EU",
          "country": "GB",
          "county": null,
          "city": "Exeter",
          "street": "Starcross",
          "number": null,
          "postalCode": "EX6 8RP",
          "what3Words": "strictest.grapes.bloomers",
          "formattedAddress": [
            "Starcross, EX6 8RP",
            "Exeter",
            "United Kingdom"
          ]
        },
        "amenities": null,
        "properties": null,
        "realtime": false,
        "power": {
          "7": {
            "total": 1,
            "available": 0
          }
        },
        "speed": "slow",
        "status": "unknown",
        "review": {
          "rating": 0,
          "count": 0
        }
      },
      {
        "id": "5e8583c1d3406c83f13b90a6",
        "external_id": "155238",
        "country_code": "GB",
        "party_id": null,
        "name": "Market Street Car Park",
        "address": "Market Street Car Park",
        "city": "Winkworth",
        "postal_code": "DE4 4ET",
        "state": null,
        "country": "GBR",
        "coordinates": {
          "latitude": "53.082149",
          "longitude": "-1.574028"
        },
        "related_locations": [],
        "parking_type": null,
        "evses": [
          {
            "uid": "218528",
            "evse_id": "0",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2_COMBO",
                "format": null,
                "power_type": null,
                "max_voltage": 0,
                "max_amperage": 0,
                "max_electric_power": 50000,
                "power": 50,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.662Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "53.082149",
              "longitude": "-1.574028"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.662Z",
            "parking_cost": null,
            "properties": null
          },
          {
            "uid": "218529",
            "evse_id": "0",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "CHADEMO",
                "format": null,
                "power_type": null,
                "max_voltage": 0,
                "max_amperage": 0,
                "max_electric_power": 50000,
                "power": 50,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.662Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "53.082149",
              "longitude": "-1.574028"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.662Z",
            "parking_cost": null,
            "properties": null
          },
          {
            "uid": "218530",
            "evse_id": "0",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 0,
                "max_amperage": 0,
                "max_electric_power": 43000,
                "power": 43,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.662Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "53.082149",
              "longitude": "-1.574028"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.662Z",
            "parking_cost": null,
            "properties": null
          }
        ],
        "directions": null,
        "operator": {
          "id": "5e858399d3406c378f3b8f49",
          "external_id": "20",
          "name": "Charge Your Car",
          "website": "http://www.chargeyourcar.org.uk/",
          "logo": null,
          "country": null,
          "contact": {
            "phone": "0191 26 50 500",
            "email": "admin@chargeyourcar.org.uk",
            "website": "http://www.chargeyourcar.org.uk/",
            "facebook": null,
            "twitter": null,
            "properties": null
          }
        },
        "suboperator": null,
        "owner": null,
        "facilities": [],
        "time_zone": null,
        "opening_times": {
          "twentyfourseven": false,
          "regular_hours": [],
          "exceptional_openings": [],
          "exceptional_closings": []
        },
        "charging_when_closed": true,
        "images": [],
        "last_updated": "2020-04-02T13:24:25.662Z",
        "location": {
          "type": "Point",
          "coordinates": [
            -1.574028,
            53.082149
          ]
        },
        "elevation": 37,
        "chargers": [
          {
            "standard": "IEC_62196_T2_COMBO",
            "power": 50,
            "price": "",
            "speed": "fast",
            "status": {
              "free": 0,
              "busy": 0,
              "unknown": 1,
              "error": 0
            },
            "total": 1
          },
          {
            "standard": "CHADEMO",
            "power": 50,
            "price": "",
            "speed": "fast",
            "status": {
              "free": 0,
              "busy": 0,
              "unknown": 1,
              "error": 0
            },
            "total": 1
          },
          {
            "standard": "IEC_62196_T2",
            "power": 43,
            "price": "",
            "speed": "fast",
            "status": {
              "free": 0,
              "busy": 0,
              "unknown": 1,
              "error": 0
            },
            "total": 1
          }
        ],
        "physical_address": {
          "continent": "EU",
          "country": "GB",
          "county": null,
          "city": "Winkworth",
          "street": "Market Street Car Park",
          "number": null,
          "postalCode": "DE4 4ET",
          "what3Words": "dares.abandons.foal",
          "formattedAddress": [
            "Market Street Car Park, DE4 4ET",
            "Winkworth",
            "United Kingdom"
          ]
        },
        "amenities": null,
        "properties": null,
        "realtime": false,
        "power": {
          "43": {
            "total": 1,
            "available": 0
          },
          "50": {
            "total": 2,
            "available": 0
          }
        },
        "speed": "fast",
        "status": "unknown",
        "review": {
          "rating": 0,
          "count": 0
        }
      },
      {
        "id": "5e8583c1d3406c56cb3b90a9",
        "external_id": "155237",
        "country_code": "GB",
        "party_id": null,
        "name": "Blythswood Street",
        "address": "Blythswood Street",
        "city": "Glasgow",
        "postal_code": "G2 4QY",
        "state": null,
        "country": "GBR",
        "coordinates": {
          "latitude": "55.863572",
          "longitude": "-4.262374"
        },
        "related_locations": [],
        "parking_type": null,
        "evses": [
          {
            "uid": "218527",
            "evse_id": "0",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 230,
                "max_amperage": 32,
                "max_electric_power": 7000,
                "power": 7,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.817Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "55.863572",
              "longitude": "-4.262374"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.817Z",
            "parking_cost": null,
            "properties": null
          },
          {
            "uid": "218527",
            "evse_id": "1",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 230,
                "max_amperage": 32,
                "max_electric_power": 7000,
                "power": 7,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.817Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "55.863572",
              "longitude": "-4.262374"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.817Z",
            "parking_cost": null,
            "properties": null
          }
        ],
        "directions": null,
        "operator": {
          "id": "5e85839ad3406cd1333b8f52",
          "external_id": "3315",
          "name": "Chargeplace Scotland",
          "website": "http://chargeplacescotland.org/",
          "logo": null,
          "country": null,
          "contact": {
            "phone": "0141 648 0750",
            "email": "",
            "website": "http://chargeplacescotland.org/",
            "facebook": null,
            "twitter": null,
            "properties": null
          }
        },
        "suboperator": null,
        "owner": null,
        "facilities": [],
        "time_zone": null,
        "opening_times": {
          "twentyfourseven": false,
          "regular_hours": [],
          "exceptional_openings": [],
          "exceptional_closings": []
        },
        "charging_when_closed": true,
        "images": [],
        "last_updated": "2020-04-02T13:24:25.817Z",
        "location": {
          "type": "Point",
          "coordinates": [
            -4.262374,
            55.863572
          ]
        },
        "elevation": 188,
        "chargers": [
          {
            "standard": "IEC_62196_T2",
            "power": 7,
            "price": "",
            "speed": "slow",
            "status": {
              "free": 0,
              "busy": 0,
              "unknown": 2,
              "error": 0
            },
            "total": 2
          }
        ],
        "physical_address": {
          "continent": "EU",
          "country": "GB",
          "county": null,
          "city": "Glasgow",
          "street": "Blythswood Street",
          "number": null,
          "postalCode": "G2 4QY",
          "what3Words": "matter.shall.point",
          "formattedAddress": [
            "Blythswood Street, G2 4QY",
            "Glasgow",
            "United Kingdom"
          ]
        },
        "amenities": null,
        "properties": null,
        "realtime": false,
        "power": {
          "7": {
            "total": 1,
            "available": 0
          }
        },
        "speed": "slow",
        "status": "unknown",
        "review": {
          "rating": 0,
          "count": 0
        }
      },
      {
        "id": "5e8583c1d3406c62f53b90ab",
        "external_id": "155236",
        "country_code": "GB",
        "party_id": null,
        "name": "Main Street Inverkip 22 KW",
        "address": "Main Street",
        "city": "Inverkip",
        "postal_code": "PA16 0FZ",
        "state": null,
        "country": "GBR",
        "coordinates": {
          "latitude": "55.91031",
          "longitude": "-4.86522"
        },
        "related_locations": [],
        "parking_type": null,
        "evses": [
          {
            "uid": "218526",
            "evse_id": "0",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 400,
                "max_amperage": 32,
                "max_electric_power": 22000,
                "power": 22,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.899Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "55.91031",
              "longitude": "-4.86522"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.899Z",
            "parking_cost": null,
            "properties": null
          },
          {
            "uid": "218526",
            "evse_id": "1",
            "status": "UNKNOWN",
            "status_schedule": [],
            "capabilities": [],
            "connectors": [
              {
                "id": null,
                "standard": "IEC_62196_T2",
                "format": null,
                "power_type": null,
                "max_voltage": 400,
                "max_amperage": 32,
                "max_electric_power": 22000,
                "power": 22,
                "tariff_ids": null,
                "terms_and_conditions": null,
                "last_updated": "2020-04-02T13:24:25.899Z",
                "properties": null
              }
            ],
            "floor_level": null,
            "coordinates": {
              "latitude": "55.91031",
              "longitude": "-4.86522"
            },
            "physical_reference": null,
            "parking_restrictions": [],
            "images": [],
            "last_updated": "2020-04-02T13:24:25.899Z",
            "parking_cost": null,
            "properties": null
          }
        ],
        "directions": null,
        "operator": {
          "id": "5e85839ad3406cd1333b8f52",
          "external_id": "3315",
          "name": "Chargeplace Scotland",
          "website": "http://chargeplacescotland.org/",
          "logo": null,
          "country": null,
          "contact": {
            "phone": "0141 648 0750",
            "email": "",
            "website": "http://chargeplacescotland.org/",
            "facebook": null,
            "twitter": null,
            "properties": null
          }
        },
        "suboperator": null,
        "owner": null,
        "facilities": [],
        "time_zone": null,
        "opening_times": {
          "twentyfourseven": false,
          "regular_hours": [],
          "exceptional_openings": [],
          "exceptional_closings": []
        },
        "charging_when_closed": true,
        "images": [],
        "last_updated": "2020-04-02T13:24:25.899Z",
        "location": {
          "type": "Point",
          "coordinates": [
            -4.86522,
            55.91031
          ]
        },
        "elevation": 106,
        "chargers": [
          {
            "standard": "IEC_62196_T2",
            "power": 22,
            "price": "",
            "speed": "slow",
            "status": {
              "free": 0,
              "busy": 0,
              "unknown": 2,
              "error": 0
            },
            "total": 2
          }
        ],
        "physical_address": {
          "continent": "EU",
          "country": "GB",
          "county": null,
          "city": "Inverkip",
          "street": "Main Street",
          "number": null,
          "postalCode": "PA16 0FZ",
          "what3Words": "organic.rattled.intestine",
          "formattedAddress": [
            "Main Street, PA16 0FZ",
            "Inverkip",
            "United Kingdom"
          ]
        },
        "amenities": null,
        "properties": null,
        "realtime": false,
        "power": {
          "22": {
            "total": 1,
            "available": 0
          }
        },
        "speed": "slow",
        "status": "unknown",
        "review": {
          "rating": 0,
          "count": 0
        }
      }
    ]
  }
}

You can filter this query by adding a query parameter. You can see a live example here

Get station using query parameter

query stationListFilter {
  stationList(query: { name: "Townley Road (2)" }) {
    id
    external_id
    name
    location {
      type
      coordinates
    }
    # add more fields here
  }
}

Example response

{
  "data": {
    "stationList": [
      {
        "id": "5e8585c9d3406c712b3baa1d",
        "external_id": "134379",
        "name": "Townley Road (2)",
        "location": {
          "type": "Point",
          "coordinates": [
            -0.079349,
            51.453586
          ]
        }
      }
    ]
  }
}

You can also use the size and page parameters for lazy loading. You can see a live example here

Get stations using lazy loading

query stationListLazyLoading {
  stationList(size: 2, page: 1) {
    id
    external_id
    name
    location {
      type
      coordinates
    }
    # add more fields here
  }
}

Example response

{
  "data": {
    "stationList": [
      {
        "id": "5e8583c1d3406c83f13b90a6",
        "external_id": "155238",
        "name": "Market Street Car Park",
        "location": {
          "type": "Point",
          "coordinates": [
            -1.574028,
            53.082149
          ]
        }
      },
      {
        "id": "5e8583c1d3406c56cb3b90a9",
        "external_id": "155237",
        "name": "Blythswood Street",
        "location": {
          "type": "Point",
          "coordinates": [
            -4.262374,
            55.863572
          ]
        }
      }
    ]
  }
}

Get stations around a GeoJSON point

Another great feature is fetching the closest stations around a GeoJSON point with a specific distance in meters. You can see a live example here

Get stations around a GeoJSON point

query stationAround {
  stationAround(
    query: {
      location: { type: Point, coordinates: [4.8979755, 52.3745403] }
      distance: 5000
      power: [50, 22]
      amenities: ["supermarket"]
    }
    size: 10
    page: 0
  ) {
    id
    external_id
    name
    location {
      type
      coordinates
    }
    elevation
    physical_address {
      continent
      country
      county
      city
      street
      number
      postalCode
      what3Words
      formattedAddress
    }
    amenities
    power
    # add more fields here
  }
}

Example response

{
  "data": {
    "stationAround": [
      {
        "id": "5e859067d3406c7e163c4318",
        "external_id": "84373",
        "name": "Allego Shell Hobbemakade Amsterdam",
        "location": {
          "type": "Point",
          "coordinates": [
            4.88584220409393,
            52.3497200185866
          ]
        },
        "elevation": 2,
        "physical_address": {
          "continent": "EU",
          "country": "NL",
          "county": "Noord-Holland",
          "city": "Amsterdam",
          "street": "Hobbemakade 121",
          "number": null,
          "postalCode": "1071 XW",
          "what3Words": "tech.plan.dashes",
          "formattedAddress": [
            "Hobbemakade 121, 1071 XW",
            "Amsterdam, Noord-Holland",
            "Netherlands"
          ]
        },
        "amenities": {
          "restaurant": 5,
          "bathroom": 0,
          "supermarket": 5,
          "playground": 3,
          "coffee": 5,
          "shopping": 2,
          "museum": 2,
          "hotel": 5,
          "park": 5
        },
        "power": {
          "43": {
            "total": 1,
            "available": 0
          },
          "50": {
            "total": 2,
            "available": 0
          }
        }
      },
      {
        "id": "5e85e81e109582840dead29a",
        "external_id": "148324",
        "name": "Strawinskylaan",
        "location": {
          "type": "Point",
          "coordinates": [
            4.875402153081495,
            52.340961671030556
          ]
        },
        "elevation": 2,
        "physical_address": {
          "continent": "EU",
          "country": "NL",
          "county": "North Holland",
          "city": "Amsterdam",
          "street": "Strawinskylaan",
          "number": null,
          "postalCode": "1077XW",
          "what3Words": "voices.enabling.lung",
          "formattedAddress": [
            "Strawinskylaan, 1077XW",
            "Amsterdam, North Holland",
            "Netherlands"
          ]
        },
        "amenities": {
          "restaurant": 5,
          "bathroom": 0,
          "supermarket": 4,
          "playground": 3,
          "coffee": 5,
          "shopping": 0,
          "museum": 0,
          "hotel": 5,
          "park": 5
        },
        "power": {
          "43": {
            "total": 1,
            "available": 0
          },
          "50": {
            "total": 2,
            "available": 0
          }
        }
      },
      {
        "id": "5e859652d3406c7d833c9875",
        "external_id": "37392",
        "name": "Europaboulevard",
        "location": {
          "type": "Point",
          "coordinates": [
            4.88961460317989,
            52.3342774301877
          ]
        },
        "elevation": 2,
        "physical_address": {
          "continent": "EU",
          "country": "NL",
          "county": null,
          "city": "Amsterdam",
          "street": "Europaboulevard",
          "number": null,
          "postalCode": "1083 AD",
          "what3Words": "testing.boggles.blanked",
          "formattedAddress": [
            "Europaboulevard, 1083 AD",
            "Amsterdam",
            "Netherlands"
          ]
        },
        "amenities": {
          "restaurant": 4,
          "bathroom": 0,
          "supermarket": 3,
          "playground": 4,
          "coffee": 5,
          "shopping": 2,
          "museum": 0,
          "hotel": 5,
          "park": 4
        },
        "power": {
          "50": {
            "total": 1,
            "available": 0
          }
        }
      }
    ]
  }
}

Get single station data

Get all information about a single station using the station query. You can see a live example here

Get single station information

query station {
  station(id: "5e8583c2d3406cac673b90bb") {
    id
    external_id
    country_code
    party_id
    name
    address
    city
    postal_code
    state
    country
    coordinates {
      latitude
      longitude
    }
    related_locations {
      latitude
      longitude
    }
    parking_type
    evses {
      uid
      evse_id
      status
      status_schedule {
        period_begin
        period_end
        status
      }
      capabilities
      connectors {
        id
        standard
        format
        power_type
        max_voltage
        max_amperage
        max_electric_power
        power
        tariff_ids
        terms_and_conditions
        last_updated
        properties
      }
      floor_level
      coordinates {
        latitude
        longitude
      }
      physical_reference
      parking_restrictions
      images {
        url
        thumbnail
        category
        type
        width
        height
      }
      last_updated
      parking_cost
      properties
    }
    directions {
      language
      text
    }
    operator {
      id
      external_id
      name
      website
      logo {
        url
        thumbnail
        category
        type
        width
        height
      }
      country
      contact {
        phone
        email
        website
        facebook
        twitter
        properties
      }
    }
    suboperator {
      id
      name
    }
    owner {
      id
      name
    }
    facilities
    time_zone
    opening_times {
      twentyfourseven
      regular_hours {
        weekday
        period_begin
        period_end
      }
      exceptional_openings {
        period_begin
        period_end
      }
      exceptional_closings {
        period_begin
        period_end
      }
    }
    charging_when_closed
    images {
      url
      thumbnail
      category
      type
      width
      height
    }
    last_updated
    location {
      type
      coordinates
    }
    elevation
    chargers {
      standard
      power
      price
      speed
      status {
        free
        busy
        unknown
        error
      }
      total
    }
    physical_address {
      continent
      country
      county
      city
      street
      number
      postalCode
      what3Words
      formattedAddress
    }
    amenities
    properties
    realtime
    power
    speed
    status
    review {
      rating
      count
    }
  }
}

Example response

{
  "data": {
    "station": {
      "id": "5e8583c2d3406cac673b90bb",
      "external_id": "155228",
      "country_code": "GB",
      "party_id": null,
      "name": "50 KW Charger At Bruce House, Wellgate, Arbroath",
      "address": "Bruce House",
      "city": "Wellgate",
      "postal_code": "DD11 3TP",
      "state": "Arbroath",
      "country": "GBR",
      "coordinates": {
        "latitude": "56.56188",
        "longitude": "-2.58951"
      },
      "related_locations": [],
      "parking_type": null,
      "evses": [
        {
          "uid": "218514",
          "evse_id": "0",
          "status": "UNKNOWN",
          "status_schedule": [],
          "capabilities": [],
          "connectors": [
            {
              "id": null,
              "standard": "IEC_62196_T2_COMBO",
              "format": null,
              "power_type": null,
              "max_voltage": 0,
              "max_amperage": 0,
              "max_electric_power": 50000,
              "power": 50,
              "tariff_ids": null,
              "terms_and_conditions": null,
              "last_updated": "2020-04-02T13:24:26.711Z",
              "properties": null
            }
          ],
          "floor_level": null,
          "coordinates": {
            "latitude": "56.56188",
            "longitude": "-2.58951"
          },
          "physical_reference": null,
          "parking_restrictions": [],
          "images": [],
          "last_updated": "2020-04-02T13:24:26.711Z",
          "parking_cost": null,
          "properties": null
        },
        {
          "uid": "218515",
          "evse_id": "0",
          "status": "UNKNOWN",
          "status_schedule": [],
          "capabilities": [],
          "connectors": [
            {
              "id": null,
              "standard": "CHADEMO",
              "format": null,
              "power_type": null,
              "max_voltage": 0,
              "max_amperage": 0,
              "max_electric_power": 50000,
              "power": 50,
              "tariff_ids": null,
              "terms_and_conditions": null,
              "last_updated": "2020-04-02T13:24:26.711Z",
              "properties": null
            }
          ],
          "floor_level": null,
          "coordinates": {
            "latitude": "56.56188",
            "longitude": "-2.58951"
          },
          "physical_reference": null,
          "parking_restrictions": [],
          "images": [],
          "last_updated": "2020-04-02T13:24:26.711Z",
          "parking_cost": null,
          "properties": null
        },
        {
          "uid": "218516",
          "evse_id": "0",
          "status": "UNKNOWN",
          "status_schedule": [],
          "capabilities": [],
          "connectors": [
            {
              "id": null,
              "standard": "IEC_62196_T2",
              "format": null,
              "power_type": null,
              "max_voltage": 0,
              "max_amperage": 0,
              "max_electric_power": 43000,
              "power": 43,
              "tariff_ids": null,
              "terms_and_conditions": null,
              "last_updated": "2020-04-02T13:24:26.711Z",
              "properties": null
            }
          ],
          "floor_level": null,
          "coordinates": {
            "latitude": "56.56188",
            "longitude": "-2.58951"
          },
          "physical_reference": null,
          "parking_restrictions": [],
          "images": [],
          "last_updated": "2020-04-02T13:24:26.711Z",
          "parking_cost": null,
          "properties": null
        }
      ],
      "directions": null,
      "operator": {
        "id": "5e85839ad3406cd1333b8f52",
        "external_id": "3315",
        "name": "Chargeplace Scotland",
        "website": "http://chargeplacescotland.org/",
        "logo": null,
        "country": null,
        "contact": {
          "phone": "0141 648 0750",
          "email": "",
          "website": "http://chargeplacescotland.org/",
          "facebook": null,
          "twitter": null,
          "properties": null
        }
      },
      "suboperator": null,
      "owner": null,
      "facilities": [],
      "time_zone": null,
      "opening_times": {
        "twentyfourseven": false,
        "regular_hours": [],
        "exceptional_openings": [],
        "exceptional_closings": []
      },
      "charging_when_closed": true,
      "images": [],
      "last_updated": "2020-04-02T13:24:26.711Z",
      "location": {
        "type": "Point",
        "coordinates": [
          -2.58951,
          56.56188
        ]
      },
      "elevation": 0,
      "chargers": [
        {
          "standard": "IEC_62196_T2_COMBO",
          "power": 50,
          "price": "",
          "speed": "fast",
          "status": {
            "free": 0,
            "busy": 0,
            "unknown": 1,
            "error": 0
          },
          "total": 1
        },
        {
          "standard": "CHADEMO",
          "power": 50,
          "price": "",
          "speed": "fast",
          "status": {
            "free": 0,
            "busy": 0,
            "unknown": 1,
            "error": 0
          },
          "total": 1
        },
        {
          "standard": "IEC_62196_T2",
          "power": 43,
          "price": "",
          "speed": "fast",
          "status": {
            "free": 0,
            "busy": 0,
            "unknown": 1,
            "error": 0
          },
          "total": 1
        }
      ],
      "physical_address": {
        "continent": "EU",
        "country": "GB",
        "county": "Arbroath",
        "city": "Wellgate",
        "street": "Bruce House",
        "number": null,
        "postalCode": "DD11 3TP",
        "what3Words": "fats.pots.piano",
        "formattedAddress": [
          "Bruce House, DD11 3TP",
          "Wellgate, Arbroath",
          "United Kingdom"
        ]
      },
      "amenities": null,
      "properties": null,
      "realtime": false,
      "power": {
        "43": {
          "total": 1,
          "available": 0
        },
        "50": {
          "total": 2,
          "available": 0
        }
      },
      "speed": "fast",
      "status": "unknown",
      "review": {
        "rating": 0,
        "count": 0
      }
    }
  }
}

Get the latest reviews of a station

Fetch the latest two reviews of a station.

Get latest reviews of station

    query stationWithLatestReviews {
      station(id: "5e8583c2d3406cac673b90bb") {
        id
        external_id
        name
        location {
          type
          coordinates
        }
        review {
          rating
          count
        }
      }
      reviewList(stationId: "5e8583c2d3406cac673b90bb", size: 2, page: 0) {
        id
        rating
        message
        locale
        ev {
          id
          make
          carModel
          edition
          version
        }
        plugType
        tags {
          working
          recommended
        }
        properties
      }
    }

Example response

{
  "data": {
    "station": {
      "id": "5dc401b04ecd176cfb0d74ef",
      "external_id": "134282",
      "name": "Tesco Extra-Pontypridd",
      "location": {
        "type": "Point",
        "coordinates": [
          -3.296328,
          51.580388
        ]
      },
      "review": {
        "rating": 5,
        "count": 2
      }
    },
    "reviewList": [
      {
        "id": "5e2959c0f8b8042e920eb655",
        "rating": 5,
        "message": "My review message",
        "locale": "en-US",
        "ev": {
          "id": "5d161bdbc9eef45824d9d1ec",
          "make": "Nissan",
          "carModel": "Leaf",
          "edition": "30 kWh",
          "version": null
        },
        "plugType": "IEC_62196_T2_COMBO",
        "tags": {
          "working": true,
          "recommended": true
        },
        "properties": null
      },
      {
        "id": "5e295a12f8b804d1560eb658",
        "rating": 5,
        "message": "My review message",
        "locale": "en-US",
        "ev": {
          "id": "5d161bdbc9eef45824d9d1ec",
          "make": "Nissan",
          "carModel": "Leaf",
          "edition": "30 kWh",
          "version": null
        },
        "plugType": "IEC_62196_T2_COMBO",
        "tags": {
          "working": true,
          "recommended": true
        },
        "properties": null
      }
    ]
  }
}

Operators

An operator is used to represent and access information on the operator of a station.

Operator

{
  "id": "5dc3dff8c81f55a86f7197ac",
  "external_id": "3377",
  "name": " Etecnic",
  "website": "http://www.etecnic.es",
  "country": "ES",
  "logo": null,
  "contact": {
    "phone": " (+34) 977 276 952",
    "email": "etecnic@etecnic.es",
    "website": "http://www.etecnic.es",
    "facebook": null,
    "twitter": null,
    "properties": null
  }
}

Here we have a detailed description of Operators

Attribute Type Description
id String The car unique ID
external_id String This is the ID provided by the operator data source as the row ID
name String This is the name of operator
website String Link to the operator's website
logo String Image link to the operator's logo
country String The ISO-3166 alpha-2 country code
contact Contact The Contact object information

Getting the list of operators with operatorList query

You can access the entire list of operators from your account using operatorList query. You can see a live example here.

Get the list of operators

query operatorList {
  operatorList {
    id
    external_id
    name
    website
    logo {
      url
      thumbnail
      type
    }
    country
    contact {
      phone
      email
      website
      facebook
      twitter
      properties
    }
  }
}

Example response

{
  "data": {
    "operatorList": [
      {
        "id": "5dc3dff8c81f55a86f7197ac",
        "external_id": "3377",
        "name": " Etecnic",
        "website": "http://www.etecnic.es",
        "logo": null,
        "country": "ES",
        "contact": {
          "phone": " (+34) 977 276 952",
          "email": "etecnic@etecnic.es",
          "website": "http://www.etecnic.es",
          "facebook": null,
          "twitter": null,
          "properties": null
        }
      },
      {
        "id": "5dc3dff8c81f557fb27197ad",
        "external_id": "45",
        "name": "(Business Owner at Location)",
        "website": "",
        "logo": null,
        "country": null,
        "contact": {
          "phone": "",
          "email": "",
          "website": "",
          "facebook": null,
          "twitter": null,
          "properties": null
        }
      }
    ]
  }
}

Also it is possible to filter on this query by adding a query parameter. Example

Get all information of a single operator with query filter.

query operatorListFilter {
  operatorList(query: { name: "Allego BV" }) {
    id
    external_id
    name
    website
    logo {
      url
      thumbnail
      type
    }
    country
    contact {
      phone
      email
      website
      facebook
      twitter
      properties
    }
  }
}

Example response

{
  "data": {
    "operatorList": [
      {
        "id": "5dc3dff9c81f55ec3b7197b4",
        "external_id": "103",
        "name": "Allego BV",
        "website": "http://www.allego.eu/",
        "logo": null,
        "country": null,
        "contact": {
          "phone": "",
          "email": "info@allego.eu",
          "website": "http://www.allego.eu/",
          "facebook": null,
          "twitter": null,
          "properties": null
        }
      }
    ]
  }
}

Or you can lazy load operators from the list using the size and page parameters. Example

Lazy loading operators

query operatorListLazyLoad {
  operatorList(size: 2, page: 0) {
    id
    external_id
    name
    website
    logo {
      url
      thumbnail
      type
    }
    country
    contact {
      phone
      email
      website
      facebook
      twitter
      properties
    }
  }
}

Example response

{
  "data": {
    "operatorList": [
      {
        "id": "5dc3dff8c81f55a86f7197ac",
        "external_id": "3377",
        "name": " Etecnic",
        "website": "http://www.etecnic.es",
        "logo": null,
        "country": null,
        "contact": {
          "phone": " (+34) 977 276 952",
          "email": "etecnic@etecnic.es",
          "website": "http://www.etecnic.es",
          "facebook": null,
          "twitter": null,
          "properties": null
        }
      },
      {
        "id": "5dc3dff8c81f557fb27197ad",
        "external_id": "45",
        "name": "(Business Owner at Location)",
        "website": "",
        "logo": null,
        "country": null,
        "contact": {
          "phone": "",
          "email": "",
          "website": "",
          "facebook": null,
          "twitter": null,
          "properties": null
        }
      }
    ]
  }
}

Tile Service

The Chargetrip Tile Service is a Vector Tile Server that offers a pre-rendered fully clustered charge station solution inlcluding filters to superchargers your station map (pun intended). Traditionally charge station maps load stations within a bounding box and apply filters and clusters client-side. This means long waiting times when you interact with the map. Our tile-service moves this to the back-end. So filtering and clustering become nearly instant and the map becomes much more responsive.

Our Tile Service is based on Clusterbuster which is one of our open source projects. Clusterbuster creates a faster way of loading a high amount of points (clustered and filtered) on a map using Vector Tiles. Vector tiles are packets of geographical data, packaged into pre-defined squares or "tiles".

The Tile Serice can be used with your own Station Database, the EcoMovement database or the free OCM database.

Our Tile Service can be accessed at:

https://api.chargetrip.io/station/{z}/{x}/{y}/tile.mvt

Properties

Each tile provided by Tile Service contains a layer, called stations. This layer contains a list of features, which are clusters or stations. All the feature have the following properties:

Property Type Description
id string This is the ID of the station if the feature is a station or the ID of the first station if the feature is a cluster.
lat number The latitude coordinate of the feature for both clusters and stations.
lng number The longitude coordinate of the feature for both clusters and stations.
count number The number of stations within a cluster, for stations this will be 1. This is the discriminator between clusters and stations, clusters count is always over 1 and for stations is always 1.
expansionZoom number The zoom level where the cluster split in multiple clusters or stations.
speed enum(slow, fast, turbo) This is the type of speed of the station if the feature is a station or the type of speed of the first station if the feature is a cluster. All stations bellow 40 kWh are slow, between 40 kWh and 100 kWh are fast and above 100 kWh are turbo.
status enum(free, busy, unknown, error) This is the global status of the station if the feature is a station or the global status of the first station if the feature is a cluster. Free means at least one connector is available to charge a Car, busy means there is no free connectors, error means the station have an error and cannot be used and unknown means we don't know the exact status of all connectors.
preferred_operator boolean Is a flag which indicate if the operator of the station is marked as preferred. The preferred list is customisable.

You must use the count property to differentiate between stations and clusters. A cluster will always be bigger than 1, while a single station will have 1 as a count.

Filters

For rendering stations on your map, you need to add a set of filters to the tile requests. The filters are send as query parameters and appended after ? to the Tile Service URL. These are the available filters:

Filter Type Description
power array<number> A list of power, in kWh, of the stations which should be included in the tiles.
connectors array<OCPIConnectorType> A list of conector standards of the stations which should be included in the tiles.
amenities array<string> A list of amenities which should be present near the stations included in the tiles. Possible values: hotel, shopping, bathroom, supermarket, playground, pharmacy, museum, coffee, park, restaurant.
availableOnly boolean A flag to force include in the tiles only stations which are free and can be used for charging a Car.
preferredOperator boolean A flag to force include in the tiles only stations which are operated by a preferred operator.

Here is an example of URL with filters applied:

https://api.chargetrip.io/station/{z}/{x}/{y}/tile.mvt?power[]=22&power[]=43&connectors[]=CHADEMO&connectors[]=IEC_62196_T2_COMBO&amenities[]=restaurant&availableOnly=true

Authorisation

You need to set your x-client-id as a header to authorise your request.

"x-client-id": "5e8c22366f9c5f23ab0eff39"

Integration with Mapbox

Our Tile Services integrates easly with Mapbox, almost out of the box. You only need to tell Mapbox to put the x-client-id header on the request. To do that, you can use transformRequest in your Mapbox constructor:

Example of Mapbox constructor with transformRequest

var map = new mapboxgl.Map({
  container: 'map',
  center: [-122.420679, 37.772537],
  zoom: 13,
  transformRequest: (url, resourceType)=> {
    if(resourceType === 'Tile' && url.startsWith('https://api.chargetrip.io')) {
       return {
        url: url,
        headers: { "x-client-id": "5e8c22366f9c5f23ab0eff39" },
      }
    }
  }
});

Here is a full html example (replace <your access token here> with your Mapbox access token):

Html example

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Chargetrip Tile Service on Mapbox</title>
    <meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no" />
    <script src="https://api.tiles.mapbox.com/mapbox-gl-js/v1.4.1/mapbox-gl.js"></script>
    <link href="https://api.tiles.mapbox.com/mapbox-gl-js/v1.4.1/mapbox-gl.css" rel="stylesheet" />
    <style>
      body {
        margin: 0;
        padding: 0;
      }
      #map {
        position: absolute;
        top: 0;
        bottom: 0;
        width: 100%;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      mapboxgl.accessToken = '<your access token here>';
      var map = new mapboxgl.Map({
        container: 'map',
        style: 'mapbox://styles/mapbox/light-v10',
        zoom: 7,
        center: [3.4, 52.2],
        transformRequest: (url, resourceType) => {
          if (resourceType === 'Tile' && url.startsWith('https://api.chargetrip.io')) {
            return {
              url: url,
              headers: { 'x-client-id': '5e8c22366f9c5f23ab0eff39' },
            };
          }
        },
      });

      map.on('load', function() {
        // Change the source to filter
        map.addSource('stations', {
          type: 'vector',
          tiles: [
            'https://api.chargetrip.io/station/{z}/{x}/{y}/tile.mvt?power[]=22&power[]=43&connectors[]=CHADEMO&connectors[]=IEC_62196_T2_COMBO',
          ],
        });
        map.addLayer({
          id: 'clusters',
          type: 'circle',
          source: 'stations',
          'source-layer': 'stations',
          interactive: true,
          filter: ['>', ['get', 'count'], 1],
        });

        map.addLayer({
          id: 'cluster_count',
          type: 'symbol',
          source: 'stations',
          'source-layer': 'stations',
          interactive: true,
          filter: ['>', ['get', 'count'], 1],

          layout: {
            'text-field': ['get', 'count'],
            'text-size': 12,
          },
          paint: {
            'text-color': '#ffffff',
          },
        });

        map.addLayer({
          id: 'unclustered-stations',
          type: 'circle',
          source: 'stations',
          'source-layer': 'stations',
          filter: ['!', ['has', 'point_count']],
          paint: {
            'circle-color': '#11b4da',
            'circle-radius': 4,
            'circle-stroke-width': 1,
            'circle-stroke-color': '#fff',
          },
        });

        map.on('click', function({ point, target }) {
          const features = target.queryRenderedFeatures(point, {
            layers: ['clusters', 'cluster_count', 'unclustered-point'],
          });
          if (features && features.length > 0) {
            map.flyTo({ center: [features[0].properties.lng, features[0].properties.lat] });
          }
        });
      });
    </script>
  </body>
</html>

Routes

Once you have selected a car and set up a station database you can start planning routes. Our routing engine is build on top of a powerful graph database and offers unparralelled speeds optimised for connected cars and legacy embedded systems. The response time varies with the complexity of the route, the requested amenities, the distance and selected car profile. To plan a route you must create a new route in the engine. You can then query and/or subscribe to that route.

There are several operators used to create and access routes. The newRoute mutation is used to create a route. It takes a RequestInput object which contains all the parameters needed to create a route and returns the ID of that newly created Route. The route query is used to access a given Route by its ID. A Route will include both a primary route and a list of alternate routes (if available) which are stored as RouteAlternative objects. You can also subscribe to a routeUpdatedByID to receive dynamic updates for a route which allows you to re-route.

The computation time of a route depends on the lenght and environment data. In order to retrieve a route, you need to query for it until the status become done, not_found or error. Another option would be to subscribe to the route until the status becomes one of the above, but be aware if the route is computed before you subscribe to it, you will not receive any updates. If you want to use subscription and avoid the scenario of not receiving the result, after you created the subscription you can make a query to see the latest state of the route.

Below is an example of the entire route response.

Example Response

{
  "route": {
    "route": {
      "id": "5e8c34fe2cc60438df7dc948",
      "type": "fastest",
      "charges": 1,
      "distance": 151327,
      "duration": 6613,
      "consumption": 29.553,
      "chargeTime": 974,
      "amenityRanking": 0,
      "rangeStart": 195000,
      "rangeStartKwh": 28,
      "rangeEnd": 47837,
      "rangeEndKwh": 6.868889337936359,
      "via": "Fastned De Poel",
      "polyline": "ejt~Hyw{\\HJ^h@P\\BMJk@BS{AgBiAqAFY@EV_A@KDO@E?IJe@@I@IXoAJa@@GRw@@E@EBKm@UoIeDKMQg@GSIUMYCAoBmBAC]WUMMGIEyBwBGWMYQUWMCABWDYBe@RuCB_@X}DVwDL}ARcDf@cPJwB?ORaFZ}FR_DBY@Kl@sJDi@De@p@aJX_EBYB[B]Dg@TuCTyCd@yFz@}Jf@eFRyAXsBDSDSNq@d@wBnAiEz@eC`@cATe@rA}BlAwA`Ay@FEFEBCNKXQIg@Ia@UkBGwABeBL_BHy@TeCh@_HFwA?mDIkDOsDaFw~@OeDGoCAsB@sBDsBFqBLqBNoBl@qFDW`DyUT_BFg@F_@Da@`AcGd@wBn@uB`C_Gf@kAdCwFN]N]t@eBLY~CmHN]T\\zCrEt@f@VJ\\@n@G\\M^UZYv@u@n@k@^W^SbAWv@?|@HdD~@dQdIt]jPbHlDPHhFhCnAjAtAhA^d@l@z@xBlEf@d@ZP^Jn@D^GRC^Qb@a@V_@Zs@J]Lm@Hi@Fq@@kAKgOBsCFuAHeAL_ARkA^aBTaABo@nA}EjAkEzAeFzAaFtAeErAeEr@sBpDwJdAaC|BuEr@kAx@wAxDaGnJ_Md@o@rAeBnAiBx@sAz@{AdCqE`BcDjAgCr@}ArAaDpAaDxA{Dt@oBTs@h@sAZ_AjAoE|A{Gr@kDTkAfAgGnAaINoAPoBVsBj@yFd@qFRyCL_CNsC\\cLFwC?oCByDCsJIc[?wBBwEF}BLcDTkCPmBN{@l@oEXyBHu@Da@JaBLmBD{A@aBAgLHiEFwAt@}K?{@d@kF|AyPzBiTfDeYzAkLfBqM^yBvCcSdAuGbDcR~@uE~B_M|@aF|@aFf@wCf@wCp@kE~BePz@mHp@qG`AwKj@_HX_EbB{[~@_Nn@yH~@cJfAeJpAyJt@yEr@uEr@_EpBgKnByJ|EaWzBkLr@eChDyOd@_Cv@_F^mCr@aIlAqOn@kFd@_Df@wC^aB^kBt@wChB_GbAqC~@uBZaApA_DbBaEtAyDfAgDxA{EbDyLbCkJxAiGv@qDd@iCZuBf@sDXsCR{BTwFFwBF_ECiDE}HWka@C_DOmSGyLK{TA_HJuFTkHb@gH`@kEd@sDbAiHv@gEjAiF|@iDbByFjB_FrEaKzBkDnBoCrCkDpAqA|A{AxJmIvZ_Xz@u@nD}CtGuFdB_B|@s@l@e@bCsAzB_A~Bq@lASrASfCOnEE~MQrBCvEWv@OvA[tAa@zAk@vAq@zBqAvBeBzDcE`D}EpB{DpA}C|E_MdZqr@rGeOJUp@_BbBaEpAsCvA_CfAcBbCuC~A{AdAaAd@[rA{@jDaBfBg@pC_@~BI|QFpCQtCc@fA]n@UnAk@pMwG~DmBx@c@jGaD\\Qx@e@dHaEbEuClCiCpDsDvA_BrAeB|DyF|BuDzAqC`DcGdMwWvIyQhEkJbIwQdDsGdFuI|JuO|D{GxA_CxEgIbEuI~CeIlC}HjBaHvBkJr@wDzAiKfAcJXsCjA}PRqFNuGLsIR{TP{R`@c`@T_UNgLZeMVyGTqE\\}Fj@kHf@cFdA}JbDoWxHym@tAoK^qCZcC`@_Dd@mDx@sGLaA`BsM~BoRfDqZjEeb@dDo]Hy@vCgYfBuPxKydAdE_a@hCiVhAkL`@sE\\_Fv@{ML_CFcAZwGjBs]|@oNd@wGl@wGj@gFpA}Jf@aD|@gFhCcMlB{HlBsGzAwE|CiIzCgHnCsFrByD~B{DrCuEnHgLdEuGvHqLvFuIfVo_@lEaH|@sAzBgDxRuYjCyD~EmHv@oAjBwCxEaIl[uf@pCwExB}DbBeDnC}F|BkFrAkDdGoPh@wAfJkWz@aC~@yC|@{Cp@{B`@oBhAqGZuBVwBDi@Fm@JwAXoEVwFnCqz@tHqeCvLmyDPsG`@wYEmSQoTQ_TOwISwI_@iLg@mLkCma@uKozA{A}Te@_I?}CBwAHoAd@mDd@aC`@mBv@aDj@gCJo@BWBc@@}@?mABSBi@FYJONIXC~@C|A@jA?zBQ`BG\\CV@d@DfAJVBlQvBrFp@f@FxEj@bM`BfHhBdGjBhDjA|@NL@JBjALtADnA?rFObHQzKh@b@@zKf@VBpXrAbJb@jGDlAAdDUjDe@xASbF_AnJqBvH_BxFyAbJeCfLcEjBs@bIqDzEiCzJeGpFqDpI{GtF{E`G{Fl@o@zC_D~E{F|EiGjH}J|DcG~DmGt[ej@bBiCvAsB|AmBvCgDrBqBpBcBjGuEfFmCvD_BrAc@lFyAdDi@fDc@bAFd@AxBH|CVzB?`BORCPAzDk@nE{ArIgCzBm@jCgAxE{AdC_AvEyBjDmBpPaKt@e@`MsHhNgJ~EkD~D{CpDoCdJwGbDiCtGwEbT{Nx[qTtDcCtDoB~DiBdCy@bCo@~Cm@lDg@pBS|BG~@J~AZh@R`Ar@Z^vAfC^^t@h@|@RrCGf@?V??g@E_DQoEy@uKAGEk@UDYFgEb@UHWP]f@}@vBWf@_@f@{@z@sAt@}C\\wCPmBXeF|@aCl@gCz@aEhBwDpBwD`CcVrPsDbCeDtBmB~@uCzAQDW@SCWKe@]a@E[BQFID{@b@e@Z??i@\\OJURKtAqCpCMTEN@d@CVCRWVuGzFaJfHwK`IwDhCuH|E{LpHu@d@ePrJ_E|BoEvBcC`AmEtA_FjAmBDiELqHa@{D`@UBDdBFrAJpCPAzDk@nE{ArIgCzBm@jCgAxE{AdC_AvEyBjDmBpPaKt@e@`MsHhNgJ~EkD~D{CpDoCdJwGbDiCtGwEbT{Nx[qTtDcCtDoB~DiBdCy@bCo@~Cm@lDg@pBS|BGzAGnDBjK`@`@?bADjNnA~Cf@dC`@vFfAhIpB\\JrA`@fGnBpHrCtB`A~At@zE`C`HxDfGxDd@\\hAt@bC`BlBxAfAp@p@Zf@N~AZ^D^@hA?rAOj@Kb@MdAe@v@c@n@g@nAoAl@y@h@}@v@{Ad@oA`@sAXeAf@gCLcAVkCFiADcC?aI@}ALuCR{Bh@gD`DsN^sANoA~DeOfD_MtBsIhC}LbC_M|ByNxAaLzBmSz@gKf@sGt@cNZaHPcEZeHdAgVn@oOFsAdAeWzAo\\hAiZJ_CBw@^cJRsL?wJqAkcAGyCe@_NYsFg@kG_AwJcA_HqA{H_AyEgAuEgAeEqAkEaB_FaNk^eCkHoBwGi@eBmA_GyAsHm@}DeAqIm@mF]}DQgC_@cHSeHIwIAwIFcHjCwkAL}IRmNJsLFkMBgO?oQCcIUwWi@i]_Aeg@YiYAkS@c[FiTByIE}MCaCI}FK}FWeJm@mNa@iHm@sIqBuWkAmOqAyOe@_GwJonAsDke@}BwYc@yGw@iPSyF[uNKqGE_N?kIDsHFeFJoEZmLn@uOz@cOl@wH`BeQhBgOvA}J\\wBT{AlBsKrQmaAz@oEn@sDhB{KpAwJn@_FP_Bl@cFvBcVtE{j@vCu_@x@wJpCq\\nAuOb@qF`A_MRcCh@}FRgCXaDfAsMbAwKd@wDf@aDj@uDzAoIzAmGlAqE|AeFtAcE`BeEtDkIbAkB|DuGnEmG~CyDjDcDpD{CbBgAnGwDlAk@vDyArg@gR`GkCjAs@jD}BbAs@pDyC|DaE`D_EbCgDtDoGnBwDn@qApAyClA{Cz@{Bl@eBr@wB`AaDvAiFPq@`AkE~@mEr@uDf@kCbByIf@}Bl@_DP{@nAuGj@}Cr@cDj@eCn@aChCsIz@eCx@wBx@sB~BgFtBeE`DmF`CoD|BaDjQyUbEsF|FwHzHyKhAgBxDuGnBaEdCyFxA{DnCuIfCyJx@{DdG}[nAkHhIqe@tAyItCwPj@_DfAoGRiAPcAdF{YXyAf@{CLs@vC_Qr@aExBkMhEwUfBkJbBmI|CwNt@iDjBiIxHm^nFuVxDiQtAmGtI{`@zF{W`AqEf@_CpCgM|AmGlBwHn@{BvDsLxCsIh@sAz@}BjGgPRk@|GmQh@uAtCsHzd@emA|L{[hIkTj@{Ax@uB~JyWfMo\\Z{@z`@ydApBgFr@iBtBcEb@aAv@kAVYn@m@zAw@LGj@SpAg@hAy@`@k@Zk@Pm@Ps@Hm@H_A@e@?gAGeAKu@U_AM_@EKO[a@m@_@_@KIOKgAi@cK_EqBw@eB_AaAo@[[a@a@{@kAqAqBaVah@}GyN_JkRsBqE{DkI_GcMmTid@Ug@sKgV_EgKkFgOeByFi@cBkA_EeC_Jw@gDkCuK_BqHiB{Is@wDuAuHmB{LwAaJaBuMu@uGuAoNu@mJg@uG}@eOYgGm@}OM}Ec@kS[{S[aTKaOAaNBiJHoJLoHdFkhCz@ke@J{IHyOAaLa@ca@WwTq@mn@c@}^o@gg@EgEM{MMeMGgD_@eOIoCy@_Oa@{Fy@iJGm@SqBmAwJM}@cBmLaB}KuCeSM_As@uFkAaLs@kHi@cH_@qFk@sJq@uPY_LSoNEoH?cIDyJPqK@}@^sN^mIv@uNlAaPzAuOtAaLzA{KxAgJpB{LToAfBuKjAsIZmCz@sJT_Db@_JVaIFkG@mIGwHgBim@e@cXQsWCeFBuUFqMJwID{B?}BTwK`@iPjBif@VcIN}FHwF@}FAyGGwFKkEUkI[{Gy@mLaAkKk@}Em@cEo@wEaBmJqBcJi@{B]eAg@_Ac@i@[]i@]q@a@w@K{@AWRLrBP`BPn@v@nHLhAX`BRb@_@jAc@fBOdAQnCAjDCjDAl@GbAm@lDs@lD]fDK`CCvAi@xOUfHMhBWpCe@|DKj@_@|A}@tCSl@Op@YjA[xCKpAQjBShCO|ASjCA\\A`BHzA@PFf@ZhCR|@Nb@n@lAZr@JOHEDAPDAoBCwC@M@KFOFKzAm@LKNQjAgBj@cBJIl@KJGFKp@}BN_@j@_AJK",
      "elevationPlot": [
        6,
        3,
        0,
        1,
        3,
        1,
        1,
        2,
        0,
        -2,
        -2,
        -2,
        1,
        1,
        1,
        1,
        2,
        7,
        23,
        24,
        12,
        3,
        3,
        0,
        0,
        2,
        -1,
        0,
        0,
        3,
        5,
        6,
        3,
        3,
        5,
        6,
        7,
        10,
        11,
        11,
        10,
        11,
        11,
        12,
        12,
        10,
        10,
        10,
        10,
        10,
        11,
        12,
        10,
        10,
        9,
        8,
        7,
        11,
        17,
        29,
        47,
        34,
        27,
        30,
        40,
        36,
        38,
        42,
        43,
        43,
        56,
        68,
        47,
        16,
        12,
        12,
        8,
        9,
        8,
        8,
        11,
        11,
        11,
        13,
        15,
        14,
        14,
        16,
        14,
        13,
        14,
        14,
        18,
        16,
        15,
        16,
        16,
        18,
        20,
        18
      ],
      "elevationUp": 7566,
      "elevationDown": 6053,
      "elevationMax": 68,
      "saving": {
        "co2": "47520",
        "money": "17.23",
        "currency": "$",
        "averageGasPrice": "1.45",
        "averageEnergyPrice": "0.3"
      },
      "legs": [
        {
          "id": "5e8c34fe2cc60415d77dc94a",
          "distance": 74619,
          "duration": 2945,
          "consumption": 14.022,
          "rangeStart": 195000,
          "rangeStartKwh": 28,
          "rangeEnd": 97345,
          "rangeEndKwh": 13.978,
          "origin": {
            "id": null,
            "type": "Feature",
            "geometry": {
              "type": "Point",
              "coordinates": [
                4.8979755,
                52.3745403
              ]
            },
            "properties": {
              "addess": "Amsterdam, North Holland, The Netherlands",
              "temp": 11.52,
              "pressure": 1031
            }
          },
          "destination": {
            "id": null,
            "type": "Feature",
            "geometry": {
              "type": "Point",
              "coordinates": [
                5.6117284297943115,
                52.06440082406267
              ]
            },
            "properties": {
              "address": "De Poel (A30 Ede - Barneveld HMP 11.8), Ede, Gelderland, NL",
              "temp": 23,
              "pressure": 1013.25
            }
          },
          "type": "station",
          "name": "Fastned De Poel",
          "stationId": "5e8595aad3406c06083c8f76",
          "operatorId": "5e85839fd3406c6b9f3b8fc3",
          "chargeTime": 974,
          "evse": {
            "uid": "57830",
            "status": "UNKNOWN",
            "connectors": [
              {
                "standard": "CHADEMO",
                "power": 50
              }
            ]
          },
          "connector": {
            "standard": "CHADEMO",
            "power": 50
          },
          "plugsAvailable": 2,
          "plugsCount": 2
        },
        {
          "id": "5e8c34fe2cc60436277dc949",
          "distance": 76708,
          "duration": 2694,
          "consumption": 15.531,
          "rangeStart": 156000,
          "rangeStartKwh": 22.4,
          "rangeEnd": 47837,
          "rangeEndKwh": 6.869,
          "origin": {
            "id": null,
            "type": "Feature",
            "geometry": {
              "type": "Point",
              "coordinates": [
                5.6117284297943115,
                52.06440082406267
              ]
            },
            "properties": {
              "address": "De Poel (A30 Ede - Barneveld HMP 11.8), Ede, Gelderland, NL",
              "temp": 23,
              "pressure": 1013.25
            }
          },
          "destination": {
            "id": null,
            "type": "Feature",
            "geometry": {
              "type": "Point",
              "coordinates": [
                6.41907267506761,
                51.94840944992789
              ]
            },
            "properties": {
              "address": "Tandembos, Doetinchemseweg, 7054 CD Oude IJsselstreek, The Netherlands",
              "temp": 12.55,
              "pressure": 1032
            }
          },
          "type": "final",
          "name": "Tandembos, Doetinchemseweg, 7054 CD Oude IJsselstreek, The Netherlands",
          "stationId": "",
          "operatorId": "",
          "chargeTime": 0,
          "evse": null,
          "connector": null,
          "plugsAvailable": 0,
          "plugsCount": 0
        }
      ]
    },
    "status": "done"
  }
}

These are all the available output parameters for the route type.

Attribute Type Description
route RouteAlternative The recommended route
alternatives [RouteAlternative] A list of available alternatives
ev RequestEv The EV specific data for a route request
user RequestUser The user who requested the route
routeRequest RequestRoute The route request data
status RouteStatus The route status

Request a new route

Example Mutation

mutation newRoute {
  newRoute(
    input: {
      ev: {
        id: "5d161be5c9eef46132d9d20a"
        battery: {
          capacity: { value: 72.5, type: kwh }
          stateOfCharge: { value: 72.5, type: kwh }
          finalStateOfCharge: { value: 0, type: kwh }
        }
        plugs: [{ standard: TESLA_S, chargingPower: 150 }]
        adapters: [{ standard:IEC_62196_T2_COMBO, chargingPower: 150 }, { standard:CHADEMO, chargingPower: 150 }]
        climate: true
        minPower: 43
        numberOfPassengers: 1
      }
      routeRequest: {
        origin: {
          type: Feature
          geometry: { type: Point, coordinates: [13.3888599, 52.5170365] }
          properties: { name: "Berlin, Germany" }
        }
        destination: {
          type: Feature
          geometry: { type: Point, coordinates: [9.1800132, 48.7784485] }
          properties: { name: "Stuttgart, Germany" }
        }
      }
    }
  )
}

Example Response

{
  "data": {
    "newRoute": "5e300e71f7e26f726afd3d71"
  }
}

Get route details

Get route details

query getRoute {
  route(id:"5e300e71f7e26f726afd3d71") {
    route {
      id
      type
      charges
      distance
      duration
      consumption
      chargeTime
      amenityRanking
      rangeStart
      rangeStartKwh
      rangeEnd
      rangeEndKwh
      via
      polyline
      elevationPlot
      elevationUp
      elevationDown
      elevationMax
      saving {
        co2
        money
        currency
        averageGasPrice
        averageEnergyPrice
      }
      legs {
        id
        distance
        duration
        consumption
        rangeStart
        rangeStartKwh
        rangeEnd
        rangeEndKwh
        origin {
          id
          type
          geometry {
            type
            coordinates
          }
          properties
        }
        destination {
          id
          type
          geometry {
            type
            coordinates
          }
          properties
        }
        type
        name
        stationId
        operatorId
        chargeTime
        evse {
          uid
          status
          connectors {
            standard
            power
          }
        }
        connector {
          standard
          power
        }
        plugsAvailable
        plugsCount
      }
    }
    status
  }
}

Example response

{
  "data": {
    "route": {
      "route": {
        "id": "5e8c34fe2cc60438df7dc948",
        "type": "fastest",
        "charges": 1,
        "distance": 151327,
        "duration": 6613,
        "consumption": 29.553,
        "chargeTime": 974,
        "amenityRanking": 0,
        "rangeStart": 195000,
        "rangeStartKwh": 28,
        "rangeEnd": 47837,
        "rangeEndKwh": 6.868889337936359,
        "via": "Fastned De Poel",
        "polyline": "ejt~Hyw{\\HJ^h@P\\BMJk@BS{AgBiAqAFY@EV_A@KDO@E?IJe@@I@IXoAJa@@GRw@@E@EBKm@UoIeDKMQg@GSIUMYCAoBmBAC]WUMMGIEyBwBGWMYQUWMCABWDYBe@RuCB_@X}DVwDL}ARcDf@cPJwB?ORaFZ}FR_DBY@Kl@sJDi@De@p@aJX_EBYB[B]Dg@TuCTyCd@yFz@}Jf@eFRyAXsBDSDSNq@d@wBnAiEz@eC`@cATe@rA}BlAwA`Ay@FEFEBCNKXQIg@Ia@UkBGwABeBL_BHy@TeCh@_HFwA?mDIkDOsDaFw~@OeDGoCAsB@sBDsBFqBLqBNoBl@qFDW`DyUT_BFg@F_@Da@`AcGd@wBn@uB`C_Gf@kAdCwFN]N]t@eBLY~CmHN]T\\zCrEt@f@VJ\\@n@G\\M^UZYv@u@n@k@^W^SbAWv@?|@HdD~@dQdIt]jPbHlDPHhFhCnAjAtAhA^d@l@z@xBlEf@d@ZP^Jn@D^GRC^Qb@a@V_@Zs@J]Lm@Hi@Fq@@kAKgOBsCFuAHeAL_ARkA^aBTaABo@nA}EjAkEzAeFzAaFtAeErAeEr@sBpDwJdAaC|BuEr@kAx@wAxDaGnJ_Md@o@rAeBnAiBx@sAz@{AdCqE`BcDjAgCr@}ArAaDpAaDxA{Dt@oBTs@h@sAZ_AjAoE|A{Gr@kDTkAfAgGnAaINoAPoBVsBj@yFd@qFRyCL_CNsC\\cLFwC?oCByDCsJIc[?wBBwEF}BLcDTkCPmBN{@l@oEXyBHu@Da@JaBLmBD{A@aBAgLHiEFwAt@}K?{@d@kF|AyPzBiTfDeYzAkLfBqM^yBvCcSdAuGbDcR~@uE~B_M|@aF|@aFf@wCf@wCp@kE~BePz@mHp@qG`AwKj@_HX_EbB{[~@_Nn@yH~@cJfAeJpAyJt@yEr@uEr@_EpBgKnByJ|EaWzBkLr@eChDyOd@_Cv@_F^mCr@aIlAqOn@kFd@_Df@wC^aB^kBt@wChB_GbAqC~@uBZaApA_DbBaEtAyDfAgDxA{EbDyLbCkJxAiGv@qDd@iCZuBf@sDXsCR{BTwFFwBF_ECiDE}HWka@C_DOmSGyLK{TA_HJuFTkHb@gH`@kEd@sDbAiHv@gEjAiF|@iDbByFjB_FrEaKzBkDnBoCrCkDpAqA|A{AxJmIvZ_Xz@u@nD}CtGuFdB_B|@s@l@e@bCsAzB_A~Bq@lASrASfCOnEE~MQrBCvEWv@OvA[tAa@zAk@vAq@zBqAvBeBzDcE`D}EpB{DpA}C|E_MdZqr@rGeOJUp@_BbBaEpAsCvA_CfAcBbCuC~A{AdAaAd@[rA{@jDaBfBg@pC_@~BI|QFpCQtCc@fA]n@UnAk@pMwG~DmBx@c@jGaD\\Qx@e@dHaEbEuClCiCpDsDvA_BrAeB|DyF|BuDzAqC`DcGdMwWvIyQhEkJbIwQdDsGdFuI|JuO|D{GxA_CxEgIbEuI~CeIlC}HjBaHvBkJr@wDzAiKfAcJXsCjA}PRqFNuGLsIR{TP{R`@c`@T_UNgLZeMVyGTqE\\}Fj@kHf@cFdA}JbDoWxHym@tAoK^qCZcC`@_Dd@mDx@sGLaA`BsM~BoRfDqZjEeb@dDo]Hy@vCgYfBuPxKydAdE_a@hCiVhAkL`@sE\\_Fv@{ML_CFcAZwGjBs]|@oNd@wGl@wGj@gFpA}Jf@aD|@gFhCcMlB{HlBsGzAwE|CiIzCgHnCsFrByD~B{DrCuEnHgLdEuGvHqLvFuIfVo_@lEaH|@sAzBgDxRuYjCyD~EmHv@oAjBwCxEaIl[uf@pCwExB}DbBeDnC}F|BkFrAkDdGoPh@wAfJkWz@aC~@yC|@{Cp@{B`@oBhAqGZuBVwBDi@Fm@JwAXoEVwFnCqz@tHqeCvLmyDPsG`@wYEmSQoTQ_TOwISwI_@iLg@mLkCma@uKozA{A}Te@_I?}CBwAHoAd@mDd@aC`@mBv@aDj@gCJo@BWBc@@}@?mABSBi@FYJONIXC~@C|A@jA?zBQ`BG\\CV@d@DfAJVBlQvBrFp@f@FxEj@bM`BfHhBdGjBhDjA|@NL@JBjALtADnA?rFObHQzKh@b@@zKf@VBpXrAbJb@jGDlAAdDUjDe@xASbF_AnJqBvH_BxFyAbJeCfLcEjBs@bIqDzEiCzJeGpFqDpI{GtF{E`G{Fl@o@zC_D~E{F|EiGjH}J|DcG~DmGt[ej@bBiCvAsB|AmBvCgDrBqBpBcBjGuEfFmCvD_BrAc@lFyAdDi@fDc@bAFd@AxBH|CVzB?`BORCPAzDk@nE{ArIgCzBm@jCgAxE{AdC_AvEyBjDmBpPaKt@e@`MsHhNgJ~EkD~D{CpDoCdJwGbDiCtGwEbT{Nx[qTtDcCtDoB~DiBdCy@bCo@~Cm@lDg@pBS|BG~@J~AZh@R`Ar@Z^vAfC^^t@h@|@RrCGf@?V??g@E_DQoEy@uKAGEk@UDYFgEb@UHWP]f@}@vBWf@_@f@{@z@sAt@}C\\wCPmBXeF|@aCl@gCz@aEhBwDpBwD`CcVrPsDbCeDtBmB~@uCzAQDW@SCWKe@]a@E[BQFID{@b@e@Z??i@\\OJURKtAqCpCMTEN@d@CVCRWVuGzFaJfHwK`IwDhCuH|E{LpHu@d@ePrJ_E|BoEvBcC`AmEtA_FjAmBDiELqHa@{D`@UBDdBFrAJpCPAzDk@nE{ArIgCzBm@jCgAxE{AdC_AvEyBjDmBpPaKt@e@`MsHhNgJ~EkD~D{CpDoCdJwGbDiCtGwEbT{Nx[qTtDcCtDoB~DiBdCy@bCo@~Cm@lDg@pBS|BGzAGnDBjK`@`@?bADjNnA~Cf@dC`@vFfAhIpB\\JrA`@fGnBpHrCtB`A~At@zE`C`HxDfGxDd@\\hAt@bC`BlBxAfAp@p@Zf@N~AZ^D^@hA?rAOj@Kb@MdAe@v@c@n@g@nAoAl@y@h@}@v@{Ad@oA`@sAXeAf@gCLcAVkCFiADcC?aI@}ALuCR{Bh@gD`DsN^sANoA~DeOfD_MtBsIhC}LbC_M|ByNxAaLzBmSz@gKf@sGt@cNZaHPcEZeHdAgVn@oOFsAdAeWzAo\\hAiZJ_CBw@^cJRsL?wJqAkcAGyCe@_NYsFg@kG_AwJcA_HqA{H_AyEgAuEgAeEqAkEaB_FaNk^eCkHoBwGi@eBmA_GyAsHm@}DeAqIm@mF]}DQgC_@cHSeHIwIAwIFcHjCwkAL}IRmNJsLFkMBgO?oQCcIUwWi@i]_Aeg@YiYAkS@c[FiTByIE}MCaCI}FK}FWeJm@mNa@iHm@sIqBuWkAmOqAyOe@_GwJonAsDke@}BwYc@yGw@iPSyF[uNKqGE_N?kIDsHFeFJoEZmLn@uOz@cOl@wH`BeQhBgOvA}J\\wBT{AlBsKrQmaAz@oEn@sDhB{KpAwJn@_FP_Bl@cFvBcVtE{j@vCu_@x@wJpCq\\nAuOb@qF`A_MRcCh@}FRgCXaDfAsMbAwKd@wDf@aDj@uDzAoIzAmGlAqE|AeFtAcE`BeEtDkIbAkB|DuGnEmG~CyDjDcDpD{CbBgAnGwDlAk@vDyArg@gR`GkCjAs@jD}BbAs@pDyC|DaE`D_EbCgDtDoGnBwDn@qApAyClA{Cz@{Bl@eBr@wB`AaDvAiFPq@`AkE~@mEr@uDf@kCbByIf@}Bl@_DP{@nAuGj@}Cr@cDj@eCn@aChCsIz@eCx@wBx@sB~BgFtBeE`DmF`CoD|BaDjQyUbEsF|FwHzHyKhAgBxDuGnBaEdCyFxA{DnCuIfCyJx@{DdG}[nAkHhIqe@tAyItCwPj@_DfAoGRiAPcAdF{YXyAf@{CLs@vC_Qr@aExBkMhEwUfBkJbBmI|CwNt@iDjBiIxHm^nFuVxDiQtAmGtI{`@zF{W`AqEf@_CpCgM|AmGlBwHn@{BvDsLxCsIh@sAz@}BjGgPRk@|GmQh@uAtCsHzd@emA|L{[hIkTj@{Ax@uB~JyWfMo\\Z{@z`@ydApBgFr@iBtBcEb@aAv@kAVYn@m@zAw@LGj@SpAg@hAy@`@k@Zk@Pm@Ps@Hm@H_A@e@?gAGeAKu@U_AM_@EKO[a@m@_@_@KIOKgAi@cK_EqBw@eB_AaAo@[[a@a@{@kAqAqBaVah@}GyN_JkRsBqE{DkI_GcMmTid@Ug@sKgV_EgKkFgOeByFi@cBkA_EeC_Jw@gDkCuK_BqHiB{Is@wDuAuHmB{LwAaJaBuMu@uGuAoNu@mJg@uG}@eOYgGm@}OM}Ec@kS[{S[aTKaOAaNBiJHoJLoHdFkhCz@ke@J{IHyOAaLa@ca@WwTq@mn@c@}^o@gg@EgEM{MMeMGgD_@eOIoCy@_Oa@{Fy@iJGm@SqBmAwJM}@cBmLaB}KuCeSM_As@uFkAaLs@kHi@cH_@qFk@sJq@uPY_LSoNEoH?cIDyJPqK@}@^sN^mIv@uNlAaPzAuOtAaLzA{KxAgJpB{LToAfBuKjAsIZmCz@sJT_Db@_JVaIFkG@mIGwHgBim@e@cXQsWCeFBuUFqMJwID{B?}BTwK`@iPjBif@VcIN}FHwF@}FAyGGwFKkEUkI[{Gy@mLaAkKk@}Em@cEo@wEaBmJqBcJi@{B]eAg@_Ac@i@[]i@]q@a@w@K{@AWRLrBP`BPn@v@nHLhAX`BRb@_@jAc@fBOdAQnCAjDCjDAl@GbAm@lDs@lD]fDK`CCvAi@xOUfHMhBWpCe@|DKj@_@|A}@tCSl@Op@YjA[xCKpAQjBShCO|ASjCA\\A`BHzA@PFf@ZhCR|@Nb@n@lAZr@JOHEDAPDAoBCwC@M@KFOFKzAm@LKNQjAgBj@cBJIl@KJGFKp@}BN_@j@_AJK",
        "elevationPlot": [
          6,
          3,
          0,
          1,
          3,
          1,
          1,
          2,
          0,
          -2,
          -2,
          -2,
          1,
          1,
          1,
          1,
          2,
          7,
          23,
          24,
          12,
          3,
          3,
          0,
          0,
          2,
          -1,
          0,
          0,
          3,
          5,
          6,
          3,
          3,
          5,
          6,
          7,
          10,
          11,
          11,
          10,
          11,
          11,
          12,
          12,
          10,
          10,
          10,
          10,
          10,
          11,
          12,
          10,
          10,
          9,
          8,
          7,
          11,
          17,
          29,
          47,
          34,
          27,
          30,
          40,
          36,
          38,
          42,
          43,
          43,
          56,
          68,
          47,
          16,
          12,
          12,
          8,
          9,
          8,
          8,
          11,
          11,
          11,
          13,
          15,
          14,
          14,
          16,
          14,
          13,
          14,
          14,
          18,
          16,
          15,
          16,
          16,
          18,
          20,
          18
        ],
        "elevationUp": 7566,
        "elevationDown": 6053,
        "elevationMax": 68,
        "saving": {
          "co2": "47520",
          "money": "17.23",
          "currency": "$",
          "averageGasPrice": "1.45",
          "averageEnergyPrice": "0.3"
        },
        "legs": [
          {
            "id": "5e8c34fe2cc60415d77dc94a",
            "distance": 74619,
            "duration": 2945,
            "consumption": 14.022,
            "rangeStart": 195000,
            "rangeStartKwh": 28,
            "rangeEnd": 97345,
            "rangeEndKwh": 13.978,
            "origin": {
              "id": null,
              "type": "Feature",
              "geometry": {
                "type": "Point",
                "coordinates": [
                  4.8979755,
                  52.3745403
                ]
              },
              "properties": {
                "addess": "Amsterdam, North Holland, The Netherlands",
                "temp": 11.52,
                "pressure": 1031
              }
            },
            "destination": {
              "id": null,
              "type": "Feature",
              "geometry": {
                "type": "Point",
                "coordinates": [
                  5.6117284297943115,
                  52.06440082406267
                ]
              },
              "properties": {
                "address": "De Poel (A30 Ede - Barneveld HMP 11.8), Ede, Gelderland, NL",
                "temp": 23,
                "pressure": 1013.25
              }
            },
            "type": "station",
            "name": "Fastned De Poel",
            "stationId": "5e8595aad3406c06083c8f76",
            "operatorId": "5e85839fd3406c6b9f3b8fc3",
            "chargeTime": 974,
            "evse": {
              "uid": "57830",
              "status": "UNKNOWN",
              "connectors": [
                {
                  "standard": "CHADEMO",
                  "power": 50
                }
              ]
            },
            "connector": {
              "standard": "CHADEMO",
              "power": 50
            },
            "plugsAvailable": 2,
            "plugsCount": 2
          },
          {
            "id": "5e8c34fe2cc60436277dc949",
            "distance": 76708,
            "duration": 2694,
            "consumption": 15.531,
            "rangeStart": 156000,
            "rangeStartKwh": 22.4,
            "rangeEnd": 47837,
            "rangeEndKwh": 6.869,
            "origin": {
              "id": null,
              "type": "Feature",
              "geometry": {
                "type": "Point",
                "coordinates": [
                  5.6117284297943115,
                  52.06440082406267
                ]
              },
              "properties": {
                "address": "De Poel (A30 Ede - Barneveld HMP 11.8), Ede, Gelderland, NL",
                "temp": 23,
                "pressure": 1013.25
              }
            },
            "destination": {
              "id": null,
              "type": "Feature",
              "geometry": {
                "type": "Point",
                "coordinates": [
                  6.41907267506761,
                  51.94840944992789
                ]
              },
              "properties": {
                "address": "Tandembos, Doetinchemseweg, 7054 CD Oude IJsselstreek, The Netherlands",
                "temp": 12.55,
                "pressure": 1032
              }
            },
            "type": "final",
            "name": "Tandembos, Doetinchemseweg, 7054 CD Oude IJsselstreek, The Netherlands",
            "stationId": "",
            "operatorId": "",
            "chargeTime": 0,
            "evse": null,
            "connector": null,
            "plugsAvailable": 0,
            "plugsCount": 0
          }
        ]
      },
      "status": "done"
    }
  }
}

Subscribe to route updates

Subscribe to route updates

subscription routeUpdatedById {
  routeUpdatedById(id: "5e300e71f7e26f726afd3d71") {
    status
    # add more fields here
  }
}

Example response

{
  "data": {
    "route": {
      "status": "pending"
    }
  }
}

{
  "data": {
    "route": {
      "status": "processing"
    }
  }
}

{
  "data": {
    "route": {
      "status": "done"
    }
  }
}

Schema

The following is a list of all types, enumerators, and inputs available in the API. For an interactive reference, head to the playground and click on the "schema" tab.

Types

Address

type Address {
  continent: String
  country: String
  county: String
  city: String
  street: String
  number: String
  postalCode: String
  what3Words: String
  formattedAddress: [String]
}

Amenity

type Amenity {
  id: ID
  externalId: String
  name: String
  location: Point
  address: Address
  type: [String]
  rating: Float
  distance: Int
  foursquareUrl: String
  createdAt: String
  updatedAt: String
}

BatteryInputType

enum BatteryInputType {
  kwh
  km
  miles
}

Car

type Car {
  id: ID
  externalId: String
  make: String
  carModel: String
  edition: String
  version: String
  mode: CarMode
  power: Float
  acceleration: Float
  topSpeed: Float
  torque: Float
  batteryUsableKwh: Float
  batteryFullKwh: Float
  batteryEfficiency: CarBatteryEfficiency
  range: CarRange
  connectors: [CarPlug]
  adapters: [CarPlug]
  seats: Int
  weight: Float
  height: Int
  width: Int
  consumption: CarExtraConsumption
  petrolConsumption: Float
  auxConsumption: Float
  bmsConsumption: Float
  dragCoefficient: Float
  tirePressure: Float
  motorEfficiency: Float
  drivelineEfficiency: Float
  regenEfficiency: Float
  images: [CarImage]
  imagesData: CarImageData
}

CarBatteryEfficiency

type CarBatteryEfficiency {
  average: Float
  worst: CarEstimationData
  best: CarEstimationData
}

CarConsumption

type CarConsumption {
  worst: Float
  best: Float
}

CarConsumptionInput

input CarConsumptionInput {
  worst: Float
  best: Float
}

CarEstimationData

type CarEstimationData {
  highway: Float
  city: Float
  combined: Float
}

CarExtraConsumption

type CarExtraConsumption {
  aux: CarConsumption
  bms: CarConsumption
  idle: CarConsumption
}

CarImage

type CarImage {
  id: ID
  url: String
  width: Int
  height: Int
  type: CarImageType
}

CarImageData

type CarImageData {
  image: CarImage
  image_thumbnail: CarImage
  brand: CarImage
  brand_thumbnail: CarImage
}

CarImageType

enum CarImageType {
  provider
  image
  image_thumbnail
  brand
  brand_thumbnail
}

CarImageTypeUploadable

enum CarImageTypeUploadable {
  image
  brand
}

CarListQuery

input CarListQuery {
  make: String
  carModel: String
  edition: String
  mode: CarMode
}

CarMode

enum CarMode {
  index_only
  production
  concept
}

CarPlug

type CarPlug {
  standard: OCPIConnectorType
  power: Float
  time: Int
  speed: Int
}

CarRange

type CarRange {
  wltp: Float
  worst: CarEstimationData
  best: CarEstimationData
}

Charger

type Charger {
  standard: OCPIConnectorType
  power: Float
  price: String
  speed: StationSpeedType
  status: ChargerStatuses
  total: Int
}

ChargerStatus

enum ChargerStatus {
  free
  busy
  unknown
  error
}

ChargerStatuses

type ChargerStatuses {
  free: Int
  busy: Int
  unknown: Int
  error: Int
}

Connector

type Connector {
  id: String
  standard: OCPIConnectorType
  format: OCPIConnectorFormat
  power_type: OCPIPowerType
  max_voltage: Int
  max_amperage: Int
  max_electric_power: Int
  power: Float
  tariff_ids: String
  terms_and_conditions: String
  last_updated: DateTime
  properties: JSON
}

Contact

type Contact {
  phone: String
  email: String
  website: String
  facebook: String
  twitter: String
  properties: JSON
}

EVSE

type EVSE {
  uid: String
  evse_id: String
  status: OCPIStatus
  status_schedule: [OCPIStatusSchedule]
  capabilities: [OCPICapability]
  connectors: [Connector]
  floor_level: String
  coordinates: OCPIGeoLocation
  physical_reference: String
  parking_restrictions: [OCPIParkingRestriction]
  images: [OCPIImage]
  last_updated: DateTime
  parking_cost: ParkingCost
  properties: JSON
}

FeaturePoint

type FeaturePoint {
  id: String
  type: FeatureType!
  geometry: Point!
  properties: JSON
}

FeaturePointInput

input FeaturePointInput {
  id: String
  type: FeatureType!
  geometry: PointInput!
  properties: JSON
}

FeatureType

enum FeatureType {
  Feature
}

LegType

enum LegType {
  station
  via
  final
}

OCPIAdditionalGeoLocation

type OCPIAdditionalGeoLocation {
  latitude: String
  longitude: String
  name: OCPIDisplayText
}

OCPICapability

enum OCPICapability {
  CHARGING_PROFILE_CAPABLE
  CHARGING_PREFERENCES_CAPABLE
  CHIP_CARD_SUPPORT
  CONTACTLESS_CARD_SUPPORT
  CREDIT_CARD_PAYABLE
  DEBIT_CARD_PAYABLE
  PED_TERMINAL
  REMOTE_START_STOP_CAPABLE
  RESERVABLE
  RFID_READER
  TOKEN_GROUP_CAPABLE
  UNLOCK_CAPABLE
}

OCPIConnectorFormat

enum OCPIConnectorFormat {
  SOCKET
  CABLE
}

OCPIConnectorType

enum OCPIConnectorType {
  CHADEMO
  DOMESTIC_A
  DOMESTIC_B
  DOMESTIC_C
  DOMESTIC_D
  DOMESTIC_E
  DOMESTIC_F
  DOMESTIC_G
  DOMESTIC_H
  DOMESTIC_I
  DOMESTIC_J
  DOMESTIC_K
  DOMESTIC_L
  IEC_60309_2_single_16
  IEC_60309_2_three_16
  IEC_60309_2_three_32
  IEC_60309_2_three_64
  IEC_62196_T1
  IEC_62196_T1_COMBO
  IEC_62196_T2
  IEC_62196_T2_COMBO
  IEC_62196_T3A
  IEC_62196_T3C
  PANTOGRAPH_BOTTOM_UP
  PANTOGRAPH_TOP_DOWN
  TESLA_R
  TESLA_S
}

OCPIDisplayText

type OCPIDisplayText {
  language: String
  text: String
}

OCPIEnergyMix

type OCPIEnergyMix {
  is_green_energy: Boolean
  energy_sources: [OCPIEnergySource]
  environ_impact: [OCPIEnvironmentalImpact]
  supplier_name: String
  energy_product_name: String
}

OCPIEnergySource

type OCPIEnergySource {
  source: OCPIEnergySourceCategory
  percentage: Int
}

OCPIEnergySourceCategory

enum OCPIEnergySourceCategory {
  NUCLEAR
  GENERAL_FOSSIL
  COAL
  GAS
  GENERAL_GREEN
  SOLAR
  WIND
  WATER
}

OCPIEnvironmentalImpact

type OCPIEnvironmentalImpact {
  category: OCPIEnvironmentalImpactCategory
  amount: Int
}

OCPIEnvironmentalImpactCategory

enum OCPIEnvironmentalImpactCategory {
  NUCLEAR_WASTE
  CARBON_DIOXIDE
}

OCPIExceptionalPeriod

type OCPIExceptionalPeriod {
  period_begin: DateTime
  period_end: DateTime
}

OCPIFacility

enum OCPIFacility {
  HOTEL
  RESTAURANT
  CAFE
  MALL
  SUPERMARKET
  SPORT
  RECREATION_AREA
  NATURE
  MUSEUM
  BIKE_SHARING
  BUS_STOP
  TAXI_STAND
  TRAM_STOP
  METRO_STATION
  TRAIN_STATION
  AIRPORT
  PARKING_LOT
  CARPOOL_PARKING
  FUEL_STATION
  WIFI
}

OCPIGeoLocation

type OCPIGeoLocation {
  latitude: String
  longitude: String
}

OCPIHours

type OCPIHours {
  twentyfourseven: Boolean
  regular_hours: [OCPIRegularHours]
  exceptional_openings: [OCPIExceptionalPeriod]
  exceptional_closings: [OCPIExceptionalPeriod]
}

OCPIImage

type OCPIImage {
  url: String
  thumbnail: String
  category: OCPIImageCategory
  type: String
  width: Int
  height: Int
}

OCPIImageCategory

enum OCPIImageCategory {
  CHARGER
  ENTRANCE
  LOCATION
  NETWORK
  OPERATOR
  OTHER
  OWNER
}

OCPIParkingRestriction

enum OCPIParkingRestriction {
  EV_ONLY
  PLUGGED
  DISABLED
  CUSTOMERS
  MOTORCYCLES
}

OCPIParkingType

enum OCPIParkingType {
  ALONG_MOTORWAY
  PARKING_GARAGE
  PARKING_LOT
  ON_DRIVEWAY
  ON_STREET
  UNDERGROUND_GARAGE
}

OCPIPowerType

enum OCPIPowerType {
  AC_1_PHASE
  AC_3_PHASE
  DC
}

OCPIRegularHours

type OCPIRegularHours {
  weekday: Int
  period_begin: String
  period_end: String
}

OCPIStatus

enum OCPIStatus {
  AVAILABLE
  BLOCKED
  CHARGING
  INOPERATIVE
  OUTOFORDER
  PLANNED
  REMOVED
  RESERVED
  UNKNOWN
}

OCPIStatusSchedule

type OCPIStatusSchedule {
  period_begin: DateTime
  period_end: DateTime
  status: OCPIStatus
}

Operator

type Operator {
  id: ID
  external_id: String
  name: String
  website: String
  logo: OCPIImage
  country: String
  contact: Contact
}

OperatorListQuery

input OperatorListQuery {
  id: ID
  external_id: String
  name: String
  country: String
}

ParkingCost

enum ParkingCost {
  free
  paid
}

Point

type Point {
  type: PointType!
  coordinates: [Float!]!
}

PointInput

input PointInput {
  type: PointType!
  coordinates: [Float!]!
}

PointType

enum PointType {
  Point
}

Price

type Price {
  value: String
  currency: String
  model: String
  displayValue: String
}

RequestEv

type RequestEv {
  id: ID
  battery: RequestEvBattery
  plugs: [RequestEvPlug]
  adapters: [RequestEvPlug]
  minPower: Int
  climate: Boolean
  numberOfPassengers: Int
  consumption: RequestEvConsumption
}

RequestEvBattery

type RequestEvBattery {
  capacity: RequestEvBatteryValue
  capacityKwh: Float
  stateOfCharge: RequestEvBatteryValue
  stateOfChargeKwh: Float
  finalStateOfCharge: RequestEvBatteryValue
  finalStateOfChargeKwh: Float
}

RequestEvBatteryInput

input RequestEvBatteryInput {
  capacity: RequestEvBatteryInputValue
  stateOfCharge: RequestEvBatteryInputValue
  finalStateOfCharge: RequestEvBatteryInputValue
}

RequestEvBatteryInputValue

input RequestEvBatteryInputValue {
  value: Float!
  type: BatteryInputType!
}

RequestEvBatteryValue

type RequestEvBatteryValue {
  value: Float!
  type: BatteryInputType!
}

RequestEvConsumption

type RequestEvConsumption {
  aux: CarConsumption
  bms: CarConsumption
  idle: CarConsumption
}

RequestEvConsumptionInput

input RequestEvConsumptionInput {
  aux: CarConsumptionInput
  bms: CarConsumptionInput
  idle: CarConsumptionInput
}

RequestEvInput

input RequestEvInput {
  id: ID!
  battery: RequestEvBatteryInput
  plugs: [RequestEvPlugInput]
  adapters: [RequestEvPlugInput]
  minPower: Int
  climate: Boolean
  numberOfPassengers: Int
  consumption: RequestEvConsumptionInput
  auxConsumption: Float
  bmsConsumption: Float
}

RequestEvPlug

type RequestEvPlug {
  standard: OCPIConnectorType
  chargingPower: Float
}

RequestEvPlugInput

input RequestEvPlugInput {
  standard: OCPIConnectorType!
  chargingPower: Float!
}

RequestInput

input RequestInput {
  ev: RequestEvInput!
  routeRequest: RequestRouteInput!
}

RequestRoute

type RequestRoute {
  amenities: [String]
  operatorIds: [String]
  operatorRequired: Boolean
  operatorPrefer: Boolean
  season: RouteSeason
  safeRiskMargin: Int
  origin: FeaturePoint
  destination: FeaturePoint
  via: [FeaturePoint]
}

RequestRouteInput

input RequestRouteInput {
  amenities: [String]
  operatorIds: [String]
  operatorRequired: Boolean
  operatorPrefer: Boolean
  season: RouteSeason
  safeRiskMargin: Int
  origin: FeaturePointInput!
  destination: FeaturePointInput!
  via: [FeaturePointInput]
}

RequestUser

type RequestUser {
  id: ID
}

Review

type Review {
  id: ID!
  station: Station
  user: ReviewUser
  rating: Int
  message: String
  locale: String
  ev: Car
  plugType: OCPIConnectorType
  properties: JSON
  tags: ReviewTags
  createdAt: String
  updatedAt: String
}

ReviewAdd

input ReviewAdd {
  stationId: String!
  rating: Int!
  message: String
  locale: String
  ev: String
  plugType: OCPIConnectorType
  properties: JSON
  tags: ReviewTagsInput
}

ReviewEdit

input ReviewEdit {
  rating: Int!
  message: String
  locale: String
  properties: JSON
  tags: ReviewTagsInput
}

ReviewStats

type ReviewStats {
  rating: Float
  count: Int
}

ReviewTags

type ReviewTags {
  working: Boolean
  recommended: Boolean
}

ReviewTagsInput

input ReviewTagsInput {
  working: Boolean
  recommended: Boolean
}

ReviewUser

type ReviewUser {
  id: ID!
  firstName: String
  lastName: String
}

Route

type Route {
  route: RouteAlternative
  alternatives: [RouteAlternative]
  ev: RequestEv
  user: RequestUser
  routeRequest: RequestRoute
  status: RouteStatus
}

RouteAlternative

type RouteAlternative {
  id: ID
  type: RouteAlternativeType
  charges: Int
  distance: Int
  duration: Int
  consumption: Float
  chargeTime: Float
  amenityRanking: Int
  rangeStart: Int
  rangeStartKwh: Float
  rangeEnd: Int
  rangeEndKwh: Float
  via: String
  polyline: String
  elevationPlot: [Float]
  elevationUp: Float
  elevationDown: Float
  elevationMax: Float
  saving: RouteAlternativeSaving
  legs: [RouteLeg]
}

RouteAlternativeSaving

type RouteAlternativeSaving {
  co2: String
  money: String
  currency: String
  averageGasPrice: String
  averageEnergyPrice: String
}

RouteAlternativeType

enum RouteAlternativeType {
  fastest
  bestMatching
  alternative
}

RouteLeg

type RouteLeg {
  id: ID
  distance: Int
  duration: Int
  consumption: Float
  rangeStart: Int
  rangeStartKwh: Float
  rangeEnd: Int
  rangeEndKwh: Float
  origin: FeaturePoint
  destination: FeaturePoint
  type: LegType
  name: String
  stationId: String
  operatorId: String
  chargeTime: Int
  evse: EVSE
  connector: Connector
  plugsAvailable: Int
  plugsCount: Int
}

RoutePath

type RoutePath {
  location: Point
  elevation: Int
  avSpeed: Float
  recommandedSpeed: Float
  consumption: Float
  consumptionPerKm: Float
  distance: Float
  duration: Float
}

RouteSeason

enum RouteSeason {
  summer
  winter
  current
}

RouteStatus

enum RouteStatus {
  pending
  processing
  done
  not_found
  error
}

Station

type Station {
  review: ReviewStats
  id: ID!
  country_code: String
  party_id: String
  publish: Boolean
  name: String
  address: String
  city: String
  postal_code: String
  state: String
  country: String
  coordinates: OCPIGeoLocation
  related_locations: [OCPIAdditionalGeoLocation]
  parking_type: OCPIParkingType
  evses: [EVSE]
  directions: [OCPIDisplayText]
  operator: Operator
  suboperator: Operator
  owner: Operator
  facilities: [OCPIFacility]
  time_zone: String
  opening_times: OCPIHours
  charging_when_closed: Boolean
  images: [OCPIImage]
  energy_mix: OCPIEnergyMix
  last_updated: DateTime
  external_id: String
  location: Point
  elevation: Int
  chargers: [Charger]
  amenities: JSON
  physical_address: Address
  properties: JSON
  realtime: Boolean
  private: Boolean
  power: JSON
  speed: StationSpeedType
  status: ChargerStatus
}

StationAroundQuery

input StationAroundQuery {
  location: PointInput!
  distance: Int!
  power: [Float]
  amenities: [String]
}

StationListQuery

input StationListQuery {
  id: ID
  external_id: String
  name: String
}

StationSpeedType

enum StationSpeedType {
  slow
  fast
  turbo
}

Changelog

14h of April 2020

3.0.1 - OCPI 2.1.1 Support

NEW


⚡ Exclusive EcoMovement integration. Chargetrip now comes pre-loaded with 220.000 highly curated EcoMovement stations. This means you can set build an EMP service routing over stations across Europe without the necessity for any other station data contracts. See eco-movement.com/ for details about their coverage.


⚡ OCPI 2.1.1 Support. We've added support for the OCPI Tarrif module. More information about the OCPI 2.1.1 spec can be found on https://github.com/ocpi/ocpi. You can download the full spec here


FIXED


🤖Spelling Mistakes We fixed several spelling mistakes and inconsistencies in the Car and Station sections.


🤖Better Units We added better descriptions for all types that give back a value with a default unit.


18th of January 2020

3.0 - Generation 3 of the Chargetrip API

NEW


⚡ New Car Models. Added support for Peugeot e-208 and the Seat Mii Electric.


⚡ OCPI 2.1.1 Support. We've added support for the OCPI Tarrif module.

FIXED


🤖Spelling Mistakes Fixed spelling mistakes and inconsistencies in the Car and Station sections.