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 188 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. You can also use the carPremium query to get access to even more data! Please contact us for more information about premium data.

Please note the Playground only includes four test car models. You need a registered x-client-id to access the full car database or to get access to premium data. Some car parameters are courtesy of our partner EV Database

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

Attribute Type Description
id String Car's unique ID
externalId String ID provided by a car data source as the row ID
make String Car manufacturer
carModel String Car model
edition String Car model edition
chargetripEdition String Car model edition. Added by Chargetrip as an alternative for when the car manufacturer does not provide an edition name, or uses the same edition name across all trims or consecutive years
version String Car model version
chargetripRange ChargetripRange Chargetrip's custom real world range provides a carefully calculated display range for all EV models. This is based on our own research and driving data
fastChargingSupport Boolean EV's that support fast charging have a minimum charging speed of 43 Kwh. EV's without support for fast charging used in a newRoute mutation will return an error
mode CarMode Current status of a car. Concept, Production, Index-only (old models)
power Float Power in kW
acceleration Float Acceleration from 0 to 100 km/h
topSpeed Float Maximum speed reached by a 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, depending on weather conditions
connectors [CarPlug] Connectors (plug types)
adapters [CarPlug] Known connector adapters
seats Int Number of seats
weight Float Weight in kg
height Int Height in mm
width Int Width in mm
petrolConsumption Float Amount of petrol a similar ICE car would consume per 100km
images [CarImage] Images of a car
imagesData CarImageData Images of a 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
  }
}

