This page provides a list of validation errors and warnings for the Realtime Transit feed, as well as tips on how to troubleshoot these issues.
Realtime validation errors
To provide accurate information to passengers, be sure to fix any validation errors in your Realtime feed.
To debug the Realtime validation errors, use the information from the following table.
- The "Enum value" column provides the short name of the issue in your Realtime feed, which displays in the validation report in the Transit Partner Dashboard.
- The "Error message" column provides the message that displays in the validation report in the Transit Partner Dashboard. It summarizes the error.
- The "Troubleshooting tips" column provides the major steps you need to take to resolve the error.
Enum value | Error message | Troubleshooting tips |
---|---|---|
PROTO_MISSING_FIELDS_ERROR
|
Binary protocol buffer is missing field(s) %(field) . | Open the file in a text editor and verify that the feed includes all of the fields marked
as Required
in the FeedMessage
protocol buffer. |
PROTO_ASCII_ERROR
|
Cannot parse ASCII protocol buffer. Errors: %(field) . | Open the file in a text editor and verify that the feed includes all of the required fields and uses the correct syntax. |
PROTO_PARSE_ERROR
|
Cannot parse binary protocol buffer. | Open the file in a text editor and verify that the feed can be parsed as a FeedMessage
. You can find code examples at Feed examples
. |
URL_DNS_ERROR
|
DNS error for URL. | Verify the internet connection and DNS settings. |
FETCHER_CONNECTION_ERROR
|
Failed to connect to URL. | Verify the URL that you provided for fetching. Make sure the URL is correct. |
CUSTOM_PARSE_ERROR
|
Failed to parse the custom-format feed: %(value_string) | Verify the file content in a text editor. Confirm that the file generates correctly and isn't corrupted during transport. If the error persists, reach out to your Google Transit representative for help. |
FEED_TOO_OLD
|
Feed timestamp %(timestamp) ( %(timestamp_string) ) is in the past by %(diff_time) seconds ( %(difftime_string) ). The current time is %(localtime) ( %(localtime_string) ). Feed discarded. | Verify that there are no other problems reported about fetching the feed. Generate the feed regularly and keep data fresh. Ensure that the feed timestamp correctly represents the feed creation time in seconds after epoch (in UTC timezone). |
FETCHER_HTTP_ERROR
|
HTTP Error: %(value) . | Verify the HTTP error code returned and investigate the issue accordingly. |
FULL_DATASET_REQUIRED
|
Only FULL_DATASET
feeds are supported. |
Set the value of incrementality
to FULL_DATASET
. |
FEED_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE
|
The feed timestamp is consistently in the future by %(diff_time) seconds ( %(difftime_string) ). | Be sure to provide the timestamp in the UTC timezone, in seconds after epoch. Check your server’s clocks to make sure that they're all synchronized, such as with NTP. |
INVALID_TIMESTAMP_RANGE
|
The feed timestamp value is out of range ( %(timestamp) ). | Provide a feed timestamp that represents the feed creation time in seconds after epoch (in UTC timezone). |
PROTO_ENCODING_UNKNOWN
|
Unknown feed encoding. | Use the correct encoding to configure the feed. Your final feed needs to be in binary format but you can use the ASCII format for testing. |
VEHICLE_POSITION_INTERNAL_ERROR
|
VehiclePosition
conversion into TripUpdate
failed for %(trip_id)
with a generic error " %(value_string)
". |
This error indicates that the VehiclePosition
isn't used to estimate a TripUpdate
. Contact your Google Transit representative for help. |
Realtime validation warnings
To increase the feed data quality, it’s important to fix the validation warnings that indicate potential issues with your Realtime feed.
To debug the Realtime validation warnings, search through the entries in the following table.
- The "Enum value" column provides the short name of the issue in your Realtime feed, which displays in the validation report in the Transit Partner Dashboard.
- The "Warning or info message" column provides the message that displays in the validation report in the Transit Partner Dashboard. It summarizes the warning or information.
- The "Troubleshooting tips" column provides the major steps you need to take to resolve the warning.
TRIP_UPDATE_SOME_STU_NOT_MATCHED
StopTimeUpdates
specified trip_id
" %(trip_id)
" were unable to be matched against the GTFS trip. e.g. position: %(index)
stop_sequence: %(next_seq)
stop_id
:
" %(stop_id)
".StopTimeUpdates
are provided in the correct order.VEHICLE_POSITION_DUPLICATE_TRIP_BLOCK_TRANSFER
start_time
$(timestamp_string)
reported by multiple vehicles.INVALID_ALERT_ROUTE_NOT_MATCHED
route_id
" %(route_id)
" could not be matched to
GTFS feed.route_id
reference
in the Realtime feed.INVALID_ALERT_STOP_NOT_MATCHED
stop_id
" %(stop_id)
" could not be matched to GTFS
feed.stop_id
reference in
the Realtime feed.INVALID_ALERT_TRIP_NOT_MATCHED
trip_id
" %(trip_id)
" could not be matched to GTFS
feed.trip_id
reference in
the Realtime feed.STOP_TIME_UPDATE_PREMATURE_ARRIVAL
StopTimeUpdate
for trip " %(trip_id)
" with stop_id
" %(stop_id)
" and stop_sequence
%(next_seq)
is %(value)
seconds earlier than previous StopTimeUpdate
with stop_id
" %(other_id)
" and stop_sequence
%(prev_seq)
.stop_id
or the
previous ones. Fix the incorrect values to ensure that the times don't decrease.INVALID_ALERT_NO_INFORMED_ENTITIES
informed_entity
in the alert.PROTO_ENCODING_MISMATCH
STOP_TIME_UPDATE_PREMATURE_DEPARTURE
StopTimeUpdate
for trip " %(trip_id)
" with stop_id
" %(stop_id)
" and stop_sequence
%(next_seq)
is %(value)
seconds earlier than previous StopTimeUpdate
with stop_id
" %(other_id)
" and stop_sequence
%(prev_seq)
.stop_id
or the previous ones. Fix the
incorrect values to ensure that the departure times don't decrease.DETOUR_MUST_SPECIFY_TIME
stop_id
for the specified trip_id
.ENTITY_MUST_HAVE_ALERTS
FeedEntity
message
includes information about service alerts.ENTITY_MUST_HAVE_POSITIONS
FeedEntity
message
includes vehicle position information.ENTITY_MUST_HAVE_UPDATES
FeedEntity
message
includes information about trip updates.TIMESTAMP_FUTURE
TIMESTAMP_PAST
NO_VALID_TEXT
TranslatedString
messages and fix any relevant issues, such as HTML_TAGS_FOUND
, INVALID_URL_LENGTH
, INVALID_TEXT_LENGTH
, and INVALID_URL
.HTML_TAGS_FOUND
INVALID_LANGUAGE
INVALID_URL
INVALID_TEXT_LENGTH
INVALID_URL_LENGTH
MULTIPLE_UNSPECIFIED_LANGUAGE
TranslatedString
messages. Set correct values for the language
field where more than one translation is given.INVALID_TRIP_UPDATE_DELAY
delay
field of the given entity_id
and fix the
incorrect value.INVALID_TRIP_UPDATE_EVENT_TIME
TripUpdates
only for trips that are ongoing or occurring in the near
future.INVALID_TRIP_UPDATE_DEPARTURE_NO_TIME
time
nor delay
provided for a departure.time
field, a delay
field, or both at each StopTimeEvent
message. If no information is available, omit the departure
field.INVALID_TRIP_UPDATE_ARRIVAL_NO_TIME
time
nor delay
provided for an arrival.time
field, a delay
field, or both at each StopTimeEvent
message. If no information is available, omit the arrival
field.MISSING_CONTENT_AND_EFFECT
effect
, header_text
, or description_text
into
the alert. If no information is available, remove the alert
instead.CUSTOM_PARSE_WARNING
VEHICLE_POSITION_BAD_START_TIME
INVALID_TRIP_UPDATE_INCONSISTENT_IDS
stop_sequence
%(value)
does not match stop " %(stop_id)
"
for trip " %(trip_id)
". Overriding it with the stop_sequence
%(next_seq)
from the static index.stop_sequence
field is correct and matches the stop_sequence
for the same stop_id
and trip_id
in the
current static feed.INVALID_STOP_STOP_ID
StopTimeUpdate
discarded: stop_id
" %(stop_id)
" given
for trip " %(trip_id)
" could not be matched to GTFS feed. stop_sequence
[if present] %(value)
.stop_id
in stop_times.txt
for the trip. Wait until the new version of the static feed
is live. Update the stop_id
reference in the Realtime feed.INVALID_STOP_SEQUENCE_ID
StopTimeUpdate
discarded: stop_sequence
%(value)
within trip " %(trip_id)
" could not be matched to GTFS feed.stop_sequence
. Wait until the new version of the static feed is live. Update
the stop_sequence
reference in the Realtime feed.INVALID_TRIP_UPDATE_ORDER
StopTimeUpdate
discarded: stop_sequence
order violation for trip_id
" %(trip_id)
" stop_id
[if present]
" %(stop_id)
", stop_sequence
%(prev_seq)
followed by %(next_seq)
.StopTimeUpdates
with stop_sequence
.FEED_TIMESTAMP_CONSISTENTLY_IN_THE_PAST
TIMESTAMP_MISSING
FeedHeader
is missing the timestamp
field.timestamp
field in the FeedHeader
in seconds after
epoch, in UTC timezone. The timestamp needs to correctly represent the feed generation
time.ENTITY_MORE_THAN_ONCE
FeedEntity
's id appears more than once in the feed.PROTO_ASCII_HAS_BOM
TRIP_UPDATE_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE
timestamp
for some trip update is consistently in the future by %(diff_time)
seconds ( %(difftime_string)
).timestamp
value is formatted as a UTC timezone, in seconds
after epoch. Confirm that your server's clocks are synchronized, such as with NTP. Remove TripUpdates
from the feed for trips that were completed more than one hour
ago.VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE
timestamp
value is formatted as a UTC timezone, in seconds
after epoch. Confirm that your server's clocks are synchronized, such as with NTP.VEHICLE_POSITION_TIMESTAMP_CONSISTENTLY_IN_THE_PAST
timestamp
is consistently in the past by %(diff_time)
seconds
( %(difftime_string)
).timestamp
value is formatted as a UTC timezone, in seconds
after epoch. Confirm that your server's clocks are synchronized, such as with NTP. Remove VehiclePositions
from the feed for trips that were completed more than one hour
ago.UNKNOWN_TRIP_ID
trip_id
in the TripDescriptor
.TRIP_OUTSIDE_SERVICE_WINDOW
trip_id
reference in
the Realtime feed.AMBIGUOUS_TRIP_DESCRIPTOR
TripDescriptor
is ambiguous, and does not resolve a single trip at a
particular time.start_time
value
and a start_date
value in TripDescriptor
.INVALID_TRIP_UPDATE_FUTURE_TIMESTAMP
TripUpdate
timestamp %(timestamp)
( %(timestamp_string)
) is in the future by %(diff_time)
seconds
( %(difftime_string)
) when compared to the feed timestamp which is %(localtime)
( %(localtime_string)
).Vehicle.Position.timestamp
field
needs to be formatted as a UTC timezone, in seconds after epoch.INVALID_VEHICLE_POSITION_FUTURE_TIMESTAMP
VehiclePosition
timestamp %(timestamp)
( %(timestamp_string)
) is in the future by %(diff_time)
seconds
( %(difftime_string)
) when compared to the feed timestamp which is %(localtime)
( %(localtime_string)
).Vehicle.Position.timestamp
field
needs to be formatted as a UTC timezone, in seconds after epoch.INVALID_VEHICLE_POSITION_STALE_TIMESTAMP
VehiclePosition
timestamp %(timestamp)
( %(timestamp_string)
) is in the past by %(diff_time)
seconds
( %(difftime_string)
) when compared to the feed timestamp which is %(localtime)
( %(localtime_string)
).INVALID_ALERT_TIME_RANGE_END_PAST
active_periods
) which have the end time in the past and are
no longer active.INVALID_ALERT_TIME_RANGE_ORDER
active_period
fields. The order of these fields might
be reversed.INVALID_ALERT_TIME_RANGE_START_FUTURE
active_period
start time in the near future into the alerts.STOP_TIME_AND_DELAY_MISMATCH
delay
field and time
field in StopTimeEvent
are
correct and consistent. Alternatively, omit the delay
field entirely and
provide only the time
field instead.INVALID_START_DATE
INVALID_START_TIME
start_time
for the specified trip. Ensure
that the value and the format are correct.VEHICLE_POSITION_DUPLICATE_TRIP
start_time
$(timestamp_string)
reported by multiple vehicles.start_time
of the trip and change the ScheduleRelationship
to ADDED
for the non-frequency based
trips.VEHICLE_POSITION_CONVERTED_TO_ADDED
ADDED
trip.INVALID_TRIP_UPDATE_MISSING_IDS
stop_update
with neither stop_sequence
nor stop_id
.stop_id
, a stop_sequence
, or both into the StopTimeUpdate
message.MULTIPLE_ENTITIES_PER_TRIP
trip_id
" %(trip_id)
"
with the same start time as other entity with id %(value_string)
.TripUpdate
for each real-world journey.
Ensure that the TripDescriptor
is unique within the feed.INVALID_TRIP_UPDATE_MISSING_CONTENT
trip_id
" %(trip_id)
" should specify at
least one stop time update with data or specify a delay.Provide one of the following:
-
StopTimeUpdate
with data -
TripUpdate.delay
TRIP_UPDATE_SUSPICIOUS_DELAY
trip_id
" %(trip_id)
" contains a suspiciously
unreasonable delay of %(difftime_string)
.TripDescription
is clearly defined, which needs to have a trip_id
, start_date
, and start_time
. Verify that StopTimeUpdates
have time values that match the specified trip. Check for any
timezone mismatch problems, for example, whether start_date
and start_time
are in the local timezone, but all integer time fields in FeedMessage
are in seconds after epoch.TRIP_UPDATE_OBSOLETE
trip_id
" %(trip_id)
" ended %(difftime_string)
ago.UNSUPPORTED_ADDED_WITH_BLOCK_TRANSFER
TripDescriptor
with a schedule_relationship
of ADDED
for a trip %(trip_id)
with a block transfer is not
supported.ADDED
value for ScheduleRelationship
to indicate
the isolated trips.UNSUPPORTED_ADDED_WITHOUT_TIMES
TripDescriptor
with a schedule_relationship
of ADDED
for a trip %(trip_id)
without times specified.start_date
and a start_time
to indicate when the added
trip began.TRIP_UPDATE_TOO_OLD
TripUpdate
timestamp %(timestamp)
( %(timestamp_string)
)
is in the past by %(diff_time)
seconds ( %(difftime_string)
). The
current time is %(localtime)
( %(localtime_string)
). TripUpdate
discarded.TripUpdate
timestamp is correct, in seconds after epoch, and formatted as a UTC timezone. Remove trips
from the feed a few minutes after they reach the final stop.INVALID_TRIP_UPDATE_DELAY_USAGE
TripUpdate
's delay
field specified together with time in StopTimeUpdates
.Provide timing information using only one of the following, instead of both:
-
StopTimeUpdates
-
TripUpdate.delay
INVALID_VEHICLE_POSITION_VEHICLE_ID_MISSING
VehiclePosition
lacks a vehicle identifier.INVALID_VEHICLE_POSITION_INVALID_POSITION
VehiclePosition
lacks valid position information.latitude
and longitude
fields.INVALID_VEHICLE_POSITION_TIMESTAMP_MISSING
VehiclePosition
timestamp is missing.VehiclePosition
information was
collected, in seconds after epoch formatted as a UTC timezone.