The following example is an ASCII representation of a full-dataset Trip Update feed.
For more details on how to construct a Trip Update feed, see Provide realtime
trip information with TripUpdates
.
# header information
header {
# version of speed specification. Currently "2.0"
gtfs_realtime_version: "2.0"
# DIFFERENTIAL is unsupported. use FULL_DATASET only
incrementality: FULL_DATASET
# The moment where this dataset was generated on the server.
timestamp: 1656230726
}
# A definition (or update) of an entity in the transit feed.
# Multiple entities can be included in the feed.
# be sure to provide information about EVERY active trip on every feed update
entity {
# unique identifier for the entity within the feed update message
id: "simple-trip"
# "type" of the entity
trip_update {
# a descriptor that identifies an instance of a GTFS trip
# defines the identifier of a trip in reference to the trips.txt file
# it is recommended to provide trip_id, which should be one of the following
# (1) a trip defined in the static feed
# (2) a duplicate trip with schedule_relationship ADDED and new start time
# (3) a frequency based trip with a clearly defined start time
trip {
# the trip_id from the GTFS feed that this trip refers to
trip_id: "trip1"
# the start time of this trip instance as specified from the GTFS feed
start_time: "14:05:00"
# the start date of this trip instance
start_date: "20220628"
# The relation between this trip and the static schedule
schedule_relationship: SCHEDULED
# the route id from the GTFS feed that this trip belongs to
route_id: "ROUTE1"
# the direction_id from the GTFS feed that this trip refers to
direction_id: 0
}
# schedule information update
stop_time_update {
# this must be the same as in stop_times.txt in the GTFS feed
# if stop_id is unique within the trip, use either stop_sequence or stop_id
# if a stop_id appears more than once within the trip, use stop_sequence and optionally stop_id
stop_sequence: 3
# vehicle's arrival time
arrival {
# delayed by 5 seconds
# with respect to the arrival time defined in static feed
delay: 5
}
departure {
# delayed by 5 seconds
# with respect to the departure time defined in static feed
delay: 5
}
}
# this stop’s delay is propagated to subsequent stops
# until the upcoming stop with realtime schedule defined
# i.e. stop 4 - 9 will have 5 seconds delay
# update on the vehicle's schedule for stop sequence 10
stop_time_update {
stop_sequence: 10
# dynamically assign a new platform by providing its stop_id
# together with the stop_sequence
# the new platform assigned must be part of the same station
# as the original stop/platform
stop_id: platform_id_123
arrival {
# with the default delay of 0 (on time)
delay: 0
}
}
stop_time_update {
stop_sequence: 11
arrival {
# the time of arrival in seconds after epoch
time: 1656230830
}
departure {
# the time of departure in seconds after epoch
time: 1656230890
}
}
stop_time_update {
stop_sequence: 11
# the stop is skipped, i.e. the vehicle will not stop at this stop
schedule_relationship: SKIPPED
}
stop_time_update {
stop_sequence: 12
arrival {
# negative delay means vehicle is 2 seconds ahead of schedule
delay: -2
}
}
}
}
# second entity containing update information for another trip
entity {
id: "2"
trip_update {
trip {
# the trip_id from the GTFS feed that this added trip is duplicated after
trip_id: "trip2"
# the start time of the new added trip instance
start_time: "14:05:00"
start_date: "20220628"
# use “ADDED” to specify an extra trip that was added in addition to
# a running schedule
schedule_relationship: ADDED
}
stop_time_update {
stop_sequence: 1
arrival {
# It's recommended to provide an absolute timestamp
# for easy calculation of relative time
time: 1656239890
}
}
}
}
# third entity containing update information for a canceled trip
entity {
id: "3"
trip_update {
trip {
trip_id: "trip2"
start_time: "14:05:00"
start_date: "20220628"
# use “CANCELED” to specify a trip that existed in static GTFS but was canceled
schedule_relationship: CANCELED
}
}
}