Example Response

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

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 carListLazyLoading {
  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 or carPremium query. Please contact us for more information or to get access to premium data. 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. Our Playground is populated with freely available European station data from OCM so you can try planning routes across Europe.

If you do not have a commercial agreement in place with a charge station provider we can pre-load you account with either free station data from OCM or Premium station data from Eco-Movement. Our premium station data exposed over 100.000 highly curated charge stations across Europe including real-time availability, pricing1, and charging history1. You no longer need to connect several costly charge station database providers to get European coverage. See eco-movement.com/ for more details about regional limitations. Contact us for pricing.

1 subject to availability

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 Internal ID
external_id String ID provided by a 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 Name of a charging station
address String Street/block name and house number if available
city String City or town
postal_code String Postal code of a location, may only be omitted when a location has no postal code: in some countries charging locations at highways don't have postal codes
state String State or province of a location
country String ISO 3166-1 alpha-3 code for the country of a location.
coordinates OCPIGeoLocation Coordinates of a location.
related_locations [OCPIAdditionalGeoLocation] Geographical location of related points relevant to a user.
parking_type OCPIParkingType Type of parking at a charge point
evses [Evse] Embedded Chargers
directions [OCPIDisplayText] Human-readable directions on how to reach the location
operator Operator Information about an operator
suboperator Operator Information about a suboperator if applicable
owner Operator Information about an owner
facilities [OCPIFacility] List of facilities a charging location directly belongs to
time_zone String Value from the IANA time zone database representing the time zone of a location. Examples: "Europe/Oslo", "Europe/Zurich". (http://www.iana.org/time-zones)
opening_times OCPIHours Times when EVSEs at a 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 a location such as photos or logos
energy_mix OCPIEnergyMix Details on the energy supplied at a location
last_updated DateTime Timestamp when a Location or one of its EVSEs or Connectors were last updated (or created)
location Point Geographic location coordinates
elevation Int Elevation (altitude) level in meters above sea level
chargers [Charger] Groups of EVSEs by power and type
amenities JSON Amenties located at this location
physical_address Address Embedded Address
properties JSON Optional object containing client specific fields of a station
realtime Boolean Flag which indicates if a station has realtime information about the availability of its connectors
private Boolean Flag which indicates if the station is on a private property
power JSON Connectors grouped by power
speed StationSpeedType Charging speed of a station
status EvPlugStatus Status of a station
review ReviewStats Statistical information about 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 Cars unique ID
external_id String ID provided by an operator data source as the row ID
name String Name of an operator
website String Link to the operator's website
logo String Image link to the operator's logo
country String ISO-3166 alpha-2 country code
contact Contact 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 including filtering that supercharges your station map (pun intended). Traditionally you would load stations on the frontend within a visible bounding box and apply filters and clusters on the client side. This will result in long waiting times when you interact with the map. Our tile-service moves complex operations 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 provides a fast solution for loading a high amount of points (clustered and filtered) using precomputed Vector Tiles. Vector Tiles contain geometries and metadata in a compact, structured format (Google Protobufs, PBF) and are created for each zoom level.

The Tile Service can be used with your own station database, the premium Eco-movement database, or the free Open Charge Map database.

Our Tile Service can be accessed at:

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

Properties

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

Property Type Description
id string This is the ID of the station. If the feature is a cluster, this parameter is the ID of the first station in that 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. This is the discriminator between clusters and stations. The count will always be 1 for a station and more than 1 for clusters.
expansionZoom number The zoom level where the cluster is split into multiple clusters or stations.
speed enum(slow, fast, turbo) This indicates the power of a station. If the feature is a cluster, it will indicate the power of the first station in that cluster. All stations below 43 kWh are considered slow, between 43 kWh and 150 kWh - fast, and above 150 kWh - turbo.
status enum(free, busy, unknown, error) This indicates the availability status of a station. If the feature is a cluster, it will indicate the availability status of the first station in that cluster. Free means that at least one connector is available to charge a car; busy means that there are no free connectors; error means that the station is inoperational and cannot be used; unknown means that we don't know the exact status of all connectors.
preferred_operator boolean Deprecated in favor of preferredOperator.
preferredOperator boolean This flag indicates if the operator of a particular station is marked as a preferred operator. Please contact us to mark certain operators as preferred operators.

Please note: You must use the count property to differentiate between stations and clusters. The count will always be 1 for a stations and more than 1 for clusters.

Filters

To render stations on a map, you need to add a set of filters to the tile request. These filters are send as query parameters and must be appended after ?.

Please note: the Tile Service will only return results if a combination of powers and connectors are applied.

Filter Type Description
power array<number> Deprecated in favor of powers.
powers all or array<number> Determines the powers of the stations that will be included in the tiles. This can be all (powers=all) for all powers or a list of kWh values for individual powers. For kWh values, you can send a numeric array with the specific powers you would like to return (powers[]=22 &powers[]=43 &powers[]=50).
powerGroups array<StationSpeedType> Determines the speed groups of powers that will be included in the tiles. We have grouped all available powers into three speed groups (slow, fast or turbo), you can send an array (powerGroups[]=slow &powerGroups[]=fast &powerGroups[]=turbo).
❌ You can't mix powerGroups with powers=all.
✅ You can mix powerGroups with individual powers powerGroups[]=fast &powers[]=22 (for this specific example we will consider both, stations which are 'fast' and stations that are 22 kWh).
connectors array<OCPIConnectorType> Determine the connector standards that will be included in the tiles. You can send an array with the connectors[]=CHADEMO &connectors[]=IEC_62196_T2_COMBO, etc.
amenities array<string> An optional list of amenities that should be present near the stations. Possible values: hotel, shopping, bathroom, supermarket, playground, pharmacy, museum, coffee, park, restaurant.
availableOnly boolean An optional flag that will return only available (status: free) stations.
preferredOperator boolean An optional flag that will filter stations by a pre-defined preferred operator.

Here is an example of URL with filters applied:

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

Counting the stations on the map

You can request the number of displayed stations on the map by using the following API endpoint:

https://api.chargetrip.io/station/count.json

You need to send the same filter as you would use when requesting stations:

https://api.chargetrip.io/station/count.json?powers[]=22&powers[]=43&connectors[]=CHADEMO&connectors[]=IEC_62196_T2_COMBO&amenities[]=restaurant&availableOnly=true

The response is:

{
    "count": 158
}

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[]=50&connectors[]=CHADEMO&connectors[]=IEC_62196_T2_COMBO',
                ],
            });
            map.addLayer({
                id: 'clusters',
                type: 'circle',
                source: 'stations',
                'source-layer': 'stations',
                interactive: true,
                filter: ['>', ['get', 'count'], 1],
                paint: {
                    'circle-color': '#11b4da',
                    'circle-radius': 6,
                    'circle-stroke-width': 1,
                    'circle-stroke-color': '#fff',
                },
            });

            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': 10,
                },
                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',
                },
            }, 'clusters');

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

Routes

