[{"data":1,"prerenderedAt":1117},["ShallowReactive",2],{"docs-\u002Fdocs\u002Fdatastore\u002Ffeeds":3,"_apollo:default":1113,"_apollo:stationEditor":1114,"_apollo:feedManagement":1115,"_apollo:transferAnalyst":1116},{"id":4,"title":5,"body":6,"description":1103,"extension":1104,"meta":1105,"navigation":1107,"path":1108,"seo":1109,"stem":1110,"__hash__":1111,"lastUpdated":1112},"content\u002Fdocs\u002Fdatastore\u002Ffeeds.md","Feeds and feed versions",{"type":7,"value":8,"toc":1078},"minimark",[9,34,39,46,51,335,339,345,350,353,361,365,375,379,599,603,608,613,616,623,632,636,642,653,663,667,670,692,704,708,782,786,791,863,867,870,906,913,917,925,932,936,947,954,958,964,970,975,979],[10,11,12,13,18,19,23,24,28,29,33],"p",{},"Transitland is built on publicly available GTFS data contributed by our user community to the ",[14,15,17],"a",{"href":16},"\u002Fdocumentation\u002Fatlas","Transitland Atlas",". Detailed information is kept on each Feed, and updated whenever a new version of each Feed is discovered. Feed versions are archived for download (as ",[20,21,22],"code",{},".zip"," files) and imported into the Transitland Datastore for API querying by operators, stops, ",[14,25,27],{"href":26},"routes-and-route-stop-patterns.html","routes",", ",[14,30,32],{"href":31},"schedules.html","schedules",", etc.",[35,36,38],"h2",{"id":37},"feeds","Feeds",[10,40,41,42,45],{},"A Feed represents a unique GTFS data source. Each Feed has a URL to a publicly accessible GTFS archive, a mapping of GTFS ",[20,43,44],{},"agency_id"," values to Transitland Operators, the geographic extent of the Feed, and the details of the Feed's license.",[47,48,50],"h3",{"id":49},"feed-data-model","Feed data model",[52,53,54,70],"table",{},[55,56,57],"thead",{},[58,59,60,64,67],"tr",{},[61,62,63],"th",{},"Attribute",[61,65,66],{},"Type",[61,68,69],{},"Description",[71,72,73,87,100,113,129,142,155,167,186,206,223,240,252,264,277,290,306,322],"tbody",{},[58,74,75,81,84],{},[76,77,78],"td",{},[20,79,80],{},"onestop_id",[76,82,83],{},"Onestop ID",[76,85,86],{},"Feed Onestop ID",[58,88,89,94,97],{},[76,90,91],{},[20,92,93],{},"url",[76,95,96],{},"URL",[76,98,99],{},"Publicly accessible GTFS archive",[58,101,102,107,110],{},[76,103,104],{},[20,105,106],{},"name",[76,108,109],{},"String",[76,111,112],{},"Feed name",[58,114,115,120,123],{},[76,116,117],{},[20,118,119],{},"feed_format",[76,121,122],{},"Enum",[76,124,125,126],{},"Currently: ",[20,127,128],{},"gtfs",[58,130,131,136,139],{},[76,132,133],{},[20,134,135],{},"geometry",[76,137,138],{},"Geometry",[76,140,141],{},"Convex hull of Stops in the Feed",[58,143,144,149,152],{},[76,145,146],{},[20,147,148],{},"last_fetched_at",[76,150,151],{},"DateTime",[76,153,154],{},"Last time the Feed was retrieved",[58,156,157,162,164],{},[76,158,159],{},[20,160,161],{},"last_imported_at",[76,163,151],{},[76,165,166],{},"Last time the Feed was imported",[58,168,169,174,176],{},[76,170,171],{},[20,172,173],{},"license_name",[76,175,109],{},[76,177,178,182,183],{},[14,179,181],{"href":180},"#feed-license-information","License"," name, such as ",[20,184,185],{},"MIT",[58,187,188,193,195],{},[76,189,190],{},[20,191,192],{},"license_use_without_attribution",[76,194,122],{},[76,196,197,28,200,28,203],{},[20,198,199],{},"yes",[20,201,202],{},"no",[20,204,205],{},"unknown",[58,207,208,213,215],{},[76,209,210],{},[20,211,212],{},"license_create_derived_product",[76,214,122],{},[76,216,217,28,219,28,221],{},[20,218,199],{},[20,220,202],{},[20,222,205],{},[58,224,225,230,232],{},[76,226,227],{},[20,228,229],{},"license_redistribute",[76,231,122],{},[76,233,234,28,236,28,238],{},[20,235,199],{},[20,237,202],{},[20,239,205],{},[58,241,242,247,249],{},[76,243,244],{},[20,245,246],{},"license_attribution_text",[76,248,109],{},[76,250,251],{},"Required attribution text",[58,253,254,259,261],{},[76,255,256],{},[20,257,258],{},"license_url",[76,260,96],{},[76,262,263],{},"URL to Feed License",[58,265,266,271,274],{},[76,267,268],{},[20,269,270],{},"tags",[76,272,273],{},"Object",[76,275,276],{},"Tags",[58,278,279,284,287],{},[76,280,281],{},[20,282,283],{},"feed_versions",[76,285,286],{},"Feed Versions",[76,288,289],{},"Feed Version IDs (SHA1) for this Feed",[58,291,292,297,300],{},[76,293,294],{},[20,295,296],{},"active_feed_version",[76,298,299],{},"Feed Version",[76,301,302],{},[14,303,305],{"href":304},"#active-feed-version","Active Feed Version ID",[58,307,308,313,316],{},[76,309,310],{},[20,311,312],{},"operators_in_feed",[76,314,315],{},"Object array",[76,317,318,319,321],{},"Mapping of gtfs ",[20,320,44],{},"s to Operators",[58,323,324,329,332],{},[76,325,326],{},[20,327,328],{},"changesets_imported_from_this_feed",[76,330,331],{},"Changesets",[76,333,334],{},"Changesets created from Feed",[47,336,338],{"id":337},"feeds-api","Feeds API",[10,340,341,342],{},"Endpoint: ",[20,343,344],{},"\u002Fapi\u002Fv1\u002Ffeeds",[10,346,347],{},[14,348],{"name":349},"feed-license-information",[47,351,352],{"id":349},"Feed license information",[10,354,355,356,360],{},"To learn more about how Transitland classifies the licenses associated with a feed, see ",[14,357,359],{"href":358},"\u002Fan-open-project\u002Findex.html","this overview of Transitland legal and licensing issues",".",[35,362,364],{"id":363},"feed-versions","Feed versions",[10,366,367,368,374],{},"Approximately once per day, the URL for each Feed is checked. When a new version of the Feed is found, a Feed Version is created. The ID for each Feed Version is the ",[14,369,373],{"href":370,"rel":371},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSHA-1",[372],"nofollow","SHA1 checksum"," of the GTFS archive.",[47,376,378],{"id":377},"feed-versions-data-model","Feed versions data model",[52,380,381,391],{},[55,382,383],{},[58,384,385,387,389],{},[61,386,63],{},[61,388,66],{},[61,390,69],{},[71,392,393,406,419,431,443,454,466,478,491,503,515,528,543,556,568,587],{},[58,394,395,400,403],{},[76,396,397],{},[20,398,399],{},"sha1",[76,401,402],{},"SHA1",[76,404,405],{},"SHA1 checksum of the GTFS archive",[58,407,408,413,416],{},[76,409,410],{},[20,411,412],{},"md5",[76,414,415],{},"MD5",[76,417,418],{},"MD5 checksum of GTFS archive",[58,420,421,426,428],{},[76,422,423],{},[20,424,425],{},"feed",[76,427,83],{},[76,429,430],{},"Parent Feed Onestop ID",[58,432,433,438,440],{},[76,434,435],{},[20,436,437],{},"fetched_at",[76,439,151],{},[76,441,442],{},"Time was originally fetched",[58,444,445,449,451],{},[76,446,447],{},[20,448,93],{},[76,450,96],{},[76,452,453],{},"URL when fetched",[58,455,456,461,463],{},[76,457,458],{},[20,459,460],{},"download_url",[76,462,96],{},[76,464,465],{},"Archived copy of Feed Version, if allowed",[58,467,468,473,475],{},[76,469,470],{},[20,471,472],{},"feedvalidator_url",[76,474,96],{},[76,476,477],{},"Archived Google feedvalidator.py report",[58,479,480,485,488],{},[76,481,482],{},[20,483,484],{},"earliest_calendar_date",[76,486,487],{},"Date",[76,489,490],{},"First day of scheduled service",[58,492,493,498,500],{},[76,494,495],{},[20,496,497],{},"latest_calendar_date",[76,499,487],{},[76,501,502],{},"Last day of scheduled service",[58,504,505,510,512],{},[76,506,507],{},[20,508,509],{},"imported_at",[76,511,151],{},[76,513,514],{},"Last time Feed Version was imported",[58,516,517,522,525],{},[76,518,519],{},[20,520,521],{},"import_level",[76,523,524],{},"Integer",[76,526,527],{},"Import level (0-4)",[58,529,530,535,537],{},[76,531,532],{},[20,533,534],{},"import_status",[76,536,122],{},[76,538,539,540],{},"Import status, such as ",[20,541,542],{},"most_recent_succeeded",[58,544,545,550,553],{},[76,546,547],{},[20,548,549],{},"feed_version_imports",[76,551,552],{},"IDs",[76,554,555],{},"Feed Version Import IDs",[58,557,558,563,565],{},[76,559,560],{},[20,561,562],{},"feed_version_infos",[76,564,552],{},[76,566,567],{},"Feed Version Info IDs",[58,569,570,575,578],{},[76,571,572],{},[20,573,574],{},"is_active_feed_version",[76,576,577],{},"Boolean",[76,579,580,583,584],{},[20,581,582],{},"true"," if Feed Version is ",[14,585,586],{"href":304},"active",[58,588,589,594,596],{},[76,590,591],{},[20,592,593],{},"changesets_imported_from_this_feed_version",[76,595,331],{},[76,597,598],{},"Changesets created from Feed Version",[47,600,602],{"id":601},"feed-versions-api","Feed versions API",[10,604,341,605],{},[20,606,607],{},"\u002Fapi\u002Fv1\u002Ffeed_versions",[10,609,610],{},[14,611],{"name":612},"active-feed-version",[47,614,615],{"id":612},"Active feed version",[10,617,618,619,622],{},"The most recent version of a feed that has been imported into the Transitland Datastore is marked as active. The ",[14,620,621],{"href":31},"schedule API endpoint"," only allows querying of the trips and calendars in the active feed version.",[10,624,625,626,631],{},"The ",[14,627,630],{"href":628,"rel":629},"https:\u002F\u002Fgithub.com\u002Ftransitland\u002Ftransitland-datastore\u002Fblob\u002Fmaster\u002Fapp\u002Fservices\u002Ffeed_maintenance_service.rb",[372],"FeedMaintenance service"," within Transitland Datastore automatically decides when to import a newly fetched feed version. If no need feed version is available when existing ScheduleStopPairs are about to expire, the FeedMaintenance service will extend them into the future.",[47,633,635],{"id":634},"most-recent-feed-version","Most recent feed version",[10,637,638,639,360],{},"Are you looking for the most recently fetched Feed Version? This is not necessarily the Feed Version where ",[20,640,641],{},"is_active_feed_version=true",[10,643,644,645,648,649,652],{},"To query for the most recently fetched version of a feed, use an API query like: ",[20,646,647],{},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeed_versions?feed_onestop_id=f-9v6-capitalmetro&per_page=1&sort_key=fetched_at&sort_order=desc"," (replacing ",[20,650,651],{},"feed_onestop_id"," as appropriate).",[10,654,655,656,659,660,360],{},"To directly download a copy of the most recently fetched version of a feed, use: ",[20,657,658],{},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeeds\u002Ff-9v6-capitalmetro\u002Fdownload_latest_feed_version"," (replacing the Onestop ID as appropriate). Note that downloading is not allowed for Feeds where ",[20,661,662],{},"license_redistribute=no",[47,664,666],{"id":665},"feed-version-reports","Feed version reports",[10,668,669],{},"The Transitland Datastore creates a number of validation and statistical reports for each Feed Version. The currently defined types of reports are:",[671,672,673,680],"ul",{},[674,675,676,679],"li",{},[20,677,678],{},"FeedVersionInfoStatistics",": General statistics",[674,681,682,685,686,691],{},[20,683,684],{},"FeedVersionInfoConveyalValidation",": ",[14,687,690],{"href":688,"rel":689},"https:\u002F\u002Fgithub.com\u002Fconveyal\u002Fgtfs-lib",[372],"Conveyal gtfs-lib"," validation results",[10,693,694,695,700,701,703],{},"Additionally, the results of ",[14,696,699],{"href":697,"rel":698},"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Ftransitfeed\u002Fwiki\u002FFeedValidator",[372],"Google's feedvalidator.py"," HTML output will be stored on the Feed Version as ",[20,702,472],{}," when available. In the future, this may instead be stored as an additional type of report.",[47,705,707],{"id":706},"feed-version-report-data-model","Feed version report data model",[52,709,710,720],{},[55,711,712],{},[58,713,714,716,718],{},[61,715,63],{},[61,717,66],{},[61,719,69],{},[71,721,722,734,746,758,769],{},[58,723,724,729,731],{},[76,725,726],{},[20,727,728],{},"id",[76,730,524],{},[76,732,733],{},"ID",[58,735,736,741,743],{},[76,737,738],{},[20,739,740],{},"type",[76,742,122],{},[76,744,745],{},"Report type",[58,747,748,753,755],{},[76,749,750],{},[20,751,752],{},"feed_version_sha1",[76,754,299],{},[76,756,757],{},"Parent Feed Version",[58,759,760,764,766],{},[76,761,762],{},[20,763,651],{},[76,765,83],{},[76,767,768],{},"Parent Feed",[58,770,771,776,779],{},[76,772,773],{},[20,774,775],{},"data",[76,777,778],{},"JSON",[76,780,781],{},"JSON blob containing report data",[47,783,785],{"id":784},"feed-version-report-api","Feed version report API",[10,787,341,788],{},[20,789,790],{},"\u002Fapi\u002Fv1\u002Ffeed_version_infos",[52,792,793,807],{},[55,794,795],{},[58,796,797,800,802,804],{},[61,798,799],{},"Query parameter",[61,801,66],{},[61,803,69],{},[61,805,806],{},"Example",[71,808,809,827,845],{},[58,810,811,815,817,820],{},[76,812,813],{},[20,814,651],{},[76,816,83],{},[76,818,819],{},"Filter by Feed",[76,821,822],{},[14,823,826],{"href":824,"rel":825},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeed_version_infos\u002F?feed_onestop_id=f-9q9-caltrain",[372],"Caltrain",[58,828,829,833,835,838],{},[76,830,831],{},[20,832,752],{},[76,834,299],{},[76,836,837],{},"Filter by Feed Version",[76,839,840],{},[14,841,844],{"href":842,"rel":843},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeed_version_infos?feed_version_sha1=36ba71b654ba6ed1e4866822832c11942c4761e5",[372],"Caltrain, single Feed Version",[58,846,847,851,853,856],{},[76,848,849],{},[20,850,740],{},[76,852,122],{},[76,854,855],{},"Filter by report type",[76,857,858],{},[14,859,862],{"href":860,"rel":861},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeed_version_infos\u002F?feed_onestop_id=f-9q9-caltrain&type=FeedVersionInfoStatistics",[372],"Caltrain statistics",[47,864,866],{"id":865},"feedversioninfostatistics-reports","FeedVersionInfoStatistics reports",[10,868,869],{},"This report contains details about the files in the GTFS archive and basic statistics about the CSV columns and values.",[671,871,872,878,900],{},[674,873,874,877],{},[20,875,876],{},"filenames",": The filenames present in the directory of the archive containing the CSV files.",[674,879,880,883,884,887,888,891,892,895,896,899],{},[20,881,882],{},"statistics",": Data for each GTFS CSV file and column, with the ",[20,885,886],{},"total"," number of rows with data for that column, the ",[20,889,890],{},"unique"," number of values encountered, as well as the ",[20,893,894],{},"min"," and ",[20,897,898],{},"max"," values.",[674,901,902,905],{},[20,903,904],{},"scheduled_service",": Key-value data for the number of seconds of scheduled service for each date the Feed has scheduled trips.",[10,907,908],{},[14,909,912],{"href":910,"rel":911},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeed_version_infos\u002F845",[372],"Example FeedVersionInfoStatistics  report",[47,914,916],{"id":915},"feedversioninfoconveyalvalidation-reports","FeedVersionInfoConveyalValidation reports",[10,918,919,920,924],{},"This report contains the JSON output of ",[14,921,923],{"href":688,"rel":922},[372],"Conveyal's gtfs-lib"," validator.",[10,926,927],{},[14,928,931],{"href":929,"rel":930},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeed_version_infos\u002F8115",[372],"Example FeedVersionInfoConveyalValidation report",[47,933,935],{"id":934},"google-feedvalidatorpy-reports","Google feedvalidator.py reports",[10,937,938,939,943,944,946],{},"The HTML output of ",[14,940,942],{"href":697,"rel":941},[372],"Google feedvalidator.py",". Currently, this is stored on the actual Feed Version record as ",[20,945,472],{}," as a link to a copy of the report stored on S3.",[10,948,949],{},[14,950,953],{"href":951,"rel":952},"https:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeed_versions\u002F36ba71b654ba6ed1e4866822832c11942c4761e5",[372],"Example Feed Version with Google feedvalidator.py report",[35,955,957],{"id":956},"feed-version-update-statistics","Feed version update statistics",[10,959,960,961,963],{},"The Feeds API also provides simple statistics characterizing when & how a Feed is updated. This includes the total number of Feed Versions, the average number of days between publication of new Feed Versions, the average number of service days in each Feed Version schedule, and the average number of days of overlapping schedule between subsequent Feed Versions. Note: because the ",[20,962,437],{}," value is used to sort the Feed Versions, manually uploaded files are excluded from statistics.",[10,965,966],{},[14,967,806],{"href":968,"rel":969},"http:\u002F\u002Ftransit.land\u002Fapi\u002Fv1\u002Ffeeds\u002Ff-c2g5-bctransit~kelownaregionaltransitsystem\u002Ffeed_version_update_statistics",[372],[10,971,341,972],{},[20,973,974],{},"\u002Fapi\u002Fv1\u002Ffeeds\u002F:feed_onestop_id\u002Ffeed_version_update_statistics",[47,976,978],{"id":977},"response","Response",[52,980,981,991],{},[55,982,983],{},[58,984,985,987,989],{},[61,986,63],{},[61,988,66],{},[61,990,69],{},[71,992,993,1003,1015,1027,1041,1053,1066],{},[58,994,995,999,1001],{},[76,996,997],{},[20,998,651],{},[76,1000,83],{},[76,1002,86],{},[58,1004,1005,1010,1012],{},[76,1006,1007],{},[20,1008,1009],{},"feed_versions_total",[76,1011,524],{},[76,1013,1014],{},"Total number of Feed Versions",[58,1016,1017,1022,1024],{},[76,1018,1019],{},[20,1020,1021],{},"feed_versions_filtered",[76,1023,524],{},[76,1025,1026],{},"Total, excluding manually updated Feed Versions",[58,1028,1029,1034,1036],{},[76,1030,1031],{},[20,1032,1033],{},"feed_versions_filtered_sha1",[76,1035,286],{},[76,1037,1038,1039],{},"Filtered Feed Versions ordered by ",[20,1040,437],{},[58,1042,1043,1048,1050],{},[76,1044,1045],{},[20,1046,1047],{},"fetched_at_frequency",[76,1049,524],{},[76,1051,1052],{},"Average days between new Feed Versions",[58,1054,1055,1060,1063],{},[76,1056,1057],{},[20,1058,1059],{},"scheduled_service_duration_average",[76,1061,1062],{},"Float",[76,1064,1065],{},"Average number of days in each schedule",[58,1067,1068,1073,1075],{},[76,1069,1070],{},[20,1071,1072],{},"scheduled_service_overlap_average",[76,1074,1062],{},[76,1076,1077],{},"Average number of days overlap between subsequent schedules",{"title":1079,"searchDepth":1080,"depth":1080,"links":1081},"",2,[1082,1088,1100],{"id":37,"depth":1080,"text":38,"children":1083},[1084,1086,1087],{"id":49,"depth":1085,"text":50},3,{"id":337,"depth":1085,"text":338},{"id":349,"depth":1085,"text":352},{"id":363,"depth":1080,"text":364,"children":1089},[1090,1091,1092,1093,1094,1095,1096,1097,1098,1099],{"id":377,"depth":1085,"text":378},{"id":601,"depth":1085,"text":602},{"id":612,"depth":1085,"text":615},{"id":634,"depth":1085,"text":635},{"id":665,"depth":1085,"text":666},{"id":706,"depth":1085,"text":707},{"id":784,"depth":1085,"text":785},{"id":865,"depth":1085,"text":866},{"id":915,"depth":1085,"text":916},{"id":934,"depth":1085,"text":935},{"id":956,"depth":1080,"text":957,"children":1101},[1102],{"id":977,"depth":1085,"text":978},"Transitland is built on publicly available GTFS data contributed by our user community to the Transitland Atlas. Detailed information is kept on each Feed, and updated whenever a new version of each Feed is discovered. Feed versions are archived for download (as .zip files) and imported into the Transitland Datastore for API querying by operators, stops, routes, schedules, etc.","md",{"layout":1106,"deprecated":1107,"exclude_from_sitemap":1107},"documentation",true,"\u002Fdocs\u002Fdatastore\u002Ffeeds",{"title":5,"description":1103},"docs\u002Fdatastore\u002Ffeeds","UA9RzWPxhnGvOeLyW4MAOngXTvAviTVxijNF5zZSPT4","2025-07-22T21:14:27-07:00",{},{},{},{},1791696474713]