Skip to content

For Data Users

Overview

The H2-Stations export API provides read-only access to European hydrogen refuelling station (HRS) data. It exposes:

  • Static station data: location, operator, opening hours, fuel types, and more
  • Real-time availability status: current availability per station and per fuelling option
  • Events: ongoing and upcoming planned events affecting availability
  • Photos: station images where available

The API powers applications such as map.h2-stations.eu and is suitable for building maps, dashboards, research tools, or any application that consumes HRS data.

Getting Started

New integrations use API v2 with a personal token: create one in the portal under API tokens. If you do not have a portal account yet, ask for one at h2-stations@clean-hydrogen.europa.eu. See Authentication and sandbox. We no longer issue new v1 or v1.1 tokens.

Explore the endpoints interactively in the OpenAPI documentation:

You do not need your own token to start: use the sandbox (v1.1) to integrate end to end against sample data first.

API v2

Added in portal 1.9.0 · 29 July 2026

v2 is the current version. It adds the registered station layout (dispensers, nozzles, storage units, products) to the station data and widens real-time data from availability to four signal types: availability, usage, hydrogen storage, and pricing. v2 uses personal tokens, paginates GET /hrs, and enforces rate limits. See Export API v2 for everything that differs from v1.1.

v1.1 and v1 keep working unchanged, so existing integrations need no immediate changes. Unless noted otherwise, the rest of this page describes v1 and v1.1.

API v1.1

Added in portal 1.7.0 · 17 June 2026

v1 keeps working unchanged (its contract is frozen and receives no new fields). v1.1 adds:

  • The complete AFIR static dataset on GET /hrs: nuts_region (NUTS code), location_directions, vehicle_types (EU vehicle category codes), max_vehicle_mass, max_vehicle_height, max_vehicle_length, max_vehicle_width, parking_spaces, parking_spaces_disabled, service_support, contact_phone_number (E.164), and cumulative_daily_hydrogen_capacity.
  • A new GET /vehicle-type endpoint listing the EU vehicle categories as {code, name} (for example M1, N2/N3) to resolve the vehicle_types codes, mirroring /fuel-type.
  • Light-duty / heavy-duty fuelling-option vocabulary (700ld, 350ld, 700hd, 350hd), including the new 700 bar heavy-duty option.

To receive the new option and the AFIR dataset, see Action Required for the steps to move from v1 to v1.1.

Contact and time zone fields

Added in portal 1.10.0 · 2 October 2026

GET /hrs and GET /hrs/{hrs_id} on v1.1 also return contact_email_address, contact_website and time_zone. The email address and the website are null when the station has not provided one. time_zone is the IANA name of the station's time zone, for example Europe/Berlin. opening_hours is expressed in this local time. v2 returns the same three fields.

Authentication

All requests require a bearer token in the Authorization header:

Authorization: Bearer <your-token>

Existing v1 and v1.1 tokens keep working, and one token works on both versions. New v1 and v1.1 tokens are no longer issued. A missing or invalid token returns HTTP 401. v2 uses personal tokens instead, see Authentication and sandbox.

Sandbox

Added in portal 1.7.0 · 17 June 2026

You can integrate end to end before you have your own token. A single shared sandbox token returns fake-but-correctly-formatted responses served from a static fixture: no account, no database access, and nothing is ever written.

  • Get the token from the OpenAPI documentation. The sandbox token is published in the documentation's authentication panel. Paste it there to authorise sandbox calls.
  • It works across every read endpoint (/hrs, /hrs/{hrs_id}, the status endpoints, events, photo, and the type listings). Unknown IDs return the same 404 as the live API, and GET /hrs/{hrs_id}/photo returns a placeholder image.
  • Sandbox requests are rate-limited per client IP.

Sandbox responses are fixed sample data, not live station data. Use them to validate your integration, then switch to your own token for real data.

What You Can Query

Endpoint group Description
GET /hrs List all registered HRS with full static details
GET /hrs/{hrs_id} Retrieve a single station by its five-letter ID (for example ABCDE)
GET /hrs/status Real-time availability status for all stations in one response
GET /hrs/{hrs_id}/status Real-time availability status for a single station
GET /hrs/{hrs_id}/events Ongoing and upcoming events for a station
GET /hrs/{hrs_id}/photo Station photo (binary image, usually JPEG)
GET /fuel-type List of fuelling options monitored by the system
GET /vehicle-type List of EU vehicle categories (v1.1), resolving the vehicle_types codes in static data

Static station data includes: name, address, geolocation, entrance geolocation, operator, owner, opening hours (OpenStreetMap format), site amenities, fuel types with dispenser count, capacity, access restrictions, payment and authorisation methods, and contact information. On v1.1, the static data additionally carries the complete AFIR dataset listed under API v1.1.

For copy-paste requests and sample responses for every endpoint, see Export API Examples.

Understanding Availability Statuses

Each fuelling option at a station has an independent status. See Availability Status for how these statuses are computed. The status field in /hrs/status and /hrs/{hrs_id}/status takes one of five values:

Status Meaning
available The station is open and the fuelling option is available for refuelling.
limitedly-available Refuelling is possible but subject to delays, restrictions, or on-site technician assistance. Check events for details, or contact the operator in advance.
unavailable Refuelling is not possible. Check events for the reason and expected recovery time.
closed Refuelling is not possible: the station is currently outside its opening hours.
unknown The station is accessible, but the system has no current availability information for this fuelling option.

The last_update field indicates when the status was last updated. Ongoing events (included in the status response) may provide additional context for limitedly-available or unavailable states.

Rate Limiting

Poll status endpoints at most once per minute. No hard rate limit is currently enforced on v1 and v1.1, but this may change. v2 enforces per-user limits, see Rate limits.

Licensing

The HRS dataset (including station list, availability data, and related information accessible via the API, Excel export, and HTTPS endpoints) is made available under the Creative Commons Attribution 4.0 International (CC BY 4.0) license, approved by the Clean Hydrogen Joint Undertaking (CHJU).

CC BY 4.0 lets you freely share (copy and redistribute) and adapt (remix, transform, and build upon) the data for any purpose, including commercially. The only requirement is that you give appropriate credit to the source and do not distort the original meaning or message of the data.

When using or redistributing the HRS data, include the following attribution:

Clean Hydrogen Joint Undertaking, 2026. The Joint Undertaking's reuse policy is implemented by Commission Decision 2011/833/EU of 12 December 2011 on the reuse of Commission documents. Reuse is authorised, provided the sources and authors are acknowledged and the original meaning or message of the texts are not distorted. The Joint Undertaking shall not be liable for any consequence stemming from the reuse.

For full details, see the Legal Notice: Data License section, or the licensing questions in the FAQ.

Contact

h2-stations@clean-hydrogen.europa.eu