Skip to content

Response & schema reference

Download all four files for your client.

The downloadable schemas include the upcoming scheduled and expected quay fields. Some values may be absent or empty in responses. See the changelog for new fields, breaking changes and removals.

FileContents
PlanRequest.protoRequest, user speeds, flex and pricing options
PlanResult.protoResults, trips, legs, places, alerts, booking and fares
Modes.protoTransit and non-transit enums
DirectionType.protoJourney direction enum
FieldMeaning
trips[]Travel options in this result frame
timestampResult timestamp
errors[]Routing errors (code, message)
modifiers[]Request modifications used for this group
gradeGroup-level relative grade
containsOnDemand, containsWithSurchargeOptional, source-dependent flags
FieldsMeaning
aimedStartTime, aimedEndTimeScheduled/planned times
expectedStartTime, expectedEndTimeExpected times when mapped
duration, transfersMinutes and transfer count
waitingTime, walkTimeOptional minutes
distance, streetDistanceOptional metres
legs[], systemNotices[]Timeline and general notices
idSource-derived trip identity; not guaranteed unique across service dates or departures
itineraryHashOpaque replay identifier for transit/flex itineraries; empty for purely non-transit trips
gradeIndividual trip grade
pricingInfoOptional total, leg fares, discounts and transfer instructions

Each boarding, alighting and intermediate EstimatedCall will expose:

FieldMeaning
scheduledQuayOriginally scheduled quay, including its ID, coordinates and platform label
expectedQuayEffective quay for boarding or alighting, including realtime changes

The two quays are equal when there is no quay change. Their platform labels are scheduledQuay.publicCode and expectedQuay.publicCode. A missing expected platform label means it is unavailable; do not substitute the scheduled label when displaying the expected platform.

JSON migration: Replace quay with expectedQuay. During the transition, read expectedQuay when present and fall back to quay for current responses. Older responses may not include scheduledQuay.

Protobuf migration: expectedQuay keeps the former quay field number 1; scheduledQuay is added at field 13. Existing binary clients retain access to the effective quay. Regenerate clients from the downloadable schema to access both fields.

aimedPlatform and expectedPlatform are deprecated in the upcoming schema. They continue to carry the scheduled and expected platform labels during the transition; new integrations should use the quay’s publicCode.

The upcoming EstimatedCall.scheduledQuay and expectedQuay (currently quay) can carry privateCode, a source or journey-pattern stop code, and stopPlace, the parent station or stop group. stopPlace has an ID, name, optional town and coordinates, and transport modes. It is optional: some quays have no parent data. Existing quayCode remains in the schema for quay-code context; it may be empty and has no guaranteed universal format. Use id for the returned quay identity and treat privateCode as a separate code, not as a physical quay ID.

These fields may be absent or empty in responses.

Some values may only be filled in the future, but are already provided in the Proto for development purposes. The schema describes the wire contract and allows clients to generate types and prepare integrations ahead of full data availability. It does not guarantee that every value is populated for every journey.

FieldCurrent availability / client behavior
NonTransitLeg.steps, tripWeatherJsonNot currently populated; allow an empty list or absent weather value
EstimatedCall.stopPositionInPatternProvided in the Proto for development; not currently populated
PlanResult.previousPageCursor, nextPageCursorSource cursors may be returned; public requests do not accept them for pagination
Quay.stopPlace, stop codes, notices, situations and rental detailsAvailable for some journeys; tolerate missing or empty details
Expected/actual times and expected platformsDepend on realtime/source coverage; fall back to scheduled times and platforms
pricingInfo, bookingArrangementOptional enrichment; absence is not a zero fare or proof that booking is unnecessary

Preserve optional presence when decoding. Non-optional Proto scalars have defaults such as false, 0 or an empty string; repeated fields may be empty. These defaults do not by themselves prove that a source supplied a value. In particular, Quay.wheelchairAccessible cannot represent unknown accessibility separately by presence. Use the optional service-journey accessibility fields when you need a Yes / No / Information unavailable distinction.

Keep these files together and update them as a set. Use enum names in your display code and preserve optional values when decoding.