To create a route you need the newRoute mutation and routeUpdateById subscription. We strongly recommend to use subscriptions. Recursively querying a route ID until the route is processed increases costs and delays your application.

First, use your GraphQL client to execute the mutation. This mutation takes a RequestInput object which contains all the parameters needed to create a route. It returns the ID of that newly created route. Use that route ID to subscribe to route updates. The status of the route (RouteStatus) will be updated from pending, to processing, and afterward to the final status done. If a route is not found or something goes wrong during the calculation the final status resolves to either not_found or error. It is recommended to unsubscribe from further updates when the route has reached a final status.

Be aware that if the route is computed before you subscribe to it, you will not receive any updates. This could happen when you create a short route. To prevent that scenario, query the route once right after you have set up the subscription. If the route is already calculated, unsubscribe. To retrieve a route use the getRoute query using the newRoute ID.

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 Recommended route
alternatives [RouteAlternative] Available alternatives
ev RequestEv EV specific data for a route request
user RequestUser User who requested the route
routeRequest RequestRoute Route request data
status RouteStatus Route status

Request a new route

Example Mutation

mutation newRoute {
  newRoute(
    input: {
      ev: {
        id: "5d161be5c9eef46132d9d20a"
        battery: {
          stateOfCharge: { value: 72.5, type: kwh }
        }
        plugs: [{ standard: TESLA_S, chargingPower: 150 }]
        adapters: [{ standard:IEC_62196_T2_COMBO, chargingPower: 150 }, { standard:CHADEMO, chargingPower: 150 }]
        climate: true
        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"
    }
  }
}

Alternative stations along a route

If you want to request alternative charging stations along a route, you can set the stationsAlongRouteRadius property of the newRoute.routeRequest input. The radius can be set between 500 and 5000 meters. This will return all applicable stations within the set radius following the specified powers and standards.

Alternative stations request

mutation newRoute {
  newRoute(
    input: {
      ev: {
        id: "5d161be5c9eef46132d9d20a"
        battery: {
          stateOfCharge: { value: 72.5, type: kwh }
        }
        plugs: [{ standard: TESLA_S, chargingPower: 150 }]
        adapters: [{ standard:IEC_62196_T2_COMBO, chargingPower: 150 }, { standard:CHADEMO, chargingPower: 150 }]
        climate: true
        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" }
        }
        stationsAlongRouteRadius: 5000
      }
    }
  )
}

Get alternative stations along a route

query getRoute {
  route(id: "5f1170701b78200c03c55a04") {
    route {
      stationsAlongRoute {
        id
        location {
          type
          coordinates
        }
        speed
        status
        preferredOperator
        distance
      }
    }
  }
}

Example response

