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:
- v2 (current): https://api.h2-stations.eu/v2/doc/
- v1.1: https://api.h2-stations.eu/v1.1/doc
- v1: https://api.h2-stations.eu/v1/doc
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), andcumulative_daily_hydrogen_capacity. - A new
GET /vehicle-typeendpoint listing the EU vehicle categories as{code, name}(for exampleM1,N2/N3) to resolve thevehicle_typescodes, 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 same404as the live API, andGET /hrs/{hrs_id}/photoreturns 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