AI-generated Key Takeaways
- 
          This document provides a comprehensive list of Realtime Transit feed validation errors and warnings, categorized for easy navigation. 
- 
          Each error and warning includes an explanation and troubleshooting advice to help resolve issues. 
- 
          Realtime feed validation ensures data accuracy and consistency with the static GTFS feed, which is crucial for accurate transit information. 
- 
          Common errors relate to timestamps, trip updates, vehicle positions, and alert information. 
- 
          By addressing these errors and warnings, agencies can improve the quality and reliability of their Realtime Transit data. 
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 FeedMessageprotocol 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_DATASETfeeds are supported. | Set the value of incrementalitytoFULL_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 | VehiclePositionconversion intoTripUpdatefailed for
        %(trip_id) with a generic error "%(value_string)". | This error indicates that the VehiclePositionisn't used to estimate aTripUpdate. 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 StopTimeUpdatesspecifiedtrip_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 StopTimeUpdatesare 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_idreference
        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_idreference 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_idreference in
        the Realtime feed. | 
| STOP_TIME_UPDATE_PREMATURE_ARRIVAL | Arrival of StopTimeUpdatefor trip "%(trip_id)" withstop_id"%(stop_id)" andstop_sequence%(next_seq) is %(value) seconds earlier than previousStopTimeUpdatewithstop_id"%(other_id)" andstop_sequence%(prev_seq). | Review the arrival time and departure time for the given stop_idor 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_entityin 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 StopTimeUpdatefor trip "%(trip_id)" withstop_id"%(stop_id)" andstop_sequence%(next_seq) is %(value) seconds earlier than previousStopTimeUpdatewithstop_id"%(other_id)" andstop_sequence%(prev_seq). | Review the departure time for the given stop_idor 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_idfor the specifiedtrip_id. | 
| ENTITY_MUST_HAVE_ALERTS | Entity must have alerts. | Verify that the feed content is complete and that each FeedEntitymessage
        includes information about service alerts. | 
| ENTITY_MUST_HAVE_POSITIONS | Entity must have positions. | Verify that the feed content is complete and that each FeedEntitymessage
        includes vehicle position information. | 
| ENTITY_MUST_HAVE_UPDATES | Entity must have trip updates. | Verify that the feed content is complete and that each FeedEntitymessage
        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 TranslatedStringmessages and fix any relevant issues, such asHTML_TAGS_FOUND,INVALID_URL_LENGTH,INVALID_TEXT_LENGTH, andINVALID_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 TranslatedStringmessages. Set correct values for thelanguagefield where more than one translation is given. | 
| INVALID_TRIP_UPDATE_DELAY | Invalid delay within trip update: %(value). | Review the delayfield of the givenentity_idand fix the
        incorrect value. | 
| INVALID_TRIP_UPDATE_EVENT_TIME | Invalid stop event time: %(timestamp). | Include TripUpdatesonly for trips that are ongoing or occurring in the near
        future. | 
| INVALID_TRIP_UPDATE_DEPARTURE_NO_TIME | Neither timenordelayprovided for a departure. | Include a timefield, adelayfield, or both at eachStopTimeEventmessage. If no information is available, omit thedeparturefield. | 
| INVALID_TRIP_UPDATE_ARRIVAL_NO_TIME | Neither timenordelayprovided for an arrival. | Include a timefield, adelayfield, or both at eachStopTimeEventmessage. If no information is available, omit thearrivalfield. | 
| MISSING_CONTENT_AND_EFFECT | No valid content or effect. | Add effect,header_text, ordescription_textinto
        the alert. If no information is available, remove thealertinstead. | 
| 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 thestop_sequence%(next_seq) from the static index. | Ensure that the value of stop_sequencefield is correct and matches thestop_sequencefor the samestop_idandtrip_idin the
        current static feed. | 
| INVALID_STOP_STOP_ID | StopTimeUpdatediscarded: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_idinstop_times.txtfor the trip. Wait until the new version of the static feed
        is live. Update thestop_idreference in the Realtime feed. | 
| INVALID_STOP_SEQUENCE_ID | StopTimeUpdatediscarded: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
        thestop_sequencereference in the Realtime feed. | 
