digitransit-ui/build/schema.graphql
2025-03-05 07:53:06 +02:00

4500 lines
167 KiB
GraphQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

schema {
query: QueryType
}
"""
Use an asynchronous data fetcher on a separate thread for this field.
This is useful when adding several queries in the same HTTP request, for example by using a batch: Those
fields annotated with this directive run in parallel.
This is only worth it when the execution is long running, i.e. more than ~50 milliseconds, so this doesn't happen by default.
"""
directive @async on FIELD_DEFINITION
"Marks the field, argument, input field or enum value as deprecated"
directive @deprecated(
"The reason for the deprecation"
reason: String = "No longer supported"
) on FIELD_DEFINITION | ARGUMENT_DEFINITION | ENUM_VALUE | INPUT_FIELD_DEFINITION
"Directs the executor to include this field or fragment only when the `if` argument is true"
directive @include(
"Included when true."
if: Boolean!
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"Exactly one of the fields on an input object must be set and non-null while all others are omitted."
directive @oneOf on INPUT_OBJECT
"Directs the executor to skip this field or fragment when the `if` argument is true."
directive @skip(
"Skipped when true."
if: Boolean!
) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
"Exposes a URL that specifies the behaviour of this scalar."
directive @specifiedBy(
"The URL that specifies the behaviour of this scalar."
url: String!
) on SCALAR
"A fare product (a ticket) to be bought by a passenger"
interface FareProduct {
"Identifier for the fare product."
id: String!
"""
The 'medium' that this product applies to, for example "Oyster Card" or "Berlin Ticket App".
This communicates to riders that a specific way of buying or keeping this product is required.
"""
medium: FareMedium
"Human readable name of the product, for example example \"Day pass\" or \"Single ticket\"."
name: String!
"The category of riders this product applies to, for example students or pensioners."
riderCategory: RiderCategory
}
"An object with an ID"
interface Node {
"The ID of an object"
id: ID!
}
"Interface for places, e.g. stops, stations, parking areas.."
interface PlaceInterface {
id: ID!
"Latitude of the place (WGS 84)"
lat: Float
"Longitude of the place (WGS 84)"
lon: Float
}
"Entity related to an alert"
union AlertEntity = Agency | Pattern | Route | RouteType | Stop | StopOnRoute | StopOnTrip | Trip | Unknown
"Rental place union that represents either a VehicleRentalStation or a RentalVehicle"
union RentalPlace = RentalVehicle | VehicleRentalStation
union StopPosition = PositionAtStop | PositionBetweenStops
"A public transport agency"
type Agency implements Node {
"""
By default, list of alerts which have an effect on all operations of the agency (e.g. a strike).
It's also possible to return other relevant alerts through defining types.
"""
alerts(
"""
Returns alerts for these types that are relevant for the agency.
By default only returns alerts that have an effect on all operations of the agency (e.g. a strike).
"""
types: [AgencyAlertType]
): [Alert]
"URL to a web page which has information of fares used by this agency"
fareUrl: String
"Agency feed and id"
gtfsId: String!
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
lang: String
"Name of the agency"
name: String!
"Phone number which customers can use to contact this agency"
phone: String
"List of routes operated by this agency"
routes: [Route]
"ID of the time zone which this agency operates on"
timezone: String!
"URL to the home page of the agency"
url: String!
}
"Alert of a current or upcoming disruption in public transportation"
type Alert implements Node {
"""
Agency affected by the disruption. Note that this value is present only if the
disruption has an effect on all operations of the agency (e.g. in case of a strike).
"""
agency: Agency @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected agencies.\nUse entities instead.")
"Alert cause"
alertCause: AlertCauseType
"Long description of the alert"
alertDescriptionText(
"Returns description with the specified language, if found, otherwise returns the value with some default language."
language: String
): String!
"Long descriptions of the alert in all different available languages"
alertDescriptionTextTranslations: [TranslatedString!]! @deprecated(reason : "Use `alertDescriptionText` instead. `accept-language` header can be used for translations or the `language` parameter on the `alertDescriptionText` field.")
"Alert effect"
alertEffect: AlertEffectType
"hashcode from the original GTFS-RT alert"
alertHash: Int
"Header of the alert, if available"
alertHeaderText(
"Returns header with the specified language, if found, otherwise returns the value with some default language."
language: String
): String
"Header of the alert in all different available languages"
alertHeaderTextTranslations: [TranslatedString!]! @deprecated(reason : "Use `alertHeaderText` instead. `accept-language` header can be used for translations or the `language` parameter on the `alertHeaderText` field.")
"Alert severity level"
alertSeverityLevel: AlertSeverityLevelType
"Url with more information"
alertUrl(
"Returns URL with the specified language, if found, otherwise returns the value with some default language."
language: String
): String
"Url with more information in all different available languages"
alertUrlTranslations: [TranslatedString!]! @deprecated(reason : "Use `alertUrl` instead. `accept-language` header can be used for translations or the `language` parameter on the `alertUrl` field.")
"Time when this alert is not in effect anymore. Format: Unix timestamp in seconds"
effectiveEndDate: Long
"Time when this alert comes into effect. Format: Unix timestamp in seconds"
effectiveStartDate: Long
"Entities affected by the disruption."
entities: [AlertEntity]
"The feed in which this alert was published"
feed: String
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Patterns affected by the disruption"
patterns: [Pattern] @deprecated(reason : "This will always return an empty list. Use entities instead.")
"Route affected by the disruption"
route: Route @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected routes.\nUse entities instead.")
"Stop affected by the disruption"
stop: Stop @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected stops.\nUse entities instead.")
"Trip affected by the disruption"
trip: Trip @deprecated(reason : "Alert can have multiple affected entities now instead of there being duplicate alerts\nfor different entities. This will return only one of the affected trips.\nUse entities instead.")
}
"Bike park represents a location where bicycles can be parked."
type BikePark implements Node & PlaceInterface {
"ID of the bike park"
bikeParkId: String
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the bike park (WGS 84)"
lat: Float
"Longitude of the bike park (WGS 84)"
lon: Float
"Name of the bike park"
name(
"Returns name with the specified language, if found, otherwise returns with some default language."
language: String
): String!
"Opening hours of the parking facility"
openingHours: OpeningHours
"If true, value of `spacesAvailable` is updated from a real-time source."
realtime: Boolean
"Number of spaces available for bikes"
spacesAvailable: Int
"Source specific tags of the bike park, which describe the available features."
tags: [String]
}
"Bike rental station represents a location where users can rent bicycles for a fee."
type BikeRentalStation implements Node & PlaceInterface {
"""
If true, bikes can be returned to this station if the station has spaces available
or allows overloading.
"""
allowDropoff: Boolean
"If true, bikes can be currently returned to this station."
allowDropoffNow: Boolean
"If true, bikes can be returned even if spacesAvailable is zero or bikes > capacity."
allowOverloading: Boolean
"If true, bikes can be picked up from this station if the station has bikes available."
allowPickup: Boolean
"If true, bikes can be currently picked up from this station."
allowPickupNow: Boolean
"""
Number of bikes currently available on the rental station.
See field `allowPickupNow` to know if is currently possible to pick up a bike.
"""
bikesAvailable: Int
"Nominal capacity (number of racks) of the rental station."
capacity: Int
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the bike rental station (WGS 84)"
lat: Float
"Longitude of the bike rental station (WGS 84)"
lon: Float
"Name of the bike rental station"
name: String!
networks: [String]
"If true, station is on and in service."
operative: Boolean
"""
If true, values of `bikesAvailable` and `spacesAvailable` are updated from a
real-time source. If false, values of `bikesAvailable` and `spacesAvailable`
are always the total capacity divided by two.
"""
realtime: Boolean
"Platform-specific URLs to begin renting a bike from this station."
rentalUris: BikeRentalStationUris
"""
Number of free spaces currently available on the rental station.
Note that this value being 0 does not necessarily indicate that bikes cannot be returned
to this station, as for example it might be possible to leave the bike in the vicinity of
the rental station, even if the bike racks don't have any spaces available.
See field `allowDropoffNow` to know if is currently possible to return a bike.
"""
spacesAvailable: Int
"A description of the current state of this bike rental station, e.g. \"Station on\""
state: String @deprecated(reason : "Use operative instead")
"ID of the bike rental station"
stationId: String
}
type BikeRentalStationUris {
"""
A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android
intent to support Android Deep Links.
May be null if a rental URI does not exist.
"""
android: String
"""
A URI that can be used on iOS to launch the rental app for this station.
May be {@code null} if a rental URI does not exist.
"""
ios: String
"""
A URL that can be used by a web browser to show more information about renting a vehicle at
this station.
May be {@code null} if a rental URL does not exist.
"""
web: String
}
"""
Booking information for a stop time which has special requirements to use, like calling ahead or
using an app.
"""
type BookingInfo {
"Contact information for reaching the service provider"
contactInfo: ContactInfo
"A message specific to the drop off"
dropOffMessage: String
"When is the earliest time the service can be booked."
earliestBookingTime: BookingTime
"When is the latest time the service can be booked"
latestBookingTime: BookingTime
"Maximum number of seconds before travel to make the request"
maximumBookingNoticeSeconds: Long
"A general message for those booking the service"
message: String
"Minimum number of seconds before travel to make the request"
minimumBookingNoticeSeconds: Long
"A message specific to the pick up"
pickupMessage: String
}
"Temporal restriction for a booking"
type BookingTime {
"How many days before the booking"
daysPrior: Int
"Time of the booking"
time: String
}
"Car park represents a location where cars can be parked."
type CarPark implements Node & PlaceInterface {
"ID of the car park"
carParkId: String
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the car park (WGS 84)"
lat: Float
"Longitude of the car park (WGS 84)"
lon: Float
"Number of parking spaces at the car park"
maxCapacity: Int
"Name of the car park"
name(
"Returns name with the specified language, if found, otherwise returns with some default language."
language: String
): String!
"""
Opening hours for the selected dates using the local time of the park.
Each date can have multiple time spans.
"""
openingHours: OpeningHours
"If true, value of `spacesAvailable` is updated from a real-time source."
realtime: Boolean
"Number of currently available parking spaces at the car park"
spacesAvailable: Int
"Source specific tags of the car park, which describe the available features."
tags: [String]
}
"Cluster is a list of stops grouped by name and proximity"
type Cluster implements Node {
"ID of the cluster"
gtfsId: String!
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the center of this cluster (i.e. average latitude of stops in this cluster)"
lat: Float!
"Longitude of the center of this cluster (i.e. average longitude of stops in this cluster)"
lon: Float!
"Name of the cluster"
name: String!
"List of stops in the cluster"
stops: [Stop!]
}
"Contact information for booking an on-demand or flexible service."
type ContactInfo {
"Additional notes about the contacting the service provider"
additionalDetails: String
"URL to the booking systems of the service"
bookingUrl: String
"Name of the person to contact"
contactPerson: String
"Email to contact"
eMail: String
"Fax number to contact"
faxNumber: String
"URL containing general information about the service"
infoUrl: String
"Phone number to contact"
phoneNumber: String
}
"""
Coordinate (often referred as coordinates), which is used to specify a location using in the
WGS84 coordinate system.
"""
type Coordinate {
"Latitude as a WGS84 format number."
latitude: CoordinateValue!
"Longitude as a WGS84 format number."
longitude: CoordinateValue!
}
type Coordinates {
"Latitude (WGS 84)"
lat: Float
"Longitude (WGS 84)"
lon: Float
}
"A currency"
type Currency {
"ISO-4217 currency code, for example `USD` or `EUR`."
code: String!
"""
Fractional digits of this currency. A value of 2 would express that in this currency
100 minor units make up one major unit.
Expressed more concretely: 100 Euro-cents make up one Euro.
Note: Some currencies don't even have any fractional digits, for example the Japanese Yen.
See also https://en.wikipedia.org/wiki/ISO_4217#Minor_unit_fractions
"""
digits: Int!
}
"""
The standard case of a fare product: it only has a single price to be paid by the passenger
and no discounts are applied.
"""
type DefaultFareProduct implements FareProduct {
"Identifier for the fare product."
id: String!
"""
The 'medium' that this product applies to, for example "Oyster Card" or "Berlin Ticket App".
This communicates to riders that a specific way of buying or keeping this product is required.
"""
medium: FareMedium
"Human readable name of the product, for example example \"Day pass\" or \"Single ticket\"."
name: String!
"The price of the product"
price: Money!
"The category of riders this product applies to, for example students or pensioners."
riderCategory: RiderCategory
}
"""
Departure row is a combination of a pattern and a stop of that pattern.
They are de-duplicated so for each pattern there will only be a single departure row.
This is useful if you want to show a list of stop/pattern combinations but want each pattern to be
listed only once.
"""
type DepartureRow implements Node & PlaceInterface {
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the stop (WGS 84)"
lat: Float
"Longitude of the stop (WGS 84)"
lon: Float
"Pattern of the departure row"
pattern: Pattern
"Stop from which the departures leave"
stop: Stop
"Departures of the pattern from the stop"
stoptimes(
"Maximum number of departures to return."
numberOfDepartures: Int = 1,
"If false, returns also canceled trips"
omitCanceled: Boolean = true,
"If true, only those departures which allow boarding are returned"
omitNonPickups: Boolean = false,
"Return rows departing after this time. Time format: Unix timestamp in seconds. Default: current time."
startTime: Long = 0,
"How many seconds ahead to search for departures. Default is one day."
timeRange: Int = 86400
): [Stoptime]
}
type Emissions {
"CO₂ emissions in grams."
co2: Grams
}
"A 'medium' that a fare product applies to, for example cash, 'Oyster Card' or 'DB Navigator App'."
type FareMedium {
"ID of the medium"
id: String!
"Human readable name of the medium."
name: String
}
"A container for both a fare product (a ticket) and its relationship to the itinerary."
type FareProductUse {
"""
Represents the use of a single instance of a fare product throughout the itinerary. It can
be used to cross-reference and de-duplicate fare products that are applicable for more than one
leg.
If you want to uniquely identify the fare product itself (not its use) use the product's `id`.
### Example: Day pass
The day pass is valid for both legs in the itinerary. It is listed as the applicable `product` for each leg,
and the same FareProductUse id is shown, indicating that only one pass was used/bought.
**Illustration**
```yaml
itinerary:
leg1:
fareProducts:
id: "AAA" // id of a FareProductUse instance
product:
id: "day-pass" // product id
name: "Day Pass"
leg2:
fareProducts:
id: "AAA" // identical to leg1. the passenger needs to buy ONE pass, not two.
product:
id: "day-pass" // product id
name: "Day Pass"
```
**It is the responsibility of the API consumers to display the day pass as a product for the
entire itinerary rather than two day passes!**
### Example: Several single tickets
If you have two legs and need to buy two single tickets they will appear in each leg with the
same `FareProduct.id` but different `FareProductUse.id`.
**Illustration**
```yaml
itinerary:
leg1:
fareProducts:
id: "AAA" // id of a FareProductUse instance, not product id
product:
id: "single-ticket" // product id
name: "Single Ticket"
leg2:
fareProducts:
id: "BBB" // different to leg1. the passenger needs to buy two single tickets.
product:
id: "single-ticket" // product id
name: "Single Ticket"
```
"""
id: String!
"The purchasable fare product"
product: FareProduct
}
"A feed provides routing data (stops, routes, timetables, etc.) from one or more public transport agencies."
type Feed {
"List of agencies which provide data to this feed"
agencies: [Agency]
"Alerts relevant for the feed."
alerts(
"Returns alerts for these types that are relevant for the feed."
types: [FeedAlertType!]
): [Alert]
"ID of the feed"
feedId: String!
"The publisher of the input transit data."
publisher: FeedPublisher
}
"Feed publisher information"
type FeedPublisher {
"Name of feed publisher"
name: String!
"Web address of feed publisher"
url: String!
}
type Geometry {
"The number of points in the string"
length: Int
"""
List of coordinates of in a Google encoded polyline format (see
https://developers.google.com/maps/documentation/utilities/polylinealgorithm)
"""
points: Polyline
}
type Itinerary {
"""
Computes a numeric accessibility score between 0 and 1.
The closer the value is to 1 the better the wheelchair-accessibility of this itinerary is.
A value of `null` means that no score has been computed, not that the leg is inaccessible.
More information is available in the [feature documentation](https://docs.opentripplanner.org/en/dev-2.x/sandbox/IBIAccessibilityScore/).
"""
accessibilityScore: Float
"Does the itinerary end without dropping off the rented bicycle:"
arrivedAtDestinationWithRentedBicycle: Boolean
"Duration of the trip on this itinerary, in seconds."
duration: Long
"How much elevation is gained, in total, over the course of the itinerary, in meters."
elevationGained: Float
"How much elevation is lost, in total, over the course of the itinerary, in meters."
elevationLost: Float
"Emissions of this itinerary per traveler."
emissionsPerPerson: Emissions
"Time when the user leaves arrives at the destination."
end: OffsetDateTime
"Time when the user arrives to the destination. Format: Unix timestamp in milliseconds."
endTime: Long @deprecated(reason : "Use `end` instead which includes timezone information.")
"""
Information about the fares for this itinerary. This is primarily a GTFS Fares V1 interface
and always returns an empty list. Use the leg's `fareProducts` instead.
"""
fares: [fare] @deprecated(reason : "Use the leg's `fareProducts`.")
"Generalized cost of the itinerary. Used for debugging search results."
generalizedCost: Int
"""
A list of Legs. Each Leg is either a walking (cycling, car) portion of the
itinerary, or a transit leg on a particular vehicle. So a itinerary where the
user walks to the Q train, transfers to the 6, then walks to their
destination, has four legs.
"""
legs: [Leg]!
"""
How many transfers are part of this itinerary.
Notes:
- Interlined/stay-seated transfers do not increase this count.
- Transferring from a flex to a fixed schedule trip and vice versa increases this count.
"""
numberOfTransfers: Int!
"Time when the user leaves from the origin."
start: OffsetDateTime
"Time when the user leaves from the origin. Format: Unix timestamp in milliseconds."
startTime: Long @deprecated(reason : "Use `start` instead which includes timezone information.")
"""
A list of system notices. Contains debug information for itineraries.
One use-case is to run a routing search with 'debugItineraryFilter: true'.
This will then tag itineraries instead of removing them from the result.
This make it possible to inspect the itinerary-filter-chain.
"""
systemNotices: [SystemNotice]!
"How much time is spent waiting for transit to arrive, in seconds."
waitingTime: Long
"How far the user has to walk, in meters."
walkDistance: Float
"How much time is spent walking, in seconds."
walkTime: Long
}
type Leg {
"""
Computes a numeric accessibility score between 0 and 1.
The closer the value is to 1 the better the wheelchair-accessibility of this leg is.
A value of `null` means that no score has been computed, not that the itinerary is inaccessible.
More information is available in the [feature documentation](https://docs.opentripplanner.org/en/dev-2.x/sandbox/IBIAccessibilityScore/).
"""
accessibilityScore: Float
"For transit legs, the transit agency that operates the service used for this leg. For non-transit legs, `null`."
agency: Agency
"Applicable alerts for this leg."
alerts: [Alert]
"""
For transit leg, the offset from the scheduled arrival time of the alighting
stop in this leg, i.e. scheduled time of arrival at alighting stop = `endTime
- arrivalDelay`
"""
arrivalDelay: Int @deprecated(reason : "Use `start.estimated.delay` instead.")
"""
For transit leg, the offset from the scheduled departure time of the boarding
stop in this leg, i.e. scheduled time of departure at boarding stop =
`startTime - departureDelay`
"""
departureDelay: Int @deprecated(reason : "Use `end.estimated.delay` instead.")
"The distance traveled while traversing the leg in meters."
distance: Float
"""
Special booking information for the drop off stop of this leg if, for example, it needs
to be booked in advance. This could be due to a flexible or on-demand service.
"""
dropOffBookingInfo: BookingInfo
"This is used to indicate if alighting from this leg is possible only with special arrangements."
dropoffType: PickupDropoffType
"The leg's duration in seconds"
duration: Float
"The time when the leg ends including real-time information, if available."
end: LegTime!
"The date and time when this leg ends. Format: Unix timestamp in milliseconds."
endTime: Long @deprecated(reason : "Use `end.estimated.time` instead which contains timezone information.")
"""
Fare products are purchasable tickets which may have an optional fare container or rider
category that limits who can buy them or how.
Please read the documentation of `id` very carefully to learn how a single fare product
that applies to multiple legs can appear several times.
"""
fareProducts: [FareProductUse]
"The Place where the leg originates."
from: Place!
"Generalized cost of the leg. Used for debugging search results."
generalizedCost: Int
"""
For transit legs, the headsign that the vehicle shows at the stop where the passenger boards.
For non-transit legs, null.
"""
headsign: String
"""
An identifier for the leg, which can be used to re-fetch transit leg information, except leg's fare products.
Re-fetching fails when the underlying transit data no longer exists.
**Note:** when both id and fare products are queried with [Relay](https://relay.dev/), id should be queried using a suitable GraphQL alias
such as `legId: id`. Relay does not accept different fare product ids in otherwise identical legs.
"""
id: String
"""
Interlines with previous leg.
This is true when the same vehicle is used for the previous leg as for this leg
and passenger can stay inside the vehicle.
"""
interlineWithPreviousLeg: Boolean
"Whether the destination of this leg (field `to`) is one of the intermediate places specified in the query."
intermediatePlace: Boolean
"""
For transit legs, intermediate stops between the Place where the leg
originates and the Place where the leg ends. For non-transit legs, null.
Returns Place type, which has fields for e.g. departure and arrival times
"""
intermediatePlaces: [Place]
"""
For transit legs, intermediate stops between the Place where the leg
originates and the Place where the leg ends. For non-transit legs, null.
"""
intermediateStops: [Stop]
"The leg's geometry."
legGeometry: Geometry
"The mode (e.g. `WALK`) used when traversing this leg."
mode: Mode
"Future legs with same origin and destination stops or stations"
nextLegs(
"""
Transportation modes for which all stops in the parent station are used as possible destination stops
for the next legs. For modes not listed, only the exact destination stop of the leg is considered.
"""
destinationModesWithParentStation: [TransitMode!],
"""
The number of alternative legs searched. If fewer than the requested number are found,
then only the found legs are returned.
"""
numberOfLegs: Int!,
"""
Transportation modes for which all stops in the parent station are used as possible origin stops
for the next legs. For modes not listed, only the exact origin stop of the leg is considered.
"""
originModesWithParentStation: [TransitMode!]
): [Leg!]
"""
Special booking information for the pick up stop of this leg if, for example, it needs
to be booked in advance. This could be due to a flexible or on-demand service.
"""
pickupBookingInfo: BookingInfo
"This is used to indicate if boarding this leg is possible only with special arrangements."
pickupType: PickupDropoffType
"Previous legs with same origin and destination stops or stations"
previousLegs(
"""
Transportation modes for which all stops in the parent station are used as possible destination stops
for the previous legs. For modes not listed, only the exact destination stop of the leg is considered.
"""
destinationModesWithParentStation: [TransitMode!],
"""
The number of alternative legs searched. If fewer than the requested number are found,
then only the found legs are returned.
"""
numberOfLegs: Int!,
"""
Transportation modes for which all stops in the parent station are used as possible origin stops
for the previous legs. For modes not listed, only the exact origin stop of the leg is considered.
"""
originModesWithParentStation: [TransitMode!]
): [Leg!]
"Whether there is real-time data about this Leg"
realTime: Boolean
"State of real-time data"
realtimeState: RealtimeState
"Whether this leg is traversed with a rented bike."
rentedBike: Boolean
"Estimate of a hailed ride like Uber."
rideHailingEstimate: RideHailingEstimate
"For transit legs, the route that is used for traversing the leg. For non-transit legs, `null`."
route: Route
"For transit legs, the service date of the trip. Format: YYYYMMDD. For non-transit legs, null."
serviceDate: String
"The time when the leg starts including real-time information, if available."
start: LegTime!
"The date and time when this leg begins. Format: Unix timestamp in milliseconds."
startTime: Long @deprecated(reason : "Use `start.estimated.time` instead which contains timezone information.")
"The turn-by-turn navigation instructions."
steps: [step]
"The Place where the leg ends."
to: Place!
"Whether this leg is a transit leg or not."
transitLeg: Boolean
"For transit legs, the trip that is used for traversing the leg. For non-transit legs, `null`."
trip: Trip
"Whether this leg is walking with a bike."
walkingBike: Boolean
}
"""
Time information about a passenger at a certain place. May contain real-time information if
available.
"""
type LegTime {
"The estimated time of the event. If no real-time information is available, this is null."
estimated: RealTimeEstimate
"The scheduled time of the event."
scheduledTime: OffsetDateTime!
}
"A span of time."
type LocalTimeSpan {
"The start of the time timespan as seconds from midnight."
from: Int!
"The end of the timespan as seconds from midnight."
to: Int!
}
"A date using the local timezone of the object that can contain timespans."
type LocalTimeSpanDate {
"The date of this time span. Format: YYYYMMDD."
date: String!
"The time spans for this date."
timeSpans: [LocalTimeSpan]
}
"An amount of money."
type Money {
"""
Money in the major currency unit, so 3.10 USD is represented as `3.1`.
If you want to get the minor currency unit (310 cents), multiply with
(10 to the power of `currency.digits`).
"""
amount: Float!
"The currency of this money amount."
currency: Currency!
}
type OpeningHours {
"""
Opening hours for the selected dates using the local time of the parking lot.
Each date can have multiple time spans.
Note: This is not implemented yet and always returns null.
"""
dates(
"Opening hours will be returned for these dates. Dates should use YYYYMMDD format."
dates: [String!]!
): [LocalTimeSpanDate]
"""
OSM-formatted string of the opening hours.
The spec is available at: https://wiki.openstreetmap.org/wiki/Key:opening_hours
"""
osm: String
}
"Information about pagination in a connection."
type PageInfo {
"When paginating forwards, the cursor to continue."
endCursor: String
"When paginating forwards, are there more items?"
hasNextPage: Boolean!
"When paginating backwards, are there more items?"
hasPreviousPage: Boolean!
"When paginating backwards, the cursor to continue."
startCursor: String
}
"""
Pattern is sequence of stops used by trips on a specific direction and variant
of a route. Most routes have only two patterns: one for outbound trips and one
for inbound trips
"""
type Pattern implements Node {
"""
By default, list of alerts which have directly an effect on just the pattern.
It's also possible to return other relevant alerts through defining types.
"""
alerts(
"""
Returns alerts for these types that are relevant for the pattern.
By default, list of alerts which have directly an effect on just the pattern.
"""
types: [PatternAlertType]
): [Alert]
"ID of the pattern"
code: String!
"""
Direction of the pattern. Possible values: 0, 1 or -1.
-1 indicates that the direction is irrelevant, i.e. the route has patterns only in one direction.
"""
directionId: Int
geometry: [Coordinates]
"Vehicle headsign used by trips of this pattern"
headsign: String
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"""
Name of the pattern. Pattern name can be just the name of the route or it can
include details of destination and origin stops.
"""
name: String
"Original Trip pattern for changed patterns"
originalTripPattern: Pattern
"Coordinates of the route of this pattern in Google polyline encoded format"
patternGeometry: Geometry
"The route this pattern runs on"
route: Route!
"""
Hash code of the pattern. This value is stable and not dependent on the
pattern id, i.e. this value can be used to check whether two patterns are the
same, even if their ids have changed.
"""
semanticHash: String
"List of stops served by this pattern"
stops: [Stop!]
"Trips which run on this pattern"
trips: [Trip!]
"Trips which run on this pattern on the specified date"
tripsForDate(
"Return trips of the pattern active on this date. Format: YYYYMMDD"
serviceDate: String
): [Trip!]
"Real-time updated position of vehicles that are serving this pattern."
vehiclePositions: [VehiclePosition!]
}
type Place {
"""
The time the rider will arrive at the place. This also includes real-time information
if available.
"""
arrival: LegTime
"The time the rider will arrive at the place. Format: Unix timestamp in milliseconds."
arrivalTime: Long! @deprecated(reason : "Use `arrival` which includes timezone information.")
"The bike parking related to the place"
bikePark: BikePark @deprecated(reason : "bikePark is deprecated. Use vehicleParking instead.")
"The bike rental station related to the place"
bikeRentalStation: BikeRentalStation @deprecated(reason : "Use vehicleRentalStation and rentalVehicle instead")
"The car parking related to the place"
carPark: CarPark @deprecated(reason : "carPark is deprecated. Use vehicleParking instead.")
"""
The time the rider will depart the place. This also includes real-time information
if available.
"""
departure: LegTime
"The time the rider will depart the place. Format: Unix timestamp in milliseconds."
departureTime: Long! @deprecated(reason : "Use `departure` which includes timezone information.")
"Latitude of the place (WGS 84)"
lat: Float!
"Longitude of the place (WGS 84)"
lon: Float!
"For transit stops, the name of the stop. For points of interest, the name of the POI."
name: String
"The rental vehicle related to the place"
rentalVehicle: RentalVehicle
"The stop related to the place."
stop: Stop
"""
The position of the stop in the pattern. This is not required to start from 0 or be consecutive - any
increasing integer sequence along the stops is valid.
The purpose of this field is to identify the stop within the pattern so it can be cross-referenced
between it and the itinerary. It is safe to cross-reference when done quickly, i.e. within seconds.
However, it should be noted that real-time updates can change the values, so don't store it for
longer amounts of time.
Depending on the source data, this might not be the GTFS `stop_sequence` but another value, perhaps
even generated.
The position can be either at a certain stop or in between two for trips where this is possible.
"""
stopPosition: StopPosition
"The vehicle parking related to the place"
vehicleParking: VehicleParking
"The vehicle rental station related to the place"
vehicleRentalStation: VehicleRentalStation
"""
Type of vertex. (Normal, Bike sharing station, Bike P+R, Transit stop) Mostly
used for better localization of bike sharing and P+R station names
"""
vertexType: VertexType
}
type Plan {
"The time and date of travel. Format: Unix timestamp in milliseconds."
date: Long
"Information about the timings for the plan generation"
debugOutput: debugOutput!
"The origin"
from: Place!
"A list of possible itineraries"
itineraries: [Itinerary]!
"A list of possible error messages as enum"
messageEnums: [String]!
"A list of possible error messages in cleartext"
messageStrings: [String]!
"""
This is the suggested search time for the "next page" or time window. Insert it together
with the searchWindowUsed in the request to get a new set of trips following in the
search-window AFTER the current search. No duplicate trips should be returned, unless a trip
is delayed and new real-time data is available.
"""
nextDateTime: Long @deprecated(reason : "Use nextPageCursor instead")
"""
Use the cursor to go to the next "page" of itineraries. Copy the cursor from the last response
to the pageCursor query parameter and keep the original request as is. This will enable you to
search for itineraries in the next search-window.
The cursor based paging only support stepping to the next page, as it does not support jumping.
This is only usable when public transportation mode(s) are included in the query.
"""
nextPageCursor: String
"""
This is the suggested search time for the "previous page" or time window. Insert it together
with the searchWindowUsed in the request to get a new set of trips preceding in the
search-window BEFORE the current search. No duplicate trips should be returned, unless a trip
is delayed and new real-time data is available.
"""
prevDateTime: Long @deprecated(reason : "Use previousPageCursor instead")
"""
Use the cursor to go to the previous "page" of itineraries. Copy the cursor from the last
response to the pageCursor query parameter and keep the original request otherwise as is.
This will enable you to search for itineraries in the previous search-window.
The cursor based paging only support stepping to the previous page, as it does not support
jumping.
This is only usable when public transportation mode(s) are included in the query.
"""
previousPageCursor: String
"A list of routing errors, and fields which caused them"
routingErrors: [RoutingError!]!
"""
This is the `searchWindow` used by the raptor search. It is provided here for debugging
purpousess.
The unit is seconds.
"""
searchWindowUsed: Long
"The destination"
to: Place!
}
"""
Plan (result of an itinerary search) that follows
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
type PlanConnection {
"""
Edges which contain the itineraries. Part of the
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
edges: [PlanEdge]
"""
Contains cursors to continue the search and the information if there are more itineraries available.
Part of the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
pageInfo: PlanPageInfo!
"Errors faced during the routing search."
routingErrors: [RoutingError!]!
"What was the starting point for the itinerary search."
searchDateTime: OffsetDateTime
}
"""
Edge outputted by a plan search. Part of the
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
type PlanEdge {
"""
The cursor of the edge. Part of the
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
cursor: String!
"""
An itinerary suggestion. Part of the
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
node: Itinerary!
}
"""
Information about pagination in a connection. Part of the
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
type PlanPageInfo {
"When paginating forwards, the cursor to continue."
endCursor: String
"When paginating forwards, are there more items?"
hasNextPage: Boolean!
"When paginating backwards, are there more items?"
hasPreviousPage: Boolean!
"The search window that was used for the search in the current page."
searchWindowUsed: Duration
"When paginating backwards, the cursor to continue."
startCursor: String
}
"Stop position at a specific stop."
type PositionAtStop {
"Position of the stop in the pattern. Positions are not required to start from 0 or be consecutive."
position: Int
}
"The board/alight position in between two stops of the pattern of a trip with continuous pickup/drop off."
type PositionBetweenStops {
"Position of the next stop in the pattern. Positions are not required to start from 0 or be consecutive."
nextPosition: Int
"Position of the previous stop in the pattern. Positions are not required to start from 0 or be consecutive."
previousPosition: Int
}
type QueryType {
"Get all agencies"
agencies: [Agency]
"Get a single agency based on agency ID, i.e. value of field `gtfsId` (ID format is `FeedId:StopId`)"
agency(id: String!): Agency
"Get all active alerts"
alerts(
"Only return alerts with these causes"
cause: [AlertCauseType!],
"Only return alerts with these effects"
effect: [AlertEffectType!],
"Only return alerts in these feeds"
feeds: [String!],
"Only return alerts affecting these routes"
route: [String!],
"Only return alerts with these severity levels"
severityLevel: [AlertSeverityLevelType!],
"Only return alerts affecting these stops"
stop: [String!]
): [Alert]
"Get a single bike park based on its ID, i.e. value of field `bikeParkId`"
bikePark(id: String!): BikePark @deprecated(reason : "bikePark is deprecated. Use vehicleParking instead.")
"Get all bike parks"
bikeParks: [BikePark] @deprecated(reason : "bikeParks is deprecated. Use vehicleParkings instead.")
"Get a single bike rental station based on its ID, i.e. value of field `stationId`"
bikeRentalStation(id: String!): BikeRentalStation @deprecated(reason : "Use rentalVehicle or vehicleRentalStation instead")
"Get all bike rental stations"
bikeRentalStations(
"""
Return bike rental stations with these ids.
**Note:** if an id is invalid (or the bike rental station service is unavailable)
the returned list will contain `null` values.
"""
ids: [String]
): [BikeRentalStation] @deprecated(reason : "Use rentalVehicles or vehicleRentalStations instead")
"Get cancelled TripTimes."
cancelledTripTimes(
"Feed feedIds (e.g. [\"HSL\"])."
feeds: [String],
"""
Only cancelled trip times that have last stop arrival time at maxArrivalTime
or before are returned. Format: seconds since midnight of maxDate.
"""
maxArrivalTime: Int,
"Only cancelled trip times scheduled to run on maxDate or before are returned. Format: \"2019-12-23\" or \"20191223\"."
maxDate: String,
"""
Only cancelled trip times that have first stop departure time at
maxDepartureTime or before are returned. Format: seconds since midnight of maxDate.
"""
maxDepartureTime: Int,
"""
Only cancelled trip times that have last stop arrival time at minArrivalTime
or after are returned. Format: seconds since midnight of minDate.
"""
minArrivalTime: Int,
"Only cancelled trip times scheduled to run on minDate or after are returned. Format: \"2019-12-23\" or \"20191223\"."
minDate: String,
"""
Only cancelled trip times that have first stop departure time at
minDepartureTime or after are returned. Format: seconds since midnight of minDate.
"""
minDepartureTime: Int,
"TripPattern codes (e.g. [\"HSL:1098:1:01\"])."
patterns: [String],
"Route gtfsIds (e.g. [\"HSL:1098\"])."
routes: [String],
"Trip gtfsIds (e.g. [\"HSL:1098_20190405_Ma_2_1455\"])."
trips: [String]
): [Stoptime]
"Get a single car park based on its ID, i.e. value of field `carParkId`"
carPark(id: String!): CarPark @deprecated(reason : "carPark is deprecated. Use vehicleParking instead.")
"Get all car parks"
carParks(
"""
Return car parks with these ids.
**Note:** if an id is invalid (or the car park service is unavailable) the returned list will contain `null` values.
"""
ids: [String]
): [CarPark] @deprecated(reason : "carParks is deprecated. Use vehicleParkings instead.")
"Get a single cluster based on its ID, i.e. value of field `gtfsId`"
cluster(id: String!): Cluster
"Get all clusters"
clusters: [Cluster]
"Get a single departure row based on its ID (ID format is `FeedId:StopId:PatternId`)"
departureRow(id: String!): DepartureRow
"Get all available feeds"
feeds: [Feed]
"""
Finds a trip matching the given parameters. This query type is useful if the
id of a trip is not known, but other details uniquely identifying the trip are
available from some source (e.g. MQTT vehicle positions).
"""
fuzzyTrip(
"Departure date of the trip, format: YYYY-MM-DD"
date: String!,
"""
Direction of the trip, possible values: 0, 1 or -1.
-1 indicates that the direction is irrelevant, i.e. in case the route has
trips only in one direction. See field `directionId` of Pattern.
"""
direction: Int = -1,
"id of the route"
route: String!,
"Departure time of the trip, format: seconds since midnight of the departure date"
time: Int!
): Trip
"""
Try refetching the current state of a transit leg using its id.
This fails when the underlying transit data (mostly IDs) has changed or are no longer available.
Fare products cannot be refetched using this query.
"""
leg(id: String!): Leg
"""
Get all places (stops, stations, etc. with coordinates) within the specified
radius from a location. The returned type is a Relay connection (see
https://facebook.github.io/relay/graphql/connections.htm). The placeAtDistance
type has two fields: place and distance. The search is done by walking so the
distance is according to the network of walkable streets and paths.
"""
nearest(
after: String,
before: String,
"Only include places that match one of the given GTFS ids."
filterByIds: InputFilters @deprecated(reason : "Not actively maintained"),
"""
Only return places that are related to one of these transport modes. This
argument can be used to return e.g. only nearest railway stations or only
nearest places related to bicycling.
"""
filterByModes: [Mode],
"Only include vehicle rental networks that match one of the given network ids."
filterByNetwork: [String!],
"Only return places that are one of these types, e.g. `STOP` or `VEHICLE_RENT`"
filterByPlaceTypes: [FilterPlaceType],
first: Int,
last: Int,
"Latitude of the location (WGS 84)"
lat: Float!,
"Longitude of the location (WGS 84)"
lon: Float!,
"""
Maximum distance (in meters) to search for from the specified location. Note
that this is walking distance along streets and paths rather than a
geographic distance. Default is 2000m
"""
maxDistance: Int = 2000,
"Maximum number of results. Search is stopped when this limit is reached. Default is 20."
maxResults: Int = 20
): placeAtDistanceConnection @async
"Fetches an object given its ID"
node(
"The ID of an object"
id: ID!
): Node
"""
Get a single pattern based on its ID, i.e. value of field `code` (format is
`FeedId:RouteId:DirectionId:PatternVariantNumber`)
"""
pattern(id: String!): Pattern
"Get all patterns"
patterns: [Pattern]
"Plans an itinerary from point A to point B based on the given arguments"
plan(
"Invariant: `boardSlack + alightSlack <= transferSlack`. Default value: 0"
alightSlack: Int,
"Is bike rental allowed? Default value: false"
allowBikeRental: Boolean @deprecated(reason : "Rental is specified by modes"),
"""
Whether arriving at the destination with a rented (station) bicycle is allowed without
dropping it off. Default: false.
"""
allowKeepingRentedBicycleAtDestination: Boolean,
"Which vehicle rental networks can be used. By default, all networks are allowed."
allowedBikeRentalNetworks: [String] @deprecated(reason : "Use allowedVehicleRentalNetworks instead"),
"""
List of ticket types that are allowed to be used in itineraries.
See `ticketTypes` query for list of possible ticket types.
"""
allowedTicketTypes: [String],
"Which vehicle rental networks can be used. By default, all networks are allowed."
allowedVehicleRentalNetworks: [String],
"""
Whether the itinerary should depart at the specified time (false), or arrive
to the destination at the specified time (true). Default value: false.
"""
arriveBy: Boolean,
"List of routes, trips, agencies and stops which are not used in the itinerary"
banned: InputBanned,
"Which vehicle rental networks cannot be used. By default, all networks are allowed."
bannedVehicleRentalNetworks: [String],
"""
This argument has no use for itinerary planning and will be removed later.
When true, do not use goal direction or stop at the target, build a full SPT. Default value: false.
"""
batch: Boolean @deprecated(reason : "Removed in OTP 2"),
"""
Separate cost for boarding a vehicle with a bicycle, which is more difficult
than on foot. Unit: seconds. Default value: 600
"""
bikeBoardCost: Int,
"""
A multiplier for how bad biking is, compared to being in transit for equal
lengths of time. Default value: 2.0
"""
bikeReluctance: Float,
"Max bike speed along streets, in meters per second. Default value: 5.0"
bikeSpeed: Float,
"Cost of getting on and off your own bike. Unit: seconds. Default value: 0"
bikeSwitchCost: Int,
"Time to get on and off your own bike, in seconds. Default value: 0"
bikeSwitchTime: Int,
"""
A multiplier for how bad walking with a bike is, compared to being in transit for equal
lengths of time. Default value: 5.0
"""
bikeWalkingReluctance: Float,
"Invariant: `boardSlack + alightSlack <= transferSlack`. Default value: 0"
boardSlack: Int,
"""
How expensive it is to drive a car when car&parking, increase this value to
make car driving legs shorter. Default value: 1.
"""
carParkCarLegWeight: Float @deprecated(reason : "Use `carReluctance` instead."),
"""
A multiplier for how bad driving is, compared to being in transit for equal
lengths of time. Default value: 3.0
"""
carReluctance: Float,
"""
No effect on itinerary planning, adjust argument `time` instead to get later departures.
~~The maximum wait time in seconds the user is willing to delay trip start. Only effective in Analyst.~~
"""
claimInitialWait: Long @deprecated(reason : "Removed in OTP 2"),
"Whether legs should be compacted by performing a reversed search."
compactLegsByReversedSearch: Boolean @deprecated(reason : "Removed in OTP 2"),
"Date of departure or arrival in format YYYY-MM-DD. Default value: current date"
date: String,
"Debug the itinerary-filter-chain. The filters will mark itineraries as deleted, but does NOT delete them when this is enabled."
debugItineraryFilter: Boolean,
"""
If true, the remaining weight heuristic is disabled. Currently only
implemented for the long distance path service.
"""
disableRemainingWeightHeuristic: Boolean @deprecated(reason : "Removed in OTP 2.2"),
"""
The geographical location where the itinerary begins.
Use either this argument or `fromPlace`, but not both.
"""
from: InputCoordinates,
"""
The place where the itinerary begins in format `name::place`, where `place`
is either a lat,lng pair (e.g. `Pasila::60.199041,24.932928`) or a stop id
(e.g. `Pasila::HSL:1000202`).
Use either this argument or `from`, but not both.
"""
fromPlace: String,
"Tuning parameter for the search algorithm, mainly useful for testing."
heuristicStepsPerMainStep: Int @deprecated(reason : "Removed. Doesn't do anything."),
"When true, real-time updates are ignored during this search. Default value: false"
ignoreRealtimeUpdates: Boolean,
"An ordered list of intermediate locations to be visited."
intermediatePlaces: [InputCoordinates] @deprecated(reason : "Not implemented in OTP2."),
"""
How easily bad itineraries are filtered from results. Value 0 (default)
disables filtering. Itineraries are filtered if they are worse than another
one in some respect (e.g. more walking) by more than the percentage of
filtering level, which is calculated by dividing 100% by the value of this
argument (e.g. `itineraryFiltering = 0.5` 200% worse itineraries are filtered).
"""
itineraryFiltering: Float @deprecated(reason : "Removed. Doesn't do anything."),
"""
The cost of arriving at the destination with the rented vehicle, to discourage doing so.
Default value: 0.
"""
keepingRentedBicycleAtDestinationCost: Int,
"""
Two-letter language code (ISO 639-1) used for returned text.
**Note:** only part of the data has translations available and names of
stops and POIs are returned in their default language. Due to missing
translations, it is sometimes possible that returned text uses a mixture of two languages.
"""
locale: String,
"""
The maximum time (in seconds) of pre-transit travel when using
drive-to-transit (park and ride or kiss and ride). Default value: 1800.
"""
maxPreTransitTime: Int @deprecated(reason : "Use walkReluctance or future reluctance parameters for other modes"),
"Maximum number of transfers. Default value: 2"
maxTransfers: Int,
"""
The maximum distance (in meters) the user is willing to walk per walking
section. If the only transport mode allowed is `WALK`, then the value of
this argument is ignored.
Default: 2000m
Maximum value: 15000m
**Note:** If this argument has a relatively small value and only some
transport modes are allowed (e.g. `WALK` and `RAIL`), it is possible to get
an itinerary which has (useless) back and forth public transport legs to
avoid walking too long distances.
"""
maxWalkDistance: Float @deprecated(reason : "Does nothing. Use walkReluctance instead."),
"""
A global minimum transfer time (in seconds) that specifies the minimum
amount of time that must pass between exiting one transit vehicle and
boarding another. This time is in addition to time it might take to walk
between transit stops. Default value: 120
"""
minTransferTime: Int,
"The weight multipliers for transit modes. WALK, BICYCLE, CAR, TRANSIT and LEG_SWITCH are not included."
modeWeight: InputModeWeight,
"Penalty (in seconds) for using a non-preferred transfer. Default value: 180"
nonpreferredTransferPenalty: Int,
"The maximum number of itineraries to return. Default value: 3."
numItineraries: Int = 3,
"When false, return itineraries using canceled trips. Default value: true."
omitCanceled: Boolean = true,
"Optimization type for bicycling legs, e.g. prefer flat terrain. Default value: `QUICK`"
optimize: OptimizeType,
"""
Use the cursor to get the next or previous page of results.
The next page is a set of itineraries departing after the last itinerary in this result and
the previous page is a set of itineraries departing before the first itinerary.
This is only usable when public transportation mode(s) are included in the query.
"""
pageCursor: String,
"Preferences for vehicle parking"
parking: VehicleParkingInput,
"List of routes and agencies which are given higher preference when planning the itinerary"
preferred: InputPreferred,
"""
**Consider this argument experimental** setting this argument to true
causes timeouts and unoptimal routes in many cases.
When true, reverse optimize (find alternative transportation mode, which
still arrives to the destination in time) this search on the fly after
processing each transit leg, rather than reverse-optimizing the entire path
when it's done. Default value: false.
"""
reverseOptimizeOnTheFly: Boolean @deprecated(reason : "Removed in OTP 2"),
"""
The length of the search-window in seconds. This parameter is optional.
The search-window is defined as the duration between the earliest-departure-time(EDT) and
the latest-departure-time(LDT). OTP will search for all itineraries in this departure
window. If `arriveBy=true` the `dateTime` parameter is the latest-arrival-time, so OTP
will dynamically calculate the EDT. Using a short search-window is faster than using a
longer one, but the search duration is not linear. Using a \"too\" short search-window will
waste resources server side, while using a search-window that is too long will be slow.
OTP will dynamically calculate a reasonable value for the search-window, if not provided.
The calculation comes with a significant overhead (10-20% extra). Whether you should use the
dynamic calculated value or pass in a value depends on your use-case. For a travel planner
in a small geographical area, with a dense network of public transportation, a fixed value
between 40 minutes and 2 hours makes sense. To find the appropriate search-window, adjust
it so that the number of itineraries on average is around the wanted `numItineraries`. Make
sure you set the `numItineraries` to a high number while testing. For a country wide area
like Norway, using the dynamic search-window is the best.
When paginating, the search-window is calculated using the `numItineraries` in the original
search together with statistics from the search for the last page. This behaviour is
configured server side, and can not be overridden from the client.
The search-window used is returned to the response metadata as `searchWindowUsed` for
debugging purposes.
"""
searchWindow: Long,
"""
This argument has currently no effect on which itineraries are returned. Use
argument `fromPlace` to start the itinerary from a specific stop.
~~A transit stop that this trip must start from~~
"""
startTransitStopId: String,
"""
ID of the trip on which the itinerary starts. This argument can be used to
plan itineraries when the user is already onboard a vehicle. When using this
argument, arguments `time` and `from` should be set based on a vehicle
position message received from the vehicle running the specified trip.
**Note:** this argument only takes into account the route and estimated
travel time of the trip (and therefore arguments `time` and `from` must be
used correctly to get meaningful itineraries).
"""
startTransitTripId: String @deprecated(reason : "Not implemented in OTP2"),
"Time of departure or arrival in format hh:mm:ss. Default value: current time"
time: String,
"""
The geographical location where the itinerary ends.
Use either this argument or `toPlace`, but not both.
"""
to: InputCoordinates,
"""
The place where the itinerary ends in format `name::place`, where `place` is
either a lat,lng pair (e.g. `Pasila::60.199041,24.932928`) or a stop id
(e.g. `Pasila::HSL:1000202`).
Use either this argument or `to`, but not both.
"""
toPlace: String,
"""
An extra penalty added on transfers (i.e. all boardings except the first
one). Not to be confused with bikeBoardCost and walkBoardCost, which are the
cost of boarding a vehicle with and without a bicycle. The boardCosts are
used to model the 'usual' perceived cost of using a transit vehicle, and the
transferPenalty is used when a user requests even less transfers. In the
latter case, we don't actually optimize for fewest transfers, as this can
lead to absurd results. Consider a trip in New York from Grand Army Plaza
(the one in Brooklyn) to Kalustyan's at noon. The true lowest transfers
route is to wait until midnight, when the 4 train runs local the whole way.
The actual fastest route is the 2/3 to the 4/5 at Nevins to the 6 at Union
Square, which takes half an hour. Even someone optimizing for fewest
transfers doesn't want to wait until midnight. Maybe they would be willing
to walk to 7th Ave and take the Q to Union Square, then transfer to the 6.
If this takes less than optimize_transfer_penalty seconds, then that's what
we'll return. Default value: 0.
"""
transferPenalty: Int,
"List of transportation modes that the user is willing to use. Default: `[\"WALK\",\"TRANSIT\"]`"
transportModes: [TransportMode],
"Triangle optimization parameters for bicycling legs. Only effective when `optimize` is set to **TRIANGLE**."
triangle: InputTriangle,
"List of routes and agencies which are given lower preference when planning the itinerary"
unpreferred: InputUnpreferred,
"""
The list of points the itinerary required to pass through.
All locations are visited in the order they are listed.
"""
via: [PlanViaLocationInput!],
"""
How much less bad is waiting at the beginning of the trip (replaces
`waitReluctance` on the first boarding). Default value: 0.4
"""
waitAtBeginningFactor: Float @deprecated(reason : "Removed in OTP 2, the timetable-view replaces this functionality."),
"""
How much worse is waiting for a transit vehicle than being on a transit
vehicle, as a multiplier. The default value treats wait and on-vehicle time
as the same. It may be tempting to set this higher than walkReluctance (as
studies often find this kind of preferences among riders) but the planner
will take this literally and walk down a transit line to avoid waiting at a
stop. This used to be set less than 1 (0.95) which would make waiting
offboard preferable to waiting onboard in an interlined trip. That is also
undesirable. If we only tried the shortest possible transfer at each stop to
neighboring stop patterns, this problem could disappear. Default value: 1.0.
"""
waitReluctance: Float,
"This prevents unnecessary transfers by adding a cost for boarding a vehicle. Unit: seconds. Default value: 600"
walkBoardCost: Int,
"How much more reluctant is the user to walk on streets with car traffic allowed. Default value: 1.0"
walkOnStreetReluctance: Float @deprecated(reason : "Use `walkSafetyFactor` instead"),
"""
A multiplier for how bad walking is, compared to being in transit for equal
lengths of time. Empirically, values between 2 and 4 seem to correspond
well to the concept of not wanting to walk too much without asking for
totally ridiculous itineraries, but this observation should in no way be
taken as scientific or definitive. Your mileage may vary. See
https://github.com/opentripplanner/OpenTripPlanner/issues/4090 for impact on
performance with high values. Default value: 2.0
"""
walkReluctance: Float,
"""
Factor for how much the walk safety is considered in routing. Value should be between 0 and 1.
If the value is set to be 0, safety is ignored. Default is 1.0.
"""
walkSafetyFactor: Float,
"Max walk speed along streets, in meters per second. Default value: 1.33"
walkSpeed: Float,
"Whether the itinerary must be wheelchair accessible. Default value: false"
wheelchair: Boolean
): Plan @async @deprecated(reason : "Use `planConnection` instead.")
"""
Plan (itinerary) search that follows
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm).
"""
planConnection(
"""
Takes in cursor from a previous search. Used for forward pagination. If earliest departure time
is used in the original query, the new search then returns itineraries that depart after
the start time of the last itinerary that was returned, or at the same time if there are multiple
itinerary options that can depart at that moment in time.
If latest arrival time is defined, the new search returns itineraries that arrive before the end
time of the last itinerary that was returned in the previous search, or at the same time if there
are multiple itinerary options that can arrive at that moment in time. This parameter is part of
the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm) and
should be used together with the `first` parameter.
"""
after: String,
"""
Takes in cursor from a previous search. Used for backwards pagination. If earliest departure time
is used in the original query, the new search then returns itineraries that depart before that time.
If latest arrival time is defined, the new search returns itineraries that arrive after that time.
This parameter is part of the [GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm)
and should be used together with the `last` parameter.
"""
before: String,
"""
Datetime of the search. It's possible to either define the earliest departure time
or the latest arrival time. By default, earliest departure time is set as now.
"""
dateTime: PlanDateTimeInput,
"The destination where the search ends. Usually coordinates but can also be a stop location."
destination: PlanLabeledLocationInput!,
"""
How many new itineraries should at maximum be returned in either the first search or with
forward pagination. This parameter is part of the
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm)
and should be used together with the `after` parameter (although `after` shouldn't be defined
in the first search).
"""
first: Int,
"""
Settings that control the behavior of itinerary filtering. These are advanced settings and
should not be set by a user through user preferences.
"""
itineraryFilter: PlanItineraryFilterInput,
"""
How many new itineraries should at maximum be returned in backwards pagination. It's recommended to
use the same value as was used for the `first` parameter in the original search for optimal
performance. This parameter is part of the
[GraphQL Cursor Connections Specification](https://relay.dev/graphql/connections.htm)
and should be used together with the `before` parameter.
"""
last: Int,
"""
Locale used for translations. Note, there might not necessarily be translations available.
It's possible and recommended to use the ´accept-language´ header instead of this parameter.
"""
locale: Locale,
"""
Street and transit modes used during the search. This also includes options to only return
an itinerary that contains no transit legs or force transit to be used in all itineraries.
By default, all transit modes are usable and `WALK` is used for direct street suggestions,
access, egress and transfers.
"""
modes: PlanModesInput,
"The origin where the search starts. Usually coordinates but can also be a stop location."
origin: PlanLabeledLocationInput!,
"Preferences that affect what itineraries are returned. Preferences are split into categories."
preferences: PlanPreferencesInput,
"""
Duration of the search window. This either starts at the defined earliest departure
time or ends at the latest arrival time. If this is not provided, a reasonable
search window is automatically generated. When searching for earlier or later itineraries
with paging, this search window is no longer used and the new window will be based
on how many suggestions were returned in the previous search. The new search window can be
shorter or longer than the original search window. Note, itineraries are returned faster
with a smaller search window and search window limitation is done mainly for performance reasons.
Setting this parameter makes especially sense if the transportation network is as sparse or dense
in the whole itinerary search area. Otherwise, letting the system decide what is the search window
is in combination of using paging can lead to better performance and to getting a more consistent
number of itineraries in each search.
"""
searchWindow: Duration,
"The list of points the itinerary is required to pass through."
via: [PlanViaLocationInput!]
): PlanConnection @async
"Get a single rental vehicle based on its ID, i.e. value of field `vehicleId`"
rentalVehicle(id: String!): RentalVehicle
"Get all rental vehicles"
rentalVehicles(
"Return only rental vehicles that have this form factor."
formFactors: [FormFactor],
"""
Return rental vehicles with these ids, i.e. value of field `vehicleId`.
**Note:** if an id is invalid (or the rental service is unavailable)
the returned list will contain `null` values.
If this is provided all other filters are ignored.
"""
ids: [String]
): [RentalVehicle]
"Get a single route based on its ID, i.e. value of field `gtfsId` (format is `FeedId:RouteId`)"
route(id: String!): Route
"Get all routes"
routes(
"Only return routes with these feedIds"
feeds: [String],
"Only return routes with these ids"
ids: [String] @deprecated(reason : "Since it is hard to reason about the ID filter being combined with others in this resolver, it will be moved to a separate one."),
"Query routes by this name"
name: String,
"""
Only include routes whose pattern operates on at least one service date specified by this filter.
**Note**: A service date is a technical term useful for transit planning purposes and might not
correspond to a how a passenger thinks of a calendar date. For example, a night bus running
on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
"""
serviceDates: LocalDateRangeInput,
"Only include routes, which use one of these modes"
transportModes: [Mode]
): [Route]
"Get the time range for which the API has data available"
serviceTimeRange: serviceTimeRange
"Get a single station based on its ID, i.e. value of field `gtfsId` (format is `FeedId:StopId`)"
station(id: String!): Stop
"Get all stations"
stations(
"Only return stations that match one of the ids in this list"
ids: [String],
"Query stations by name"
name: String
): [Stop]
"Get a single stop based on its ID, i.e. value of field `gtfsId` (ID format is `FeedId:StopId`)"
stop(id: String!): Stop
"Get all stops"
stops(
"Return stops with these ids"
ids: [String],
"Query stops by this name"
name: String
): [Stop]
"Get all stops within the specified bounding box"
stopsByBbox(
"List of feed ids from which stops are returned"
feeds: [String!],
"Northern bound of the bounding box"
maxLat: Float!,
"Eastern bound of the bounding box"
maxLon: Float!,
"Southern bound of the bounding box"
minLat: Float!,
"Western bound of the bounding box"
minLon: Float!
): [Stop]
"""
Get all stops within the specified radius from a location. The returned type
is a Relay connection (see
https://facebook.github.io/relay/graphql/connections.htm). The stopAtDistance
type has two values: stop and distance.
"""
stopsByRadius(
after: String,
before: String,
"List of feed ids from which stops are returned"
feeds: [String!],
first: Int,
last: Int,
"Latitude of the location (WGS 84)"
lat: Float!,
"Longitude of the location (WGS 84)"
lon: Float!,
"""
Radius (in meters) to search for from the specified location. Note that this
is walking distance along streets and paths rather than a geographic distance.
"""
radius: Int!
): stopAtDistanceConnection
"Return list of available ticket types"
ticketTypes: [TicketType]
"Get a single trip based on its ID, i.e. value of field `gtfsId` (format is `FeedId:TripId`)"
trip(id: String!): Trip
"Get all trips"
trips(
"Only return trips with these feedIds"
feeds: [String]
): [Trip]
"Get a single vehicle parking based on its ID"
vehicleParking(id: String!): VehicleParking
"Get all vehicle parkings"
vehicleParkings(
"""
Return vehicle parkings with these ids.
**Note:** if an id is invalid (or the vehicle parking service is unavailable)
the returned list will contain `null` values.
"""
ids: [String]
): [VehicleParking]
"Get a single vehicle rental station based on its ID, i.e. value of field `stationId`"
vehicleRentalStation(id: String!): VehicleRentalStation
"Get all vehicle rental stations"
vehicleRentalStations(
"""
Return vehicle rental stations with these ids, i.e. value of field `stationId`.
**Note:** if an id is invalid (or the rental service is unavailable)
the returned list will contain `null` values.
"""
ids: [String]
): [VehicleRentalStation]
"Get all rental vehicles within the specified bounding box"
vehicleRentalsByBbox(
"Northern bound of the bounding box"
maximumLatitude: CoordinateValue!,
"Eastern bound of the bounding box"
maximumLongitude: CoordinateValue!,
"Southern bound of the bounding box"
minimumLatitude: CoordinateValue!,
"Western bound of the bounding box"
minimumLongitude: CoordinateValue!
): [RentalPlace!]!
"Needed until https://github.com/facebook/relay/issues/112 is resolved"
viewer: QueryType
}
"Real-time estimates for a vehicle at a certain place."
type RealTimeEstimate {
"""
The delay or "earliness" of the vehicle at a certain place.
If the vehicle is early then this is a negative duration.
"""
delay: Duration!
time: OffsetDateTime!
}
"Rental vehicle represents a vehicle that belongs to a rental network."
type RentalVehicle implements Node & PlaceInterface {
"If true, vehicle is currently available for renting."
allowPickupNow: Boolean
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the vehicle (WGS 84)"
lat: Float
"Longitude of the vehicle (WGS 84)"
lon: Float
"Name of the vehicle"
name: String!
"ID of the rental network."
network: String @deprecated(reason : "Use `networkId` from `rentalNetwork` instead.")
"If true, vehicle is not disabled."
operative: Boolean
"The vehicle rental network information. This is referred as system in the GBFS terminology."
rentalNetwork: VehicleRentalNetwork!
"Platform-specific URLs to begin the vehicle."
rentalUris: VehicleRentalUris
"ID of the vehicle in the format of network:id"
vehicleId: String
"The type of the rental vehicle (scooter, bicycle, car...)"
vehicleType: RentalVehicleType
}
type RentalVehicleEntityCounts {
"The number of entities by type"
byType: [RentalVehicleTypeCount!]!
"The total number of entities (e.g. vehicles, spaces)."
total: Int!
}
type RentalVehicleType {
"The vehicle's general form factor"
formFactor: FormFactor
"The primary propulsion type of the vehicle"
propulsionType: PropulsionType
}
type RentalVehicleTypeCount {
"The number of vehicles of this type"
count: Int!
"The type of the rental vehicle (scooter, bicycle, car...)"
vehicleType: RentalVehicleType!
}
"An estimate for a ride on a hailed vehicle, like an Uber car."
type RideHailingEstimate {
"The estimated time it takes for the vehicle to arrive."
arrival: Duration!
"The upper bound of the price estimate of this ride."
maxPrice: Money!
"The lower bound of the price estimate of this ride."
minPrice: Money!
"The name of the ride, ie. UberX"
productName: String
"The provider of the ride hailing service."
provider: RideHailingProvider!
}
type RideHailingProvider {
"The ID of the ride hailing provider."
id: String!
}
"Category of riders a fare product applies to, for example students or pensioners."
type RiderCategory {
"ID of the category"
id: String!
"Human readable name of the category."
name: String
}
"""
Route represents a public transportation service, usually from point A to point
B and *back*, shown to customers under a single name, e.g. bus 550. Routes
contain patterns (see field `patterns`), which describe different variants of
the route, e.g. outbound pattern from point A to point B and inbound pattern
from point B to point A.
"""
type Route implements Node {
"Agency operating the route"
agency: Agency
"""
List of alerts which have an effect on the route directly or indirectly.
By default only alerts directly affecting this route are returned. It's also possible
to return other relevant alerts through defining types.
"""
alerts(
"""
Returns alerts for these types that are relevant for the route.
By default only returns alerts that directly affect this route.
"""
types: [RouteAlertType]
): [Alert]
bikesAllowed: BikesAllowed
"""
The color (in hexadecimal format) the agency operating this route would prefer
to use on UI elements (e.g. polylines on a map) related to this route. This
value is not available for most routes.
"""
color: String
desc: String
"ID of the route in format `FeedId:RouteId`"
gtfsId: String!
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Long name of the route, e.g. Helsinki-Leppävaara"
longName(
"""
If translated longName is found from gtfs translation.txt and wanted language is not same as
feed's language then returns wanted translation. Otherwise uses name from routes.txt.
"""
language: String
): String
"Transport mode of this route, e.g. `BUS`"
mode: TransitMode
"List of patterns which operate on this route"
patterns(
"""
Filter patterns by the service dates they operate on.
**Note**: A service date is a technical term useful for transit planning purposes and might not
correspond to a how a passenger thinks of a calendar date. For example, a night bus running
on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
"""
serviceDates: LocalDateRangeInput
): [Pattern]
"Short name of the route, usually a line number, e.g. 550"
shortName: String
"""
Orders the routes in a way which is useful for presentation to passengers.
Routes with smaller values should be displayed first.
The value can be any non-negative integer. A null value means that no information was supplied.
This value is passed through from the source data without modification. If multiple feeds
define sort orders for their routes, they may not be comparable to each other as no agreed scale
exists.
Two routes may also have the same sort order and clients must decide based on other criteria
what the actual order is.
"""
sortOrder: Int
"List of stops on this route"
stops: [Stop]
"""
The color (in hexadecimal format) the agency operating this route would prefer
to use when displaying text related to this route. This value is not available
for most routes.
"""
textColor: String
"List of trips which operate on this route"
trips: [Trip]
"""
The raw GTFS route type as a integer. For the list of possible values, see:
https://developers.google.com/transit/gtfs/reference/#routestxt and
https://developers.google.com/transit/gtfs/reference/extended-route-types
"""
type: Int
url: String
}
"""
Route type entity which covers all agencies if agency is null,
otherwise only relevant for one agency.
"""
type RouteType {
"A public transport agency"
agency: Agency
"""
GTFS Route type.
For the list of possible values, see:
https://developers.google.com/transit/gtfs/reference/#routestxt and
https://developers.google.com/transit/gtfs/reference/extended-route-types
"""
routeType: Int!
"""
The routes which have the defined routeType and belong to the agency, if defined.
Otherwise all routes of the feed that have the defined routeType.
"""
routes: [Route]
}
"Description of the reason, why the planner did not return any results"
type RoutingError {
"An enum describing the reason"
code: RoutingErrorCode!
"A textual description of why the search failed. The clients are expected to have their own translations based on the code, for user visible error messages."
description: String!
"An enum describing the field which should be changed, in order for the search to succeed"
inputField: InputField
}
"""
Stop can represent either a single public transport stop, where passengers can
board and/or disembark vehicles, or a station, which contains multiple stops.
See field `locationType`.
"""
type Stop implements Node & PlaceInterface {
"""
By default, list of alerts which have directly an effect on just the stop.
It's also possible to return other relevant alerts through defining types.
"""
alerts(
"""
Returns alerts for these types that are relevant for the stop.
By default, list of alerts which have directly an effect on just the stop.
"""
types: [StopAlertType]
): [Alert]
"The cluster which this stop is part of"
cluster: Cluster
"Stop code which is visible at the stop"
code: String
"Description of the stop, usually a street name"
desc(
"""
If translated description is found from gtfs translation.txt and wanted language is not same as
feed's language then returns wanted translation. Otherwise uses descriptions from stops.txt.
"""
language: String
): String
direction: String
"""
Representations of this stop's geometry. This is mainly interesting for flex stops which can be
a polygon or a group of stops either consisting of either points or polygons.
Regular fixed-schedule stops return a single point.
Stations (parent stations with child stops) contain a geometry collection with a point for the
central coordinate plus a convex hull polygon (https://en.wikipedia.org/wiki/Convex_hull) of all
coordinates of the child stops.
If there are only two child stops then the convex hull is a straight line between the them. If
there is a single child stop then it's a single point.
"""
geometries: StopGeometries
"ÌD of the stop in format `FeedId:StopId`"
gtfsId: String!
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the stop (WGS 84)"
lat: Float
"Identifies whether this stop represents a stop or station."
locationType: LocationType
"Longitude of the stop (WGS 84)"
lon: Float
"Name of the stop, e.g. Pasilan asema"
name(
"""
If translated name is found from gtfs translation.txt and wanted language is not same as
feed's language then returns wanted translation. Otherwise uses name from stops.txt.
E.g. Swedish name for Pasilan asema is Böle station.
"""
language: String
): String!
"The station which this stop is part of (or null if this stop is not part of a station)"
parentStation: Stop
"Patterns which pass through this stop"
patterns: [Pattern]
"Identifier of the platform, usually a number. This value is only present for stops that are part of a station"
platformCode: String
"Routes which pass through this stop"
routes(
"""
Only include routes which are operational on at least one service date specified by this filter.
**Note**: A service date is a technical term useful for transit planning purposes and might not
correspond to a how a passenger thinks of a calendar date. For example, a night bus running
on Sunday morning at 1am to 3am, might have the previous Saturday's service date.
"""
serviceDates: LocalDateRangeInput
): [Route!]
"Returns timetable of the specified pattern at this stop"
stopTimesForPattern(
"Id of the pattern"
id: String!,
numberOfDepartures: Int = 2,
"If false, returns also canceled trips"
omitCanceled: Boolean = true,
"If true, only those departures which allow boarding are returned"
omitNonPickups: Boolean = false,
"Return departures after this time. Format: Unix timestamp in seconds. Default value: current time"
startTime: Long = 0,
"Return stoptimes within this time range, starting from `startTime`. Unit: Seconds"
timeRange: Int = 86400
): [Stoptime]
"Returns all stops that are children of this station (Only applicable for stations)"
stops: [Stop]
"Returns list of stoptimes (arrivals and departures) at this stop, grouped by patterns"
stoptimesForPatterns(
numberOfDepartures: Int = 5,
"If false, returns also canceled trips"
omitCanceled: Boolean = true,
"If true, only those departures which allow boarding are returned"
omitNonPickups: Boolean = false,
"Return departures after this time. Format: Unix timestamp in seconds. Default value: current time"
startTime: Long = 0,
"Return stoptimes within this time range, starting from `startTime`. Unit: Seconds"
timeRange: Int = 86400
): [StoptimesInPattern]
"Returns list of stoptimes for the specified date"
stoptimesForServiceDate(
"Date in format YYYYMMDD"
date: String,
"If false, returns also canceled trips"
omitCanceled: Boolean = false,
"If true, only those departures which allow boarding are returned"
omitNonPickups: Boolean = false
): [StoptimesInPattern]
"Returns list of stoptimes (arrivals and departures) at this stop"
stoptimesWithoutPatterns(
numberOfDepartures: Int = 5,
"If false, returns also canceled trips"
omitCanceled: Boolean = true,
"If true, only those departures which allow boarding are returned"
omitNonPickups: Boolean = false,
"Return departures after this time. Format: Unix timestamp in seconds. Default value: current time"
startTime: Long = 0,
"Return stoptimes within this time range, starting from `startTime`. Unit: Seconds"
timeRange: Int = 86400
): [Stoptime]
timezone: String
"List of nearby stops which can be used for transfers"
transfers(
"""
Maximum distance to the transfer stop. Defaults to unlimited.
**Note:** only stops that are linked as a transfer stops to this stop are
returned, i.e. this does not do a query to search for *all* stops within
radius of `maxDistance`.
"""
maxDistance: Int
): [stopAtDistance]
url(
"""
If translated url is found from gtfs translation.txt and wanted language is not same as
feed's language then returns wanted translation. Otherwise uses url from stops.txt.
"""
language: String
): String
"""
Transport mode (e.g. `BUS`) used by routes which pass through this stop or
`null` if mode cannot be determined, e.g. in case no routes pass through the stop.
Note that also other types of vehicles may use the stop, e.g. tram replacement
buses might use stops which have `TRAM` as their mode.
"""
vehicleMode: Mode
"""
The raw GTFS route type used by routes which pass through this stop. For the
list of possible values, see:
https://developers.google.com/transit/gtfs/reference/#routestxt and
https://developers.google.com/transit/gtfs/reference/extended-route-types
"""
vehicleType: Int
"Whether wheelchair boarding is possible for at least some of vehicles on this stop"
wheelchairBoarding: WheelchairBoarding
"ID of the zone where this stop is located"
zoneId: String
}
type StopGeometries {
"Representation of the stop geometries as GeoJSON (https://geojson.org/)"
geoJson: GeoJson
"""
Representation of a stop as a series of polylines.
Polygons of flex stops are represented as linear rings (lines where the first and last point are the same).
Proper stops are represented as single point "lines".
"""
googleEncoded: [Geometry]
}
"Stop that should (but not guaranteed) to exist on a route."
type StopOnRoute {
"Route which contains the stop."
route: Route!
"Stop at the route. It's also possible that the stop is no longer on the route."
stop: Stop!
}
"Stop that should (but not guaranteed) to exist on a trip."
type StopOnTrip {
"Stop at the trip. It's also possible that the stop is no longer on the trip."
stop: Stop!
"Trip which contains the stop."
trip: Trip!
}
"Upcoming or current stop and how close the vehicle is to it."
type StopRelationship {
"How close the vehicle is to `stop`"
status: VehicleStopStatus!
stop: Stop!
}
"Stoptime represents the time when a specific trip arrives to or departs from a specific stop."
type Stoptime {
"""
The offset from the scheduled arrival time in seconds. Negative values
indicate that the trip is running ahead of schedule.
"""
arrivalDelay: Int
"""
The offset from the scheduled departure time in seconds. Negative values
indicate that the trip is running ahead of schedule
"""
departureDelay: Int
"""
Whether the vehicle can be disembarked at this stop. This field can also be
used to indicate if disembarkation is possible only with special arrangements.
"""
dropoffType: PickupDropoffType
"""
Vehicle headsign of the trip on this stop. Trip headsigns can change during
the trip (e.g. on routes which run on loops), so this value should be used
instead of `tripHeadsign` to display the headsign relevant to the user.
"""
headsign(
"""
If translated headsign is found from gtfs translation.txt and wanted language is not same as
feed's language then returns wanted translation. Otherwise uses name from trip_headsign.txt.
"""
language: String
): String
"""
Whether the vehicle can be boarded at this stop. This field can also be used
to indicate if boarding is possible only with special arrangements.
"""
pickupType: PickupDropoffType
"true, if this stoptime has real-time data available"
realtime: Boolean
"Real-time prediction of arrival time. Format: seconds since midnight of the departure date"
realtimeArrival: Int
"Real-time prediction of departure time. Format: seconds since midnight of the departure date"
realtimeDeparture: Int
"State of real-time data"
realtimeState: RealtimeState
"Scheduled arrival time. Format: seconds since midnight of the departure date"
scheduledArrival: Int
"Scheduled departure time. Format: seconds since midnight of the departure date"
scheduledDeparture: Int
"Departure date of the trip. Format: Unix timestamp (local time) in seconds."
serviceDay: Long
"The stop where this arrival/departure happens"
stop: Stop
"""
The sequence of the stop in the trip. This is not required to start from 0 or be consecutive - any
increasing integer sequence along the stops is valid.
The purpose of this field is to identify the stop within the trip so it can be cross-referenced
between it and the itinerary. It is safe to cross-reference when done quickly, i.e. within seconds.
However, it should be noted that real-time updates can change the values, so don't store it for
longer amounts of time.
Depending on the source data, this might not be the GTFS `stop_sequence` but another value, perhaps
even generated.
"""
stopPosition: Int
"""
The position of the stop in the pattern. This is required to start from 0 and be consecutive along
the pattern, up to n-1 for a pattern with n stops.
The purpose of this field is to identify the position of the stop within the pattern so it can be
cross-referenced between different trips on the same pattern, as stopPosition can be different
between trips even within the same pattern.
"""
stopPositionInPattern: Int!
"true, if this stop is used as a time equalization stop. false otherwise."
timepoint: Boolean
"Trip which this stoptime is for"
trip: Trip
}
"Stoptimes grouped by pattern"
type StoptimesInPattern {
pattern: Pattern
stoptimes: [Stoptime]
}
"""
A system notice is used to tag elements with system information for debugging
or other system related purpose. One use-case is to run a routing search with
'debugItineraryFilter: true'. This will then tag itineraries instead of removing
them from the result. This make it possible to inspect the itinerary-filter-chain.
A SystemNotice only has english text,
because the primary user are technical staff, like testers and developers.
"""
type SystemNotice {
"Notice's tag"
tag: String
"Notice's description"
text: String
}
"Describes ticket type"
type TicketType implements Node {
"ISO 4217 currency code"
currency: String
"""
Ticket type ID in format `FeedId:TicketTypeId`. Ticket type IDs are usually
combination of ticket zones where the ticket is valid.
"""
fareId: String!
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Price of the ticket in currency that is specified in `currency` field"
price: Float
"""
List of zones where this ticket is valid.
Corresponds to field `zoneId` in **Stop** type.
"""
zones: [String!]
}
"Text with language"
type TranslatedString {
"Two-letter language code (ISO 639-1)"
language: String
text: String
}
"Trip is a specific occurance of a pattern, usually identified by route, direction on the route and exact departure time."
type Trip implements Node {
"List of dates when this trip is in service. Format: YYYYMMDD"
activeDates: [String]
"""
By default, list of alerts which have directly an effect on just the trip.
It's also possible to return other relevant alerts through defining types.
"""
alerts(
"""
Returns alerts for these types that are relevant for the trip.
By default, list of alerts which have directly an effect on just the trip.
"""
types: [TripAlertType]
): [Alert]
"Arrival time to the final stop"
arrivalStoptime(
"""
Date for which the arrival time is returned. Format: YYYYMMDD. If this
argument is not used, field `serviceDay` in the stoptime will have a value of 0.
"""
serviceDate: String
): Stoptime
"Whether bikes are allowed on board the vehicle running this trip"
bikesAllowed: BikesAllowed
blockId: String
"Departure time from the first stop"
departureStoptime(
"""
Date for which the departure time is returned. Format: YYYYMMDD. If this
argument is not used, field `serviceDay` in the stoptime will have a value of 0.
"""
serviceDate: String
): Stoptime
"""
Direction code of the trip, i.e. is this the outbound or inbound trip of a
pattern. Possible values: 0, 1 or `null` if the direction is irrelevant, i.e.
the pattern has trips only in one direction.
"""
directionId: String
"List of coordinates of this trip's route"
geometry: [[Float]]
"ID of the trip in format `FeedId:TripId`"
gtfsId: String!
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"""
The latest real-time occupancy information for the latest occurance of this
trip.
"""
occupancy: TripOccupancy
"The pattern the trip is running on"
pattern: Pattern
"The route the trip is running on"
route: Route!
"Short name of the route this trip is running. See field `shortName` of Route."
routeShortName: String
"Hash code of the trip. This value is stable and not dependent on the trip id."
semanticHash: String!
serviceId: String
shapeId: String
"List of stops this trip passes through"
stops: [Stop!]!
"List of times when this trip arrives to or departs from a stop"
stoptimes: [Stoptime]
stoptimesForDate(
"Date for which stoptimes are returned. Format: YYYYMMDD"
serviceDate: String
): [Stoptime]
"Coordinates of the route of this trip in Google polyline encoded format"
tripGeometry: Geometry
"Headsign of the vehicle when running on this trip"
tripHeadsign(
"""
If a translated headsign is found from GTFS translation.txt and wanted language is not same as
feed's language then returns wanted translation. Otherwise uses name from trip_headsign.txt.
"""
language: String
): String
tripShortName: String
"Whether the vehicle running this trip can be boarded by a wheelchair"
wheelchairAccessible: WheelchairBoarding
}
"""
Occupancy of a vehicle on a trip. This should include the most recent occupancy information
available for a trip. Historic data might not be available.
"""
type TripOccupancy {
"Occupancy information mapped to a limited set of descriptive states."
occupancyStatus: OccupancyStatus
}
"This is used for alert entities that we don't explicitly handle or they are missing."
type Unknown {
"Entity's description"
description: String
}
"Vehicle parking represents a location where bicycles or cars can be parked."
type VehicleParking implements Node & PlaceInterface {
"""
Does this vehicle parking have spaces (capacity) for either wheelchair accessible (disabled)
or normal cars.
"""
anyCarPlaces: Boolean
"The currently available spaces at this vehicle parking."
availability: VehicleParkingSpaces
"Does this vehicle parking have spaces (capacity) for bicycles."
bicyclePlaces: Boolean
"The capacity (maximum available spaces) of this vehicle parking."
capacity: VehicleParkingSpaces
"""
Does this vehicle parking have spaces (capacity) for cars excluding wheelchair accessible spaces.
Use anyCarPlaces to check if any type of car may use this vehicle parking.
"""
carPlaces: Boolean
"URL which contains details of this vehicle parking."
detailsUrl: String
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"URL of an image which may be displayed to the user showing the vehicle parking."
imageUrl: String
"Latitude of the bike park (WGS 84)"
lat: Float
"Longitude of the bike park (WGS 84)"
lon: Float
"Name of the park"
name(
"Returns name with the specified language, if found, otherwise returns with some default language."
language: String
): String!
"A short translatable note containing details of this vehicle parking."
note(
"Returns note with the specified language, if found, otherwise returns with some default language."
language: String
): String
"Opening hours of the parking facility"
openingHours: OpeningHours
"If true, value of `spacesAvailable` is updated from a real-time source."
realtime: Boolean
"""
The state of this vehicle parking.
Only ones in an OPERATIONAL state may be used for Park and Ride.
"""
state: VehicleParkingState
"""
Source specific tags of the vehicle parking, which describe the available features. For example
park_and_ride, bike_lockers, or static_osm_data.
"""
tags: [String]
"ID of the park"
vehicleParkingId: String
"Does this vehicle parking have wheelchair accessible (disabled) car spaces (capacity)."
wheelchairAccessibleCarPlaces: Boolean
}
"The number of spaces by type. null if unknown."
type VehicleParkingSpaces {
"The number of bicycle spaces."
bicycleSpaces: Int
"The number of car spaces."
carSpaces: Int
"The number of wheelchair accessible (disabled) car spaces."
wheelchairAccessibleCarSpaces: Int
}
"Real-time vehicle position"
type VehiclePosition {
"""
Bearing, in degrees, clockwise from North, i.e., 0 is North and 90 is East. This can be the
compass bearing, or the direction towards the next stop or intermediate location.
"""
heading: Float
"Human-readable label of the vehicle, eg. a publicly visible number or a license plate"
label: String
"When the position of the vehicle was recorded in seconds since the UNIX epoch."
lastUpdated: Long
"Latitude of the vehicle"
lat: Float
"Longitude of the vehicle"
lon: Float
"Speed of the vehicle in meters/second"
speed: Float
"The current stop where the vehicle will be or is currently arriving."
stopRelationship: StopRelationship
"Which trip this vehicles runs on."
trip: Trip!
"Feed-scoped ID that uniquely identifies the vehicle in the format FeedId:VehicleId"
vehicleId: String
}
"""
Vehicle rental network, which is referred as system in the GBFS terminology. Note, the same operator can operate in multiple
regions either with the same network/system or with a different one. This can contain information about either the rental brand
or about the operator.
"""
type VehicleRentalNetwork {
"""
ID of the vehicle rental network. In GBFS, this is the `system_id` field from the system information, but it can
be overridden in the configuration to have a different value so this field doesn't necessarily match the source data.
"""
networkId: String!
"The rental vehicle operator's network/system URL. In GBFS, this is the `url` field from the system information."
url: String
}
"Vehicle rental station represents a location where users can rent bicycles etc. for a fee."
type VehicleRentalStation implements Node & PlaceInterface {
"""
If true, vehicles can be returned to this station if the station has spaces available
or allows overloading.
"""
allowDropoff: Boolean
"If true, vehicles can be currently returned to this station."
allowDropoffNow: Boolean
"If true, vehicles can be returned even if spacesAvailable is zero or vehicles > capacity."
allowOverloading: Boolean
"If true, vehicles can be picked up from this station if the station has vehicles available."
allowPickup: Boolean
"If true, vehicles can be currently picked up from this station."
allowPickupNow: Boolean
"Number of free spaces currently available on the rental station, grouped by vehicle type."
availableSpaces: RentalVehicleEntityCounts
"Number of vehicles currently available on the rental station, grouped by vehicle type."
availableVehicles: RentalVehicleEntityCounts
"Nominal capacity (number of racks) of the rental station."
capacity: Int
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
"Latitude of the vehicle rental station (WGS 84)"
lat: Float
"Longitude of the vehicle rental station (WGS 84)"
lon: Float
"Name of the vehicle rental station"
name: String!
"ID of the rental network."
network: String @deprecated(reason : "Use `networkId` from `rentalNetwork` instead.")
"If true, station is on and in service."
operative: Boolean
"""
If true, values of `vehiclesAvailable` and `spacesAvailable` are updated from a
real-time source. If false, values of `vehiclesAvailable` and `spacesAvailable`
are always the total capacity divided by two.
"""
realtime: Boolean
"The vehicle rental network information. This is referred as system in the GBFS terminology."
rentalNetwork: VehicleRentalNetwork!
"Platform-specific URLs to begin renting a vehicle from this station."
rentalUris: VehicleRentalUris
"""
Number of free spaces currently available on the rental station.
Note that this value being 0 does not necessarily indicate that vehicles cannot be returned
to this station, as for example it might be possible to leave the vehicle in the vicinity of
the rental station, even if the vehicle racks don't have any spaces available.
See field `allowDropoffNow` to know if is currently possible to return a vehicle.
"""
spacesAvailable: Int @deprecated(reason : "Use `availableSpaces` instead, which also contains the space vehicle types")
"ID of the vehicle in the format of network:id"
stationId: String
"""
Number of vehicles currently available on the rental station.
See field `allowPickupNow` to know if is currently possible to pick up a vehicle.
"""
vehiclesAvailable: Int @deprecated(reason : "Use `availableVehicles` instead, which also contains vehicle types")
}
type VehicleRentalUris {
"""
A URI that can be passed to an Android app with an {@code android.intent.action.VIEW} Android
intent to support Android Deep Links.
May be null if a rental URI does not exist.
"""
android: String
"""
A URI that can be used on iOS to launch the rental app for this rental network.
May be {@code null} if a rental URI does not exist.
"""
ios: String
"""
A URL that can be used by a web browser to show more information about renting a vehicle.
May be {@code null} if a rental URL does not exist.
"""
web: String
}
type debugOutput {
pathCalculationTime: Long
precalculationTime: Long
renderingTime: Long
timedOut: Boolean
totalTime: Long
}
type elevationProfileComponent {
"The distance from the start of the step, in meters."
distance: Float
"The elevation at this distance, in meters."
elevation: Float
}
"""
This type is only here for backwards-compatibility and this API will never return it anymore.
Please use the leg's `fareProducts` instead.
"""
type fare {
"""
Fare price in cents. **Note:** this value is dependent on the currency used,
as one cent is not necessarily ¹/ of the basic monerary unit.
"""
cents: Int @deprecated(reason : "No longer supported")
"Components which this fare is composed of"
components: [fareComponent] @deprecated(reason : "No longer supported")
"ISO 4217 currency code"
currency: String @deprecated(reason : "No longer supported")
type: String @deprecated(reason : "No longer supported")
}
"""
This type is only here for backwards-compatibility and this API will never return it anymore.
Please use the leg's `fareProducts` instead.
"""
type fareComponent {
"""
Fare price in cents. **Note:** this value is dependent on the currency used,
as one cent is not necessarily ¹/ of the basic monerary unit.
"""
cents: Int @deprecated(reason : "No longer supported")
"ISO 4217 currency code"
currency: String @deprecated(reason : "No longer supported")
"ID of the ticket type. Corresponds to `fareId` in **TicketType**."
fareId: String @deprecated(reason : "No longer supported")
"List of routes which use this fare component"
routes: [Route] @deprecated(reason : "No longer supported")
}
type placeAtDistance implements Node {
"Walking distance to the place along streets and paths"
distance: Int
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
place: PlaceInterface
}
"A connection to a list of items."
type placeAtDistanceConnection {
edges: [placeAtDistanceEdge]
pageInfo: PageInfo!
}
"An edge in a connection."
type placeAtDistanceEdge {
cursor: String!
"The item at the end of the edge"
node: placeAtDistance
}
"Time range for which the API has data available"
type serviceTimeRange {
"Time until which the API has data available. Format: Unix timestamp in seconds"
end: Long
"Time from which the API has data available. Format: Unix timestamp in seconds"
start: Long
}
type Entrance {
publicCode: String
wheelchairAccessible: Boolean
}
union StepFeature = Entrance
type step {
"The cardinal (compass) direction (e.g. north, northeast) taken when engaging this step."
absoluteDirection: AbsoluteDirection
"A list of alerts (e.g. construction, detours) applicable to the step."
alerts: [Alert]
"""
This step is on an open area, such as a plaza or train platform,
and thus the directions should say something like "cross".
"""
area: Boolean
"""
The name of this street was generated by the system, so we should only display it once, and
generally just display right/left directions
"""
bogusName: Boolean
"The distance in meters that this step takes."
distance: Float
"The elevation profile as a list of { distance, elevation } values."
elevationProfile: [elevationProfileComponent]
"When exiting a highway or traffic circle, the exit name/number."
exit: String
"The latitude of the start of the step."
lat: Float
"The longitude of the start of the step."
lon: Float
"The relative direction (e.g. left or right turn) to take when engaging this step."
relativeDirection: RelativeDirection
"Indicates whether or not a street changes direction at an intersection."
stayOn: Boolean
"The name of the street, road, or path taken for this step."
streetName: String
"Is this step walking with a bike?"
walkingBike: Boolean
"Feature of a step"
feature: StepFeature
}
type stopAtDistance implements Node {
"Walking distance to the stop along streets and paths"
distance: Int
"Global object ID provided by Relay. This value can be used to refetch this object using **node** query."
id: ID!
stop: Stop
}
"A connection to a list of items."
type stopAtDistanceConnection {
edges: [stopAtDistanceEdge]
pageInfo: PageInfo!
}
"An edge in a connection."
type stopAtDistanceEdge {
cursor: String!
"The item at the end of the edge"
node: stopAtDistance
}
"The cardinal (compass) direction taken when engaging a walking/driving step."
enum AbsoluteDirection {
EAST
NORTH
NORTHEAST
NORTHWEST
SOUTH
SOUTHEAST
SOUTHWEST
WEST
}
"Entities, which are relevant for an agency and can contain alerts"
enum AgencyAlertType {
"Alerts affecting the agency."
AGENCY
"Alerts affecting agency's routes"
ROUTES
"""
Alerts affecting the different route types of the agency.
Alerts that affect route types on all agencies can be fetched through Feed.
"""
ROUTE_TYPES
}
"Cause of a alert"
enum AlertCauseType {
"ACCIDENT"
ACCIDENT
"CONSTRUCTION"
CONSTRUCTION
"DEMONSTRATION"
DEMONSTRATION
"HOLIDAY"
HOLIDAY
"MAINTENANCE"
MAINTENANCE
"MEDICAL_EMERGENCY"
MEDICAL_EMERGENCY
"OTHER_CAUSE"
OTHER_CAUSE
"POLICE_ACTIVITY"
POLICE_ACTIVITY
"STRIKE"
STRIKE
"TECHNICAL_PROBLEM"
TECHNICAL_PROBLEM
"UNKNOWN_CAUSE"
UNKNOWN_CAUSE
"WEATHER"
WEATHER
}
"Effect of a alert"
enum AlertEffectType {
"ACCESSIBILITY_ISSUE"
ACCESSIBILITY_ISSUE
"ADDITIONAL_SERVICE"
ADDITIONAL_SERVICE
"DETOUR"
DETOUR
"MODIFIED_SERVICE"
MODIFIED_SERVICE
"NO_EFFECT"
NO_EFFECT
"NO_SERVICE"
NO_SERVICE
"OTHER_EFFECT"
OTHER_EFFECT
"REDUCED_SERVICE"
REDUCED_SERVICE
"SIGNIFICANT_DELAYS"
SIGNIFICANT_DELAYS
"STOP_MOVED"
STOP_MOVED
"UNKNOWN_EFFECT"
UNKNOWN_EFFECT
}
"Severity level of a alert"
enum AlertSeverityLevelType {
"""
Info alerts are used for informational messages that should not have a
significant effect on user's journey, for example: A single entrance to a
metro station is temporarily closed.
"""
INFO
"""
Severe alerts are used when a significant part of public transport services is
affected, for example: All train services are cancelled due to technical problems.
"""
SEVERE
"Severity of alert is unknown"
UNKNOWN_SEVERITY
"""
Warning alerts are used when a single stop or route has a disruption that can
affect user's journey, for example: All trams on a specific route are running
with irregular schedules.
"""
WARNING
}
enum BikesAllowed {
"The vehicle being used on this particular trip can accommodate at least one bicycle."
ALLOWED
"No bicycles are allowed on this trip."
NOT_ALLOWED
"There is no bike information for the trip."
NO_INFORMATION
}
"""
Predefined optimization alternatives for bicycling routing. For more customization,
one can use the triangle factors.
"""
enum CyclingOptimizationType {
"Emphasize flatness over safety or duration of the route. This option was previously called `FLAT`."
FLAT_STREETS
"""
Completely ignore the elevation differences and prefer the streets, that are evaluated
to be the safest, even more than with the `SAFE_STREETS` option.
Safety can also include other concerns such as convenience and general cyclist preferences
by taking into account road surface etc. This option was previously called `GREENWAYS`.
"""
SAFEST_STREETS
"""
Emphasize cycling safety over flatness or duration of the route. Safety can also include other
concerns such as convenience and general cyclist preferences by taking into account
road surface etc. This option was previously called `SAFE`.
"""
SAFE_STREETS
"""
Search for routes with the shortest duration while ignoring the cycling safety
of the streets (the routes should still follow local regulations). Routes can include
steep streets, if they are the fastest alternatives. This option was previously called
`QUICK`.
"""
SHORTEST_DURATION
}
"Entities, which are relevant for a feed and can contain alerts"
enum FeedAlertType {
"Alerts affecting the feed's agencies"
AGENCIES
"""
Alerts affecting the route types across the feed.
There might be alerts that only affect route types within an agency of the feed,
and those can be fetched through the Agency.
"""
ROUTE_TYPES
}
enum FilterPlaceType {
"Old value for VEHICLE_RENT"
BICYCLE_RENT @deprecated(reason : "Use VEHICLE_RENT instead as it's clearer that it also returns rental scooters, cars...")
"Parking lots (not rental stations) that contain spaces for bicycles"
BIKE_PARK
"Parking lots that contain spaces for cars"
CAR_PARK
"Departure rows"
DEPARTURE_ROW
"""
Stations.
NOTE: if this is selected at the same time as `STOP`, stops that have a parent station will not be returned but their parent stations will be returned instead.
"""
STATION
"""
Stops.
NOTE: if this is selected at the same time as `STATION`, stops that have a parent station will not be returned but their parent stations will be returned instead.
"""
STOP
"Vehicle (bicycles, scooters, cars ...) rental stations and vehicles"
VEHICLE_RENT
}
enum FormFactor {
"A bicycle"
BICYCLE
"An automobile"
CAR
"A bicycle with additional space for cargo"
CARGO_BICYCLE
"A moped that the rider sits on. For a disambiguation see https://github.com/NABSA/gbfs/pull/370#issuecomment-982631989"
MOPED
"A vehicle that doesn't fit into any other category"
OTHER
"A kick scooter that the rider either sits or stands on. Will be deprecated in GBFS v3.0."
SCOOTER
"A kick scooter with a seat"
SCOOTER_SEATED
"A kick scooter that the rider stands on"
SCOOTER_STANDING
}
enum InputField {
DATE_TIME
FROM
TO
}
"""
Enable this to attach a system notice to itineraries instead of removing them. This is very
convenient when tuning the itinerary-filter-chain.
"""
enum ItineraryFilterDebugProfile {
"""
Only return the requested number of itineraries, counting both actual and deleted ones.
The top `numItineraries` using the request sort order is returned. This does not work
with paging, itineraries after the limit, but inside the search-window are skipped when
moving to the next page.
"""
LIMIT_TO_NUMBER_OF_ITINERARIES
"""
Return all itineraries, including deleted ones, inside the actual search-window used
(the requested search-window may differ).
"""
LIMIT_TO_SEARCH_WINDOW
"List all itineraries, including all deleted itineraries."
LIST_ALL
"By default, the debug itinerary filters is turned off."
OFF
}
"Identifies whether this stop represents a stop or station."
enum LocationType {
ENTRANCE
"A physical structure or area that contains one or more stop."
STATION
"A location where passengers board or disembark from a transit vehicle."
STOP
}
enum Mode {
"AIRPLANE"
AIRPLANE
"BICYCLE"
BICYCLE
"BUS"
BUS
"CABLE_CAR"
CABLE_CAR
"CAR"
CAR
"Private car trips shared with others."
CARPOOL
"COACH"
COACH
"FERRY"
FERRY
"Enables flexible transit for access and egress legs"
FLEX
"Enables flexible transit for access and egress legs"
FLEXIBLE @deprecated(reason : "Use FLEX instead")
"FUNICULAR"
FUNICULAR
"GONDOLA"
GONDOLA
"Only used internally. No use for API users."
LEG_SWITCH @deprecated(reason : "No longer supported")
"Railway in which the track consists of a single rail or a beam."
MONORAIL
"RAIL"
RAIL
"SCOOTER"
SCOOTER
"SUBWAY"
SUBWAY
"A taxi, possibly operated by a public transport agency."
TAXI
"TRAM"
TRAM
"A special transport mode, which includes all public transport."
TRANSIT
"Electric buses that draw power from overhead wires using poles."
TROLLEYBUS
"WALK"
WALK
}
"Occupancy status of a vehicle."
enum OccupancyStatus {
"""
The vehicle or carriage can currently accommodate only standing passengers and has limited
space for them. There isn't a big difference between this and FULL so it's possible to handle
them as the same value, if one wants to limit the number of different values.
SIRI nordic profile: merge into `STANDING_ROOM_ONLY`.
"""
CRUSHED_STANDING_ROOM_ONLY
"""
The vehicle is considered empty by most measures, and has few or no passengers onboard, but is
still accepting passengers. There isn't a big difference between this and MANY_SEATS_AVAILABLE
so it's possible to handle them as the same value, if one wants to limit the number of different
values.
SIRI nordic profile: merge these into `MANY_SEATS_AVAILABLE`.
"""
EMPTY
"""
The vehicle or carriage has a small number of seats available. The amount of free seats out of
the total seats available to be considered small enough to fall into this category is
determined at the discretion of the producer.
SIRI nordic profile: less than ~50% of seats available.
"""
FEW_SEATS_AVAILABLE
"""
The vehicle is considered full by most measures, but may still be allowing passengers to
board.
"""
FULL
"""
The vehicle or carriage has a large number of seats available. The amount of free seats out of
the total seats available to be considered large enough to fall into this category is
determined at the discretion of the producer. There isn't a big difference between this and
EMPTY so it's possible to handle them as the same value, if one wants to limit the number of
different values.
SIRI nordic profile: more than ~50% of seats available.
"""
MANY_SEATS_AVAILABLE
"""
The vehicle or carriage is not accepting passengers.
SIRI nordic profile: if vehicle/carriage is not in use / unavailable, or passengers are only allowed
to alight due to e.g. crowding.
"""
NOT_ACCEPTING_PASSENGERS
"Default. There is no occupancy-data on this departure."
NO_DATA_AVAILABLE
"""
The vehicle or carriage can currently accommodate only standing passengers.
SIRI nordic profile: less than ~10% of seats available.
"""
STANDING_ROOM_ONLY
}
"Optimization type for bicycling legs"
enum OptimizeType {
"Prefer flat terrain"
FLAT
"GREENWAYS"
GREENWAYS
"Prefer faster routes"
QUICK
"Prefer safer routes, i.e. avoid crossing streets and use bike paths when possible"
SAFE
"**TRIANGLE** optimization type can be used to set relative preferences of optimization factors. See argument `triangle`."
TRIANGLE
}
"Entities, which are relevant for a pattern and can contain alerts"
enum PatternAlertType {
"Alerts affecting the pattern's route's agency"
AGENCY
"Alerts affecting the pattern"
PATTERN
"Alerts affecting the route that the pattern runs on"
ROUTE
"Alerts affecting the route type of the route that the pattern runs on"
ROUTE_TYPE
"Alerts affecting the stops which are on this pattern"
STOPS_ON_PATTERN
"Alerts affecting the stops of the trips which run on this pattern"
STOPS_ON_TRIPS
"Alerts affecting the trips which run on this pattern"
TRIPS
}
enum PickupDropoffType {
"Must phone agency to arrange pickup / drop off."
CALL_AGENCY
"Must coordinate with driver to arrange pickup / drop off."
COORDINATE_WITH_DRIVER
"No pickup / drop off available."
NONE
"Regularly scheduled pickup / drop off."
SCHEDULED
}
"Street modes that can be used for access to the transit network from origin."
enum PlanAccessMode {
"""
Cycling to a stop and boarding a vehicle with the bicycle.
Note, this can include walking when it's needed to walk the bicycle.
Access can use cycling only if the mode used for transfers
and egress is also `BICYCLE`.
"""
BICYCLE
"""
Starting the itinerary with a bicycle and parking the bicycle to
a parking location. Note, this can include walking after parking
the bicycle or when it's needed to walk the bicycle.
"""
BICYCLE_PARKING
"""
Bicycle rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, access will include only walking. Also, this
can include walking before picking up or after dropping off the
bicycle or when it's needed to walk the bicycle.
"""
BICYCLE_RENTAL
"""
Driving to a stop and boarding a vehicle with the car.
Access can use driving only if the mode used for transfers
and egress is also `CAR`.
"""
CAR
"""
Getting dropped off by a car to a location that is accessible with a car.
Note, this can include walking after the drop-off.
"""
CAR_DROP_OFF
"""
Starting the itinerary with a car and parking the car to a parking location.
Note, this can include walking after parking the car.
"""
CAR_PARKING
"""
Car rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, access will include only walking. Also, this
can include walking before picking up or after dropping off the
car.
"""
CAR_RENTAL
"""
Flexible transit. This can include different forms of flexible transit that
can be defined in GTFS-Flex or in Netex. Note, this can include walking before
or after the flexible transit leg.
"""
FLEX
"""
Scooter rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, access will include only walking. Also, this
can include walking before picking up or after dropping off the
scooter.
"""
SCOOTER_RENTAL
"Walking to a stop."
WALK
}
"Street mode that is used when searching for itineraries that don't use any transit."
enum PlanDirectMode {
"""
Cycling from the origin to the destination. Note, this can include walking
when it's needed to walk the bicycle.
"""
BICYCLE
"""
Starting the itinerary with a bicycle and parking the bicycle to
a parking location. Note, this can include walking after parking
the bicycle or when it's needed to walk the bicycle.
"""
BICYCLE_PARKING
"""
Bicycle rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, itinerary will include only walking.
Also, it can include walking before picking up or after dropping off the
bicycle or when it's needed to walk the bicycle.
"""
BICYCLE_RENTAL
"Driving a car from the origin to the destination."
CAR
"""
Starting the itinerary with a car and parking the car to a parking location.
Note, this can include walking after parking the car.
"""
CAR_PARKING
"""
Car rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, itinerary will include only walking. Also, this
can include walking before picking up or after dropping off the
car.
"""
CAR_RENTAL
"""
Flexible transit. This can include different forms of flexible transit that
can be defined in GTFS-Flex or in Netex. Note, this can include walking before
or after the flexible transit leg.
"""
FLEX
"""
Scooter rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, itinerary will include only walking. Also, this
can include walking before picking up or after dropping off the
scooter.
"""
SCOOTER_RENTAL
"""
Walking from the origin to the destination. Note, this can include walking
when it's needed to walk the bicycle.
"""
WALK
}
"Street modes that can be used for egress from the transit network to destination."
enum PlanEgressMode {
"""
Cycling from a stop to the destination. Note, this can include walking when
it's needed to walk the bicycle. Egress can use cycling only if the mode used
for access and transfers is also `BICYCLE`.
"""
BICYCLE
"""
Bicycle rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, egress will include only walking. Also, this
can include walking before picking up or after dropping off the
bicycle or when it's needed to walk the bicycle.
"""
BICYCLE_RENTAL
"""
Driving from a stop to the destination. Egress can use driving only if the mode
used for access and transfers is also `CAR`.
"""
CAR
"""
Getting picked up by a car from a location that is accessible with a car.
Note, this can include walking before the pickup.
"""
CAR_PICKUP
"""
Car rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, egress will include only walking. Also, this
can include walking before picking up or after dropping off the
car.
"""
CAR_RENTAL
"""
Flexible transit. This can include different forms of flexible transit that
can be defined in GTFS-Flex or in Netex. Note, this can include walking before
or after the flexible transit leg.
"""
FLEX
"""
Scooter rental can use either station based systems or "floating"
vehicles which are not linked to a rental station. Note, if there are no
rental options available, egress will include only walking. Also, this
can include walking before picking up or after dropping off the
scooter.
"""
SCOOTER_RENTAL
"Walking from a stop to the destination."
WALK
}
enum PlanTransferMode {
"""
Cycling between transit vehicles (typically between stops). Note, this can
include walking when it's needed to walk the bicycle. Transfers can only use
cycling if the mode used for access and egress is also `BICYCLE`.
"""
BICYCLE
"""
Driving between transit vehicles. Transfers can only use driving if the mode
used for access and egress is also `CAR`.
"""
CAR
"Walking between transit vehicles (typically between stops)."
WALK
}
enum PropulsionType {
"Powered by gasoline combustion engine"
COMBUSTION
"Powered by diesel combustion engine"
COMBUSTION_DIESEL
"Powered by battery-powered electric motor with throttle mode"
ELECTRIC
"Provides electric motor assist only in combination with human propulsion - no throttle mode"
ELECTRIC_ASSIST
"Pedal or foot propulsion"
HUMAN
"Powered by combined combustion engine and battery-powered motor"
HYBRID
"Powered by hydrogen fuel cell powered electric motor"
HYDROGEN_FUEL_CELL
"Powered by combined combustion engine and battery-powered motor with plug-in charging"
PLUG_IN_HYBRID
}
"""
Additional qualifier for a transport mode.
Note that qualifiers can only be used with certain transport modes.
"""
enum Qualifier {
"The mode is used for the access part of the search."
ACCESS
"The mode is used for the direct street search."
DIRECT
"The user can be dropped off by someone else riding a vehicle"
DROPOFF
"The mode is used for the egress part of the search."
EGRESS
"Hailing a ride, for example via an app like Uber."
HAIL
"""
~~HAVE~~
**Currently not used**
"""
HAVE @deprecated(reason : "Currently not used")
"""
~~KEEP~~
**Currently not used**
"""
KEEP @deprecated(reason : "Currently not used")
"""
The vehicle used must be left to a parking area before continuing the journey.
This qualifier is usable with transport modes `CAR` and `BICYCLE`.
Note that the vehicle is only parked if the journey is continued with public
transportation (e.g. if only `CAR` and `WALK` transport modes are allowed to
be used, the car will not be parked as it is used for the whole journey).
"""
PARK
"The user can be picked up by someone else riding a vehicle"
PICKUP
"The vehicle used for transport can be rented"
RENT
}
enum RealtimeState {
"The trip has been added using a real-time update, i.e. the trip was not present in the GTFS feed."
ADDED
"The trip has been canceled by a real-time update."
CANCELED
"""
The trip information has been updated and resulted in a different trip pattern
compared to the trip pattern of the scheduled trip.
"""
MODIFIED
"The trip information comes from the GTFS feed, i.e. no real-time update has been applied."
SCHEDULED
"The trip information has been updated, but the trip pattern stayed the same as the trip pattern of the scheduled trip."
UPDATED
}
"Actions to take relative to the current position when engaging a walking/driving step."
enum RelativeDirection {
CIRCLE_CLOCKWISE
CIRCLE_COUNTERCLOCKWISE
CONTINUE
DEPART
ELEVATOR
ENTER_STATION
EXIT_STATION
FOLLOW_SIGNS
HARD_LEFT
HARD_RIGHT
LEFT
RIGHT
SLIGHTLY_LEFT
SLIGHTLY_RIGHT
UTURN_LEFT
UTURN_RIGHT
}
"Entities that are relevant for routes that can contain alerts"
enum RouteAlertType {
"Alerts affecting the route's agency."
AGENCY
"Alerts affecting route's patterns."
PATTERNS
"Alerts directly affecting the route."
ROUTE
"Alerts affecting the route type of the route."
ROUTE_TYPE
"Alerts affecting the stops that are on the route."
STOPS_ON_ROUTE
"Alerts affecting the stops on some trips of the route."
STOPS_ON_TRIPS
"Alerts affecting the route's trips."
TRIPS
}
enum RoutingErrorCode {
"""
The specified location is not close to any streets or transit stops currently loaded into the
system, even though it is generally within its bounds.
This can happen when there is only transit but no street data coverage at the location in
question.
"""
LOCATION_NOT_FOUND
"""
No stops are reachable from the start or end locations specified.
You can try searching using a different access or egress mode, for example cycling instead of walking,
increase the walking/cycling/driving speed or have an administrator change the system's configuration
so that stops further away are considered.
"""
NO_STOPS_IN_RANGE
"""
No transit connection was found between the origin and destination within the operating day or
the next day, not even sub-optimal ones.
"""
NO_TRANSIT_CONNECTION
"""
A transit connection was found, but it was outside the search window. See the metadata for a token
for retrieving the result outside the search window.
"""
NO_TRANSIT_CONNECTION_IN_SEARCH_WINDOW
"""
The coordinates are outside the geographic bounds of the transit and street data currently loaded
into the system and therefore cannot return any results.
"""
OUTSIDE_BOUNDS
"""
The date specified is outside the range of data currently loaded into the system as it is too
far into the future or the past.
The specific date range of the system is configurable by an administrator and also depends on
the input data provided.
"""
OUTSIDE_SERVICE_PERIOD
"""
Transit connections were requested and found but because it is easier to just walk all the way
to the destination they were removed.
If you want to still show the transit results, you need to make walking less desirable by
increasing the walk reluctance.
"""
WALKING_BETTER_THAN_TRANSIT
}
"""
Predefined optimization alternatives for scooter routing. For more customization,
one can use the triangle factors.
"""
enum ScooterOptimizationType {
"Emphasize flatness over safety or duration of the route. This option was previously called `FLAT`."
FLAT_STREETS
"""
Completely ignore the elevation differences and prefer the streets, that are evaluated
to be safest for scooters, even more than with the `SAFE_STREETS` option.
Safety can also include other concerns such as convenience and general preferences by taking
into account road surface etc. Note, currently the same criteria is used both for cycling and
scooter travel to determine how safe streets are for cycling or scooter.
This option was previously called `GREENWAYS`.
"""
SAFEST_STREETS
"""
Emphasize scooter safety over flatness or duration of the route. Safety can also include other
concerns such as convenience and general preferences by taking into account road surface etc.
Note, currently the same criteria is used both for cycling and scooter travel to determine how
safe streets are for cycling or scooter. This option was previously called `SAFE`.
"""
SAFE_STREETS
"""
Search for routes with the shortest duration while ignoring the scooter safety
of the streets. The routes should still follow local regulations, but currently scooters
are only allowed on the same streets as bicycles which might not be accurate for each country
or with different types of scooters. Routes can include steep streets, if they are
the fastest alternatives. This option was previously called `QUICK`.
"""
SHORTEST_DURATION
}
"Entities, which are relevant for a stop and can contain alerts"
enum StopAlertType {
"Alerts affecting the agencies of the routes going through the stop"
AGENCIES_OF_ROUTES
"Alerts affecting the stop's patterns"
PATTERNS
"Alerts affecting the routes that go through the stop"
ROUTES
"Alerts affecting the stop"
STOP
"Alerts affecting the stop on specific routes"
STOP_ON_ROUTES
"Alerts affecting the stop on specific trips"
STOP_ON_TRIPS
"Alerts affecting the trips that go through this stop"
TRIPS
}
"""
Transit modes include modes that are used within organized transportation networks
run by public transportation authorities, taxi companies etc.
Equivalent to GTFS route_type or to NeTEx TransportMode.
"""
enum TransitMode {
AIRPLANE
BUS
CABLE_CAR
"Private car trips shared with others."
CARPOOL
COACH
FERRY
FUNICULAR
GONDOLA
"Railway in which the track consists of a single rail or a beam."
MONORAIL
"This includes long or short distance trains."
RAIL
"Subway or metro, depending on the local terminology."
SUBWAY
"A taxi, possibly operated by a public transport agency."
TAXI
TRAM
"Electric buses that draw power from overhead wires using poles."
TROLLEYBUS
}
"Entities, which are relevant for a trip and can contain alerts"
enum TripAlertType {
"Alerts affecting the trip's agency"
AGENCY
"Alerts affecting the trip's pattern"
PATTERN
"Alerts affecting the trip's route"
ROUTE
"Alerts affecting the route type of the trip's route"
ROUTE_TYPE
"""
Alerts affecting the stops visited on the trip.
Some of the alerts can only affect the trip or its route on the stop.
"""
STOPS_ON_TRIP
"Alerts affecting the trip"
TRIP
}
"""
The state of the vehicle parking. TEMPORARILY_CLOSED and CLOSED are distinct states so that they
may be represented differently to the user.
"""
enum VehicleParkingState {
"Can't be used for park and ride."
CLOSED
"May be used for park and ride."
OPERATIONAL
"Can't be used for park and ride."
TEMPORARILY_CLOSED
}
"How close the vehicle is to the stop."
enum VehicleStopStatus {
"The vehicle is just about to arrive at the stop (on a stop display, the vehicle symbol typically flashes)."
INCOMING_AT
"The vehicle has departed the previous stop and is in transit."
IN_TRANSIT_TO
"The vehicle is standing at the stop."
STOPPED_AT
}
enum VertexType {
"BIKEPARK"
BIKEPARK
"BIKESHARE"
BIKESHARE
"NORMAL"
NORMAL
"PARKANDRIDE"
PARKANDRIDE
"TRANSIT"
TRANSIT
}
enum WheelchairBoarding {
"Wheelchair boarding is not possible at this stop."
NOT_POSSIBLE
"There is no accessibility information for the stop."
NO_INFORMATION
"At least some vehicles at this stop can be boarded by a rider in a wheelchair."
POSSIBLE
}
"Either a latitude or a longitude as a WGS84 format floating point number."
scalar CoordinateValue @specifiedBy(url : "https://earth-info.nga.mil/?dir=wgs84&action=wgs84")
"""
A static cost that is applied to a certain event or entity. Cost is a positive integer,
for example `450`. One cost unit should roughly match a one second travel on transit.
"""
scalar Cost
"Duration in a lenient ISO-8601 duration format. Example P2DT2H12M40S, 2d2h12m40s or 1h"
scalar Duration @specifiedBy(url : "https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/time/Duration.html#parse(java.lang.CharSequence)")
"Geographic data structures in JSON format. See: https://geojson.org/"
scalar GeoJson @specifiedBy(url : "https://www.rfcreader.com/#rfc7946")
scalar Grams
"""
An ISO-8601-formatted local date, i.e. `2024-05-24` for the 24th of May, 2024.
ISO-8601 allows many different date formats, however only the most common one - `yyyy-MM-dd` - is accepted.
"""
scalar LocalDate @specifiedBy(url : "https://www.iso.org/standard/70907.html")
"A IETF BCP 47 language tag"
scalar Locale @specifiedBy(url : "https://www.rfcreader.com/#rfc5646")
"A 64-bit signed integer"
scalar Long
"""
An ISO-8601-formatted datetime with offset, i.e. `2023-06-13T14:30+03:00` for 2:30pm on June 13th 2023 at Helsinki's offset from UTC at that time.
ISO-8601 allows many different formats but OTP will only return the profile specified in RFC3339.
"""
scalar OffsetDateTime @specifiedBy(url : "https://www.rfcreader.com/#rfc3339")
"List of coordinates in an encoded polyline format (see https://developers.google.com/maps/documentation/utilities/polylinealgorithm). The value appears in JSON as a string."
scalar Polyline @specifiedBy(url : "https://developers.google.com/maps/documentation/utilities/polylinealgorithm")
"A fractional multiplier between 0 and 1, for example 0.25. 0 means 0% and 1 means 100%."
scalar Ratio
"""
A cost multiplier for how bad something is compared to being in transit for equal lengths of time.
The value should be greater than 0. 1 means neutral and values below 1 mean that something is
preferred over transit.
"""
scalar Reluctance
"Speed in meters per seconds. Values are positive floating point numbers (for example, 2.34)."
scalar Speed
"""
Plan accessibilty preferences. This can be expanded to contain preferences for various accessibility use cases
in the future. Currently only generic wheelchair preferences are available.
"""
input AccessibilityPreferencesInput {
"Wheelchair related preferences. Note, currently this is the only accessibility mode that is available."
wheelchair: WheelchairPreferencesInput
}
"Preferences related to alighting from a transit vehicle."
input AlightPreferencesInput {
"What is the required minimum time alighting from a vehicle."
slack: Duration
}
"Preferences for bicycle parking facilities used during the routing."
input BicycleParkingPreferencesInput {
"""
Selection filters to include or exclude parking facilities.
An empty list will include all facilities in the routing search.
"""
filters: [ParkingFilter!]
"""
If non-empty every parking facility that doesn't match this set of conditions will
receive an extra cost (defined by `unpreferredCost`) and therefore avoided.
"""
preferred: [ParkingFilter!]
"""
If `preferred` is non-empty, using a parking facility that doesn't contain
at least one of the preferred conditions, will receive this extra cost and therefore avoided if
preferred options are available.
"""
unpreferredCost: Cost
}
"Preferences related to travel with a bicycle."
input BicyclePreferencesInput {
"Cost of boarding a vehicle with a bicycle."
boardCost: Cost
"What criteria should be used when optimizing a cycling route."
optimization: CyclingOptimizationInput
"Bicycle parking related preferences."
parking: BicycleParkingPreferencesInput
"A multiplier for how bad cycling is compared to being in transit for equal lengths of time."
reluctance: Reluctance
"Bicycle rental related preferences."
rental: BicycleRentalPreferencesInput
"""
Maximum speed on flat ground while riding a bicycle. Note, this speed is higher than
the average speed will be in itineraries as this is the maximum speed but there are
factors that slow down cycling such as crossings, intersections and elevation changes.
"""
speed: Speed
"Walking preferences when walking a bicycle."
walk: BicycleWalkPreferencesInput
}
"Preferences related to bicycle rental (station based or floating bicycle rental)."
input BicycleRentalPreferencesInput {
"Rental networks which can be potentially used as part of an itinerary."
allowedNetworks: [String!]
"Rental networks which cannot be used as part of an itinerary."
bannedNetworks: [String!]
"""
Is it possible to arrive to the destination with a rented bicycle and does it
come with an extra cost.
"""
destinationBicyclePolicy: DestinationBicyclePolicyInput
}
"Costs related to walking a bicycle."
input BicycleWalkPreferencesCostInput {
"""
A static cost that is added each time hopping on or off a bicycle to start or end
bicycle walking. However, this cost is not applied when getting on a rented bicycle
for the first time or when getting off the bicycle when returning the bicycle.
"""
mountDismountCost: Cost
"""
A cost multiplier of bicycle walking travel time. The multiplier is for how bad
walking the bicycle is compared to being in transit for equal lengths of time.
"""
reluctance: Reluctance
}
"Preferences for walking a bicycle."
input BicycleWalkPreferencesInput {
"Costs related to walking a bicycle."
cost: BicycleWalkPreferencesCostInput
"""
How long it takes to hop on or off a bicycle when switching to walking the bicycle
or when getting on the bicycle again. However, this is not applied when getting
on a rented bicycle for the first time or off the bicycle when returning the bicycle.
"""
mountDismountTime: Duration
"""
Maximum walk speed on flat ground. Note, this speed is higher than the average speed
will be in itineraries as this is the maximum speed but there are
factors that slow down walking such as crossings, intersections and elevation changes.
"""
speed: Speed
}
"""
Preferences related to boarding a transit vehicle. Note, board costs for each street mode
can be found under the street mode preferences.
"""
input BoardPreferencesInput {
"""
What is the required minimum waiting time at a stop. Setting this value as `PT0S`, for example, can lead
to passenger missing a connection when the vehicle leaves ahead of time or the passenger arrives to the
stop later than expected.
"""
slack: Duration
"A multiplier for how bad waiting at a stop is compared to being in transit for equal lengths of time."
waitReluctance: Reluctance
}
"Preferences for car parking facilities used during the routing."
input CarParkingPreferencesInput {
"""
Selection filters to include or exclude parking facilities.
An empty list will include all facilities in the routing search.
"""
filters: [ParkingFilter!]
"""
If non-empty every parking facility that doesn't match this set of conditions will
receive an extra cost (defined by `unpreferredCost`) and therefore avoided.
"""
preferred: [ParkingFilter!]
"""
If `preferred` is non-empty, using a parking facility that doesn't contain
at least one of the preferred conditions, will receive this extra cost and therefore avoided if
preferred options are available.
"""
unpreferredCost: Cost
}
"Preferences related to traveling on a car (excluding car travel on transit services such as taxi)."
input CarPreferencesInput {
"Car parking related preferences."
parking: CarParkingPreferencesInput
"A multiplier for how bad travelling on car is compared to being in transit for equal lengths of time."
reluctance: Reluctance
"Car rental related preferences."
rental: CarRentalPreferencesInput
}
"Preferences related to car rental (station based or floating car rental)."
input CarRentalPreferencesInput {
"Rental networks which can be potentially used as part of an itinerary."
allowedNetworks: [String!]
"Rental networks which cannot be used as part of an itinerary."
bannedNetworks: [String!]
}
"What criteria should be used when optimizing a cycling route."
input CyclingOptimizationInput @oneOf {
"Define optimization by weighing three criteria."
triangle: TriangleCyclingFactorsInput
"Use one of the predefined optimization types."
type: CyclingOptimizationType
}
"""
Is it possible to arrive to the destination with a rented bicycle and does it
come with an extra cost.
"""
input DestinationBicyclePolicyInput {
"For networks that require station drop-off, should the routing engine offer results that go directly to the destination without dropping off the rental bicycle first."
allowKeeping: Boolean
"""
Cost associated with arriving to the destination with a rented bicycle.
No cost is applied if arriving to the destination after dropping off the rented
bicycle.
"""
keepingCost: Cost
}
"""
Is it possible to arrive to the destination with a rented scooter and does it
come with an extra cost.
"""
input DestinationScooterPolicyInput {
"For networks that require station drop-off, should the routing engine offer results that go directly to the destination without dropping off the rental scooter first."
allowKeeping: Boolean
"""
Cost associated with arriving to the destination with a rented scooter.
No cost is applied if arriving to the destination after dropping off the rented
scooter.
"""
keepingCost: Cost
}
input InputBanned {
"A comma-separated list of banned agency ids"
agencies: String
"A comma-separated list of banned route ids"
routes: String
"""
A comma-separated list of banned stop ids. Note that these stops are only
banned for boarding and disembarking vehicles it is possible to get an
itinerary where a vehicle stops at one of these stops
"""
stops: String @deprecated(reason : "Not implemented in OTP2.")
"""
A comma-separated list of banned stop ids. Only itineraries where these stops
are not travelled through are returned, e.g. if a bus route stops at one of
these stops, that route will not be used in the itinerary, even if the stop is
not used for boarding or disembarking the vehicle.
"""
stopsHard: String @deprecated(reason : "Not implemented in OTP2.")
"A comma-separated list of banned trip ids"
trips: String
}
input InputCoordinates {
"The name of the place. If specified, the place name in results uses this value instead of `\"Origin\"` or `\"Destination\"`"
address: String
"Latitude of the place (WGS 84)"
lat: Float!
"The amount of time, in seconds, to spend at this location before venturing forth."
locationSlack: Int
"Longitude of the place (WGS 84)"
lon: Float!
}
input InputFilters {
"Bike parks to include by id."
bikeParks: [String]
"Bike rentals to include by id (without network identifier)."
bikeRentalStations: [String]
"Car parks to include by id."
carParks: [String]
"Routes to include by GTFS id."
routes: [String]
"Stations to include by GTFS id."
stations: [String]
"Stops to include by GTFS id."
stops: [String]
}
input InputModeWeight {
"The weight of AIRPLANE traverse mode. Values over 1 add cost to airplane travel and values under 1 decrease cost"
AIRPLANE: Float
"The weight of BUS traverse mode. Values over 1 add cost to bus travel and values under 1 decrease cost"
BUS: Float
"The weight of CABLE_CAR traverse mode. Values over 1 add cost to cable car travel and values under 1 decrease cost"
CABLE_CAR: Float
"The weight of CARPOOL traverse mode. Values over 1 add cost to carpool travel and values under 1 decrease cost"
CARPOOL: Float
"The weight of COACH traverse mode. Values over 1 add cost to coach travel and values under 1 decrease cost"
COACH: Float
"The weight of FERRY traverse mode. Values over 1 add cost to ferry travel and values under 1 decrease cost"
FERRY: Float
"The weight of FUNICULAR traverse mode. Values over 1 add cost to funicular travel and values under 1 decrease cost"
FUNICULAR: Float
"The weight of GONDOLA traverse mode. Values over 1 add cost to gondola travel and values under 1 decrease cost"
GONDOLA: Float
"The weight of MONORAIL traverse mode. Values over 1 add cost to monorail travel and values under 1 decrease cost"
MONORAIL: Float
"The weight of RAIL traverse mode. Values over 1 add cost to rail travel and values under 1 decrease cost"
RAIL: Float
"The weight of SUBWAY traverse mode. Values over 1 add cost to subway travel and values under 1 decrease cost"
SUBWAY: Float
"The weight of TAXI traverse mode. Values over 1 add cost to taxi travel and values under 1 decrease cost"
TAXI: Float
"The weight of TRAM traverse mode. Values over 1 add cost to tram travel and values under 1 decrease cost"
TRAM: Float
"The weight of TROLLEYBUS traverse mode. Values over 1 add cost to trolleybus travel and values under 1 decrease cost"
TROLLEYBUS: Float
}
input InputPreferred {
"A comma-separated list of ids of the agencies preferred by the user."
agencies: String
"""
Penalty added for using every route that is not preferred if user set any
route as preferred. We return number of seconds that we are willing to wait
for preferred route.
"""
otherThanPreferredRoutesPenalty: Int
"A comma-separated list of ids of the routes preferred by the user."
routes: String
}
"""
Relative importances of optimization factors. Only effective for bicycling legs.
Invariant: `timeFactor + slopeFactor + safetyFactor == 1`
"""
input InputTriangle {
"Relative importance of safety"
safetyFactor: Float
"Relative importance of flat terrain"
slopeFactor: Float
"Relative importance of duration"
timeFactor: Float
}
input InputUnpreferred {
"A comma-separated list of ids of the agencies unpreferred by the user."
agencies: String
"A comma-separated list of ids of the routes unpreferred by the user."
routes: String
"""
An cost function used to calculate penalty for an unpreferred route/agency. Function should return
number of seconds that we are willing to wait for unpreferred route/agency.
String must be of the format:
`A + B x`, where A is fixed penalty and B is a multiplier of transit leg travel time x.
For example: `600 + 2.0 x`
"""
unpreferredCost: String
"""
Penalty added for using route that is unpreferred, i.e. number of seconds that we are willing to
wait for route that is unpreferred.
Deprecated: Use `unpreferredCost` instead.
"""
useUnpreferredRoutesPenalty: Int @deprecated(reason : "Use unpreferredCost instead")
}
"Filters an entity by a date range."
input LocalDateRangeInput {
"""
**Exclusive** end date of the filter. This means that if you want a time window from Sunday to
Sunday, `end` must be on Monday.
If `null` this means that no end filter is applied and all entities that are after or on `start`
are selected.
"""
end: LocalDate
"""
**Inclusive** start date of the filter. If `null` this means that no `start` filter is applied and all
dates that are before `end` are selected.
"""
start: LocalDate
}
"""
The filter definition to include or exclude parking facilities used during routing.
Logically, the filter algorithm work as follows:
- The starting point is the set of all facilities, lets call it `A`.
- Then all `select` filters are applied to `A`, potentially reducing the number of facilities used.
Let's call the result of this `B`.
An empty `select` will lead to `A` being equal to `B`.
- Lastly, the `not` filters are applied to `B`, reducing the set further.
Lets call this final set `C`.
An empty `not` will lead to `B` being equal to `C`.
- The remaining parking facilities in `C` are used for routing.
"""
input ParkingFilter {
"""
Exclude parking facilities based on their properties.
If empty nothing is excluded from the initial set of facilities but may be filtered down
further by the `select` filter.
"""
not: [ParkingFilterOperation!]
"""
Include parking facilities based on their properties.
If empty everything is included from the initial set of facilities but may be filtered down
further by the `not` filter.
"""
select: [ParkingFilterOperation!]
}
input ParkingFilterOperation {
"Filter parking facilities based on their tag"
tags: [String]
}
"A coordinate used for a location in a plan query."
input PlanCoordinateInput {
"Latitude as a WGS84 format number."
latitude: CoordinateValue!
"Longitude as a WGS84 format number."
longitude: CoordinateValue!
}
"Plan date time options. Only one of the values should be defined."
input PlanDateTimeInput @oneOf {
"""
Earliest departure date time. The returned itineraries should not
depart before this instant unless one is using paging to find earlier
itineraries. Note, it is not currently possible to define both
`earliestDeparture` and `latestArrival`.
"""
earliestDeparture: OffsetDateTime
"""
Latest arrival time date time. The returned itineraries should not
arrive to the destination after this instant unless one is using
paging to find later itineraries. Note, it is not currently possible
to define both `earliestDeparture` and `latestArrival`.
"""
latestArrival: OffsetDateTime
}
"""
Settings that control the behavior of itinerary filtering. **These are advanced settings and
should not be set by a user through user preferences.**
"""
input PlanItineraryFilterInput {
"""
Pick one itinerary from each group after putting itineraries that are `85%` similar together,
if the given value is `0.85`, for example. Itineraries are grouped together based on relative
the distance of transit travel that is identical between the itineraries (access, egress and
transfers are ignored). The value must be at least `0.5`.
"""
groupSimilarityKeepOne: Ratio = 0.85
"""
Pick three itineraries from each group after putting itineraries that are `68%` similar together,
if the given value is `0.68`, for example. Itineraries are grouped together based on relative
the distance of transit travel that is identical between the itineraries (access, egress and
transfers are ignored). The value must be at least `0.5`.
"""
groupSimilarityKeepThree: Ratio = 0.68
"""
Of the itineraries grouped to maximum of three itineraries, how much worse can the non-grouped
legs be compared to the lowest cost. `2.0` means that they can be double the cost, and any
itineraries having a higher cost will be filtered away. Use a value lower than `1.0` to turn the
grouping off.
"""
groupedOtherThanSameLegsMaxCostMultiplier: Float = 2.0
"Itinerary filter debug profile used to control the behaviour of itinerary filters."
itineraryFilterDebugProfile: ItineraryFilterDebugProfile = OFF
}
"""
Plan location settings. Location must be set. Label is optional
and used for naming the location.
"""
input PlanLabeledLocationInput {
"""
A label that can be attached to the location. This label is then returned with the location
in the itineraries.
"""
label: String
"A location that has to be used in an itinerary."
location: PlanLocationInput!
}
"Plan location. Either a coordinate or a stop location should be defined."
input PlanLocationInput @oneOf {
"Coordinate of the location. Note, either a coordinate or a stop location should be defined."
coordinate: PlanCoordinateInput
"""
Stop, station, a group of stop places or multimodal stop place that should be used as
a location for the search. The trip doesn't have to use the given stop location for a
transit connection as it's possible to start walking to another stop from the given
location. If a station or a group of stop places is provided, a stop that makes the most
sense for the journey is picked as the location within the station or group of stop places.
"""
stopLocation: PlanStopLocationInput
}
"Mode selections for the plan search."
input PlanModesInput {
"""
Street mode that is used when searching for itineraries that don't use any transit.
If more than one mode is selected, at least one of them must be used but not necessarily all.
There are modes that automatically also use walking such as the rental modes. To force rental
to be used, this should only include the rental mode and not `WALK` in addition.
The default access mode is `WALK`.
"""
direct: [PlanDirectMode!]
"Should only the direct search without any transit be done."
directOnly: Boolean = false
"""
Modes for different phases of an itinerary when transit is included. Also
includes street mode selections related to connecting to the transit network
and transfers. By default, all transit modes are usable and `WALK` is used for
access, egress and transfers.
"""
transit: PlanTransitModesInput
"""
Should only the transit search be done and never suggest itineraries that don't
contain any transit legs.
"""
transitOnly: Boolean = false
}
"""
One of the listed stop locations must be visited on-board a transit vehicle or the journey must
alight or board at the location.
"""
input PlanPassThroughViaLocationInput {
"The label/name of the location. This is pass-through information and is not used in routing."
label: String
"""
A list of stop locations. A stop location can be a stop or a station.
It is enough to visit ONE of the locations listed.
"""
stopLocationIds: [String!]!
}
"Wrapper type for different types of preferences related to plan query."
input PlanPreferencesInput {
"Accessibility preferences that affect both the street and transit routing."
accessibility: AccessibilityPreferencesInput
"""
Street routing preferences used for ingress, egress and transfers. These do not directly affect
the transit legs but can change how preferable walking or cycling, for example, is compared to
transit.
"""
street: PlanStreetPreferencesInput
"Transit routing preferences used for transit legs."
transit: TransitPreferencesInput
}
"""
Stop, station, a group of stop places or multimodal stop place that should be used as
a location for the search. The trip doesn't have to use the given stop location for a
transit connection as it's possible to start walking to another stop from the given
location. If a station or a group of stop places is provided, a stop that makes the most
sense for the journey is picked as the location within the station or group of stop places.
"""
input PlanStopLocationInput {
"""
ID of the stop, station, a group of stop places or multimodal stop place. Format
should be `FeedId:StopLocationId`.
"""
stopLocationId: String!
}
"""
Street routing preferences used for ingress, egress and transfers. These do not directly affect
the transit legs but can change how preferable walking or cycling, for example, is compared to
transit.
"""
input PlanStreetPreferencesInput {
"Cycling related preferences."
bicycle: BicyclePreferencesInput
"""
Car related preferences. These are not used for car travel as part of transit, such as
taxi travel.
"""
car: CarPreferencesInput
"Scooter (kick or electrical) related preferences."
scooter: ScooterPreferencesInput
"""
Walk related preferences. These are not used when walking a bicycle or a scooter as they
have their own preferences.
"""
walk: WalkPreferencesInput
}
"Transit mode and a reluctance associated with it."
input PlanTransitModePreferenceInput {
"Costs related to using a transit mode."
cost: TransitModePreferenceCostInput
"Transit mode that could be (but doesn't have to be) used in an itinerary."
mode: TransitMode!
}
"""
Modes for different phases of an itinerary when transit is included. Also includes street
mode selections related to connecting to the transit network and transfers.
"""
input PlanTransitModesInput {
"""
Street mode that is used when searching for access to the transit network from origin.
If more than one mode is selected, at least one of them must be used but not necessarily all.
There are modes that automatically also use walking such as the rental modes. To force rental
to be used, this should only include the rental mode and not `WALK` in addition.
The default access mode is `WALK`.
"""
access: [PlanAccessMode!]
"""
Street mode that is used when searching for egress to destination from the transit network.
If more than one mode is selected, at least one of them must be used but not necessarily all.
There are modes that automatically also use walking such as the rental modes. To force rental
to be used, this should only include the rental mode and not `WALK` in addition.
The default access mode is `WALK`.
"""
egress: [PlanEgressMode!]
"""
Street mode that is used when searching for transfers. Selection of only one allowed for now.
The default transfer mode is `WALK`.
"""
transfer: [PlanTransferMode!]
"""
Transit modes and reluctances associated with them. Each defined mode can be used in
an itinerary but doesn't have to be. If direct search is not disabled, there can be an
itinerary without any transit legs. By default, all transit modes are usable.
"""
transit: [PlanTransitModePreferenceInput!]
}
"""
A via-location is used to specifying a location as an intermediate place the router must
route through. The via-location is either a pass-through-location or a visit-via-location.
"""
input PlanViaLocationInput @oneOf {
"Board, alight or pass-through(on-board) at the stop location."
passThrough: PlanPassThroughViaLocationInput
"Board or alight at a stop location or visit a coordinate."
visit: PlanVisitViaLocationInput
}
"""
A visit-via-location is a physical visit to one of the stop locations or coordinates listed. An
on-board visit does not count, the traveler must alight or board at the given stop for it to to
be accepted. To visit a coordinate, the traveler must walk(bike or drive) to the closest point
in the street network from a stop and back to another stop to join the transit network.
NOTE! Coordinates are NOT supported yet.
"""
input PlanVisitViaLocationInput {
"The label/name of the location. This is pass-through information and is not used in routing."
label: String
"""
The minimum wait time is used to force the trip to stay the given duration at the
via-location before the itinerary is continued.
"""
minimumWaitTime: Duration = "PT0S"
"""
A list of stop locations. A stop location can be a stop or a station.
It is enough to visit ONE of the locations listed.
"""
stopLocationIds: [String!]
}
"What criteria should be used when optimizing a scooter route."
input ScooterOptimizationInput @oneOf {
"Define optimization by weighing three criteria."
triangle: TriangleScooterFactorsInput
"Use one of the predefined optimization types."
type: ScooterOptimizationType
}
"Preferences related to travel with a scooter (kick or e-scooter)."
input ScooterPreferencesInput {
"What criteria should be used when optimizing a scooter route."
optimization: ScooterOptimizationInput
"""
A multiplier for how bad riding a scooter is compared to being in transit
for equal lengths of time.
"""
reluctance: Reluctance
"Scooter rental related preferences."
rental: ScooterRentalPreferencesInput
"""
Maximum speed on flat ground while riding a scooter. Note, this speed is higher than
the average speed will be in itineraries as this is the maximum speed but there are
factors that slow down the travel such as crossings, intersections and elevation changes.
"""
speed: Speed
}
"Preferences related to scooter rental (station based or floating scooter rental)."
input ScooterRentalPreferencesInput {
"Rental networks which can be potentially used as part of an itinerary."
allowedNetworks: [String!]
"Rental networks which cannot be used as part of an itinerary."
bannedNetworks: [String!]
"""
Is it possible to arrive to the destination with a rented scooter and does it
come with an extra cost.
"""
destinationScooterPolicy: DestinationScooterPolicyInput
}
input TimetablePreferencesInput {
"""
When false, real-time updates are considered during the routing.
In practice, when this option is set as true, some of the suggestions might not be
realistic as the transfers could be invalid due to delays,
trips can be cancelled or stops can be skipped.
"""
excludeRealTimeUpdates: Boolean
"""
When true, departures that have been cancelled ahead of time will be
included during the routing. This means that an itinerary can include
a cancelled departure while some other alternative that contains no cancellations
could be filtered out as the alternative containing a cancellation would normally
be better.
"""
includePlannedCancellations: Boolean
"""
When true, departures that have been cancelled through a real-time feed will be
included during the routing. This means that an itinerary can include
a cancelled departure while some other alternative that contains no cancellations
could be filtered out as the alternative containing a cancellation would normally
be better. This option can't be set to true while `includeRealTimeUpdates` is false.
"""
includeRealTimeCancellations: Boolean
}
"Preferences related to transfers between transit vehicles (typically between stops)."
input TransferPreferencesInput {
"A static cost that is added for each transfer on top of other costs."
cost: Cost
"""
How many additional transfers there can be at maximum compared to the itinerary with the
least number of transfers.
"""
maximumAdditionalTransfers: Int
"How many transfers there can be at maximum in an itinerary."
maximumTransfers: Int
"""
A global minimum transfer time (in seconds) that specifies the minimum amount of time
that must pass between exiting one transit vehicle and boarding another. This time is
in addition to time it might take to walk between transit stops. Setting this value
as `PT0S`, for example, can lead to passenger missing a connection when the vehicle leaves
ahead of time or the passenger arrives to the stop later than expected.
"""
slack: Duration
}
"Costs related to using a transit mode."
input TransitModePreferenceCostInput {
"A cost multiplier of transit leg travel time."
reluctance: Reluctance!
}
"Transit routing preferences used for transit legs."
input TransitPreferencesInput {
"Preferences related to alighting from a transit vehicle."
alight: AlightPreferencesInput
"""
Preferences related to boarding a transit vehicle. Note, board costs for each street mode
can be found under the street mode preferences.
"""
board: BoardPreferencesInput
"Preferences related to cancellations and real-time."
timetable: TimetablePreferencesInput
"Preferences related to transfers between transit vehicles (typically between stops)."
transfer: TransferPreferencesInput
}
"Transportation mode which can be used in the itinerary"
input TransportMode {
mode: Mode!
"Optional additional qualifier for transport mode, e.g. `RENT`"
qualifier: Qualifier
}
"""
Relative importance of optimization factors. Only effective for bicycling legs.
Invariant: `safety + flatness + time == 1`
"""
input TriangleCyclingFactorsInput {
"Relative importance of flat terrain"
flatness: Ratio!
"""
Relative importance of cycling safety, but this factor can also include other
concerns such as convenience and general cyclist preferences by taking into account
road surface etc.
"""
safety: Ratio!
"Relative importance of duration"
time: Ratio!
}
"""
Relative importance of optimization factors. Only effective for scooter legs.
Invariant: `safety + flatness + time == 1`
"""
input TriangleScooterFactorsInput {
"Relative importance of flat terrain"
flatness: Ratio!
"""
Relative importance of scooter safety, but this factor can also include other
concerns such as convenience and general scooter preferences by taking into account
road surface etc.
"""
safety: Ratio!
"Relative importance of duration"
time: Ratio!
}
"Preferences for parking facilities used during the routing."
input VehicleParkingInput {
"""
Selection filters to include or exclude parking facilities.
An empty list will include all facilities in the routing search.
"""
filters: [ParkingFilter]
"""
If non-empty every parking facility that doesn't match this set of conditions will
receive an extra cost (defined by `unpreferredCost`) and therefore avoided.
"""
preferred: [ParkingFilter]
"""
If `preferred` is non-empty, using a parking facility that doesn't contain
at least one of the preferred conditions, will receive this extra cost and therefore avoided if
preferred options are available.
"""
unpreferredCost: Int
}
"Preferences related to walking (excluding walking a bicycle or a scooter)."
input WalkPreferencesInput {
"The cost of boarding a vehicle while walking."
boardCost: Cost
"A multiplier for how bad walking is compared to being in transit for equal lengths of time."
reluctance: Reluctance
"""
Factor for how much the walk safety is considered in routing. Value should be between 0 and 1.
If the value is set to be 0, safety is ignored.
"""
safetyFactor: Ratio
"""
Maximum walk speed on flat ground. Note, this speed is higher than the average speed
will be in itineraries as this is the maximum speed but there are
factors that slow down walking such as crossings, intersections and elevation changes.
"""
speed: Speed
}
"""
Wheelchair related preferences. Note, this is the only from of accessibilty available
currently and is sometimes is used for other accessibility needs as well.
"""
input WheelchairPreferencesInput {
"""
Is wheelchair accessibility considered in routing. Note, this does not guarantee
that the itineraries are wheelchair accessible as there can be data issues.
"""
enabled: Boolean
}