Trainline · Schema
Trainline European Station
One row of the ODbL-licensed European station database Trainline publishes at https://github.com/trainline-eu/stations. Derived by API Evangelist from the real stations.csv header row and the column documentation in the repository README on 2026-07-28; no field has been invented. The source file is semicolon-delimited CSV with booleans encoded as 't'/'f' and empty strings for null; this schema describes the normalised JSON projection of a row.
TravelRailUnited KingdomEuropeBookingTicketingDistributionOTACorporate Travel
Properties
| Name | Type | Description |
|---|---|---|
| id | stringnull | Trainline internal unique station identifier. |
| name | stringnull | Station name as it is locally known. |
| slug | stringnull | URL-safe unique identifier; present for suggestable stations. |
| uic | stringnull | UIC station code (7 digits). |
| uic8_sncf | stringnull | SNCF's 8-digit UIC variant, i.e. the UIC code plus a checksum digit. |
| latitude | numbernull | WGS84 latitude in decimal degrees. |
| longitude | numbernull | WGS84 longitude in decimal degrees. |
| parent_station_id | stringnull | id of the meta-station this station is grouped under. |
| hub_id | stringnull | id of the hub this station belongs to. |
| country | stringnull | ISO 3166-1 alpha-2 country code. |
| time_zone | stringnull | IANA tz database identifier, e.g. Europe/Paris. |
| is_city | booleannull | Station represents a city rather than a single physical station. |
| is_main_station | booleannull | Station is the main station of its city. |
| is_airport | booleannull | Station serves an airport. |
| is_suggestable | booleannull | Station may be offered in search suggestions. |
| country_hint | booleannull | Country should be displayed alongside the name to disambiguate it. |
| main_station_hint | booleannull | Main-station status should be displayed alongside the name. |
| sncf_id | stringnull | Station identifier used by SNCF (France) (sncf_id). |
| sncf_tvs_id | stringnull | Station identifier used by sncf_tvs (sncf_tvs_id). |
| sncf_is_enabled | booleannull | Station is enabled for sale/search on SNCF (France). |
| entur_id | stringnull | Station identifier used by Entur (Norway) (entur_id). |
| entur_is_enabled | booleannull | Station is enabled for sale/search on Entur (Norway). |
| db_id | stringnull | Station identifier used by Deutsche Bahn (Germany) (db_id). |
| db_is_enabled | booleannull | Station is enabled for sale/search on Deutsche Bahn (Germany). |
| busbud_id | stringnull | Station identifier used by Busbud (busbud_id). |
| busbud_is_enabled | booleannull | Station is enabled for sale/search on Busbud. |
| distribusion_id | stringnull | Station identifier used by Distribusion (distribusion_id). |
| distribusion_is_enabled | booleannull | Station is enabled for sale/search on Distribusion. |
| flixbus_id | stringnull | Station identifier used by FlixBus / FlixTrain (flixbus_id). |
| flixbus_is_enabled | booleannull | Station is enabled for sale/search on FlixBus / FlixTrain. |
| cff_id | stringnull | Station identifier used by CFF/SBB (Switzerland) (cff_id). |
| cff_is_enabled | booleannull | Station is enabled for sale/search on CFF/SBB (Switzerland). |
| obb_id | stringnull | Station identifier used by ÖBB (Austria) (obb_id). |
| obb_is_enabled | booleannull | Station is enabled for sale/search on ÖBB (Austria). |
| trenitalia_id | stringnull | Station identifier used by Trenitalia (Italy) (trenitalia_id). |
| trenitalia_is_enabled | booleannull | Station is enabled for sale/search on Trenitalia (Italy). |
| trenitalia_rtvt_id | stringnull | Station identifier used by trenitalia_rtvt (trenitalia_rtvt_id). |
| trenord_id | stringnull | Station identifier used by Trenord (Lombardy, Italy) (trenord_id). |
| ntv_rtiv_id | stringnull | Station identifier used by ntv_rtiv (ntv_rtiv_id). |
| ntv_id | stringnull | Station identifier used by NTV / Italo (Italy) (ntv_id). |
| ntv_is_enabled | booleannull | Station is enabled for sale/search on NTV / Italo (Italy). |
| renfe_id | stringnull | Station identifier used by Renfe (Spain) (renfe_id). |
| renfe_is_enabled | booleannull | Station is enabled for sale/search on Renfe (Spain). |
| cercanias_id | stringnull | Station identifier used by Renfe Cercanías (Spain) (cercanias_id). |
| cercanias_hub_id | stringnull | Station identifier used by cercanias_hub (cercanias_hub_id). |
| cercanias_is_enabled | booleannull | Station is enabled for sale/search on Renfe Cercanías (Spain). |
| atoc_id | stringnull | Station identifier used by ATOC / RDG — CRS code (Great Britain) (atoc_id). |
| atoc_is_enabled | booleannull | Station is enabled for sale/search on ATOC / RDG — CRS code (Great Britain). |
| benerail_id | stringnull | Station identifier used by Benerail (Belgium/Netherlands) (benerail_id). |
| benerail_is_enabled | booleannull | Station is enabled for sale/search on Benerail (Belgium/Netherlands). |
| westbahn_id | stringnull | Station identifier used by WESTbahn (Austria) (westbahn_id). |
| westbahn_is_enabled | booleannull | Station is enabled for sale/search on WESTbahn (Austria). |
| smt_id | stringnull | Station identifier used by SMT (smt_id). |
| smt_is_enabled | booleannull | Station is enabled for sale/search on SMT. |
| sncf_self_service_machine | booleannull | An SNCF self-service ticket machine is available at this station. |
| same_as | stringnull | id of the canonical station record when this row duplicates another. |
| info:de | stringnull | Locally relevant information about the station in German (ISO 639-1 'de'). |
| info:en | stringnull | Locally relevant information about the station in English (ISO 639-1 'en'). |
| info:es | stringnull | Locally relevant information about the station in Spanish (ISO 639-1 'es'). |
| info:fr | stringnull | Locally relevant information about the station in French (ISO 639-1 'fr'). |
| info:it | stringnull | Locally relevant information about the station in Italian (ISO 639-1 'it'). |
| info:nb | stringnull | Locally relevant information about the station in Norwegian Bokmål (ISO 639-1 'nb'). |
| info:nl | stringnull | Locally relevant information about the station in Dutch (ISO 639-1 'nl'). |
| info:cs | stringnull | Locally relevant information about the station in Czech (ISO 639-1 'cs'). |
| info:da | stringnull | Locally relevant information about the station in Danish (ISO 639-1 'da'). |
| info:hu | stringnull | Locally relevant information about the station in Hungarian (ISO 639-1 'hu'). |
| info:ja | stringnull | Locally relevant information about the station in Japanese (ISO 639-1 'ja'). |
| info:ko | stringnull | Locally relevant information about the station in Korean (ISO 639-1 'ko'). |
| info:pl | stringnull | Locally relevant information about the station in Polish (ISO 639-1 'pl'). |
| info:pt | stringnull | Locally relevant information about the station in Portuguese (ISO 639-1 'pt'). |
| info:ru | stringnull | Locally relevant information about the station in Russian (ISO 639-1 'ru'). |
| info:sv | stringnull | Locally relevant information about the station in Swedish (ISO 639-1 'sv'). |
| info:tr | stringnull | Locally relevant information about the station in Turkish (ISO 639-1 'tr'). |
| info:zh | stringnull | Locally relevant information about the station in Chinese (ISO 639-1 'zh'). |
| normalised_code | stringnull | Cross-source location identifier expressed as a Trainline URN, e.g. urn:trainline:public:nloc:csv1. |
| iata_airport_code | stringnull | IATA airport code, for stations that serve an airport. |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/trainline/refs/heads/main/json-schema/trainline-station.json",
"title": "Trainline European Station",
"description": "One row of the ODbL-licensed European station database Trainline publishes at https://github.com/trainline-eu/stations. Derived by API Evangelist from the real stations.csv header row and the column documentation in the repository README on 2026-07-28; no field has been invented. The source file is semicolon-delimited CSV with booleans encoded as 't'/'f' and empty strings for null; this schema describes the normalised JSON projection of a row.",
"x-source": "https://github.com/trainline-eu/stations/blob/master/stations.csv",
"x-license": "ODbL-1.0",
"x-record-count": 71781,
"x-generated": "2026-07-28",
"x-method": "derived",
"type": "object",
"properties": {
"id": {
"type": [
"string",
"null"
],
"description": "Trainline internal unique station identifier."
},
"name": {
"type": [
"string",
"null"
],
"description": "Station name as it is locally known."
},
"slug": {
"type": [
"string",
"null"
],
"description": "URL-safe unique identifier; present for suggestable stations."
},
"uic": {
"type": [
"string",
"null"
],
"description": "UIC station code (7 digits)."
},
"uic8_sncf": {
"type": [
"string",
"null"
],
"description": "SNCF's 8-digit UIC variant, i.e. the UIC code plus a checksum digit."
},
"latitude": {
"type": [
"number",
"null"
],
"description": "WGS84 latitude in decimal degrees."
},
"longitude": {
"type": [
"number",
"null"
],
"description": "WGS84 longitude in decimal degrees."
},
"parent_station_id": {
"type": [
"string",
"null"
],
"description": "id of the meta-station this station is grouped under."
},
"hub_id": {
"type": [
"string",
"null"
],
"description": "id of the hub this station belongs to."
},
"country": {
"type": [
"string",
"null"
],
"description": "ISO 3166-1 alpha-2 country code.",
"pattern": "^[A-Z]{2}$"
},
"time_zone": {
"type": [
"string",
"null"
],
"description": "IANA tz database identifier, e.g. Europe/Paris."
},
"is_city": {
"type": [
"boolean",
"null"
],
"description": "Station represents a city rather than a single physical station.",
"x-csv-encoding": "t = true, f = false"
},
"is_main_station": {
"type": [
"boolean",
"null"
],
"description": "Station is the main station of its city.",
"x-csv-encoding": "t = true, f = false"
},
"is_airport": {
"type": [
"boolean",
"null"
],
"description": "Station serves an airport.",
"x-csv-encoding": "t = true, f = false"
},
"is_suggestable": {
"type": [
"boolean",
"null"
],
"description": "Station may be offered in search suggestions.",
"x-csv-encoding": "t = true, f = false"
},
"country_hint": {
"type": [
"boolean",
"null"
],
"description": "Country should be displayed alongside the name to disambiguate it.",
"x-csv-encoding": "t = true, f = false"
},
"main_station_hint": {
"type": [
"boolean",
"null"
],
"description": "Main-station status should be displayed alongside the name.",
"x-csv-encoding": "t = true, f = false"
},
"sncf_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by SNCF (France) (sncf_id)."
},
"sncf_tvs_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by sncf_tvs (sncf_tvs_id)."
},
"sncf_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on SNCF (France).",
"x-csv-encoding": "t = true, f = false"
},
"entur_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Entur (Norway) (entur_id)."
},
"entur_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Entur (Norway).",
"x-csv-encoding": "t = true, f = false"
},
"db_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Deutsche Bahn (Germany) (db_id)."
},
"db_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Deutsche Bahn (Germany).",
"x-csv-encoding": "t = true, f = false"
},
"busbud_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Busbud (busbud_id)."
},
"busbud_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Busbud.",
"x-csv-encoding": "t = true, f = false"
},
"distribusion_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Distribusion (distribusion_id)."
},
"distribusion_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Distribusion.",
"x-csv-encoding": "t = true, f = false"
},
"flixbus_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by FlixBus / FlixTrain (flixbus_id)."
},
"flixbus_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on FlixBus / FlixTrain.",
"x-csv-encoding": "t = true, f = false"
},
"cff_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by CFF/SBB (Switzerland) (cff_id)."
},
"cff_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on CFF/SBB (Switzerland).",
"x-csv-encoding": "t = true, f = false"
},
"obb_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by ÖBB (Austria) (obb_id)."
},
"obb_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on ÖBB (Austria).",
"x-csv-encoding": "t = true, f = false"
},
"trenitalia_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Trenitalia (Italy) (trenitalia_id)."
},
"trenitalia_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Trenitalia (Italy).",
"x-csv-encoding": "t = true, f = false"
},
"trenitalia_rtvt_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by trenitalia_rtvt (trenitalia_rtvt_id)."
},
"trenord_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Trenord (Lombardy, Italy) (trenord_id)."
},
"ntv_rtiv_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by ntv_rtiv (ntv_rtiv_id)."
},
"ntv_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by NTV / Italo (Italy) (ntv_id)."
},
"ntv_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on NTV / Italo (Italy).",
"x-csv-encoding": "t = true, f = false"
},
"renfe_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Renfe (Spain) (renfe_id)."
},
"renfe_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Renfe (Spain).",
"x-csv-encoding": "t = true, f = false"
},
"cercanias_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Renfe Cercanías (Spain) (cercanias_id)."
},
"cercanias_hub_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by cercanias_hub (cercanias_hub_id)."
},
"cercanias_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Renfe Cercanías (Spain).",
"x-csv-encoding": "t = true, f = false"
},
"atoc_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by ATOC / RDG — CRS code (Great Britain) (atoc_id)."
},
"atoc_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on ATOC / RDG — CRS code (Great Britain).",
"x-csv-encoding": "t = true, f = false"
},
"benerail_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by Benerail (Belgium/Netherlands) (benerail_id)."
},
"benerail_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on Benerail (Belgium/Netherlands).",
"x-csv-encoding": "t = true, f = false"
},
"westbahn_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by WESTbahn (Austria) (westbahn_id)."
},
"westbahn_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on WESTbahn (Austria).",
"x-csv-encoding": "t = true, f = false"
},
"smt_id": {
"type": [
"string",
"null"
],
"description": "Station identifier used by SMT (smt_id)."
},
"smt_is_enabled": {
"type": [
"boolean",
"null"
],
"description": "Station is enabled for sale/search on SMT.",
"x-csv-encoding": "t = true, f = false"
},
"sncf_self_service_machine": {
"type": [
"boolean",
"null"
],
"description": "An SNCF self-service ticket machine is available at this station.",
"x-csv-encoding": "t = true, f = false"
},
"same_as": {
"type": [
"string",
"null"
],
"description": "id of the canonical station record when this row duplicates another."
},
"info:de": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in German (ISO 639-1 'de')."
},
"info:en": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in English (ISO 639-1 'en')."
},
"info:es": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Spanish (ISO 639-1 'es')."
},
"info:fr": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in French (ISO 639-1 'fr')."
},
"info:it": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Italian (ISO 639-1 'it')."
},
"info:nb": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Norwegian Bokmål (ISO 639-1 'nb')."
},
"info:nl": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Dutch (ISO 639-1 'nl')."
},
"info:cs": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Czech (ISO 639-1 'cs')."
},
"info:da": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Danish (ISO 639-1 'da')."
},
"info:hu": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Hungarian (ISO 639-1 'hu')."
},
"info:ja": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Japanese (ISO 639-1 'ja')."
},
"info:ko": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Korean (ISO 639-1 'ko')."
},
"info:pl": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Polish (ISO 639-1 'pl')."
},
"info:pt": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Portuguese (ISO 639-1 'pt')."
},
"info:ru": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Russian (ISO 639-1 'ru')."
},
"info:sv": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Swedish (ISO 639-1 'sv')."
},
"info:tr": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Turkish (ISO 639-1 'tr')."
},
"info:zh": {
"type": [
"string",
"null"
],
"description": "Locally relevant information about the station in Chinese (ISO 639-1 'zh')."
},
"normalised_code": {
"type": [
"string",
"null"
],
"description": "Cross-source location identifier expressed as a Trainline URN, e.g. urn:trainline:public:nloc:csv1."
},
"iata_airport_code": {
"type": [
"string",
"null"
],
"description": "IATA airport code, for stations that serve an airport."
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
}