| INVALID_TRIP_UPDATE_ORDER | StopTimeUpdatediscarded:stop_sequenceorder violation fortrip_id"%(trip_id)"stop_id[if present]
        "%(stop_id)",stop_sequence%(prev_seq) followed by
        %(next_seq). | Be sure to set the order of StopTimeUpdateswithstop_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 FeedHeaderis missing thetimestampfield. | Fill in the timestampfield in theFeedHeaderin 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 timestampfor some trip update is consistently in the future by
        %(diff_time) seconds (%(difftime_string)). | Confirm that the timestampvalue is formatted as a UTC timezone, in seconds
        after epoch. Confirm that your server's clocks are synchronized, such as with NTP. RemoveTripUpdatesfrom 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 timestampvalue 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 timestampis consistently in the past by %(diff_time) seconds
        (%(difftime_string)). | Confirm that the timestampvalue is formatted as a UTC timezone, in seconds
        after epoch. Confirm that your server's clocks are synchronized, such as with NTP. RemoveVehiclePositionsfrom 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_idin theTripDescriptor. | 
| 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_idreference in
        the Realtime feed. | 
| AMBIGUOUS_TRIP_DESCRIPTOR | The TripDescriptoris 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_timevalue
        and astart_datevalue inTripDescriptor. | 
| INVALID_TRIP_UPDATE_FUTURE_TIMESTAMP | The TripUpdatetimestamp %(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.timestampfield
        needs to be formatted as a UTC timezone, in seconds after epoch. | 
| INVALID_VEHICLE_POSITION_FUTURE_TIMESTAMP | The VehiclePositiontimestamp %(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.timestampfield
        needs to be formatted as a UTC timezone, in seconds after epoch. | 
| INVALID_VEHICLE_POSITION_STALE_TIMESTAMP | The VehiclePositiontimestamp %(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_periodfields. 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_periodstart 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 delayfield andtimefield inStopTimeEventare
        correct and consistent. Alternatively, omit thedelayfield entirely and
        provide only thetimefield 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_timefor 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_timeof the trip and change theScheduleRelationshiptoADDEDfor the non-frequency based
        trips. | 
| VEHICLE_POSITION_CONVERTED_TO_ADDED | Trip $(trip_id) schedule relationship was changed to ADDEDtrip. | 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_updatewith neitherstop_sequencenorstop_id. | Include a stop_id, astop_sequence, or both into theStopTimeUpdatemessage. | 
| 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 TripUpdatefor each real-world journey.
        Ensure that theTripDescriptoris 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 TripDescriptionis clearly defined, which needs to have atrip_id,start_date, andstart_time. Verify thatStopTimeUpdateshave time values that match the specified trip. Check for any
        timezone mismatch problems, for example, whetherstart_dateandstart_timeare in the local timezone, but all integer time fields inFeedMessageare 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 | TripDescriptorwith aschedule_relationshipofADDEDfor a trip %(trip_id) with a block transfer is not
        supported. | Only use the ADDEDvalue forScheduleRelationshipto indicate
        the isolated trips. | 
| UNSUPPORTED_ADDED_WITHOUT_TIMES | TripDescriptorwith aschedule_relationshipofADDEDfor a trip %(trip_id) without times specified. | Provide a start_dateand astart_timeto indicate when the added
        trip began. | 
| TRIP_UPDATE_TOO_OLD | TripUpdatetimestamp %(timestamp) (%(timestamp_string))
        is in the past by %(diff_time) seconds (%(difftime_string)). The
        current time is %(localtime) (%(localtime_string)).TripUpdatediscarded. | Generate the feed regularly and keep data fresh. Ensure that the TripUpdatetimestamp 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'sdelayfield specified together with time inStopTimeUpdates. | Provide timing information using only one of the following, instead of both: 
 | 
| INVALID_VEHICLE_POSITION_VEHICLE_ID_MISSING | VehiclePositionlacks 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 | VehiclePositionlacks valid position information. | Provide valid values for the latitudeandlongitudefields. | 
| INVALID_VEHICLE_POSITION_TIMESTAMP_MISSING | VehiclePositiontimestamp is missing. | Provide a timestamp value of when the VehiclePositioninformation was
        collected, in seconds after epoch formatted as a UTC timezone. |