{
  "data": {
    "route": {
      "route": {
        "stationsAlongRoute": [
          {
            "id": "5e8472ee86a7893516b4c236",
            "location": {
              "type": "Point",
              "coordinates": [
                174.778519,
                -41.292701
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 308
          },
          {
            "id": "5e8472dd86a7896055b4c1b0",
            "location": {
              "type": "Point",
              "coordinates": [
                174.774923,
                -36.869245
              ]
            },
            "speed": "fast",
            "status": "busy",
            "preferredOperator": true,
            "distance": 276
          },
          {
            "id": "5e8472e186a7890273b4c1d0",
            "location": {
              "type": "Point",
              "coordinates": [
                174.775189,
                -36.849508
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 890
          },
          {
            "id": "5e8472eb86a789877eb4c221",
            "location": {
              "type": "Point",
              "coordinates": [
                174.95142,
                -40.987489
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 153
          },
          {
            "id": "5e8472eb86a789a28eb4c21f",
            "location": {
              "type": "Point",
              "coordinates": [
                174.98174,
                -40.918804
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 1818
          },
          {
            "id": "5e8472e886a7896484b4c206",
            "location": {
              "type": "Point",
              "coordinates": [
                175.400028,
                -39.417303
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 8
          },
          {
            "id": "5e8472ea86a789f3c1b4c21a",
            "location": {
              "type": "Point",
              "coordinates": [
                175.152736,
                -40.763595
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 67
          },
          {
            "id": "5e8472e986a7897b29b4c213",
            "location": {
              "type": "Point",
              "coordinates": [
                175.386466,
                -40.174447
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 164
          },
          {
            "id": "5e8472e586a789445fb4c1f8",
            "location": {
              "type": "Point",
              "coordinates": [
                175.163076,
                -38.33225
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 81
          },
          {
            "id": "5e8472dc86a7891a7ab4c1ae",
            "location": {
              "type": "Point",
              "coordinates": [
                174.794549,
                -36.890082
              ]
            },
            "speed": "fast",
            "status": "busy",
            "preferredOperator": true,
            "distance": 230
          },
          {
            "id": "5e8472e486a789251ab4c1f2",
            "location": {
              "type": "Point",
              "coordinates": [
                175.328916,
                -38.008473
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 486
          },
          {
            "id": "5e8472ea86a7890bfeb4c219",
            "location": {
              "type": "Point",
              "coordinates": [
                175.284152,
                -40.623516
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 54
          },
          {
            "id": "5e8472ee86a7897860b4c233",
            "location": {
              "type": "Point",
              "coordinates": [
                174.776116,
                -41.284599
              ]
            },
            "speed": "fast",
            "status": "error",
            "preferredOperator": false,
            "distance": 267
          },
          {
            "id": "5e8472ef86a7893446b4c241",
            "location": {
              "type": "Point",
              "coordinates": [
                174.797143,
                -41.318419
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 2497
          },
          {
            "id": "5edf3db983254c3a4ed21946",
            "location": {
              "type": "Point",
              "coordinates": [
                174.983637,
                -37.192743
              ]
            },
            "speed": "turbo",
            "status": "unknown",
            "preferredOperator": false,
            "distance": 72
          },
          {
            "id": "5e8472ea86a78974dbb4c218",
            "location": {
              "type": "Point",
              "coordinates": [
                175.281212,
                -40.47165
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 462
          },
          {
            "id": "5e8472ee86a7897eb0b4c235",
            "location": {
              "type": "Point",
              "coordinates": [
                174.782858,
                -41.291425
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 562
          },
          {
            "id": "5e8472e386a789dcdfb4c1eb",
            "location": {
              "type": "Point",
              "coordinates": [
                175.273749,
                -37.778893
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 1730
          },
          {
            "id": "5e8472ec86a7893ad9b4c226",
            "location": {
              "type": "Point",
              "coordinates": [
                174.840789,
                -41.134453
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 388
          },
          {
            "id": "5e8472ee86a78941d7b4c237",
            "location": {
              "type": "Point",
              "coordinates": [
                174.774566,
                -41.29457
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 9
          },
          {
            "id": "5e8472dc86a78942fdb4c1ab",
            "location": {
              "type": "Point",
              "coordinates": [
                174.762623,
                -36.84537
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": true,
            "distance": 1287
          },
          {
            "id": "5e8472e286a7891bdab4c1d9",
            "location": {
              "type": "Point",
              "coordinates": [
                174.879214,
                -36.988096
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 595
          },
          {
            "id": "5e8472db86a789ad54b4c1a9",
            "location": {
              "type": "Point",
              "coordinates": [
                174.932611,
                -37.048889
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": true,
            "distance": 1382
          },
          {
            "id": "5e8472ed86a7890444b4c22a",
            "location": {
              "type": "Point",
              "coordinates": [
                174.868515,
                -41.22281
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 4827
          },
          {
            "id": "5e8472ea86a789afa7b4c21b",
            "location": {
              "type": "Point",
              "coordinates": [
                175.02426,
                -40.861299
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 1221
          },
          {
            "id": "5e8472e186a78917c6b4c1d3",
            "location": {
              "type": "Point",
              "coordinates": [
                174.828352,
                -36.860782
              ]
            },
            "speed": "fast",
            "status": "free",
            "preferredOperator": false,
            "distance": 4054
          }
        ]
      }
    }
  }
}

Below you can see an example of alternative stations. The blue line is the route, the blue stations are the recommended stations to charge and the green stations are alternatives.

Alternative stations

Station as a Waypoint

You can add a station as a waypoint or as a destination. To do this, add stationId to routeRequest.via.properties or routeRequest.destination.properties.

Station as a waypoint

mutation {
  newRoute(
    input: {
      ev: {
        id: "5d19b8648efbca45ec9607de"
        battery: {
          capacity: { value: 83.7, type: kwh }
          stateOfCharge: { value: 65, type: kwh }
          finalStateOfCharge: { value: 79.0, type: kwh }
        }
        plugs: [
          { standard: IEC_62196_T2_COMBO, chargingPower: 350 }
          { standard: IEC_62196_T2, chargingPower: 40 }
        ]
        adapters: []
        climate: true
        numberOfPassengers: 4
      }
      routeRequest: {
        origin: {
          type: Feature
          geometry: { type: Point, coordinates: [13.057116, 47.809838] }
          properties: { name: "5020 Salzburg, Austria" }
        }
        destination: {
          type: Feature
          geometry: { type: Point, coordinates: [11.56667, 48.13333] }
          properties: { name: "Munich, Bavaria, Germany" }
        }
        via: [
          {
            type: Feature
            geometry: { type: Point, coordinates: [12.20824,47.83697] }
            properties: { stationId: "5e844fa8160789b6c028fb14" }
          }
        ]
      }
    }
  )
}

Example response

{
  "data": {
    "route": {
      "route": {
        "distance": 156768,
        "duration": 10000,
        "via": "BayWa Schnellladestation 4",
        "legs": [
          {
            "distance": 76642,
            "duration": 2868,
            "rangeStart": 268698,
            "rangeEnd": 161088,
            "type": "stationVia"
          },
          {
            "distance": 74650,
            "duration": 2761,
            "rangeStart": 276800,
            "rangeEnd": 182238,
            "type": "station"
          },
          {
            "distance": 5476,
            "duration": 452,
            "rangeStart": 276800,
            "rangeEnd": 270896,
            "type": "final"
          }
        ]
      }
    }
  }
}

This is an example of a route with an alternative station as a waypoint.

Waypoints

Errors

To ensure you can responds in the appropriate manner when our API outputs something you didn’t expect we maintain a consistent set of API response and error codes. The design of the response will be discussed inside this section.

GraphQL error extensions

Unsuccessful responses return their generic GraphQL error described in the GraphQL specifications alongside some additional fields. The additional fields can be found inside the extensions object. The most important one here is the exception object. This one contains all the information about the error and looks like this;

Key Type Description
response String The response description By default containing the code
status Int The status code of the response reflecting the API response codes
message String The message describing the error
code String A unique error code that can be used for localization

Error codes overview

ERROR CODES
query • amenityList
STATION_NOT_FOUND
No station was found with the provided ID.
query • car
CAR_NOT_FOUND
No EV was found with the provided ID.
query • car
CAR_NOT_FOUND
No EV was found with the provided external ID.
query • operator
OPERATOR_NOT_FOUND
No operator was found with the provided ID.
query • reviewList
STATION_NOT_FOUND
No station was found with the provided ID.
query • route
ROUTE_NOT_FOUND
No route was found with the provided ID.
query • routePath
ROUTE_NOT_FOUND
No route was found with the provided ID.
query • routePath
ROUTE_INVALID_COORDINATES
The coordinates provided are not valid.
query • routePath
ROUTE_ALTERNATIVE_NOT_FOUND
No alternative route was found with the provided ID.
query • station
STATION_NOT_FOUND
No station was found with the provided ID.
query • stationAround
STATION_LOCATION_INVALID_COORDINATES
The coordinates provided are not valid.
query • stationAround
STATION_DISTANCE_BELOW_ALLOWED
The provided distance is too small. The value must be greater than 0.
query • stationAround
STATION_DISTANCE_ABOVE_ALLOWED
The value used in the distance property must be lower or equal to 1000.
query • stationAround
STATION_POWER_BELOW_ALLOWED
The provided power is too small. The value must be greater than 0.
query • tariff
TARIFF_NOT_FOUND
No tariff was found with the provided ID.
mutation • addReview
REVIEW_RATING_NOT_IN_RANGE
The rating provided is not valid. The value must be between 0 and 5.
mutation • addReview
REVIEW_RATING_MESSAGE_LENGTH_EXCEEDED
The message provided is too long. The maximum number of characters is $size.
mutation • newRoute
ROUTE_EV_NOT_FOUND
No EV was found with the provided ID.
mutation • newRoute
ROUTE_EV_BATTERY_CAPACITY_BELOW_ALLOWED
The provided battery capacity is too small. The value must be greater than 0.
mutation • newRoute
ROUTE_EV_BATTERY_STATE_OF_CHARGE_BELOW_ALLOWED
The provided state of charge is too small. The value must be greater than 0.
mutation • newRoute
ROUTE_EV_BATTERY_FINAL_STATE_OF_CHARGE_BELOW_ALLOWED
The provided final state of charge is too small. The value must be greater than or equal to 0.
mutation • newRoute
ROUTE_EV_BATTERY_STATE_OF_CHARGE_EXCEEDING_BATTERY_CAPACITY
The provided state of charge is too high. The value must be less than or equal to the EV battery capacity value.
mutation • newRoute
ROUTE_EV_BATTERY_FINAL_STATE_OF_CHARGE_VALUE_EXCEEDING_BATTERY_CAPACITY
The provided final state of charge is too high. The value must be less than or equal to the EV battery capacity value.
mutation • newRoute
ROUTE_EV_PLUGS_CHARGING_POWER_BELOW_ALLOWED
The provided charging power for plugs is too small. The value must be greater than 0.
mutation • newRoute
ROUTE_EV_ADAPTERS_CHARGING_POWER_BELOW_ALLOWED
The provided charging power for adapters is too small. The value must be greater than 0.
mutation • newRoute
ROUTE_EV_MIN_POWER_BELOW_ALLOWED
The provided minimum power is too small. The value must be greater than or equal to 43.
mutation • newRoute
ROUTE_EV_MAX_NUMBER_OF_PASSENGERS_EXCEEDED
The provided number of passengers is not valid. The value must be between 1 and $maximumPassengers.
mutation • newRoute
ROUTE_EV_CONSUMPTION_[AUX|BMS|IDLE]_BELOW_ALLOWED
The provided consumption is too small. The value must be greater than 0.
mutation • newRoute
ROUTE_OPERATOR_NOT_FOUND
No operator was found with the provided ID.
mutation • newRoute
ROUTE_INVALID_ORIGIN_COORDINATES
The origin coordinates provided are not valid.
mutation • newRoute
ROUTE_INVALID_DESTINATION_COORDINATES
The destination coordinates provided are not valid.
mutation • newRoute
ROUTE_INVALID_VIA_COORDINATES
The coordinates provided for the route request are not valid.
mutation • newRoute
ROUTE_ORIGIN_STATION_NOT_FOUND
The origin station for the route requested was not found with the provided ID.
mutation • newRoute
ROUTE_DESTINATION_STATION_NOT_FOUND
The destination station for the route requested was not found with the provided ID.
mutation • newRoute
ROUTE_VIA_STATION_NOT_FOUND
The station requested as a waypoint for the route request was not found with the provided ID.
subscription • operatorUpdatedById
OPERATOR_NOT_FOUND
No operator was found with the provided ID.
subscription • operatorDeletedById
OPERATOR_NOT_FOUND
No operator was found with the provided ID.
subscription • routeUpdatedById
ROUTE_NOT_FOUND
No route was found with the provided ID.
subscription • stationUpdatedById
STATION_NOT_FOUND
No station was found with the provided ID.
subscription • stationDeletedById
STATION_NOT_FOUND
No station was found with the provided ID.
result • route
ROUTE_NO_RESULT_FOR_INPUT
We could not find a route with the provided specifications.
result • route
ROUTE_NO_STATIONS_FOUND
We could not create a route to your destination, as we didn't find any stations along the way.
query • all resolvers
UNAUTHORIZED
You are not authorized to execute this operation.

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
}

AmenityStats

type AmenityStats {
  type: String
  total: Int
}

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
  chargingOffset: JSON
  auxConsumption: Float @deprecated(reason: "You will receive null values.")
  bmsConsumption: Float @deprecated(reason: "You will receive null values.")
  dragCoefficient: Float @deprecated(reason: "You will receive null values.")
  tirePressure: Float @deprecated(reason: "You will receive null values.")
  motorEfficiency: Float @deprecated(reason: "You will receive null values.")
  drivelineEfficiency: Float @deprecated(reason: "You will receive null values.")
  regenEfficiency: Float @deprecated(reason: "You will receive null values.")
  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
}

ChargetripRange

enum ChargetripRange {
  worst: Float
  best: Float
}

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
  tariff: [OCPITariff]
}

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
  stationVia
  via
  final
  stationFinal
}

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
}

OCPIDayOfWeek

enum OCPIDayOfWeek {
  MONDAY
  TUESDAY
  WEDNESDAY
  THURSDAY
  FRIDAY
  SATURDAY
  SUNDAY
}

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
}

OCPIPrice

type OCPIPrice {
  excl_vat: Float
  incl_vat: Float
}

OCPIPriceComponent

type OCPIPriceComponent {
  type: OCPITariffDimensionType
  price: Float
  vat: Float
  step_size: Int
}

OCPIRegularHours

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

OCPIReservationRestrictionType

enum OCPIReservationRestrictionType {
  RESERVATION
  RESERVATION_EXPIRES
}

OCPIStatus

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

OCPIStatusSchedule

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

OCPITariff

type OCPITariff {
  country_code: String
  party_id: String
  id: String
  currency: String
  type: OCPITariffType
  tariff_alt_text: [OCPIDisplayText]
  tariff_alt_url: String
  min_price: OCPIPrice
  max_price: OCPIPrice
  elements: [OCPITariffElement]
  start_date_time: DateTime
  end_date_time: DateTime
  energy_mix: OCPIEnergyMix
  last_updated: DateTime
}

OCPITariffDimensionType

enum OCPITariffDimensionType {
  ENERGY
  FLAT
  PARKING_TIME
  TIME
}

OCPITariffElement

type OCPITariffElement {
  price_components: [OCPIPriceComponent]
  restrictions: [OCPITariffRestrictions]
}

OCPITariffRestrictions

type OCPITariffRestrictions {
  start_time: String
  end_time: String
  start_date: String
  end_date: String
  min_kwh: Float
  max_kwh: Float
  min_current: Float
  max_current: Float
  min_power: Float
  max_power: Float
  min_duration: Float
  max_duration: Float
  day_of_week: OCPIDayOfWeek
  reservation: OCPIReservationRestrictionType
}

OCPITariffType

enum OCPITariffType {
  AD_HOC_PAYMENT
  PROFILE_CHEAP
  PROFILE_FAST
  PROFILE_GREEN
  REGULAR
}

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
}

PowerList

type PowerList {
  power: Float
  total: Int
}

PowerStats

type PowerStats {
  type: StationSpeedType
  powers: [PowerList]
}

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]
  stationsAlongRouteRadius: Int
}

RequestRouteInput

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

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
  chargesAvailable: Int
  chargesOccupied: Int
  chargesUnknown: Int
  chargesOutOfOrder: 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]
  stationsAlongRoute: [RouteStationsAlong]
}

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
  plugsOccupied: Int
  plugsUnknown: Int
  plugsOutOfOrder: 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
}

RouteStationsAlong

type RouteStationsAlong {
  id: String
  location: Point
  speed: StationSpeedType
  status: ChargerStatus
  preferredOperator: Boolean
  distance: Int
}

RouteStatus

enum RouteStatus {
  pending
  processing
  done
  not_found
  error
}

StandardStats

type StandardStats {
  type: OCPIConnectorType
  total: Int
}

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
}

StationStats

type StationStats {
  standards: [StandardStats]
  power: [PowerStats]
  amenities: [AmenityStats]
}

Changelog

16th of July 2020

3.2.0 - Tile service filters

NEW


⚡ Powers filter for the Tile Service. We've added support for selecting different power filters.

⚡ Connectors filter for the Tile Service. We've added support for selecting all the connectors from the database.

FIXED


🤖Spelling Mistakes We fixed spelling mistakes and inconsistencies in the documentation.


10th of June 2020

3.1.0 - OCPI 2.2 Support

NEW


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


14th of April 2020

3.0.1 - OCPI 2.1.1 Support

NEW


⚡ Exclusive Eco-Movement integration. Chargetrip includes an exclusive Eco-Movement integration. Next to our free Open Charge Map stations, your account can be pre-loaded with over 100.000 highly curated premium charge stations across Europe. Our premium station data includes real-time availability, pricing1, and charging history1. You no longer need to connect several costly charge station database providers to get European coverage. See eco-movement.com for more details about regional limitations. Contact us for pricing.
1 subject to availability



⚡ 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.