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.
Enum value | Warning or info message | Troubleshooting tips |
---|---|---|
TRIP_UPDATE_SOME_STU_NOT_MATCHED |
%(value) of valid 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)". |
Make sure that the StopTimeUpdates are provided in the correct order. |
VEHICLE_POSITION_DUPLICATE_TRIP_BLOCK_TRANSFER |
A block transfer trip $(trip_id) and start_time
$(timestamp_string) reported by multiple vehicles. |
Ensure that only one vehicle represents a trip at a specific start time. |
INVALID_ALERT_ROUTE_NOT_MATCHED |
Alert discarded: route_id "%(route_id)" could not be matched to
GTFS feed. |
Verify whether the static schedule is correct and add the route information if it's
missing. When the new static schedule is live, correct the route_id reference
in the Realtime feed. |
INVALID_ALERT_STOP_NOT_MATCHED |
Alert discarded: stop_id "%(stop_id)" could not be matched to GTFS
feed. |
Verify whether the static schedule is correct and add the stop information if it's
missing. When the new static schedule is live, correct the stop_id reference in
the Realtime feed. |
INVALID_ALERT_TRIP_NOT_MATCHED |
Alert discarded: trip_id "%(trip_id)" could not be matched to GTFS
feed. |
Verify whether the static schedule is correct and add the trip information if it's
missing. When the new static schedule is live, correct the trip_id reference in
the Realtime feed. |
STOP_TIME_UPDATE_PREMATURE_ARRIVAL |
Arrival of 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). |
Review the arrival time and departure time for the given stop_id or the
previous ones. Fix the incorrect values to ensure that the times don't decrease. |
INVALID_ALERT_NO_INFORMED_ENTITIES |
At least one informed entity should be given. | Include a relevant informed_entity in the alert. |
PROTO_ENCODING_MISMATCH |
Configured proto encoding differs from received encoding. | Provide the feed in the correct format. If the problem persists, reach out to your Google Transit representative for help. |
STOP_TIME_UPDATE_PREMATURE_DEPARTURE |
Departure of 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). |
Review the departure time for the given stop_id or the previous ones. Fix the
incorrect values to ensure that the departure times don't decrease. |
DETOUR_MUST_SPECIFY_TIME |
Detour of trip "%(trip_id)" through stop "%(stop_id)" must specify absolute time. | Include the exact times at the affected stop_id for the specified
trip_id . |
ENTITY_MUST_HAVE_ALERTS |
Entity must have alerts. | Verify that the feed content is complete and that each FeedEntity message
includes information about service alerts. |
ENTITY_MUST_HAVE_POSITIONS |
Entity must have positions. | Verify that the feed content is complete and that each FeedEntity message
includes vehicle position information. |
ENTITY_MUST_HAVE_UPDATES |
Entity must have trip updates. | Verify that the feed content is complete and that each FeedEntity message
includes information about trip updates. |
TIMESTAMP_FUTURE |
Feed timestamp %(timestamp) (%(timestamp_string)) is in the future by %(diff_time) seconds (%(difftime_string)). Using the acquisition timestamp which is %(localtime) (%(localtime_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. |
TIMESTAMP_PAST |
Feed timestamp %(timestamp) (%(timestamp_string)) is in the past by %(diff_time) seconds (%(difftime_string)). Using the acquisition timestamp which is %(localtime) (%(localtime_string)). | Regenerate the Realtime feed more frequently, even if the content remains the same or empty. |
NO_VALID_TEXT |
Field %(field) has no valid translations. | Review the TranslatedString messages and fix any relevant issues, such as
HTML_TAGS_FOUND , INVALID_URL_LENGTH ,
INVALID_TEXT_LENGTH , and INVALID_URL . |
HTML_TAGS_FOUND |
Field %(field)(%(index)) contains HTML tags. | Remove any HTML tags from the field. |
INVALID_LANGUAGE |
Field %(field)(%(index)) has invalid language code "%(language)". | Set the language field to a valid BCP-47 language code. |
INVALID_URL |
Field %(field)(%(index)) has invalid URL (absolute http or https expected). | Include a valid URL for the alert. |
INVALID_TEXT_LENGTH |
Field %(field)(%(index)) has length %(length) (maximum %(max_length)). | Shorten the supplied text, which often shows on small screens, such as mobile phones. If you want to provide more details to the users, provide a URL reference instead. |
INVALID_URL_LENGTH |
Field %(field)(%(index)) has URL length %(length) (maximum %(max_length)). | Provide a URL that fits within the limits. |
MULTIPLE_UNSPECIFIED_LANGUAGE |
Field %(field)(%(index)) is a repeated translation with no language set. | Review the TranslatedString messages. Set correct values for the
language field where more than one translation is given. |
INVALID_TRIP_UPDATE_DELAY |
Invalid delay within trip update: %(value). | Review the delay field of the given entity_id and fix the
incorrect value. |
INVALID_TRIP_UPDATE_EVENT_TIME |
Invalid stop event time: %(timestamp). | Include TripUpdates only for trips that are ongoing or occurring in the near
future. |
INVALID_TRIP_UPDATE_DEPARTURE_NO_TIME |
Neither time nor delay provided for a departure. |
Include a 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 |
Neither time nor delay provided for an arrival. |
Include a time field, a delay field, or both at each
StopTimeEvent message. If no information is available, omit the
arrival field. |
MISSING_CONTENT_AND_EFFECT |
No valid content or effect. | Add effect , header_text , or description_text into
the alert. If no information is available, remove the alert instead. |
CUSTOM_PARSE_WARNING |
Partial failure when parsing the custom-format feed: %(value_string) | This error indicates a portion of the Realtime feed wasn't able to be parsed. Open a text editor to verify the feed's content, or reupload the feed. If the error persists, contact your Google Transit representative for help. |
VEHICLE_POSITION_BAD_START_TIME |
Specified trip $(trip_id) start time is %(diff_time) seconds away from actual start of the vehicle. | Specify the start time of the vehicle close to the actual start time of the trip. |
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. |
Ensure that the value of 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). |
Verify the accuracy of the static feed. If needed, fix the value of 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. |
Verify the accuracy of the static feed. If needed, fix the value of
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). |
Be sure to set the order of StopTimeUpdates with
stop_sequence . |
FEED_TIMESTAMP_CONSISTENTLY_IN_THE_PAST |
The feed timestamp is consistently in the past by %(diff_time) seconds (%(difftime_string)). | Confirm that the timestamp value is in UTC timezone, in seconds after epoch. Confirm that your server's clocks are synchronized, such as with NTP. Be sure to update the feed regularly. |
TIMESTAMP_MISSING |
The feed's FeedHeader is missing the timestamp field. |
Fill in the 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 |
The FeedEntity 's id appears more than once in the feed. |
Ensure that all entity IDs are unique in the feed. |
PROTO_ASCII_HAS_BOM |
The provided feed begins with a Byte Order Mark (BOM). | Remove the Byte Order Mark. Ensure that the text-formatted protocol buffer is in UTF-8 without a BOM. We recommend that you provide the protocol buffer in binary format instead. |
TRIP_UPDATE_TIMESTAMP_CONSISTENTLY_IN_THE_FUTURE |
The timestamp for some trip update is consistently in the future by
%(diff_time) seconds (%(difftime_string)). |
Confirm that the 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 |
The timestamp is consistently in the future by %(diff_time) seconds (%(difftime_string)). | Confirm that the 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 |
The timestamp is consistently in the past by %(diff_time) seconds
(%(difftime_string)). |
Confirm that the 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 |
The trip id "%(trip_id)" is unknown to the static GTFS feed. | Verify the static feed to ensure that it contains correct and up-to-date information.
Ensure that the correct version of the static feed is in use, or upload the correct version
where necessary. Provide an existing and accurate trip_id in the
TripDescriptor . |
TRIP_OUTSIDE_SERVICE_WINDOW |
The trip with id "%(trip_id)" is not in service at the specified time. | Verify the accuracy of the static feed. Add the trip information if it’s missing. Wait
until the new version of the static feed is live. Correct the trip_id reference in
the Realtime feed. |
AMBIGUOUS_TRIP_DESCRIPTOR |
The TripDescriptor is ambiguous, and does not resolve a single trip at a
particular time. |
If the trip is frequency based, be sure to provide a valid start_time value
and a start_date value in TripDescriptor . |
INVALID_TRIP_UPDATE_FUTURE_TIMESTAMP |
The 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)). |
Verify that the clock source has the correct time set. Verify that any timezone
conversions are performed accurately. The Vehicle.Position.timestamp field
needs to be formatted as a UTC timezone, in seconds after epoch. |
INVALID_VEHICLE_POSITION_FUTURE_TIMESTAMP |
The 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)). |
Verify that the clock source has the correct time set. Verify that any timezone
conversions are performed accurately. The Vehicle.Position.timestamp field
needs to be formatted as a UTC timezone, in seconds after epoch. |
INVALID_VEHICLE_POSITION_STALE_TIMESTAMP |
The 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)). |
Remove the out-of-service vehicles from the feed. Verify that the clock is synchronized and the timezone conversions are correct. |
INVALID_ALERT_TIME_RANGE_END_PAST |
Time range ended over a month ago: %(time_end). | Remove alerts (or active_periods ) which have the end time in the past and are
no longer active. |
INVALID_ALERT_TIME_RANGE_ORDER |
Time range order is reversed: (%(time_start), %(time_end)). | Verify the value of the active_period fields. The order of these fields might
be reversed. |
INVALID_ALERT_TIME_RANGE_START_FUTURE |
Time range starts more than a year from now: %(time_start). | Include an active_period start time in the near future into the alerts. |
STOP_TIME_AND_DELAY_MISMATCH |
Trip "%(trip_id)" at stop "%(stop_id)" specifies timestamp %(timestamp) and delay %(delay) which contradict each other. Setting delay to %(value). | Verify that the Realtime feed matches the currently live static feed. Make sure that the
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 |
Trip "%(trip_id)" has invalid start date "%(value_string)", assuming today. Expected format is "YYYYMMDD". | Verify the value of the start_date for the specified trip. Ensure that the value is correct. |
INVALID_START_TIME |
Trip "%(trip_id)" has invalid start time "%(value_string)". Expected format is "HH:MM:SS". | Verify the value and format of the start_time for the specified trip. Ensure
that the value and the format are correct. |
VEHICLE_POSITION_DUPLICATE_TRIP |
Trip $(trip_id) and start_time $(timestamp_string)
reported by multiple vehicles. |
Change the start_time of the trip and change the
ScheduleRelationship to ADDED for the non-frequency based
trips. |
VEHICLE_POSITION_CONVERTED_TO_ADDED |
Trip $(trip_id) schedule relationship was changed to ADDED
trip. |
This error is the side effect of another problem. Address that problem first to fix this error. |
INVALID_TRIP_UPDATE_MISSING_IDS |
Trip update contains stop_update with neither stop_sequence nor
stop_id . |
Include a stop_id , a stop_sequence , or both into the
StopTimeUpdate message. |
MULTIPLE_ENTITIES_PER_TRIP |
Trip update discarded: Represents the same trip_id "%(trip_id)"
with the same start time as other entity with id %(value_string). |
Ensure that there's at most one TripUpdate for each real-world journey.
Ensure that the TripDescriptor is unique within the feed. |
INVALID_TRIP_UPDATE_MISSING_CONTENT |
Trip update for scheduled trip_id "%(trip_id)" should specify at
least one stop time update with data or specify a delay. |
Provide one of the following:
|
TRIP_UPDATE_SUSPICIOUS_DELAY |
Trip with trip_id "%(trip_id)" contains a suspiciously
unreasonable delay of %(difftime_string). |
Verify that the 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 with trip_id "%(trip_id)" ended %(difftime_string)
ago. |
Remove trips from the feed a few minutes after they reach the final stop. |
UNSUPPORTED_ADDED_WITH_BLOCK_TRANSFER |
TripDescriptor with a schedule_relationship of
ADDED for a trip %(trip_id) with a block transfer is not
supported. |
Only use the 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. |
Provide a 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. |
Generate the feed regularly and keep data fresh. Ensure that the 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:
|
INVALID_VEHICLE_POSITION_VEHICLE_ID_MISSING |
VehiclePosition lacks a vehicle identifier. |
Provide a vehicle identifier. Make sure this value is stable across all versions of the feed in which the vehicle is in service. |
INVALID_VEHICLE_POSITION_INVALID_POSITION |
VehiclePosition lacks valid position information. |
Provide valid values for the latitude and longitude fields. |
INVALID_VEHICLE_POSITION_TIMESTAMP_MISSING |
VehiclePosition timestamp is missing. |
Provide a timestamp value of when the VehiclePosition information was
collected, in seconds after epoch formatted as a UTC timezone. |