CINXE.COM
Reference - General Transit Feed Specification
<!doctype html> <html lang="en" class="no-js"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <link rel="canonical" href="https://gtfs.org/documentation/schedule/reference/"> <link rel="prev" href="../../overview/"> <link rel="next" href="../schedule-best-practices/"> <link rel="alternate" href="./" hreflang="en"> <link rel="alternate" href="../../../fr/documentation/schedule/reference/" hreflang="fr"> <link rel="alternate" href="../../../es/documentation/schedule/reference/" hreflang="es"> <link rel="alternate" href="../../../ja/documentation/schedule/reference/" hreflang="ja"> <link rel="alternate" href="../../../de/documentation/schedule/reference/" hreflang="de"> <link rel="alternate" href="../../../pt/documentation/schedule/reference/" hreflang="pt"> <link rel="alternate" href="../../../ru/documentation/schedule/reference/" hreflang="ru"> <link rel="alternate" href="../../../id/documentation/schedule/reference/" hreflang="id"> <link rel="alternate" href="../../../ko/documentation/schedule/reference/" hreflang="ko"> <link rel="alternate" href="../../../zh/documentation/schedule/reference/" hreflang="zh"> <link rel="alternate" href="../../../zh-TW/documentation/schedule/reference/" hreflang="zh-TW"> <link rel="icon" href="../../../assets/favicon.ico"> <meta name="generator" content="mkdocs-1.6.0, mkdocs-material-9.5.46+insiders-4.53.14"> <title>Reference - General Transit Feed Specification</title> <link rel="stylesheet" href="../../../assets/stylesheets/main.d0dfab1c.min.css"> <link rel="stylesheet" href="../../../assets/stylesheets/palette.ab4e12ef.min.css"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Mulish:300,300i,400,400i,700,700i%7CSF+Mono:400,400i,700,700i&display=fallback"> <style>:root{--md-text-font:"Mulish";--md-code-font:"SF Mono"}</style> <link rel="stylesheet" href="../../../assets/stylesheets/extra.css"> <link rel="stylesheet" href="../../../assets/stylesheets/footer.css"> <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script> <script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-DRBTC7SSDT"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-DRBTC7SSDT",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-DRBTC7SSDT",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script> <script>if("undefined"!=typeof __md_analytics){var consent=__md_get("__consent");consent&&consent.analytics&&__md_analytics()}</script> </head> <body dir="ltr" data-md-color-scheme="gtfs" data-md-color-primary="custom" data-md-color-accent="custom"> <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off"> <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off"> <label class="md-overlay" for="__drawer"></label> <div data-md-component="skip"> <a href="#general-transit-feed-specification-reference" class="md-skip"> Skip to content </a> </div> <div data-md-component="announce"> </div> <header class="md-header" data-md-component="header"> <nav class="md-header__inner md-grid" aria-label="Header"> <a href="../../.." title="General Transit Feed Specification" class="md-header__button md-logo" aria-label="General Transit Feed Specification" data-md-component="logo"> <img id="logo_light_mode" src="../../../assets/logo.png" alt="logo"> <img id="logo_dark_mode" src="../../.." alt="logo"> </a> <label class="md-header__button md-icon" for="__drawer"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class="md-header__title" data-md-component="header-title"> <div class="md-header__ellipsis"> <div class="md-header__topic"> <span class="md-ellipsis"> General Transit Feed Specification </span> </div> <div class="md-header__topic" data-md-component="header-topic"> <span class="md-ellipsis"> Reference </span> </div> </div> </div> <form class="md-header__option" data-md-component="palette"> <input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="gtfs" data-md-color-primary="custom" data-md-color-accent="custom" aria-hidden="true" type="radio" name="__palette" id="__palette_0"> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <div class="md-header__option"> <div class="md-select"> <button class="md-header__button md-icon" aria-label="Select language"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12.87 15.07-2.54-2.51.03-.03A17.5 17.5 0 0 0 14.07 6H17V4h-7V2H8v2H1v2h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2zm-2.62 7 1.62-4.33L19.12 17z"/></svg> </button> <div class="md-select__inner"> <ul class="md-select__list"> <li class="md-select__item"> <a href="./" hreflang="en" class="md-select__link"> English </a> </li> <li class="md-select__item"> <a href="../../../fr/documentation/schedule/reference/" hreflang="fr" class="md-select__link"> Français </a> </li> <li class="md-select__item"> <a href="../../../es/documentation/schedule/reference/" hreflang="es" class="md-select__link"> Español </a> </li> <li class="md-select__item"> <a href="../../../ja/documentation/schedule/reference/" hreflang="ja" class="md-select__link"> 日本語 </a> </li> <li class="md-select__item"> <a href="../../../de/documentation/schedule/reference/" hreflang="de" class="md-select__link"> Deutsch (wird bald verfügbar sein) </a> </li> <li class="md-select__item"> <a href="../../../pt/documentation/schedule/reference/" hreflang="pt" class="md-select__link"> Português (em breve) </a> </li> <li class="md-select__item"> <a href="../../../ru/documentation/schedule/reference/" hreflang="ru" class="md-select__link"> Русский (будет добавлен позже) </a> </li> <li class="md-select__item"> <a href="../../../id/documentation/schedule/reference/" hreflang="id" class="md-select__link"> Bahasa Indonesia (akan segera hadir) </a> </li> <li class="md-select__item"> <a href="../../../ko/documentation/schedule/reference/" hreflang="ko" class="md-select__link"> 한국어 (곧 제공 예정) </a> </li> <li class="md-select__item"> <a href="../../../zh/documentation/schedule/reference/" hreflang="zh" class="md-select__link"> 中文 - 简体(即将推出) </a> </li> <li class="md-select__item"> <a href="../../../zh-TW/documentation/schedule/reference/" hreflang="zh-TW" class="md-select__link"> 中文 - 繁體(即將推出) </a> </li> </ul> </div> </div> </div> <label class="md-header__button md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class="md-search" data-md-component="search" role="dialog"> <label class="md-search__overlay" for="__search"></label> <div class="md-search__inner" role="search"> <form class="md-search__form" name="search"> <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required> <label class="md-search__icon md-icon" for="__search"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class="md-search__options" aria-label="Search"> <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class="md-search__suggest" data-md-component="search-suggest"></div> </form> <div class="md-search__output"> <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix> <div class="md-search-result" data-md-component="search-result"> <div class="md-search-result__meta"> Initializing search </div> <ol class="md-search-result__list" role="presentation"></ol> </div> </div> </div> </div> </div> <div class="md-header__source"> <a href="https://github.com/google/transit" title="Go to repository" class="md-source" data-md-component="source" target="_blank" rel="noopener"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class="md-source__repository"> GTFS Repository </div> </a> </div> </nav> </header> <div class="md-container" data-md-component="container"> <nav class="md-tabs" aria-label="Tabs" data-md-component="tabs"> <div class="md-grid"> <ul class="md-tabs__list"> <li class="md-tabs__item"> <a href="../../.." class="md-tabs__link"> Home </a> </li> <li class="md-tabs__item"> <a href="../../../getting-started/what-is-GTFS/" class="md-tabs__link"> Getting started </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href="../../overview/" class="md-tabs__link"> Technical Documentation </a> </li> <li class="md-tabs__item"> <a href="../../../community/get-involved/" class="md-tabs__link"> Community </a> </li> <li class="md-tabs__item"> <a href="../../../resources/overview/" class="md-tabs__link"> Resources </a> </li> <li class="md-tabs__item"> <a href="../../../about/" class="md-tabs__link"> About </a> </li> <li class="md-tabs__item"> <a href="../../../blog/" class="md-tabs__link"> Blog </a> </li> </ul> </div> </nav> <main class="md-main" data-md-component="main"> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0"> <label class="md-nav__title" for="__drawer"> <a href="../../.." title="General Transit Feed Specification" class="md-nav__button md-logo" aria-label="General Transit Feed Specification" data-md-component="logo"> <img id="logo_light_mode" src="../../../assets/logo.png" alt="logo"> <img id="logo_dark_mode" src="../../.." alt="logo"> </a> General Transit Feed Specification </label> <div class="md-nav__source"> <a href="https://github.com/google/transit" title="Go to repository" class="md-source" data-md-component="source" target="_blank" rel="noopener"> <div class="md-source__icon md-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class="md-source__repository"> GTFS Repository </div> </a> </div> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../.." class="md-nav__link"> <span class="md-ellipsis"> Home </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" > <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0"> <span class="md-ellipsis"> Getting started </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2"> <span class="md-nav__icon md-icon"></span> Getting started </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../getting-started/what-is-GTFS/" class="md-nav__link"> <span class="md-ellipsis"> What is GTFS? </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/why-use-GTFS/" class="md-nav__link"> <span class="md-ellipsis"> Why use GTFS? </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" > <label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0"> <span class="md-ellipsis"> How to produce GTFS? </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_3"> <span class="md-nav__icon md-icon"></span> How to produce GTFS? </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../getting-started/create/" class="md-nav__link"> <span class="md-ellipsis"> Create </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/validate/" class="md-nav__link"> <span class="md-ellipsis"> Validate </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/publish/" class="md-nav__link"> <span class="md-ellipsis"> Publish </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_4" > <label class="md-nav__link" for="__nav_2_4" id="__nav_2_4_label" tabindex="0"> <span class="md-ellipsis"> What can GTFS do? </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_2_4"> <span class="md-nav__icon md-icon"></span> What can GTFS do? </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../getting-started/features/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/base/" class="md-nav__link"> <span class="md-ellipsis"> Base </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/base-add-ons/" class="md-nav__link"> <span class="md-ellipsis"> Base add-ons </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/accessibility/" class="md-nav__link"> <span class="md-ellipsis"> Accessibility </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/fares/" class="md-nav__link"> <span class="md-ellipsis"> Fares </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/pathways/" class="md-nav__link"> <span class="md-ellipsis"> Pathways </span> </a> </li> <li class="md-nav__item"> <a href="../../../getting-started/features/flexible-services/" class="md-nav__link"> <span class="md-ellipsis"> Flexible services </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../../getting-started/example-feed/" class="md-nav__link"> <span class="md-ellipsis"> Example GTFS feed </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked> <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex=""> <span class="md-ellipsis"> Technical Documentation </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_3"> <span class="md-nav__icon md-icon"></span> Technical Documentation </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2" checked> <label class="md-nav__link" for="__nav_3_2" id="__nav_3_2_label" tabindex="0"> <span class="md-ellipsis"> Schedule </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_2_label" aria-expanded="true"> <label class="md-nav__title" for="__nav_3_2"> <span class="md-nav__icon md-icon"></span> Schedule </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc"> <label class="md-nav__link md-nav__link--active" for="__toc"> <span class="md-ellipsis"> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <a href="./" class="md-nav__link md-nav__link--active"> <span class="md-ellipsis"> Reference </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#general-transit-feed-specification-reference" class="md-nav__link"> <span class="md-ellipsis"> General Transit Feed Specification Reference </span> </a> </li> <li class="md-nav__item"> <a href="#table-of-contents" class="md-nav__link"> <span class="md-ellipsis"> Table of Contents </span> </a> </li> <li class="md-nav__item"> <a href="#document-conventions" class="md-nav__link"> <span class="md-ellipsis"> Document Conventions </span> </a> <nav class="md-nav" aria-label="Document Conventions"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#term-definitions" class="md-nav__link"> <span class="md-ellipsis"> Term Definitions </span> </a> </li> <li class="md-nav__item"> <a href="#presence" class="md-nav__link"> <span class="md-ellipsis"> Presence </span> </a> </li> <li class="md-nav__item"> <a href="#field-types" class="md-nav__link"> <span class="md-ellipsis"> Field Types </span> </a> </li> <li class="md-nav__item"> <a href="#field-signs" class="md-nav__link"> <span class="md-ellipsis"> Field Signs </span> </a> </li> <li class="md-nav__item"> <a href="#dataset-attributes" class="md-nav__link"> <span class="md-ellipsis"> Dataset Attributes </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#dataset-files" class="md-nav__link"> <span class="md-ellipsis"> Dataset Files </span> </a> </li> <li class="md-nav__item"> <a href="#file-requirements" class="md-nav__link"> <span class="md-ellipsis"> File Requirements </span> </a> </li> <li class="md-nav__item"> <a href="#dataset-publishing-general-practices" class="md-nav__link"> <span class="md-ellipsis"> Dataset Publishing & General Practices </span> </a> </li> <li class="md-nav__item"> <a href="#field-definitions" class="md-nav__link"> <span class="md-ellipsis"> Field Definitions </span> </a> <nav class="md-nav" aria-label="Field Definitions"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#agencytxt" class="md-nav__link"> <span class="md-ellipsis"> agency.txt </span> </a> </li> <li class="md-nav__item"> <a href="#stopstxt" class="md-nav__link"> <span class="md-ellipsis"> stops.txt </span> </a> </li> <li class="md-nav__item"> <a href="#routestxt" class="md-nav__link"> <span class="md-ellipsis"> routes.txt </span> </a> </li> <li class="md-nav__item"> <a href="#tripstxt" class="md-nav__link"> <span class="md-ellipsis"> trips.txt </span> </a> <nav class="md-nav" aria-label="trips.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#example-blocks-and-service-day" class="md-nav__link"> <span class="md-ellipsis"> Example: Blocks and service day </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#stop_timestxt" class="md-nav__link"> <span class="md-ellipsis"> stop_times.txt </span> </a> <nav class="md-nav" aria-label="stop_times.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#on-demand-service-routing-behavior" class="md-nav__link"> <span class="md-ellipsis"> On-demand Service Routing Behavior </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#calendartxt" class="md-nav__link"> <span class="md-ellipsis"> calendar.txt </span> </a> </li> <li class="md-nav__item"> <a href="#calendar_datestxt" class="md-nav__link"> <span class="md-ellipsis"> calendar_dates.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_attributestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_attributes.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#timeframestxt" class="md-nav__link"> <span class="md-ellipsis"> timeframes.txt </span> </a> <nav class="md-nav" aria-label="timeframes.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#timeframe-local-time-semantics" class="md-nav__link"> <span class="md-ellipsis"> Timeframe Local Time Semantics </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#fare_mediatxt" class="md-nav__link"> <span class="md-ellipsis"> fare_media.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_productstxt" class="md-nav__link"> <span class="md-ellipsis"> fare_products.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_leg_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_leg_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_transfer_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_transfer_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#areastxt" class="md-nav__link"> <span class="md-ellipsis"> areas.txt </span> </a> </li> <li class="md-nav__item"> <a href="#stop_areastxt" class="md-nav__link"> <span class="md-ellipsis"> stop_areas.txt </span> </a> </li> <li class="md-nav__item"> <a href="#networkstxt" class="md-nav__link"> <span class="md-ellipsis"> networks.txt </span> </a> </li> <li class="md-nav__item"> <a href="#route_networkstxt" class="md-nav__link"> <span class="md-ellipsis"> route_networks.txt </span> </a> </li> <li class="md-nav__item"> <a href="#shapestxt" class="md-nav__link"> <span class="md-ellipsis"> shapes.txt </span> </a> </li> <li class="md-nav__item"> <a href="#frequenciestxt" class="md-nav__link"> <span class="md-ellipsis"> frequencies.txt </span> </a> </li> <li class="md-nav__item"> <a href="#transferstxt" class="md-nav__link"> <span class="md-ellipsis"> transfers.txt </span> </a> <nav class="md-nav" aria-label="transfers.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#linked-trips" class="md-nav__link"> <span class="md-ellipsis"> Linked trips </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#pathwaystxt" class="md-nav__link"> <span class="md-ellipsis"> pathways.txt </span> </a> </li> <li class="md-nav__item"> <a href="#levelstxt" class="md-nav__link"> <span class="md-ellipsis"> levels.txt </span> </a> </li> <li class="md-nav__item"> <a href="#location_groupstxt" class="md-nav__link"> <span class="md-ellipsis"> location_groups.txt </span> </a> </li> <li class="md-nav__item"> <a href="#location_group_stopstxt" class="md-nav__link"> <span class="md-ellipsis"> location_group_stops.txt </span> </a> </li> <li class="md-nav__item"> <a href="#locationsgeojson" class="md-nav__link"> <span class="md-ellipsis"> locations.geojson </span> </a> </li> <li class="md-nav__item"> <a href="#booking_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> booking_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#translationstxt" class="md-nav__link"> <span class="md-ellipsis"> translations.txt </span> </a> </li> <li class="md-nav__item"> <a href="#feed_infotxt" class="md-nav__link"> <span class="md-ellipsis"> feed_info.txt </span> </a> </li> <li class="md-nav__item"> <a href="#attributionstxt" class="md-nav__link"> <span class="md-ellipsis"> attributions.txt </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../schedule-best-practices/" class="md-nav__link"> <span class="md-ellipsis"> Best Practices </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_3" > <label class="md-nav__link" for="__nav_3_2_3" id="__nav_3_2_3_label" tabindex="0"> <span class="md-ellipsis"> Data examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2_3"> <span class="md-nav__icon md-icon"></span> Data examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../examples/attributions/" class="md-nav__link"> <span class="md-ellipsis"> Attributions </span> </a> </li> <li class="md-nav__item"> <a href="../examples/continuous-stops/" class="md-nav__link"> <span class="md-ellipsis"> Continuous stops </span> </a> </li> <li class="md-nav__item"> <a href="../examples/flex/" class="md-nav__link"> <span class="md-ellipsis"> Demand responsive services </span> </a> </li> <li class="md-nav__item"> <a href="../examples/fares-v1/" class="md-nav__link"> <span class="md-ellipsis"> Fares v1 </span> </a> </li> <li class="md-nav__item"> <a href="../examples/fares-v2/" class="md-nav__link"> <span class="md-ellipsis"> Fares v2 </span> </a> </li> <li class="md-nav__item"> <a href="../examples/feed-info/" class="md-nav__link"> <span class="md-ellipsis"> Feed information </span> </a> </li> <li class="md-nav__item"> <a href="../examples/frequencies/" class="md-nav__link"> <span class="md-ellipsis"> Frequencies </span> </a> </li> <li class="md-nav__item"> <a href="../examples/pathways/" class="md-nav__link"> <span class="md-ellipsis"> Pathways </span> </a> </li> <li class="md-nav__item"> <a href="../examples/routes-stops-trips/" class="md-nav__link"> <span class="md-ellipsis"> Routes, Stops & Trips </span> </a> </li> <li class="md-nav__item"> <a href="../examples/text-to-speech/" class="md-nav__link"> <span class="md-ellipsis"> Text-to-speech </span> </a> </li> <li class="md-nav__item"> <a href="../examples/transfers/" class="md-nav__link"> <span class="md-ellipsis"> Transfers </span> </a> </li> <li class="md-nav__item"> <a href="../examples/translations/" class="md-nav__link"> <span class="md-ellipsis"> Translations </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_2_4" > <label class="md-nav__link" for="__nav_3_2_4" id="__nav_3_2_4_label" tabindex="0"> <span class="md-ellipsis"> Change history </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_2_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_2_4"> <span class="md-nav__icon md-icon"></span> Change history </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../change-history/recent-additions/" class="md-nav__link"> <span class="md-ellipsis"> Recent additions </span> </a> </li> <li class="md-nav__item"> <a href="../change-history/revision-history/" class="md-nav__link"> <span class="md-ellipsis"> Full revision history </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" > <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0"> <span class="md-ellipsis"> Realtime </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3"> <span class="md-nav__icon md-icon"></span> Realtime </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../realtime/reference/" class="md-nav__link"> <span class="md-ellipsis"> Reference </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/realtime-best-practices/" class="md-nav__link"> <span class="md-ellipsis"> Best Practices </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_3" > <label class="md-nav__link" for="__nav_3_3_3" id="__nav_3_3_3_label" tabindex="0"> <span class="md-ellipsis"> Feed Entities </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_3"> <span class="md-nav__icon md-icon"></span> Feed Entities </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../realtime/feed-entities/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/feed-entities/trip-updates/" class="md-nav__link"> <span class="md-ellipsis"> Trip Updates </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/feed-entities/service-alerts/" class="md-nav__link"> <span class="md-ellipsis"> Service Alerts </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/feed-entities/vehicle-positions/" class="md-nav__link"> <span class="md-ellipsis"> Vehicle Positions </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/feed-entities/trip-modifications/" class="md-nav__link"> <span class="md-ellipsis"> Trip Modifications </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="../../realtime/proto/" class="md-nav__link"> <span class="md-ellipsis"> Protobuf </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_5" > <label class="md-nav__link" for="__nav_3_3_5" id="__nav_3_3_5_label" tabindex="0"> <span class="md-ellipsis"> Language Bindings </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_5"> <span class="md-nav__icon md-icon"></span> Language Bindings </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../realtime/language-bindings/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/language-bindings/dotnet/" class="md-nav__link"> <span class="md-ellipsis"> .NET </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/language-bindings/java/" class="md-nav__link"> <span class="md-ellipsis"> Java </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/language-bindings/nodejs/" class="md-nav__link"> <span class="md-ellipsis"> JavaScript/Node.js </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/language-bindings/python/" class="md-nav__link"> <span class="md-ellipsis"> Python </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/language-bindings/golang/" class="md-nav__link"> <span class="md-ellipsis"> Golang </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/language-bindings/ruby/" class="md-nav__link"> <span class="md-ellipsis"> Ruby </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/language-bindings/php/" class="md-nav__link"> <span class="md-ellipsis"> PHP </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_6" > <label class="md-nav__link" for="__nav_3_3_6" id="__nav_3_3_6_label" tabindex="0"> <span class="md-ellipsis"> Data examples </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_6"> <span class="md-nav__icon md-icon"></span> Data examples </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../realtime/examples/service-alerts/" class="md-nav__link"> <span class="md-ellipsis"> Service alerts </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/examples/trip-updates/" class="md-nav__link"> <span class="md-ellipsis"> Trip updates </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/examples/migration-duplicated/" class="md-nav__link"> <span class="md-ellipsis"> Migration duplicated </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3_7" > <label class="md-nav__link" for="__nav_3_3_7" id="__nav_3_3_7_label" tabindex="0"> <span class="md-ellipsis"> Change history </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_3_3_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_3_3_7"> <span class="md-nav__icon md-icon"></span> Change history </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../realtime/change-history/recent-additions/" class="md-nav__link"> <span class="md-ellipsis"> Recent Additions </span> </a> </li> <li class="md-nav__item"> <a href="../../realtime/change-history/revision-history/" class="md-nav__link"> <span class="md-ellipsis"> Full revision history </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" > <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0"> <span class="md-ellipsis"> Community </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4"> <span class="md-nav__icon md-icon"></span> Community </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../community/get-involved/" class="md-nav__link"> <span class="md-ellipsis"> Get involved </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" > <label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0"> <span class="md-ellipsis"> Governance </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_2"> <span class="md-nav__icon md-icon"></span> Governance </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../community/governance/gtfs-schedule-amendment-process/" class="md-nav__link"> <span class="md-ellipsis"> GTFS Schedule Amendment Process </span> </a> </li> <li class="md-nav__item"> <a href="../../../community/governance/gtfs-realtime-amendment-process/" class="md-nav__link"> <span class="md-ellipsis"> GTFS Realtime Amendment Process </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_3" > <label class="md-nav__link" for="__nav_4_3" id="__nav_4_3_label" tabindex="0"> <span class="md-ellipsis"> Extensions </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_3_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_4_3"> <span class="md-nav__icon md-icon"></span> Extensions </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../community/extensions/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../community/extensions/fares-v2/" class="md-nav__link"> <span class="md-ellipsis"> Fares v2 </span> </a> </li> <li class="md-nav__item"> <a href="../../../community/extensions/flex/" class="md-nav__link"> <span class="md-ellipsis"> Flex </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" > <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0"> <span class="md-ellipsis"> Resources </span> <span class="md-nav__icon md-icon"></span> </label> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_5"> <span class="md-nav__icon md-icon"></span> Resources </label> <ul class="md-nav__list" data-md-scrollfix> <li class="md-nav__item"> <a href="../../../resources/overview/" class="md-nav__link"> <span class="md-ellipsis"> Overview </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/getting-started/" class="md-nav__link"> <span class="md-ellipsis"> Getting Started </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/community/" class="md-nav__link"> <span class="md-ellipsis"> Community </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/data/" class="md-nav__link"> <span class="md-ellipsis"> Data </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/software-for-creating-apis/" class="md-nav__link"> <span class="md-ellipsis"> Software for Creating APIs </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/agency-tools/" class="md-nav__link"> <span class="md-ellipsis"> Agency Tools </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/hardware/" class="md-nav__link"> <span class="md-ellipsis"> Hardware </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/apps/" class="md-nav__link"> <span class="md-ellipsis"> Apps </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/sdk/" class="md-nav__link"> <span class="md-ellipsis"> SDKs </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/visualizations/" class="md-nav__link"> <span class="md-ellipsis"> Visualizations </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/gtfs/" class="md-nav__link"> <span class="md-ellipsis"> GTFS </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/gtfs-realtime/" class="md-nav__link"> <span class="md-ellipsis"> GTFS Realtime </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/siri/" class="md-nav__link"> <span class="md-ellipsis"> SIRI </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/multimodal/" class="md-nav__link"> <span class="md-ellipsis"> Multimodal </span> </a> </li> <li class="md-nav__item"> <a href="../../../resources/other/" class="md-nav__link"> <span class="md-ellipsis"> Other </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" > <div class="md-nav__link md-nav__container"> <a href="../../../about/" class="md-nav__link "> <span class="md-ellipsis"> About </span> </a> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_6"> <span class="md-nav__icon md-icon"></span> About </label> <ul class="md-nav__list" data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_7" > <div class="md-nav__link md-nav__container"> <a href="../../../blog/" class="md-nav__link "> <span class="md-ellipsis"> Blog </span> </a> </div> <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false"> <label class="md-nav__title" for="__nav_7"> <span class="md-nav__icon md-icon"></span> Blog </label> <ul class="md-nav__list" data-md-scrollfix> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" > <div class="md-sidebar__scrollwrap"> <div class="md-sidebar__inner"> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class="md-nav__title" for="__toc"> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix> <li class="md-nav__item"> <a href="#general-transit-feed-specification-reference" class="md-nav__link"> <span class="md-ellipsis"> General Transit Feed Specification Reference </span> </a> </li> <li class="md-nav__item"> <a href="#table-of-contents" class="md-nav__link"> <span class="md-ellipsis"> Table of Contents </span> </a> </li> <li class="md-nav__item"> <a href="#document-conventions" class="md-nav__link"> <span class="md-ellipsis"> Document Conventions </span> </a> <nav class="md-nav" aria-label="Document Conventions"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#term-definitions" class="md-nav__link"> <span class="md-ellipsis"> Term Definitions </span> </a> </li> <li class="md-nav__item"> <a href="#presence" class="md-nav__link"> <span class="md-ellipsis"> Presence </span> </a> </li> <li class="md-nav__item"> <a href="#field-types" class="md-nav__link"> <span class="md-ellipsis"> Field Types </span> </a> </li> <li class="md-nav__item"> <a href="#field-signs" class="md-nav__link"> <span class="md-ellipsis"> Field Signs </span> </a> </li> <li class="md-nav__item"> <a href="#dataset-attributes" class="md-nav__link"> <span class="md-ellipsis"> Dataset Attributes </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#dataset-files" class="md-nav__link"> <span class="md-ellipsis"> Dataset Files </span> </a> </li> <li class="md-nav__item"> <a href="#file-requirements" class="md-nav__link"> <span class="md-ellipsis"> File Requirements </span> </a> </li> <li class="md-nav__item"> <a href="#dataset-publishing-general-practices" class="md-nav__link"> <span class="md-ellipsis"> Dataset Publishing & General Practices </span> </a> </li> <li class="md-nav__item"> <a href="#field-definitions" class="md-nav__link"> <span class="md-ellipsis"> Field Definitions </span> </a> <nav class="md-nav" aria-label="Field Definitions"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#agencytxt" class="md-nav__link"> <span class="md-ellipsis"> agency.txt </span> </a> </li> <li class="md-nav__item"> <a href="#stopstxt" class="md-nav__link"> <span class="md-ellipsis"> stops.txt </span> </a> </li> <li class="md-nav__item"> <a href="#routestxt" class="md-nav__link"> <span class="md-ellipsis"> routes.txt </span> </a> </li> <li class="md-nav__item"> <a href="#tripstxt" class="md-nav__link"> <span class="md-ellipsis"> trips.txt </span> </a> <nav class="md-nav" aria-label="trips.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#example-blocks-and-service-day" class="md-nav__link"> <span class="md-ellipsis"> Example: Blocks and service day </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#stop_timestxt" class="md-nav__link"> <span class="md-ellipsis"> stop_times.txt </span> </a> <nav class="md-nav" aria-label="stop_times.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#on-demand-service-routing-behavior" class="md-nav__link"> <span class="md-ellipsis"> On-demand Service Routing Behavior </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#calendartxt" class="md-nav__link"> <span class="md-ellipsis"> calendar.txt </span> </a> </li> <li class="md-nav__item"> <a href="#calendar_datestxt" class="md-nav__link"> <span class="md-ellipsis"> calendar_dates.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_attributestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_attributes.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#timeframestxt" class="md-nav__link"> <span class="md-ellipsis"> timeframes.txt </span> </a> <nav class="md-nav" aria-label="timeframes.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#timeframe-local-time-semantics" class="md-nav__link"> <span class="md-ellipsis"> Timeframe Local Time Semantics </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#fare_mediatxt" class="md-nav__link"> <span class="md-ellipsis"> fare_media.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_productstxt" class="md-nav__link"> <span class="md-ellipsis"> fare_products.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_leg_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_leg_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#fare_transfer_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> fare_transfer_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#areastxt" class="md-nav__link"> <span class="md-ellipsis"> areas.txt </span> </a> </li> <li class="md-nav__item"> <a href="#stop_areastxt" class="md-nav__link"> <span class="md-ellipsis"> stop_areas.txt </span> </a> </li> <li class="md-nav__item"> <a href="#networkstxt" class="md-nav__link"> <span class="md-ellipsis"> networks.txt </span> </a> </li> <li class="md-nav__item"> <a href="#route_networkstxt" class="md-nav__link"> <span class="md-ellipsis"> route_networks.txt </span> </a> </li> <li class="md-nav__item"> <a href="#shapestxt" class="md-nav__link"> <span class="md-ellipsis"> shapes.txt </span> </a> </li> <li class="md-nav__item"> <a href="#frequenciestxt" class="md-nav__link"> <span class="md-ellipsis"> frequencies.txt </span> </a> </li> <li class="md-nav__item"> <a href="#transferstxt" class="md-nav__link"> <span class="md-ellipsis"> transfers.txt </span> </a> <nav class="md-nav" aria-label="transfers.txt"> <ul class="md-nav__list"> <li class="md-nav__item"> <a href="#linked-trips" class="md-nav__link"> <span class="md-ellipsis"> Linked trips </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item"> <a href="#pathwaystxt" class="md-nav__link"> <span class="md-ellipsis"> pathways.txt </span> </a> </li> <li class="md-nav__item"> <a href="#levelstxt" class="md-nav__link"> <span class="md-ellipsis"> levels.txt </span> </a> </li> <li class="md-nav__item"> <a href="#location_groupstxt" class="md-nav__link"> <span class="md-ellipsis"> location_groups.txt </span> </a> </li> <li class="md-nav__item"> <a href="#location_group_stopstxt" class="md-nav__link"> <span class="md-ellipsis"> location_group_stops.txt </span> </a> </li> <li class="md-nav__item"> <a href="#locationsgeojson" class="md-nav__link"> <span class="md-ellipsis"> locations.geojson </span> </a> </li> <li class="md-nav__item"> <a href="#booking_rulestxt" class="md-nav__link"> <span class="md-ellipsis"> booking_rules.txt </span> </a> </li> <li class="md-nav__item"> <a href="#translationstxt" class="md-nav__link"> <span class="md-ellipsis"> translations.txt </span> </a> </li> <li class="md-nav__item"> <a href="#feed_infotxt" class="md-nav__link"> <span class="md-ellipsis"> feed_info.txt </span> </a> </li> <li class="md-nav__item"> <a href="#attributionstxt" class="md-nav__link"> <span class="md-ellipsis"> attributions.txt </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-content" data-md-component="content"> <article class="md-content__inner md-typeset"> <h1>Reference</h1> <h2 id="general-transit-feed-specification-reference">General Transit Feed Specification Reference<a class="headerlink" href="#general-transit-feed-specification-reference" title="Permanent link">¶</a></h2> <p><strong>Revised Oct 16, 2024. See <a href="../change_history/revision_history">Revision History</a> for more details.</strong></p> <p>This document defines the format and structure of the files that comprise a GTFS dataset.</p> <h2 id="table-of-contents">Table of Contents<a class="headerlink" href="#table-of-contents" title="Permanent link">¶</a></h2> <ol> <li><a href="#document-conventions">Document Conventions</a></li> <li><a href="#dataset-files">Dataset Files</a></li> <li><a href="#file-requirements">File Requirements</a></li> <li><a href="#dataset-publishing-general-practices">Dataset Publishing & General Practices</a></li> <li><a href="#field-definitions">Field Definitions</a><ul> <li><a href="#agencytxt">agency.txt</a></li> <li><a href="#stopstxt">stops.txt</a></li> <li><a href="#routestxt">routes.txt</a></li> <li><a href="#tripstxt">trips.txt</a></li> <li><a href="#stop_timestxt">stop_times.txt</a></li> <li><a href="#calendartxt">calendar.txt</a></li> <li><a href="#calendar_datestxt">calendar_dates.txt</a></li> <li><a href="#fare_attributestxt">fare_attributes.txt</a></li> <li><a href="#fare_rulestxt">fare_rules.txt</a></li> <li><a href="#timeframestxt">timeframes.txt</a> </li> <li><a href="#fare_mediatxt">fare_media.txt</a></li> <li><a href="#fare_productstxt">fare_products.txt</a> </li> <li><a href="#fare_leg_rulestxt">fare_leg_rules.txt</a></li> <li><a href="#fare_transfer_rulestxt">fare_transfer_rules.txt</a></li> <li><a href="#areastxt">areas.txt</a></li> <li><a href="#stop_areastxt">stop_areas.txt</a></li> <li><a href="#networkstxt">networks.txt</a></li> <li><a href="#route_networkstxt">route_networks.txt</a></li> <li><a href="#shapestxt">shapes.txt</a></li> <li><a href="#frequenciestxt">frequencies.txt</a></li> <li><a href="#transferstxt">transfers.txt</a></li> <li><a href="#pathwaystxt">pathways.txt</a></li> <li><a href="#levelstxt">levels.txt</a></li> <li><a href="#location_groupstxt">location_groups.txt</a></li> <li><a href="#location_group_stopstxt">location_group_stops.txt</a></li> <li><a href="#locationsgeojson">locations.geojson</a></li> <li><a href="#booking_rulestxt">booking_rules.txt</a></li> <li><a href="#translationstxt">translations.txt</a></li> <li><a href="#feed_infotxt">feed_info.txt</a></li> <li><a href="#attributionstxt">attributions.txt</a></li> </ul> </li> </ol> <h2 id="document-conventions">Document Conventions<a class="headerlink" href="#document-conventions" title="Permanent link">¶</a></h2> <p>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", “SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in <a href="https://tools.ietf.org/html/rfc2119" target="_blank" rel="noopener">RFC 2119</a>.</p> <h3 id="term-definitions">Term Definitions<a class="headerlink" href="#term-definitions" title="Permanent link">¶</a></h3> <p>This section defines terms that are used throughout this document.</p> <ul> <li><strong>Dataset</strong> - A complete set of files defined by this specification reference. Altering the dataset creates a new version of the dataset. Datasets should be published at a public, permanent URL, including the zip file name. (e.g., https://www.agency.org/gtfs/gtfs.zip).</li> <li><strong>Record</strong> - A basic data structure comprised of a number of different field values describing a single entity (e.g. transit agency, stop, route, etc.). Represented, in a table, as a row.</li> <li><strong>Field</strong> - A property of an object or entity. Represented, in a table, as a column. The field exists if added in a file as a header. It may or may not have field values defined.</li> <li><strong>Field value</strong> - An individual entry in a field. Represented, in a table, as a single cell.</li> <li><strong>Service day</strong> - A service day is a time period used to indicate route scheduling. The exact definition of service day varies from agency to agency but service days often do not correspond with calendar days. A service day may exceed 24:00:00 if service begins on one day and ends on a following day. For example, service that runs from 08:00:00 on Friday to 02:00:00 on Saturday, could be denoted as running from 08:00:00 to 26:00:00 on a single service day.</li> <li><strong>Text-to-speech field</strong> - The field should contain the same information than its parent field (on which it falls back if it is empty). It is aimed to be read as text-to-speech, therefore, abbreviation should be either removed ("St" should be either read as "Street" or "Saint"; "Elizabeth I" should be "Elizabeth the first") or kept to be read as it ("JFK Airport" is said abbreviated).</li> <li><strong>Leg</strong> - Travel in which a rider boards and alights between a pair of subsequent locations along a trip.</li> <li><strong>Journey</strong> - Overall travel from origin to destination, including all legs and transfers in-between.</li> <li><strong>Sub-journey</strong> - Two or more legs that comprise a subset of a journey.</li> <li><strong>Fare product</strong> - Purchassable fare products that can be used to pay for or validate travel.</li> </ul> <h3 id="presence">Presence<a class="headerlink" href="#presence" title="Permanent link">¶</a></h3> <p>Presence conditions applicable to fields and files:</p> <ul> <li><strong>Required</strong> - The field or file must be included in the dataset and contain a valid value for each record.</li> <li><strong>Optional</strong> - The field or file may be omitted from the dataset.</li> <li><strong>Conditionally Required</strong> - The field or file must be included under conditions outlined in the field or file description.</li> <li><strong>Conditionally Forbidden</strong> - The field or file must not be included under conditions outlined in the field or file description.</li> <li><strong>Recommended</strong> - The field or file may be omitted from the dataset, but it is a best practice to include it. Before omitting this field or file, the best practice should be carefully evaluated and the full implications of omission should be understood.</li> </ul> <h3 id="field-types">Field Types<a class="headerlink" href="#field-types" title="Permanent link">¶</a></h3> <ul> <li><strong>Color</strong> - A color encoded as a six-digit hexadecimal number. Refer to <a href="https://htmlcolorcodes.com" target="_blank" rel="noopener">https://htmlcolorcodes.com</a> to generate a valid value (the leading "#" must not be included). <br> <em>Example: <code>FFFFFF</code> for white, <code>000000</code> for black or <code>0039A6</code> for the A,C,E lines in NYMTA.</em></li> <li><strong>Currency code</strong> - An ISO 4217 alphabetical currency code. For the list of current currency, refer to <a href="https://en.wikipedia.org/wiki/ISO_4217#Active_codes" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/ISO_4217#Active_codes</a>. <br> <em>Example: <code>CAD</code> for Canadian dollars, <code>EUR</code> for euros or <code>JPY</code> for Japanese yen.</em></li> <li><strong>Currency amount</strong> - A decimal value indicating a currency amount. The number of decimal places is specified by <a href="https://en.wikipedia.org/wiki/ISO_4217#Active_codes" target="_blank" rel="noopener">ISO 4217</a> for the accompanying Currency code. All financial calculations should be processed as decimal, currency, or another equivalent type suitable for financial calculations depending on the programming language used to consume data. Processing currency amounts as float is discouraged due to gains or losses of money during calculations.</li> <li><strong>Date</strong> - Service day in the YYYYMMDD format. Since time within a service day may be above 24:00:00, a service day may contain information for the subsequent day(s). <br> <em>Example: <code>20180913</code> for September 13th, 2018.</em></li> <li><strong>Email</strong> - An email address. <br> <em>Example: <code>example@example.com</code></em></li> <li><strong>Enum</strong> - An option from a set of predefined constants defined in the "Description" column. <br> <em>Example: The <code>route_type</code> field contains a <code>0</code> for tram, a <code>1</code> for subway...</em></li> <li><strong>ID</strong> - An ID field value is an internal ID, not intended to be shown to riders, and is a sequence of any UTF-8 characters. Using only printable ASCII characters is recommended. An ID is labeled "unique ID" when it must be unique within a file. IDs defined in one .txt file are often referenced in another .txt file. IDs that reference an ID in another table are labeled "foreign ID".<br> <em>Example: The <code>stop_id</code> field in <a href="#stopstxt">stops.txt</a> is a "unique ID". The <code>parent_station</code> field in <a href="#stopstxt">stops.txt</a> is a "foreign ID referencing <code>stops.stop_id</code>".</em></li> <li><strong>Language code</strong> - An IETF BCP 47 language code. For an introduction to IETF BCP 47, refer to <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt" target="_blank" rel="noopener">http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a> and <a href="http://www.w3.org/International/articles/language-tags/" target="_blank" rel="noopener">http://www.w3.org/International/articles/language-tags/</a>. <br> <em>Example: <code>en</code> for English, <code>en-US</code> for American English or <code>de</code> for German.</em></li> <li><strong>Latitude</strong> - WGS84 latitude in decimal degrees. The value must be greater than or equal to -90.0 and less than or equal to 90.0. <em><br> Example: <code>41.890169</code> for the Colosseum in Rome.</em></li> <li><strong>Longitude</strong> - WGS84 longitude in decimal degrees. The value must be greater than or equal to -180.0 and less than or equal to 180.0. <br> <em>Example: <code>12.492269</code> for the Colosseum in Rome.</em></li> <li><strong>Float</strong> - A floating point number.</li> <li><strong>Integer</strong> - An integer.</li> <li><strong>Phone number</strong> - A phone number.</li> <li><strong>Time</strong> - Time in the HH:MM:SS format (H:MM:SS is also accepted). The time is measured from "noon minus 12h" of the service day (effectively midnight except for days on which daylight savings time changes occur). For times occurring after midnight on the service day, enter the time as a value greater than 24:00:00 in HH:MM:SS. <br> <em>Example: <code>14:30:00</code> for 2:30PM or <code>25:35:00</code> for 1:35AM on the next day.</em></li> <li><strong>Text</strong> - A string of UTF-8 characters, which is aimed to be displayed and which must therefore be human readable.</li> <li><strong>Timezone</strong> - TZ timezone from the <a href="https://www.iana.org/time-zones" target="_blank" rel="noopener">https://www.iana.org/time-zones</a>. Timezone names never contain the space character but may contain an underscore. Refer to <a href="http://en.wikipedia.org/wiki/List_of_tz_zones" target="_blank" rel="noopener">http://en.wikipedia.org/wiki/List_of_tz_zones</a> for a list of valid values. <br> <em>Example: <code>Asia/Tokyo</code>, <code>America/Los_Angeles</code> or <code>Africa/Cairo</code>.</em></li> <li><strong>URL</strong> - A fully qualified URL that includes http:// or https://, and any special characters in the URL must be correctly escaped. See the following <a href="http://www.w3.org/Addressing/URL/4_URI_Recommentations.html" target="_blank" rel="noopener">http://www.w3.org/Addressing/URL/4_URI_Recommentations.html</a> for a description of how to create fully qualified URL values.</li> </ul> <h3 id="field-signs">Field Signs<a class="headerlink" href="#field-signs" title="Permanent link">¶</a></h3> <p>Signs applicable to Float or Integer field types:</p> <ul> <li><strong>Non-negative</strong> - Greater than or equal to 0.</li> <li><strong>Non-zero</strong> - Not equal to 0.</li> <li><strong>Positive</strong> - Greater than 0.</li> </ul> <p><em>Example: <strong>Non-negative float</strong> - A floating point number greater than or equal to 0.</em></p> <h3 id="dataset-attributes">Dataset Attributes<a class="headerlink" href="#dataset-attributes" title="Permanent link">¶</a></h3> <p>The <strong>primary key</strong> of a dataset is the field or combination of fields that uniquely identify a row. <code>Primary key (*)</code> is used when all provided fields for a file are used to uniquely identify a row. <code>Primary key (none)</code> means that the file allows only one row. </p> <p><em>Example: the <code>trip_id</code> and <code>stop_sequence</code> fields make the primary key of <a href="#stop_timestxt">stop_times.txt</a>.</em></p> <h2 id="dataset-files">Dataset Files<a class="headerlink" href="#dataset-files" title="Permanent link">¶</a></h2> <p>This specification defines the following files:</p> <table> <thead> <tr> <th>File Name</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><a href="#agencytxt">agency.txt</a></td> <td><strong>Required</strong></td> <td>Transit agencies with service represented in this dataset.</td> </tr> <tr> <td><a href="#stopstxt">stops.txt</a></td> <td><strong>Conditionally Required</strong></td> <td>Stops where vehicles pick up or drop off riders. Also defines stations and station entrances. <br><br>Conditionally Required:<br> - Optional if demand-responsive zones are defined in <a href="#locationsgeojson">locations.geojson</a>. <br>- <strong>Required</strong> otherwise.</td> </tr> <tr> <td><a href="#routestxt">routes.txt</a></td> <td><strong>Required</strong></td> <td>Transit routes. A route is a group of trips that are displayed to riders as a single service.</td> </tr> <tr> <td><a href="#tripstxt">trips.txt</a></td> <td><strong>Required</strong></td> <td>Trips for each route. A trip is a sequence of two or more stops that occur during a specific time period.</td> </tr> <tr> <td><a href="#stop_timestxt">stop_times.txt</a></td> <td><strong>Required</strong></td> <td>Times that a vehicle arrives at and departs from stops for each trip.</td> </tr> <tr> <td><a href="#calendartxt">calendar.txt</a></td> <td><strong>Conditionally Required</strong></td> <td>Service dates specified using a weekly schedule with start and end dates. <br><br>Conditionally Required:<br> - <strong>Required</strong> unless all dates of service are defined in <a href="#calendar_datestxt">calendar_dates.txt</a>.<br> - Optional otherwise.</td> </tr> <tr> <td><a href="#calendar_datestxt">calendar_dates.txt</a></td> <td><strong>Conditionally Required</strong></td> <td>Exceptions for the services defined in the <a href="#calendartxt">calendar.txt</a>. <br><br>Conditionally Required:<br> - <strong>Required</strong> if <a href="#calendartxt">calendar.txt</a> is omitted. In which case <a href="#calendar_datestxt">calendar_dates.txt</a> must contain all dates of service. <br> - Optional otherwise.</td> </tr> <tr> <td><a href="#fare_attributestxt">fare_attributes.txt</a></td> <td>Optional</td> <td>Fare information for a transit agency's routes.</td> </tr> <tr> <td><a href="#fare_rulestxt">fare_rules.txt</a></td> <td>Optional</td> <td>Rules to apply fares for itineraries.</td> </tr> <tr> <td><a href="#timeframestxt">timeframes.txt</a></td> <td>Optional</td> <td>Date and time periods to use in fare rules for fares that depend on date and time factors.</td> </tr> <tr> <td><a href="#fare_mediatxt">fare_media.txt</a></td> <td>Optional</td> <td>To describe the fare media that can be employed to use fare products. <br><br>File <a href="#fare_mediatxt">fare_media.txt</a> describes concepts that are not represented in <a href="#fare_attributestxt">fare_attributes.txt</a> and <a href="#fare_rulestxt">fare_rules.txt</a>. As such, the use of <a href="#fare_mediatxt">fare_media.txt</a> is entirely separate from files <a href="#fare_attributestxt">fare_attributes.txt</a> and <a href="#fare_rulestxt">fare_rules.txt</a>.</td> </tr> <tr> <td><a href="#fare_productstxt">fare_products.txt</a></td> <td>Optional</td> <td>To describe the different types of tickets or fares that can be purchased by riders.<br><br>File <a href="#fare_productstxt">fare_products.txt</a> describes fare products that are not represented in <a href="#fare_attributestxt">fare_attributes.txt</a> and <a href="#fare_rulestxt">fare_rules.txt</a>. As such, the use of <a href="#fare_productstxt">fare_products.txt</a> is entirely separate from files <a href="#fare_attributestxt">fare_attributes.txt</a> and <a href="#fare_rulestxt">fare_rules.txt</a>.</td> </tr> <tr> <td><a href="#fare_leg_rulestxt">fare_leg_rules.txt</a></td> <td>Optional</td> <td>Fare rules for individual legs of travel.<br><br>File <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a> provides a more detailed method for modeling fare structures. As such, the use of <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a> is entirely separate from files <a href="#fare_attributestxt">fare_attributes.txt</a> and <a href="#fare_rulestxt">fare_rules.txt</a>.</td> </tr> <tr> <td><a href="#fare_transfer_rulestxt">fare_transfer_rules.txt</a></td> <td>Optional</td> <td>Fare rules for transfers between legs of travel.<br><br>Along with <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a>, file <a href="#fare_transfer_rulestxt">fare_transfer_rules.txt</a> provides a more detailed method for modeling fare structures. As such, the use of <a href="#fare_transfer_rulestxt">fare_transfer_rules.txt</a> is entirely separate from files <a href="#fare_attributestxt">fare_attributes.txt</a> and <a href="#fare_rulestxt">fare_rules.txt</a>.</td> </tr> <tr> <td><a href="#areastxt">areas.txt</a></td> <td>Optional</td> <td>Area grouping of locations.</td> </tr> <tr> <td><a href="#stop_areastxt">stop_areas.txt</a></td> <td>Optional</td> <td>Rules to assign stops to areas.</td> </tr> <tr> <td><a href="#networkstxt">networks.txt</a></td> <td><strong>Conditionally Forbidden</strong></td> <td>Network grouping of routes.<br><br>Conditionally Forbidden:<br>- <strong>Forbidden</strong> if <code>network_id</code> exists in <a href="#routestxt">routes.txt</a>.<br>- Optional otherwise.</td> </tr> <tr> <td><a href="#route_networkstxt">route_networks.txt</a></td> <td><strong>Conditionally Forbidden</strong></td> <td>Rules to assign routes to networks.<br><br>Conditionally Forbidden:<br>- <strong>Forbidden</strong> if <code>network_id</code> exists in <a href="#routestxt">routes.txt</a>.<br>- Optional otherwise.</td> </tr> <tr> <td><a href="#shapestxt">shapes.txt</a></td> <td>Optional</td> <td>Rules for mapping vehicle travel paths, sometimes referred to as route alignments.</td> </tr> <tr> <td><a href="#frequenciestxt">frequencies.txt</a></td> <td>Optional</td> <td>Headway (time between trips) for headway-based service or a compressed representation of fixed-schedule service.</td> </tr> <tr> <td><a href="#transferstxt">transfers.txt</a></td> <td>Optional</td> <td>Rules for making connections at transfer points between routes.</td> </tr> <tr> <td><a href="#pathwaystxt">pathways.txt</a></td> <td>Optional</td> <td>Pathways linking together locations within stations.</td> </tr> <tr> <td><a href="#levelstxt">levels.txt</a></td> <td><strong>Conditionally Required</strong></td> <td>Levels within stations.<br><br>Conditionally Required:<br>- <strong>Required</strong> when describing pathways with elevators (<code>pathway_mode=5</code>).<br>- Optional otherwise.</td> </tr> <tr> <td><a href="#location_groupstxt">location_groups.txt</a></td> <td>Optional</td> <td>A group of stops that together indicate locations where a rider may request pickup or drop off.</td> </tr> <tr> <td><a href="#location_group_stopstxt">location_group_stops.txt</a></td> <td>Optional</td> <td>Rules to assign stops to location groups.</td> </tr> <tr> <td><a href="#locationsgeojson">locations.geojson</a></td> <td>Optional</td> <td>Zones for rider pickup or drop-off requests by on-demand services, represented as GeoJSON polygons.</td> </tr> <tr> <td><a href="#booking_rulestxt">booking_rules.txt</a></td> <td>Optional</td> <td>Booking information for rider-requested services.</td> </tr> <tr> <td><a href="#translationstxt">translations.txt</a></td> <td>Optional</td> <td>Translations of customer-facing dataset values.</td> </tr> <tr> <td><a href="#feed_infotxt">feed_info.txt</a></td> <td><strong>Conditionally Required</strong></td> <td>Dataset metadata, including publisher, version, and expiration information.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <a href="#translationstxt">translations.txt</a> is provided.<br>- Recommended otherwise.</td> </tr> <tr> <td><a href="#attributionstxt">attributions.txt</a></td> <td>Optional</td> <td>Dataset attributions.</td> </tr> </tbody> </table> <h2 id="file-requirements">File Requirements<a class="headerlink" href="#file-requirements" title="Permanent link">¶</a></h2> <p>The following requirements apply to the format and contents of the dataset files:</p> <ul> <li>All files must be saved as comma-delimited text.</li> <li>The first line of each file must contain field names. Each subsection of the <a href="#field-definitions">Field Definitions</a> section corresponds to one of the files in a GTFS dataset and lists the field names that may be used in that file.</li> <li>All file and field names are case-sensitive.</li> <li>Field values must not contain tabs, carriage returns or new lines.</li> <li>Field values that contain quotation marks or commas must be enclosed within quotation marks. In addition, each quotation mark in the field value must be preceded with a quotation mark. This is consistent with the manner in which Microsoft Excel outputs comma-delimited (CSV) files. For more information on the CSV file format, see <a href="http://tools.ietf.org/html/rfc4180" target="_blank" rel="noopener">http://tools.ietf.org/html/rfc4180</a>. The following example demonstrates how a field value would appear in a comma-delimited file:</li> <li><strong>Original field value:</strong> <code>Contains "quotes", commas and text</code></li> <li><strong>Field value in CSV file:</strong> <code>"Contains ""quotes"", commas and text"</code></li> <li>Field values must not contain HTML tags, comments or escape sequences.</li> <li>Extra spaces between fields or field names should be removed. Many parsers consider the spaces to be part of the value, which may cause errors.</li> <li>Each line must end with a CRLF or LF linebreak character.</li> <li>Files should be encoded in UTF-8 to support all Unicode characters. Files that include the Unicode byte-order mark (BOM) character are acceptable. See <a href="http://unicode.org/faq/utf_bom.html#BOM" target="_blank" rel="noopener">http://unicode.org/faq/utf_bom.html#BOM</a> for more information on the BOM character and UTF-8.</li> <li>All dataset files must be zipped together. The files must reside at the root level directly, not in a subfolder.</li> <li>All customer-facing text strings (including stop names, route names, and headsigns) should use Mixed Case (not ALL CAPS), following local conventions for capitalization of place names on displays capable of displaying lower case characters (e.g. “Brighton Churchill Square”, “Villiers-sur-Marne”, “Market Street”).</li> <li>The use of abbreviations should be avoided throughout the feed for names and other text (e.g. St. for Street) unless a location is called by its abbreviated name (e.g. “JFK Airport”). Abbreviations may be problematic for accessibility by screen reader software and voice user interfaces. Consuming software can be engineered to reliably convert full words to abbreviations for display, but converting from abbreviations to full words is prone to more risk of error.</li> </ul> <h2 id="dataset-publishing-general-practices">Dataset Publishing & General Practices<a class="headerlink" href="#dataset-publishing-general-practices" title="Permanent link">¶</a></h2> <ul> <li>Datasets should be published at a public, permanent URL, including the zip file name. (e.g., www.agency.org/gtfs/gtfs.zip). Ideally, the URL should be directly downloadable without requiring login to access the file, to facilitate download by consuming software applications. While it is recommended (and the most common practice) to make a GTFS dataset openly downloadable, if a data provider does need to control access to GTFS for licensing or other reasons, it is recommended to control access to the GTFS dataset using API keys, which will facilitate automatic downloads.</li> <li>GTFS data should be published in iterations so that a single file at a stable location always contains the latest official description of service for a transit agency (or agencies).</li> <li>Datasets should maintain persistent identifiers (id fields) for <code>stop_id</code>, <code>route_id</code>, and <code>agency_id</code> across data iterations whenever possible.</li> <li>One GTFS dataset should contain current and upcoming service (sometimes called a “merged” dataset). There are multiple <a href="../../../resources/gtfs/#gtfs-merge-tools">merge tools</a> available that can be used to create a merged dataset from two different GTFS feeds.<ul> <li>At any time, the published GTFS dataset should be valid for at least the next 7 days, and ideally for as long as the operator is confident that the schedule will continue to be operated.</li> <li>If possible, the GTFS dataset should cover at least the next 30 days of service.</li> </ul> </li> <li>Old services (expired calendars) should be removed from the feed.</li> <li>If a service modification will go into effect in 7 days or fewer, this service change should be expressed through a GTFS-realtime feed (service advisories or trip updates) rather than static GTFS dataset.</li> <li>The web-server hosting GTFS data should be configured to correctly report the file modification date (see <a href="https://tools.ietf.org/html/rfc2616#section-14.29" target="_blank" rel="noopener">HTTP/1.1 - Request for Comments 2616, under Section 14.29</a>).</li> </ul> <h2 id="field-definitions">Field Definitions<a class="headerlink" href="#field-definitions" title="Permanent link">¶</a></h2> <h3 id="agencytxt">agency.txt<a class="headerlink" href="#agencytxt" title="Permanent link">¶</a></h3> <p>File: <strong>Required</strong></p> <p>Primary key (<code>agency_id</code>)</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>agency_id</code></td> <td>Unique ID</td> <td><strong>Conditionally Required</strong></td> <td>Identifies a transit brand which is often synonymous with a transit agency. Note that in some cases, such as when a single agency operates multiple separate services, agencies and brands are distinct. This document uses the term "agency" in place of "brand". A dataset may contain data from multiple agencies. <br><br>Conditionally Required:<br>- <strong>Required</strong> when the dataset contains data for multiple transit agencies. <br>- Recommended otherwise.</td> </tr> <tr> <td><code>agency_name</code></td> <td>Text</td> <td><strong>Required</strong></td> <td>Full name of the transit agency.</td> </tr> <tr> <td><code>agency_url</code></td> <td>URL</td> <td><strong>Required</strong></td> <td>URL of the transit agency.</td> </tr> <tr> <td><code>agency_timezone</code></td> <td>Timezone</td> <td><strong>Required</strong></td> <td>Timezone where the transit agency is located. If multiple agencies are specified in the dataset, each must have the same <code>agency_timezone</code>.</td> </tr> <tr> <td><code>agency_lang</code></td> <td>Language code</td> <td>Optional</td> <td>Primary language used by this transit agency. Should be provided to help GTFS consumers choose capitalization rules and other language-specific settings for the dataset.</td> </tr> <tr> <td><code>agency_phone</code></td> <td>Phone number</td> <td>Optional</td> <td>A voice telephone number for the specified agency. This field is a string value that presents the telephone number as typical for the agency's service area. It may contain punctuation marks to group the digits of the number. Dialable text (for example, TriMet's "503-238-RIDE") is permitted, but the field must not contain any other descriptive text.</td> </tr> <tr> <td><code>agency_fare_url</code></td> <td>URL</td> <td>Optional</td> <td>URL of a web page that allows a rider to purchase tickets or other fare instruments for that agency online.</td> </tr> <tr> <td><code>agency_email</code></td> <td>Email</td> <td>Optional</td> <td>Email address actively monitored by the agency’s customer service department. This email address should be a direct contact point where transit riders can reach a customer service representative at the agency.</td> </tr> </tbody> </table> <h3 id="stopstxt">stops.txt<a class="headerlink" href="#stopstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Conditionally Required</strong></p> <p>Primary key (<code>stop_id</code>)</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>stop_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a location: stop/platform, station, entrance/exit, generic node or boarding area (see <code>location_type</code>). <br><br>ID must be unique across all <code>stops.stop_id</code>, locations.geojson <code>id</code>, and <code>location_groups.location_group_id</code> values. <br><br>Multiple routes may use the same <code>stop_id</code>.</td> </tr> <tr> <td><code>stop_code</code></td> <td>Text</td> <td>Optional</td> <td>Short text or a number that identifies the location for riders. These codes are often used in phone-based transit information systems or printed on signage to make it easier for riders to get information for a particular location. The <code>stop_code</code> may be the same as <code>stop_id</code> if it is public facing. This field should be left empty for locations without a code presented to riders.</td> </tr> <tr> <td><code>stop_name</code></td> <td>Text</td> <td><strong>Conditionally Required</strong></td> <td>Name of the location. The <code>stop_name</code> should match the agency's rider-facing name for the location as printed on a timetable, published online, or represented on signage. For translations into other languages, use <a href="#translationstxt">translations.txt</a>.<br><br>When the location is a boarding area (<code>location_type=4</code>), the <code>stop_name</code> should contains the name of the boarding area as displayed by the agency. It could be just one letter (like on some European intercity railway stations), or text like “Wheelchair boarding area” (NYC’s Subway) or “Head of short trains” (Paris’ RER).<br><br>Conditionally Required:<br>- <strong>Required</strong> for locations which are stops (<code>location_type=0</code>), stations (<code>location_type=1</code>) or entrances/exits (<code>location_type=2</code>).<br>- Optional for locations which are generic nodes (<code>location_type=3</code>) or boarding areas (<code>location_type=4</code>).</td> </tr> <tr> <td><code>tts_stop_name</code></td> <td>Text</td> <td>Optional</td> <td>Readable version of the <code>stop_name</code>. See "Text-to-speech field" in the <a href="#term-definitions">Term Definitions</a> for more.</td> </tr> <tr> <td><code>stop_desc</code></td> <td>Text</td> <td>Optional</td> <td>Description of the location that provides useful, quality information. Should not be a duplicate of <code>stop_name</code>.</td> </tr> <tr> <td><code>stop_lat</code></td> <td>Latitude</td> <td><strong>Conditionally Required</strong></td> <td>Latitude of the location.<br><br>For stops/platforms (<code>location_type=0</code>) and boarding area (<code>location_type=4</code>), the coordinates must be the ones of the bus pole — if exists — and otherwise of where the travelers are boarding the vehicle (on the sidewalk or the platform, and not on the roadway or the track where the vehicle stops). <br><br>Conditionally Required:<br>- <strong>Required</strong> for locations which are stops (<code>location_type=0</code>), stations (<code>location_type=1</code>) or entrances/exits (<code>location_type=2</code>).<br>- Optional for locations which are generic nodes (<code>location_type=3</code>) or boarding areas (<code>location_type=4</code>).</td> </tr> <tr> <td><code>stop_lon</code></td> <td>Longitude</td> <td><strong>Conditionally Required</strong></td> <td>Longitude of the location.<br><br>For stops/platforms (<code>location_type=0</code>) and boarding area (<code>location_type=4</code>), the coordinates must be the ones of the bus pole — if exists — and otherwise of where the travelers are boarding the vehicle (on the sidewalk or the platform, and not on the roadway or the track where the vehicle stops). <br><br>Conditionally Required:<br>- <strong>Required</strong> for locations which are stops (<code>location_type=0</code>), stations (<code>location_type=1</code>) or entrances/exits (<code>location_type=2</code>).<br>- Optional for locations which are generic nodes (<code>location_type=3</code>) or boarding areas (<code>location_type=4</code>).</td> </tr> <tr> <td><code>zone_id</code></td> <td>ID</td> <td>Optional</td> <td>Identifies the fare zone for a stop. If this record represents a station or station entrance, the <code>zone_id</code> is ignored.</td> </tr> <tr> <td><code>stop_url</code></td> <td>URL</td> <td>Optional</td> <td>URL of a web page about the location. This should be different from the <code>agency.agency_url</code> and the <code>routes.route_url</code> field values.</td> </tr> <tr> <td><code>location_type</code></td> <td>Enum</td> <td>Optional</td> <td>Location type. Valid options are:<br><br><code>0</code> (or empty) - <strong>Stop</strong> (or <strong>Platform</strong>). A location where passengers board or disembark from a transit vehicle. Is called a platform when defined within a <code>parent_station</code>.<br><code>1</code> - <strong>Station</strong>. A physical structure or area that contains one or more platform.<br><code>2</code> - <strong>Entrance/Exit</strong>. A location where passengers can enter or exit a station from the street. If an entrance/exit belongs to multiple stations, it may be linked by pathways to both, but the data provider must pick one of them as parent.<br><code>3</code> - <strong>Generic Node</strong>. A location within a station, not matching any other <code>location_type</code>, that may be used to link together pathways define in <a href="#pathwaystxt">pathways.txt</a>.<br><code>4</code> - <strong>Boarding Area</strong>. A specific location on a platform, where passengers can board and/or alight vehicles.</td> </tr> <tr> <td><code>parent_station</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Defines hierarchy between the different locations defined in <a href="#stopstxt">stops.txt</a>. It contains the ID of the parent location, as followed:<br><br>- <strong>Stop/platform</strong> (<code>location_type=0</code>): the <code>parent_station</code> field contains the ID of a station.<br>- <strong>Station</strong> (<code>location_type=1</code>): this field must be empty.<br>- <strong>Entrance/exit</strong> (<code>location_type=2</code>) or <strong>generic node</strong> (<code>location_type=3</code>): the <code>parent_station</code> field contains the ID of a station (<code>location_type=1</code>)<br>- <strong>Boarding Area</strong> (<code>location_type=4</code>): the <code>parent_station</code> field contains ID of a platform.<br><br>Conditionally Required:<br>- <strong>Required</strong> for locations which are entrances (<code>location_type=2</code>), generic nodes (<code>location_type=3</code>) or boarding areas (<code>location_type=4</code>).<br>- Optional for stops/platforms (<code>location_type=0</code>).<br>- Forbidden for stations (<code>location_type=1</code>).</td> </tr> <tr> <td><code>stop_timezone</code></td> <td>Timezone</td> <td>Optional</td> <td>Timezone of the location. If the location has a parent station, it inherits the parent station’s timezone instead of applying its own. Stations and parentless stops with empty <code>stop_timezone</code> inherit the timezone specified by <code>agency.agency_timezone</code>. The times provided in <a href="#stop_timestxt">stop_times.txt</a> are in the timezone specified by <code>agency.agency_timezone</code>, not <code>stop_timezone</code>. This ensures that the time values in a trip always increase over the course of a trip, regardless of which timezones the trip crosses.</td> </tr> <tr> <td><code>wheelchair_boarding</code></td> <td>Enum</td> <td>Optional</td> <td>Indicates whether wheelchair boardings are possible from the location. Valid options are: <br><br>For parentless stops:<br><code>0</code> or empty - No accessibility information for the stop.<br><code>1</code> - Some vehicles at this stop can be boarded by a rider in a wheelchair.<br><code>2</code> - Wheelchair boarding is not possible at this stop. <br><br>For child stops: <br><code>0</code> or empty - Stop will inherit its <code>wheelchair_boarding</code> behavior from the parent station, if specified in the parent.<br><code>1</code> - There exists some accessible path from outside the station to the specific stop/platform.<br><code>2</code> - There exists no accessible path from outside the station to the specific stop/platform.<br><br> For station entrances/exits: <br><code>0</code> or empty - Station entrance will inherit its <code>wheelchair_boarding</code> behavior from the parent station, if specified for the parent.<br><code>1</code> - Station entrance is wheelchair accessible.<br><code>2</code> - No accessible path from station entrance to stops/platforms.</td> </tr> <tr> <td><code>level_id</code></td> <td>Foreign ID referencing <code>levels.level_id</code></td> <td>Optional</td> <td>Level of the location. The same level may be used by multiple unlinked stations.</td> </tr> <tr> <td><code>platform_code</code></td> <td>Text</td> <td>Optional</td> <td>Platform identifier for a platform stop (a stop belonging to a station). This should be just the platform identifier (eg. "G" or "3"). Words like “platform” or "track" (or the feed’s language-specific equivalent) should not be included. This allows feed consumers to more easily internationalize and localize the platform identifier into other languages.</td> </tr> </tbody> </table> <h3 id="routestxt">routes.txt<a class="headerlink" href="#routestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Required</strong></p> <p>Primary key (<code>route_id</code>)</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>route_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a route.</td> </tr> <tr> <td><code>agency_id</code></td> <td>Foreign ID referencing <code>agency.agency_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Agency for the specified route.<br><br>Conditionally Required:<br>- <strong>Required</strong> if multiple agencies are defined in <a href="#agencytxt">agency.txt</a>. <br>- Recommended otherwise.</td> </tr> <tr> <td><code>route_short_name</code></td> <td>Text</td> <td><strong>Conditionally Required</strong></td> <td>Short name of a route. Often a short, abstract identifier (e.g., "32", "100X", "Green") that riders use to identify a route. Both <code>route_short_name</code> and <code>route_long_name</code> may be defined.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>routes.route_long_name</code> is empty.<br>- Recommended if there is a brief service designation. This should be the commonly-known passenger name of the service, and should be no longer than 12 characters.</td> </tr> <tr> <td><code>route_long_name</code></td> <td>Text</td> <td><strong>Conditionally Required</strong></td> <td>Full name of a route. This name is generally more descriptive than the <code>route_short_name</code> and often includes the route's destination or stop. Both <code>route_short_name</code> and <code>route_long_name</code> may be defined.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>routes.route_short_name</code> is empty.<br>- Optional otherwise.</td> </tr> <tr> <td><code>route_desc</code></td> <td>Text</td> <td>Optional</td> <td>Description of a route that provides useful, quality information. Should not be a duplicate of <code>route_short_name</code> or <code>route_long_name</code>. <hr> <em>Example: "A" trains operate between Inwood-207 St, Manhattan and Far Rockaway-Mott Avenue, Queens at all times. Also from about 6AM until about midnight, additional "A" trains operate between Inwood-207 St and Lefferts Boulevard (trains typically alternate between Lefferts Blvd and Far Rockaway).</em></td> </tr> <tr> <td><code>route_type</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates the type of transportation used on a route. Valid options are: <br><br><code>0</code> - Tram, Streetcar, Light rail. Any light rail or street level system within a metropolitan area.<br><code>1</code> - Subway, Metro. Any underground rail system within a metropolitan area.<br><code>2</code> - Rail. Used for intercity or long-distance travel.<br><code>3</code> - Bus. Used for short- and long-distance bus routes.<br><code>4</code> - Ferry. Used for short- and long-distance boat service.<br><code>5</code> - Cable tram. Used for street-level rail cars where the cable runs beneath the vehicle (e.g., cable car in San Francisco).<br><code>6</code> - Aerial lift, suspended cable car (e.g., gondola lift, aerial tramway). Cable transport where cabins, cars, gondolas or open chairs are suspended by means of one or more cables.<br><code>7</code> - Funicular. Any rail system designed for steep inclines.<br><code>11</code> - Trolleybus. Electric buses that draw power from overhead wires using poles.<br><code>12</code> - Monorail. Railway in which the track consists of a single rail or a beam.</td> </tr> <tr> <td><code>route_url</code></td> <td>URL</td> <td>Optional</td> <td>URL of a web page about the particular route. Should be different from the <code>agency.agency_url</code> value.</td> </tr> <tr> <td><code>route_color</code></td> <td>Color</td> <td>Optional</td> <td>Route color designation that matches public facing material. Defaults to white (<code>FFFFFF</code>) when omitted or left empty. The color difference between <code>route_color</code> and <code>route_text_color</code> should provide sufficient contrast when viewed on a black and white screen.</td> </tr> <tr> <td><code>route_text_color</code></td> <td>Color</td> <td>Optional</td> <td>Legible color to use for text drawn against a background of <code>route_color</code>. Defaults to black (<code>000000</code>) when omitted or left empty. The color difference between <code>route_color</code> and <code>route_text_color</code> should provide sufficient contrast when viewed on a black and white screen.</td> </tr> <tr> <td><code>route_sort_order</code></td> <td>Non-negative integer</td> <td>Optional</td> <td>Orders the routes in a way which is ideal for presentation to customers. Routes with smaller <code>route_sort_order</code> values should be displayed first.</td> </tr> <tr> <td><code>continuous_pickup</code></td> <td>Enum</td> <td><strong>Conditionally Forbidden</strong></td> <td>Indicates that the rider can board the transit vehicle at any point along the vehicle’s travel path as described by <a href="#shapestxt">shapes.txt</a>, on every trip of the route. Valid options are: <br><br><code>0</code> - Continuous stopping pickup. <br><code>1</code> or empty - No continuous stopping pickup. <br><code>2</code> - Must phone agency to arrange continuous stopping pickup. <br><code>3</code> - Must coordinate with driver to arrange continuous stopping pickup. <br><br>Values for <code>routes.continuous_pickup</code> may be overridden by defining values in <code>stop_times.continuous_pickup</code> for specific <code>stop_time</code>s along the route. <br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> if <code>stop_times.start_pickup_drop_off_window</code> or <code>stop_times.end_pickup_drop_off_window</code> are defined for any trip of this route.<br> - Optional otherwise.</td> </tr> <tr> <td><code>continuous_drop_off</code></td> <td>Enum</td> <td><strong>Conditionally Forbidden</strong></td> <td>Indicates that the rider can alight from the transit vehicle at any point along the vehicle’s travel path as described by <a href="#shapestxt">shapes.txt</a>, on every trip of the route. Valid options are: <br><br><code>0</code> - Continuous stopping drop off. <br><code>1</code> or empty - No continuous stopping drop off. <br><code>2</code> - Must phone agency to arrange continuous stopping drop off. <br><code>3</code> - Must coordinate with driver to arrange continuous stopping drop off. <br><br>Values for <code>routes.continuous_drop_off</code> may be overridden by defining values in <code>stop_times.continuous_drop_off</code> for specific <code>stop_time</code>s along the route. <br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> if <code>stop_times.start_pickup_drop_off_window</code> or <code>stop_times.end_pickup_drop_off_window</code> are defined for any trip of this route.<br> - Optional otherwise.</td> </tr> <tr> <td><code>network_id</code></td> <td>ID</td> <td><strong>Conditionally Forbidden</strong></td> <td>Identifies a group of routes. Multiple rows in <a href="#routestxt">routes.txt</a> may have the same <code>network_id</code>.<br><br>Conditionally Forbidden:<br>- <strong>Forbidden</strong> if the <a href="#route_networkstxt">route_networks.txt</a> file exists.<br>- Optional otherwise.</td> </tr> </tbody> </table> <h3 id="tripstxt">trips.txt<a class="headerlink" href="#tripstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Required</strong></p> <p>Primary key (<code>trip_id</code>)</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>route_id</code></td> <td>Foreign ID referencing <code>routes.route_id</code></td> <td><strong>Required</strong></td> <td>Identifies a route.</td> </tr> <tr> <td><code>service_id</code></td> <td>Foreign ID referencing <code>calendar.service_id</code> or <code>calendar_dates.service_id</code></td> <td><strong>Required</strong></td> <td>Identifies a set of dates when service is available for one or more routes.</td> </tr> <tr> <td><code>trip_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a trip.</td> </tr> <tr> <td><code>trip_headsign</code></td> <td>Text</td> <td>Optional</td> <td>Text that appears on signage identifying the trip's destination to riders. This field is recommended for all services with headsign text displayed on the vehicle which may be used to distinguish amongst trips in a route.<br><br> If the headsign changes during a trip, values for <code>trip_headsign</code> may be overridden by defining values in <code>stop_times.stop_headsign</code> for specific <code>stop_time</code>s along the trip.</td> </tr> <tr> <td><code>trip_short_name</code></td> <td>Text</td> <td>Optional</td> <td>Public facing text used to identify the trip to riders, for instance, to identify train numbers for commuter rail trips. If riders do not commonly rely on trip names, <code>trip_short_name</code> should be empty. A <code>trip_short_name</code> value, if provided, should uniquely identify a trip within a service day; it should not be used for destination names or limited/express designations.</td> </tr> <tr> <td><code>direction_id</code></td> <td>Enum</td> <td>Optional</td> <td>Indicates the direction of travel for a trip. This field should not be used in routing; it provides a way to separate trips by direction when publishing time tables. Valid options are: <br><br><code>0</code> - Travel in one direction (e.g. outbound travel).<br><code>1</code> - Travel in the opposite direction (e.g. inbound travel).<hr><em>Example: The <code>trip_headsign</code> and <code>direction_id</code> fields may be used together to assign a name to travel in each direction for a set of trips. A <a href="#tripstxt">trips.txt</a> file could contain these records for use in time tables:</em> <br> <code>trip_id,...,trip_headsign,direction_id</code> <br> <code>1234,...,Airport,0</code> <br> <code>1505,...,Downtown,1</code></td> </tr> <tr> <td><code>block_id</code></td> <td>ID</td> <td>Optional</td> <td>Identifies the block to which the trip belongs. A block consists of a single trip or many sequential trips made using the same vehicle, defined by shared service days and <code>block_id</code>. A <code>block_id</code> may have trips with different service days, making distinct blocks. See the <a href="#example-blocks-and-service-day">example below</a>. To provide in-seat transfers information, <a href="#transferstxt">transfers</a> of <code>transfer_type</code> <code>4</code> should be provided instead.</td> </tr> <tr> <td><code>shape_id</code></td> <td>Foreign ID referencing <code>shapes.shape_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Identifies a geospatial shape describing the vehicle travel path for a trip. <br><br>Conditionally Required: <br>- <strong>Required</strong> if the trip has a continuous pickup or drop-off behavior defined either in <a href="#routestxt">routes.txt</a> or in <a href="#stop_timestxt">stop_times.txt</a>. <br>- Optional otherwise.</td> </tr> <tr> <td><code>wheelchair_accessible</code></td> <td>Enum</td> <td>Optional</td> <td>Indicates wheelchair accessibility. Valid options are:<br><br><code>0</code> or empty - No accessibility information for the trip.<br><code>1</code> - Vehicle being used on this particular trip can accommodate at least one rider in a wheelchair.<br><code>2</code> - No riders in wheelchairs can be accommodated on this trip.</td> </tr> <tr> <td><code>bikes_allowed</code></td> <td>Enum</td> <td>Optional</td> <td>Indicates whether bikes are allowed. Valid options are:<br><br><code>0</code> or empty - No bike information for the trip.<br><code>1</code> - Vehicle being used on this particular trip can accommodate at least one bicycle.<br><code>2</code> - No bicycles are allowed on this trip.</td> </tr> </tbody> </table> <h4 id="example-blocks-and-service-day">Example: Blocks and service day<a class="headerlink" href="#example-blocks-and-service-day" title="Permanent link">¶</a></h4> <p>The example below is valid, with distinct blocks every day of the week.</p> <table> <thead> <tr> <th>route_id</th> <th>trip_id</th> <th>service_id</th> <th>block_id</th> <th><span style="font-weight:normal"><em>(first stop time)</em></span></th> <th><span style="font-weight:normal"><em>(last stop time)</em></span></th> </tr> </thead> <tbody> <tr> <td>red</td> <td>trip_1</td> <td>mon-tues-wed-thurs-fri-sat-sun</td> <td>red_loop</td> <td>22:00:00</td> <td>22:55:00</td> </tr> <tr> <td>red</td> <td>trip_2</td> <td>fri-sat-sun</td> <td>red_loop</td> <td>23:00:00</td> <td>23:55:00</td> </tr> <tr> <td>red</td> <td>trip_3</td> <td>fri-sat</td> <td>red_loop</td> <td>24:00:00</td> <td>24:55:00</td> </tr> <tr> <td>red</td> <td>trip_4</td> <td>mon-tues-wed-thurs</td> <td>red_loop</td> <td>20:00:00</td> <td>20:50:00</td> </tr> <tr> <td>red</td> <td>trip_5</td> <td>mon-tues-wed-thurs</td> <td>red_loop</td> <td>21:00:00</td> <td>21:50:00</td> </tr> </tbody> </table> <p>Notes on above table:</p> <ul> <li>On Friday into Saturday morning, for example, a single vehicle operates <code>trip_1</code>, <code>trip_2</code>, and <code>trip_3</code> (10:00 PM through 12:55 AM). Note that the last trip occurs on Saturday, 12:00 AM to 12:55 AM, but is part of the Friday “service day” because the times are 24:00:00 to 24:55:00.</li> <li>On Monday, Tuesday, Wednesday, and Thursday, a single vehicle operates <code>trip_1</code>, <code>trip_4</code>, and <code>trip_5</code> in a block from 8:00 PM to 10:55 PM.</li> </ul> <h3 id="stop_timestxt">stop_times.txt<a class="headerlink" href="#stop_timestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Required</strong></p> <p>Primary key (<code>trip_id</code>, <code>stop_sequence</code>)</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>trip_id</code></td> <td>Foreign ID referencing <code>trips.trip_id</code></td> <td><strong>Required</strong></td> <td>Identifies a trip.</td> </tr> <tr> <td><code>arrival_time</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Arrival time at the stop (defined by <code>stop_times.stop_id</code>) for a specific trip (defined by <code>stop_times.trip_id</code>) in the time zone specified by <code>agency.agency_timezone</code>, not <code>stops.stop_timezone</code>. <br><br>If there are not separate times for arrival and departure at a stop, <code>arrival_time</code> and <code>departure_time</code> should be the same. <br><br>For times occurring after midnight on the service day, enter the time as a value greater than 24:00:00 in HH:MM:SS.<br><br> If exact arrival and departure times (<code>timepoint=1</code>) are not available, estimated or interpolated arrival and departure times (<code>timepoint=0</code>) should be provided.<br><br>Conditionally Required:<br>- <strong>Required</strong> for the first and last stop in a trip (defined by <code>stop_times.stop_sequence</code>). <br>- <strong>Required</strong> for <code>timepoint=1</code>.<br>- <strong>Forbidden</strong> when <code>start_pickup_drop_off_window</code> or <code>end_pickup_drop_off_window</code> are defined.<br>- Optional otherwise.</td> </tr> <tr> <td><code>departure_time</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Departure time from the stop (defined by <code>stop_times.stop_id</code>) for a specific trip (defined by <code>stop_times.trip_id</code>) in the time zone specified by <code>agency.agency_timezone</code>, not <code>stops.stop_timezone</code>.<br><br>If there are not separate times for arrival and departure at a stop, <code>arrival_time</code> and <code>departure_time</code> should be the same. <br><br>For times occurring after midnight on the service day, enter the time as a value greater than 24:00:00 in HH:MM:SS.<br><br> If exact arrival and departure times (<code>timepoint=1</code>) are not available, estimated or interpolated arrival and departure times (<code>timepoint=0</code>) should be provided.<br><br>Conditionally Required:<br>- <strong>Required</strong> for <code>timepoint=1</code>.<br>- <strong>Forbidden</strong> when <code>start_pickup_drop_off_window</code> or <code>end_pickup_drop_off_window</code> are defined.<br>- Optional otherwise.</td> </tr> <tr> <td><code>stop_id</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Identifies the serviced stop. All stops serviced during a trip must have a record in <a href="#stop_timestxt">stop_times.txt</a>. Referenced locations must be stops/platforms, i.e. their <code>stops.location_type</code> value must be <code>0</code> or empty. A stop may be serviced multiple times in the same trip, and multiple trips and routes may service the same stop.<br><br>On-demand service using stops should be referenced in the sequence in which service is available at those stops. A data consumer should assume that travel is possible from one stop or location to any stop or location later in the trip, provided that the <code>pickup/drop_off_type</code> of each stop_time and the time constraints of each <code>start/end_pickup_drop_off_window</code> do not forbid it.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>stop_times.location_group_id</code> AND <code>stop_times.location_id</code> are NOT defined.<br>- <strong>Forbidden</strong> if <code>stop_times.location_group_id</code> or <code>stop_times.location_id</code> are defined.</td> </tr> <tr> <td><code>location_group_id</code></td> <td>Foreign ID referencing <code>location_groups.location_group_id</code></td> <td><strong>Conditionally Forbidden</strong></td> <td>Identifies the serviced location group that indicates groups of stops where riders may request pickup or drop off. All location groups serviced during a trip must have a record in <a href="#stop_timestxt">stop_times.txt</a>. Multiple trips and routes may service the same location group.<br><br>On-demand service using location groups should be referenced in the sequence in which service is available at those location groups. A data consumer should assume that travel is possible from one stop or location to any stop or location later in the trip, provided that the <code>pickup/drop_off_type</code> of each stop_time and the time constraints of each <code>start/end_pickup_drop_off_window</code> do not forbid it.<br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> if <code>stop_times.stop_id</code> or <code>stop_times.location_id</code> are defined.</td> </tr> <tr> <td><code>location_id</code></td> <td>Foreign ID referencing <code>id</code> from <code>locations.geojson</code></td> <td><strong>Conditionally Forbidden</strong></td> <td>Identifies the GeoJSON location that corresponds to serviced zone where riders may request pickup or drop off. All GeoJSON locations serviced during a trip must have a record in <a href="#stop_timestxt">stop_times.txt</a>. Multiple trips and routes may service the same GeoJSON location.<br><br>On-demand service within locations should be referenced in the sequence in which service is available in those locations. A data consumer should assume that travel is possible from one stop or location to any stop or location later in the trip, provided that the <code>pickup/drop_off_type</code> of each stop_time and the time constraints of each <code>start/end_pickup_drop_off_window</code> do not forbid it.<br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> if <code>stop_times.stop_id</code> or <code>stop_times.location_group_id</code> are defined.</td> </tr> <tr> <td><code>stop_sequence</code></td> <td>Non-negative integer</td> <td><strong>Required</strong></td> <td>Order of stops, location groups, or GeoJSON locations for a particular trip. The values must increase along the trip but do not need to be consecutive.<hr><em>Example: The first location on the trip could have a <code>stop_sequence</code>=<code>1</code>, the second location on the trip could have a <code>stop_sequence</code>=<code>23</code>, the third location could have a <code>stop_sequence</code>=<code>40</code>, and so on.</em> <br><br> Travel within the same location group or GeoJSON location requires two records in <a href="#stop_timestxt">stop_times.txt</a> with the same <code>location_group_id</code> or <code>location_id</code>.</td> </tr> <tr> <td><code>stop_headsign</code></td> <td>Text</td> <td>Optional</td> <td>Text that appears on signage identifying the trip's destination to riders. This field overrides the default <code>trips.trip_headsign</code> when the headsign changes between stops. If the headsign is displayed for an entire trip, <code>trips.trip_headsign</code> should be used instead. <br><br> A <code>stop_headsign</code> value specified for one <code>stop_time</code> does not apply to subsequent <code>stop_time</code>s in the same trip. If you want to override the <code>trip_headsign</code> for multiple <code>stop_time</code>s in the same trip, the <code>stop_headsign</code> value must be repeated in each <code>stop_time</code> row.</td> </tr> <tr> <td><code>start_pickup_drop_off_window</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Time that on-demand service becomes available in a GeoJSON location, location group, or stop.<br><br><strong>Conditionally Required</strong>:<br>- <strong>Required</strong> if <code>stop_times.location_group_id</code> or <code>stop_times.location_id</code> is defined.<br>- <strong>Required</strong> if <code>end_pickup_drop_off_window</code> is defined.<br>- <strong>Forbidden</strong> if <code>arrival_time</code> or <code>departure_time</code> is defined.<br>- Optional otherwise.</td> </tr> <tr> <td><code>end_pickup_drop_off_window</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Time that on-demand service ends in a GeoJSON location, location group, or stop.<br><br><strong>Conditionally Required</strong>:<br>- <strong>Required</strong> if <code>stop_times.location_group_id</code> or <code>stop_times.location_id</code> is defined.<br>- <strong>Required</strong> if <code>start_pickup_drop_off_window</code> is defined.<br>- <strong>Forbidden</strong> if <code>arrival_time</code> or <code>departure_time</code> is defined.<br>- Optional otherwise.</td> </tr> <tr> <td><code>pickup_type</code></td> <td>Enum</td> <td><strong>Conditionally Forbidden</strong></td> <td>Indicates pickup method. Valid options are:<br><br><code>0</code> or empty - Regularly scheduled pickup. <br><code>1</code> - No pickup available.<br><code>2</code> - Must phone agency to arrange pickup.<br><code>3</code> - Must coordinate with driver to arrange pickup.<br><br> <strong>Conditionally Forbidden</strong>: <br>- <code>pickup_type=0</code> <strong>forbidden</strong> if <code>start_pickup_drop_off_window</code> or <code>end_pickup_drop_off_window</code> are defined.<br> - <code>pickup_type=3</code> <strong>forbidden</strong> if <code>start_pickup_drop_off_window</code> or <code>end_pickup_drop_off_window</code> are defined.<br> - Optional otherwise.</td> </tr> <tr> <td><code>drop_off_type</code></td> <td>Enum</td> <td><strong>Conditionally Forbidden</strong></td> <td>Indicates drop off method. Valid options are:<br><br><code>0</code> or empty - Regularly scheduled drop off.<br><code>1</code> - No drop off available.<br><code>2</code> - Must phone agency to arrange drop off.<br><code>3</code> - Must coordinate with driver to arrange drop off.<br><br> <strong>Conditionally Forbidden</strong>:<br> - <code>drop_off_type=0</code> <strong>forbidden</strong> if <code>start_pickup_drop_off_window</code> or <code>end_pickup_drop_off_window</code> are defined.<br> - Optional otherwise.</td> </tr> <tr> <td><code>continuous_pickup</code></td> <td>Enum</td> <td><strong>Conditionally Forbidden</strong></td> <td>Indicates that the rider can board the transit vehicle at any point along the vehicle’s travel path as described by <a href="#shapestxt">shapes.txt</a>, from this <code>stop_time</code> to the next <code>stop_time</code> in the trip’s <code>stop_sequence</code>. Valid options are: <br><br><code>0</code> - Continuous stopping pickup. <br><code>1</code> or empty - No continuous stopping pickup. <br><code>2</code> - Must phone agency to arrange continuous stopping pickup. <br><code>3</code> - Must coordinate with driver to arrange continuous stopping pickup. <br><br>If this field is populated, it overrides any continuous pickup behavior defined in <a href="#routestxt">routes.txt</a>. If this field is empty, the <code>stop_time</code> inherits any continuous pickup behavior defined in <a href="#routestxt">routes.txt</a>.<br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> if <code>start_pickup_drop_off_window</code> or <code>end_pickup_drop_off_window</code> are defined.<br> - Optional otherwise.</td> </tr> <tr> <td><code>continuous_drop_off</code></td> <td>Enum</td> <td><strong>Conditionally Forbidden</strong></td> <td>Indicates that the rider can alight from the transit vehicle at any point along the vehicle’s travel path as described by <a href="#shapestxt">shapes.txt</a>, from this <code>stop_time</code> to the next <code>stop_time</code> in the trip’s <code>stop_sequence</code>. Valid options are: <br><br><code>0</code> - Continuous stopping drop off. <br><code>1</code> or empty - No continuous stopping drop off. <br><code>2</code> - Must phone agency to arrange continuous stopping drop off. <br><code>3</code> - Must coordinate with driver to arrange continuous stopping drop off. <br><br>If this field is populated, it overrides any continuous drop-off behavior defined in <a href="#routestxt">routes.txt</a>. If this field is empty, the <code>stop_time</code> inherits any continuous drop-off behavior defined in <a href="#routestxt">routes.txt</a>.<br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> if <code>start_pickup_drop_off_window</code> or <code>end_pickup_drop_off_window</code> are defined.<br> - Optional otherwise.</td> </tr> <tr> <td><code>shape_dist_traveled</code></td> <td>Non-negative float</td> <td>Optional</td> <td>Actual distance traveled along the associated shape, from the first stop to the stop specified in this record. This field specifies how much of the shape to draw between any two stops during a trip. Must be in the same units used in <a href="#shapestxt">shapes.txt</a>. Values used for <code>shape_dist_traveled</code> must increase along with <code>stop_sequence</code>; they must not be used to show reverse travel along a route.<br><br>Recommended for routes that have looping or inlining (the vehicle crosses or travels over the same portion of alignment in one trip). See <a href="#shapestxt"><code>shapes.shape_dist_traveled</code></a>. <hr><em>Example: If a bus travels a distance of 5.25 kilometers from the start of the shape to the stop,<code>shape_dist_traveled</code>=<code>5.25</code>.</em></td> </tr> <tr> <td><code>timepoint</code></td> <td>Enum</td> <td>Optional</td> <td>Indicates if arrival and departure times for a stop are strictly adhered to by the vehicle or if they are instead approximate and/or interpolated times. This field allows a GTFS producer to provide interpolated stop-times, while indicating that the times are approximate. Valid options are:<br><br><code>0</code> - Times are considered approximate. <br><code>1</code> - Times are considered exact. <br><br> All records of <a href="#stop_timestxt">stop_times.txt</a> with defined arrival or departure times should have timepoint values populated. If no timepoint values are provided, all times are considered exact.</td> </tr> <tr> <td><code>pickup_booking_rule_id</code></td> <td>Foreign ID referencing <code>booking_rules.booking_rule_id</code></td> <td>Optional</td> <td>Identifies the boarding booking rule at this stop time.<br><br>Recommended when <code>pickup_type=2</code>.</td> </tr> <tr> <td><code>drop_off_booking_rule_id</code></td> <td>Foreign ID referencing <code>booking_rules.booking_rule_id</code></td> <td>Optional</td> <td>Identifies the alighting booking rule at this stop time.<br><br>Recommended when <code>drop_off_type=2</code>.</td> </tr> </tbody> </table> <h4 id="on-demand-service-routing-behavior">On-demand Service Routing Behavior<a class="headerlink" href="#on-demand-service-routing-behavior" title="Permanent link">¶</a></h4> <ul> <li>When providing routing or travel time between the origin and destination, data consumers should ignore intermediate stop_times.txt records with the same <code>trip_id</code> that have <code>start_pickup_drop_off_window</code> and <code>end_pickup_drop_off_window</code> defined. For examples that demonstrate what should be ignored, see <a href="../examples/flex/#ignoring-intermediate-stop-times-records-with-pickupdrop-off-windows">the data example page</a>.</li> <li>Simultaneous overlap of locations.geojson <code>id</code> geometry, <code>start/end_pickup_drop_off_window</code> time, and <code>pickup_type</code> or <code>drop_off_type</code> between two or more stop_times.txt records with the same <code>trip_id</code> is forbidden. For examples that demonstrate what is forbidden, see <a href="../examples/flex/#zone-overlap-constraint">the data example page</a>.</li> </ul> <h3 id="calendartxt">calendar.txt<a class="headerlink" href="#calendartxt" title="Permanent link">¶</a></h3> <p>File: <strong>Conditionally Required</strong></p> <p>Primary key (<code>service_id</code>)</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>service_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a set of dates when service is available for one or more routes.</td> </tr> <tr> <td><code>monday</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates whether the service operates on all Mondays in the date range specified by the <code>start_date</code> and <code>end_date</code> fields. Note that exceptions for particular dates may be listed in <a href="#calendar_datestxt">calendar_dates.txt</a>. Valid options are:<br><br><code>1</code> - Service is available for all Mondays in the date range.<br><code>0</code> - Service is not available for Mondays in the date range.</td> </tr> <tr> <td><code>tuesday</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Functions in the same way as <code>monday</code> except applies to Tuesdays</td> </tr> <tr> <td><code>wednesday</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Functions in the same way as <code>monday</code> except applies to Wednesdays</td> </tr> <tr> <td><code>thursday</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Functions in the same way as <code>monday</code> except applies to Thursdays</td> </tr> <tr> <td><code>friday</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Functions in the same way as <code>monday</code> except applies to Fridays</td> </tr> <tr> <td><code>saturday</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Functions in the same way as <code>monday</code> except applies to Saturdays.</td> </tr> <tr> <td><code>sunday</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Functions in the same way as <code>monday</code> except applies to Sundays.</td> </tr> <tr> <td><code>start_date</code></td> <td>Date</td> <td><strong>Required</strong></td> <td>Start service day for the service interval.</td> </tr> <tr> <td><code>end_date</code></td> <td>Date</td> <td><strong>Required</strong></td> <td>End service day for the service interval. This service day is included in the interval.</td> </tr> </tbody> </table> <h3 id="calendar_datestxt">calendar_dates.txt<a class="headerlink" href="#calendar_datestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Conditionally Required</strong></p> <p>Primary key (<code>service_id</code>, <code>date</code>)</p> <p>The <a href="#calendar_datestxt">calendar_dates.txt</a> table explicitly activates or disables service by date. It may be used in two ways.</p> <ul> <li>Recommended: Use <a href="#calendar_datestxt">calendar_dates.txt</a> in conjunction with <a href="#calendartxt">calendar.txt</a> to define exceptions to the default service patterns defined in <a href="#calendartxt">calendar.txt</a>. If service is generally regular, with a few changes on explicit dates (for instance, to accommodate special event services, or a school schedule), this is a good approach. In this case <code>calendar_dates.service_id</code> is a foreign ID referencing <code>calendar.service_id</code>.</li> <li>Alternate: Omit <a href="#calendartxt">calendar.txt</a>, and specify each date of service in <a href="#calendar_datestxt">calendar_dates.txt</a>. This allows for considerable service variation and accommodates service without normal weekly schedules. In this case <code>service_id</code> is an ID.</li> </ul> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>service_id</code></td> <td>Foreign ID referencing <code>calendar.service_id</code> or ID</td> <td><strong>Required</strong></td> <td>Identifies a set of dates when a service exception occurs for one or more routes. Each (<code>service_id</code>, <code>date</code>) pair may only appear once in <a href="#calendar_datestxt">calendar_dates.txt</a> if using <a href="#calendartxt">calendar.txt</a> and <a href="#calendar_datestxt">calendar_dates.txt</a> in conjunction. If a <code>service_id</code> value appears in both <a href="#calendartxt">calendar.txt</a> and <a href="#calendar_datestxt">calendar_dates.txt</a>, the information in <a href="#calendar_datestxt">calendar_dates.txt</a> modifies the service information specified in <a href="#calendartxt">calendar.txt</a>.</td> </tr> <tr> <td><code>date</code></td> <td>Date</td> <td><strong>Required</strong></td> <td>Date when service exception occurs.</td> </tr> <tr> <td><code>exception_type</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates whether service is available on the date specified in the date field. Valid options are:<br><br> <code>1</code> - Service has been added for the specified date.<br><code>2</code> - Service has been removed for the specified date.<hr><em>Example: Suppose a route has one set of trips available on holidays and another set of trips available on all other days. One <code>service_id</code> could correspond to the regular service schedule and another <code>service_id</code> could correspond to the holiday schedule. For a particular holiday, the <a href="#calendar_datestxt">calendar_dates.txt</a> file could be used to add the holiday to the holiday <code>service_id</code> and to remove the holiday from the regular <code>service_id</code> schedule.</em></td> </tr> </tbody> </table> <h3 id="fare_attributestxt">fare_attributes.txt<a class="headerlink" href="#fare_attributestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>fare_id</code>)</p> <p><strong>Versions</strong><br> There are two modelling options for describing fares. GTFS-Fares V1 is the legacy option for describing minimal fare information. GTFS-Fares V2 is an updated method that allows for a more detailed account of an agency's fare structure. Both are allowed to be present in a dataset, but only one method should be used by a data consumer for a given dataset. It is recommended that GTFS-Fares V2 takes precedence over GTFS-Fares V1. <br><br>The files associated with GTFS-Fares V1 are: <br>- <a href="#fare_attributestxt">fare_attributes.txt</a><br>- <a href="#fare_rulestxt">fare_rules.txt</a><br><br>The files associated with GTFS-Fares V2 are: <br>- <a href="#fare_mediatxt">fare_media.txt</a><br>- <a href="#fare_productstxt">fare_products.txt</a><br>- <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a><br>- <a href="#fare_transfer_rulestxt">fare_transfer_rules.txt</a></p> <p><br></p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>fare_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a fare class.</td> </tr> <tr> <td><code>price</code></td> <td>Non-negative float</td> <td><strong>Required</strong></td> <td>Fare price, in the unit specified by <code>currency_type</code>.</td> </tr> <tr> <td><code>currency_type</code></td> <td>Currency code</td> <td><strong>Required</strong></td> <td>Currency used to pay the fare.</td> </tr> <tr> <td><code>payment_method</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates when the fare must be paid. Valid options are:<br><br><code>0</code> - Fare is paid on board.<br><code>1</code> - Fare must be paid before boarding.</td> </tr> <tr> <td><code>transfers</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates the number of transfers permitted on this fare. Valid options are:<br><br><code>0</code> - No transfers permitted on this fare.<br><code>1</code> - Riders may transfer once.<br><code>2</code> - Riders may transfer twice.<br>empty - Unlimited transfers are permitted.</td> </tr> <tr> <td><code>agency_id</code></td> <td>Foreign ID referencing <code>agency.agency_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Identifies the relevant agency for a fare. <br><br>Conditionally Required:<br>- <strong>Required</strong> if multiple agencies are defined in <a href="#agencytxt">agency.txt</a>.<br>- Recommended otherwise.</td> </tr> <tr> <td><code>transfer_duration</code></td> <td>Non-negative integer</td> <td>Optional</td> <td>Length of time in seconds before a transfer expires. When <code>transfers</code>=<code>0</code> this field may be used to indicate how long a ticket is valid for or it may be left empty.</td> </tr> </tbody> </table> <h3 id="fare_rulestxt">fare_rules.txt<a class="headerlink" href="#fare_rulestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>*</code>)</p> <p>The <a href="#fare_rulestxt">fare_rules.txt</a> table specifies how fares in <a href="#fare_attributestxt">fare_attributes.txt</a> apply to an itinerary. Most fare structures use some combination of the following rules:</p> <ul> <li>Fare depends on origin or destination stations.</li> <li>Fare depends on which zones the itinerary passes through.</li> <li>Fare depends on which route the itinerary uses.</li> </ul> <p>For examples that demonstrate how to specify a fare structure with <a href="#fare_rulestxt">fare_rules.txt</a> and <a href="#fare_attributestxt">fare_attributes.txt</a>, see <a href="https://web.archive.org/web/20111207224351/https://code.google.com/p/googletransitdatafeed/wiki/FareExamples" target="_blank" rel="noopener">FareExamples</a> in the GoogleTransitDataFeed open source project wiki.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>fare_id</code></td> <td>Foreign ID referencing <code>fare_attributes.fare_id</code></td> <td><strong>Required</strong></td> <td>Identifies a fare class.</td> </tr> <tr> <td><code>route_id</code></td> <td>Foreign ID referencing <code>routes.route_id</code></td> <td>Optional</td> <td>Identifies a route associated with the fare class. If several routes with the same fare attributes exist, create a record in <a href="#fare_rulestxt">fare_rules.txt</a> for each route.<hr><em>Example: If fare class "b" is valid on route "TSW" and "TSE", the <a href="#fare_rulestxt">fare_rules.txt</a> file would contain these records for the fare class:</em> <br> <code>fare_id,route_id</code><br><code>b,TSW</code> <br> <code>b,TSE</code></td> </tr> <tr> <td><code>origin_id</code></td> <td>Foreign ID referencing <code>stops.zone_id</code></td> <td>Optional</td> <td>Identifies an origin zone. If a fare class has multiple origin zones, create a record in <a href="#fare_rulestxt">fare_rules.txt</a> for each <code>origin_id</code>.<hr><em>Example: If fare class "b" is valid for all travel originating from either zone "2" or zone "8", the <a href="#fare_rulestxt">fare_rules.txt</a> file would contain these records for the fare class:</em> <br> <code>fare_id,...,origin_id</code> <br> <code>b,...,2</code> <br> <code>b,...,8</code></td> </tr> <tr> <td><code>destination_id</code></td> <td>Foreign ID referencing <code>stops.zone_id</code></td> <td>Optional</td> <td>Identifies a destination zone. If a fare class has multiple destination zones, create a record in <a href="#fare_rulestxt">fare_rules.txt</a> for each <code>destination_id</code>.<hr><em>Example: The <code>origin_id</code> and <code>destination_id</code> fields could be used together to specify that fare class "b" is valid for travel between zones 3 and 4, and for travel between zones 3 and 5, the <a href="#fare_rulestxt">fare_rules.txt</a> file would contain these records for the fare class:</em> <br><code>fare_id,...,origin_id,destination_id</code> <br><code>b,...,3,4</code><br> <code>b,...,3,5</code></td> </tr> <tr> <td><code>contains_id</code></td> <td>Foreign ID referencing <code>stops.zone_id</code></td> <td>Optional</td> <td>Identifies the zones that a rider will enter while using a given fare class. Used in some systems to calculate correct fare class. <hr><em>Example: If fare class "c" is associated with all travel on the GRT route that passes through zones 5, 6, and 7 the <a href="#fare_rulestxt">fare_rules.txt</a> would contain these records:</em> <br> <code>fare_id,route_id,...,contains_id</code> <br> <code>c,GRT,...,5</code> <br><code>c,GRT,...,6</code> <br><code>c,GRT,...,7</code> <br> <em>Because all <code>contains_id</code> zones must be matched for the fare to apply, an itinerary that passes through zones 5 and 6 but not zone 7 would not have fare class "c". For more detail, see <a href="https://code.google.com/p/googletransitdatafeed/wiki/FareExamples" target="_blank" rel="noopener">https://code.google.com/p/googletransitdatafeed/wiki/FareExamples</a> in the GoogleTransitDataFeed project wiki.</em></td> </tr> </tbody> </table> <h3 id="timeframestxt">timeframes.txt<a class="headerlink" href="#timeframestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>*</code>)</p> <p>Used to describe fares that can vary based on the time of day, the day of the week, or a particular day in the year. Timeframes can be associated with fare products in <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a>. <br> There must not be overlapping time intervals for the same <code>timeframe_group_id</code> and <code>service_id</code> values.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>timeframe_group_id</code></td> <td>ID</td> <td><strong>Required</strong></td> <td>Identifies a timeframe or set of timeframes.</td> </tr> <tr> <td><code>start_time</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Defines the beginning of a timeframe. The interval includes the start time.<br> Values greater than <code>24:00:00</code> are forbidden. An empty value in <code>start_time</code> is considered <code>00:00:00</code>. <br><br> Conditionally Required:<br> - <strong>Required</strong> if <code>timeframes.end_time</code> is defined.<br> - <strong>Forbidden</strong> otherwise</td> </tr> <tr> <td><code>end_time</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Defines the end of a timeframe. The interval does not include the end time.<br> Values greater than <code>24:00:00</code> are forbidden. An empty value in <code>end_time</code> is considered <code>24:00:00</code>. <br><br> Conditionally Required:<br> - <strong>Required</strong> if <code>timeframes.start_time</code> is defined.<br> - <strong>Forbidden</strong> otherwise</td> </tr> <tr> <td><code>service_id</code></td> <td>Foreign ID referencing <code>calendar.service_id</code> or <code>calendar_dates.service_id</code></td> <td><strong>Required</strong></td> <td>Identifies a set of dates that a timeframe is in effect.</td> </tr> </tbody> </table> <h4 id="timeframe-local-time-semantics">Timeframe Local Time Semantics<a class="headerlink" href="#timeframe-local-time-semantics" title="Permanent link">¶</a></h4> <ul> <li>When evaluating a fare event’s time against <a href="#timeframestxt">timeframes.txt</a>, the event time is computed in local time using the local timezone, as determined by the <code>stop_timezone</code>, if specified, of the stop or parent station for the fare event. If not specified, the feed’s agency timezone should be used instead.</li> <li>The “current day” is the current date of the fare event’s time, computed relative to the local timezone. The “current day” may be different from the service day of a fare leg’s trip, especially for trips that extend past midnight.</li> <li>The “time-of-day” for the fare event is computed relative to “current day” using GTFS Time field-type semantics.</li> </ul> <h3 id="fare_mediatxt">fare_media.txt<a class="headerlink" href="#fare_mediatxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong> </p> <p>Primary key (<code>fare_media_id</code>)</p> <p>To describe the different fare media that can be employed to use fare products. Fare media are physical or virtual holders used for the representation and/or validation of a fare product.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>fare_media_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a fare media.</td> </tr> <tr> <td><code>fare_media_name</code></td> <td>Text</td> <td>Optional</td> <td>Name of the fare media.<br><br>For fare media which are transit cards (<code>fare_media_type =2</code>) or mobile apps (<code>fare_media_type =4</code>), the <code>fare_media_name</code> should be included and should match the rider-facing name used by the organizations delivering them.</td> </tr> <tr> <td><code>fare_media_type</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>The type of fare media. Valid options are:<br><br><code>0</code> - None. Used when there is no fare media involved in purchasing or validating a fare product, such as paying cash to a driver or conductor with no physical ticket provided.<br><code>1</code> - Physical paper ticket that allows a passenger to take either a certain number of pre-purchased trips or unlimited trips within a fixed period of time.<br><code>2</code> - Physical transit card that has stored tickets, passes or monetary value.<br><code>3</code> - cEMV (contactless Europay, Mastercard and Visa) as an open-loop token container for account-based ticketing.<br><code>4</code> - Mobile app that have stored virtual transit cards, tickets, passes, or monetary value.</td> </tr> </tbody> </table> <h3 id="fare_productstxt">fare_products.txt<a class="headerlink" href="#fare_productstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>fare_product_id</code>, <code>fare_media_id</code>)</p> <p>Used to describe the range of fares available for purchase by riders or taken into account when computing the total fare for journeys with multiple legs, such as transfer costs.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>fare_product_id</code></td> <td>ID</td> <td><strong>Required</strong></td> <td>Identifies a fare product or set of fare products.<br><br>Multiple records in <a href="#fare_productstxt">fare_products.txt</a> may share the same <code>fare_product_id</code>, in which case all records with that ID will be retrieved when referenced from another file.<br><br>Multiple records may share the same <code>fare_product_id</code> but with different <code>fare_media_id</code>s, indicating various methods available for employing the fare product, potentially at different prices.</td> </tr> <tr> <td><code>fare_product_name</code></td> <td>Text</td> <td>Optional</td> <td>The name of the fare product as displayed to riders.</td> </tr> <tr> <td><code>fare_media_id</code></td> <td>Foreign ID referencing <code>fare_media.fare_media_id</code></td> <td>Optional</td> <td>Identifies a fare media that can be employed to use the fare product during the trip. When <code>fare_media_id</code> is empty, it is considered that the fare media is unknown.</td> </tr> <tr> <td><code>amount</code></td> <td>Currency amount</td> <td><strong>Required</strong></td> <td>The cost of the fare product. May be negative to represent transfer discounts. May be zero to represent a fare product that is free.</td> </tr> <tr> <td><code>currency</code></td> <td>Currency code</td> <td><strong>Required</strong></td> <td>The currency of the cost of the fare product.</td> </tr> </tbody> </table> <h3 id="fare_leg_rulestxt">fare_leg_rules.txt<a class="headerlink" href="#fare_leg_rulestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>network_id, from_area_id, to_area_id, from_timeframe_group_id, to_timeframe_group_id, fare_product_id</code>)</p> <p>Fare rules for individual legs of travel.</p> <p>Fares in <a href="#fare_leg_rulestxt"><code>fare_leg_rules.txt</code></a> must be queried by filtering all the records in the file to find rules that match the leg to be traveled by the rider.</p> <p>To process the cost of a leg:</p> <ol> <li> <p>The file <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a> must be filtered by the fields that define the characteristics of travel, these fields are:</p> <ul> <li><code>fare_leg_rules.network_id</code></li> <li><code>fare_leg_rules.from_area_id</code></li> <li><code>fare_leg_rules.to_area_id</code></li> <li><code>fare_leg_rules.from_timeframe_group_id</code></li> <li><code>fare_leg_rules.to_timeframe_group_id</code> <br/></li> </ul> </li> <li> <p>If the leg exactly matches a record in <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a> based on the characteristics of travel, that record must be processed to determine the cost of the leg. This file handles empty entries in two ways: empty semantics OR rule_priority. <br/></p> </li> <li> <p>If no exact matches are found AND the <code>rule_priority</code> field does not exist, then empty entries in <code>fare_leg_rules.network_id</code>, <code>fare_leg_rules.from_area_id</code>, and <code>fare_leg_rules.to_area_id</code> must be checked to process the cost of the leg:</p> <ul> <li> <p>An empty entry in <code>fare_leg_rules.network_id</code> corresponds to all networks defined in <a href="#routestxt">routes.txt</a> or <a href="#networkstxt">networks.txt</a> excluding the ones listed under <code>fare_leg_rules.network_id</code></p> </li> <li> <p>An empty entry in <code>fare_leg_rules.from_area_id</code> corresponds to all areas defined in <code>areas.area_id</code> excluding the ones listed under <code>fare_leg_rules.from_area_id</code></p> </li> <li>An empty entry in <code>fare_leg_rules.to_area_id</code> corresponds to all areas defined in <code>areas.area_id</code> excluding the ones listed under <code>fare_leg_rules.to_area_id</code> <br/></li> </ul> </li> <li> <p>If the <code>rule_priority</code> field exists, then</p> <ul> <li>An empty entry in <code>fare_leg_rules.network_id</code> indicates the network of the leg does not affect the matching of this rule.</li> <li>An empty entry in <code>fare_leg_rules.from_area_id</code> indicates the departure area of the leg does not affect the matching of this rule.</li> <li>An empty entry in <code>fare_leg_rules.to_area_id</code> indicates the arrival area of the leg does not affect the matching of this rule. <br/></li> </ul> </li> <li> <p>If the leg does not match any of the rules described above, then the fare is unknown.</p> </li> </ol> <p><br/></p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>leg_group_id</code></td> <td>ID</td> <td>Optional</td> <td>Identifies a group of entries in <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a>.<br><br> Used to describe fare transfer rules between <code>fare_transfer_rules.from_leg_group_id</code> and <code>fare_transfer_rules.to_leg_group_id</code>.<br><br>Multiple entries in <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a> may belong to the same <code>fare_leg_rules.leg_group_id</code>.<br><br>The same entry in <a href="#fare_leg_rulestxt">fare_leg_rules.txt</a> (not including <code>fare_leg_rules.leg_group_id</code>) must not belong to multiple <code>fare_leg_rules.leg_group_id</code>.</td> </tr> <tr> <td><code>network_id</code></td> <td>Foreign ID referencing <code>routes.network_id</code> or <code>networks.network_id</code></td> <td>Optional</td> <td>Identifies a route network that applies for the fare leg rule.<br><br>If the <code>rule_priority</code> field does not exist AND there are no matching <code>fare_leg_rules.network_id</code> values to the <code>network_id</code> being filtered, empty <code>fare_leg_rules.network_id</code> will be matched by default.<br><br> An empty entry in <code>fare_leg_rules.network_id</code> corresponds to all networks defined in <a href="#routestxt">routes.txt</a> or <a href="#networkstxt">networks.txt</a> excluding the ones listed under <code>fare_leg_rules.network_id</code><br><br> If the <code>rule_priority</code> field exists in the file, an empty <code>fare_leg_rules.network_id</code> indicates that the route network of the leg does not affect the matching of this rule.</td> </tr> <tr> <td><code>from_area_id</code></td> <td>Foreign ID referencing <code>areas.area_id</code></td> <td>Optional</td> <td>Identifies a departure area.<br><br>If the <code>rule_priority</code> field does not exist AND there are no matching <code>fare_leg_rules.from_area_id</code> values to the <code>area_id</code> being filtered, empty <code>fare_leg_rules.from_area_id</code> will be matched by default. <br><br>An empty entry in <code>fare_leg_rules.from_area_id</code> corresponds to all areas defined in <code>areas.area_id</code> excluding the ones listed under <code>fare_leg_rules.from_area_id</code><br><br> If the <code>rule_priority</code> field exists in the file, an empty <code>fare_leg_rules.from_area_id</code> indicates that the departure area of the leg does not affect the matching of this rule.</td> </tr> <tr> <td><code>to_area_id</code></td> <td>Foreign ID referencing <code>areas.area_id</code></td> <td>Optional</td> <td>Identifies an arrival area.<br><br>If the <code>rule_priority</code> field does not exist AND there are no matching <code>fare_leg_rules.to_area_id</code> values to the <code>area_id</code> being filtered, empty <code>fare_leg_rules.to_area_id</code> will be matched by default.<br><br> An empty entry in <code>fare_leg_rules.to_area_id</code> corresponds to all areas defined in <code>areas.area_id</code> excluding the ones listed under <code>fare_leg_rules.to_area_id</code><br><br>If the <code>rule_priority</code> field exists in the file, an empty <code>fare_leg_rules.to_area_id</code> indicates that the arrival area of the leg does not affect the matching of this rule.</td> </tr> <tr> <td><code>from_timeframe_group_id</code></td> <td>Foreign ID referencing <code>timeframes.timeframe_group_id</code></td> <td>Optional</td> <td>Defines the timeframe for the fare validation event at the start of the fare leg.<br><br>The “start time” of the fare leg is the time at which the event is scheduled to occur. For example, the time could be the scheduled departure time of a bus at the start of a fare leg where the rider boards and validates their fare. For the rule matching semantics below, the start time is computed in local time, as determined by <a href="#timeframe-local-time-semantics">Local Time Semantics</a> of <a href="#timeframestxt">timeframes.txt</a>. The stop or station of the fare leg’s departure event should be used for timezone resolution, where appropriate.<br><br>For a fare leg rule that specifies a <code>from_timeframe_group_id</code>, that rule will match a particular leg if there exists at least one record in <a href="#timeframestxt">timeframes.txt</a> where all of the following conditions are true<br>- The value of <code>timeframe_group_id</code> is equal to the <code>from_timeframe_group_id</code> value.<br>- The set of days identified by the record’s <code>service_id</code> contains the “current day” of the fare leg’s start time.<br>- The “time-of-day” of the fare leg's start time is greater than or equal to the record’s <code>timeframes.start_time</code> value and less than the <code>timeframes.end_time</code> value.<br><br>An empty <code>fare_leg_rules.from_timeframe_group_id</code> indicates that the start time of the leg does not affect the matching of this rule.</td> </tr> <tr> <td><code>to_timeframe_group_id</code></td> <td>Foreign ID referencing <code>timeframes.timeframe_group_id</code></td> <td>Optional</td> <td>Defines the timeframe for the fare validation event at the end of the fare leg.<br><br>The “end time” of the fare leg is the time at which the event is scheduled to occur. For example, the time could be the scheduled arrival time of a bus at the end of a fare leg where the rider gets off and validates their fare. For the rule matching semantics below, the end time is computed in local time, as determined by <a href="#timeframe-local-time-semantics">Local Time Semantics</a> of <a href="#timeframestxt">timeframes.txt</a>. The stop or station of the fare leg’s arrival event should be used for timezone resolution, where appropriate.<br><br>For a fare leg rule that specifies a <code>to_timeframe_group_id</code>, that rule will match a particular leg if there exists at least one record in <a href="#timeframestxt">timeframes.txt</a> where all of the following conditions are true<br>- The value of <code>timeframe_group_id</code> is equal to the <code>to_timeframe_group_id</code> value.<br>- The set of days identified by the record’s <code>service_id</code> contains the “current day” of the fare leg’s end time.<br>- The “time-of-day” of the fare leg's end time is greater than or equal to the record’s <code>timeframes.start_time</code> value and less than the <code>timeframes.end_time</code> value.<br><br>An empty <code>fare_leg_rules.to_timeframe_group_id</code> indicates that the end time of the leg does not affect the matching of this rule.</td> </tr> <tr> <td><code>fare_product_id</code></td> <td>Foreign ID referencing <code>fare_products.fare_product_id</code></td> <td><strong>Required</strong></td> <td>The fare product required to travel the leg.</td> </tr> <tr> <td><code>rule_priority</code></td> <td>Non-negative integer</td> <td>Optional</td> <td>Defines the order of priority in which matching rules are applied to legs, allowing certain rules to take precedence over others. When multiple entries in <code>fare_leg_rules.txt</code> match, the rule or set of rules with the highest value for <code>rule_priority</code> will be selected.<br><br>An empty value for <code>rule_priority</code> is treated as zero.</td> </tr> </tbody> </table> <h3 id="fare_transfer_rulestxt">fare_transfer_rules.txt<a class="headerlink" href="#fare_transfer_rulestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>from_leg_group_id, to_leg_group_id, fare_product_id, transfer_count, duration_limit</code>)</p> <p>Fare rules for transfers between legs of travel defined in <a href="#fare_leg_rulestxt"><code>fare_leg_rules.txt</code></a>.</p> <p>To process the cost of a multi-leg journey:</p> <ol> <li>The applicable fare leg groups defined in <code>fare_leg_rules.txt</code> should be determined for all individual legs of travel based on the rider’s journey.</li> <li> <p>The file <a href="#fare_transfer_rulestxt">fare_transfer_rules.txt</a> must be filtered by the fields that define the characteristics of the transfer, these fields are:</p> <ul> <li><code>fare_transfer_rules.from_leg_group_id</code></li> <li><code>fare_transfer_rules.to_leg_group_id</code><br/> <br/></li> </ul> </li> <li> <p>If the transfer exactly matches a record in <a href="#fare_transfer_rulestxt">fare_transfer_rules.txt</a> based on the characteristics of the transfer, then that record must be processed to determine the transfer cost.</p> </li> <li>If no exact matches are found, then empty entries in <code>from_leg_group_id</code> or in <code>to_leg_group_id</code> must be checked to process the transfer cost:<ul> <li>An empty entry in <code>fare_transfer_rules.from_leg_group_id</code> corresponds to all leg groups defined under <code>fare_leg_rules.leg_group_id</code> excluding the ones listed under <code>fare_transfer_rules.from_leg_group_id</code></li> <li>An empty entry in <code>fare_transfer_rules.to_leg_group_id</code> corresponds to all leg groups defined under <code>fare_leg_rules.leg_group_id</code> excluding the ones listed under <code>fare_transfer_rules.to_leg_group_id</code><br/> <br/></li> </ul> </li> <li>If the transfer does not match any of the rules described above, then there is no transfer arrangement and the legs are considered separate.</li> </ol> <p><br/></p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>from_leg_group_id</code></td> <td>Foreign ID referencing <code>fare_leg_rules.leg_group_id</code></td> <td>Optional</td> <td>Identifies a group of pre-transfer fare leg rules.<br><br>If there are no matching <code>fare_transfer_rules.from_leg_group_id</code> values to the <code>leg_group_id</code> being filtered, empty <code>fare_transfer_rules.from_leg_group_id</code> will be matched by default. <br><br>An empty entry in <code>fare_transfer_rules.from_leg_group_id</code> corresponds to all leg groups defined under <code>fare_leg_rules.leg_group_id</code> excluding the ones listed under <code>fare_transfer_rules.from_leg_group_id</code></td> </tr> <tr> <td><code>to_leg_group_id</code></td> <td>Foreign ID referencing <code>fare_leg_rules.leg_group_id</code></td> <td>Optional</td> <td>Identifies a group of post-transfer fare leg rules.<br><br>If there are no matching <code>fare_transfer_rules.to_leg_group_id</code> values to the <code>leg_group_id</code> being filtered, empty <code>fare_transfer_rules.to_leg_group_id</code> will be matched by default.<br><br>An empty entry in <code>fare_transfer_rules.to_leg_group_id</code> corresponds to all leg groups defined under <code>fare_leg_rules.leg_group_id</code> excluding the ones listed under <code>fare_transfer_rules.to_leg_group_id</code></td> </tr> <tr> <td><code>transfer_count</code></td> <td>Non-zero integer</td> <td><strong>Conditionally Forbidden</strong></td> <td>Defines how many consecutive transfers the transfer rule may be applied to.<br><br>Valid options are:<br><code>-1</code> - No limit.<br><code>1</code> or more - Defines how many transfers the transfer rule may span.<br><br>If a sub-journey matches multiple records with different <code>transfer_count</code>s, then the rule with the minimum <code>transfer_count</code> that is greater than or equal to the current transfer count of the sub-journey is to be selected.<br><br>Conditionally Forbidden:<br>- <strong>Forbidden</strong> if <code>fare_transfer_rules.from_leg_group_id</code> does not equal <code>fare_transfer_rules.to_leg_group_id</code>.<br>- <strong>Required</strong> if <code>fare_transfer_rules.from_leg_group_id</code> equals <code>fare_transfer_rules.to_leg_group_id</code>.</td> </tr> <tr> <td><code>duration_limit</code></td> <td>Positive integer</td> <td>Optional</td> <td>Defines the duration limit of the transfer.<br><br>Must be expressed in integer increments of seconds.<br><br>If there is no duration limit, <code>fare_transfer_rules.duration_limit</code> must be empty.</td> </tr> <tr> <td><code>duration_limit_type</code></td> <td>Enum</td> <td><strong>Conditionally Required</strong></td> <td>Defines the relative start and end of <code>fare_transfer_rules.duration_limit</code>.<br><br>Valid options are:<br><code>0</code> - Between the departure fare validation of the current leg and the arrival fare validation of the next leg.<br><code>1</code> - Between the departure fare validation of the current leg and the departure fare validation of the next leg.<br><code>2</code> - Between the arrival fare validation of the current leg and the departure fare validation of the next leg.<br><code>3</code> - Between the arrival fare validation of the current leg and the arrival fare validation of the next leg.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>fare_transfer_rules.duration_limit</code> is defined.<br>- <strong>Forbidden</strong> if <code>fare_transfer_rules.duration_limit</code> is empty.</td> </tr> <tr> <td><code>fare_transfer_type</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates the cost processing method of transferring between legs in a journey: <br><img alt="" src="../../../assets/2-leg.svg" /> <br>Valid options are:<br><code>0</code> - From-leg <code>fare_leg_rules.fare_product_id</code> plus <code>fare_transfer_rules.fare_product_id</code>; A + AB.<br><code>1</code> - From-leg <code>fare_leg_rules.fare_product_id</code> plus <code>fare_transfer_rules.fare_product_id</code> plus to-leg <code>fare_leg_rules.fare_product_id</code>; A + AB + B.<br><code>2</code> - <code>fare_transfer_rules.fare_product_id</code>; AB. <br><br>Cost processing interactions between multiple transfers in a journey:<br><img alt="" src="../../../assets/3-leg.svg" /><br><table><thead><tr><th><code>fare_transfer_type</code></th><th>Processing A > B</th><th>Processing B > C</th></tr></thead><tbody><tr><td><code>0</code></td><td>A + AB</td><td>S + BC</td></tr><tr><td><code>1</code></td><td>A + AB +B</td><td>S + BC + C</td></tr><tr><td><code>2</code></td><td>AB</td><td>S + BC</td></tr></tbody></table>Where S indicates the total processed cost of the preceding leg(s) and transfer(s).</td> </tr> <tr> <td><code>fare_product_id</code></td> <td>Foreign ID referencing <code>fare_products.fare_product_id</code></td> <td>Optional</td> <td>The fare product required to transfer between two fare legs. If empty, the cost of the transfer rule is 0.</td> </tr> </tbody> </table> <h3 id="areastxt">areas.txt<a class="headerlink" href="#areastxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>area_id</code>)</p> <p>Defines area identifiers.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>area_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies an area. Must be unique in <a href="#areastxt">areas.txt</a>.</td> </tr> <tr> <td><code>area_name</code></td> <td>Text</td> <td><strong>Optional</strong></td> <td>The name of the area as displayed to the rider.</td> </tr> </tbody> </table> <h3 id="stop_areastxt">stop_areas.txt<a class="headerlink" href="#stop_areastxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>*</code>)</p> <p>Assigns stops from <a href="#stopstxt">stops.txt</a> to areas.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>area_id</code></td> <td>Foreign ID referencing <code>areas.area_id</code></td> <td><strong>Required</strong></td> <td>Identifies an area to which one or multiple <code>stop_id</code>s belong. The same <code>stop_id</code> may be defined in many <code>area_id</code>s.</td> </tr> <tr> <td><code>stop_id</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Required</strong></td> <td>Identifies a stop. If a station (i.e. a stop with <code>stops.location_type=1</code>) is defined in this field, it is assumed that all of its platforms (i.e. all stops with <code>stops.location_type=0</code> that have this station defined as <code>stops.parent_station</code>) are part of the same area. This behavior can be overridden by assigning platforms to other areas.</td> </tr> </tbody> </table> <h3 id="networkstxt">networks.txt<a class="headerlink" href="#networkstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Conditionally Forbidden</strong></p> <p>Primary key (<code>network_id</code>)</p> <p>Defines network identifiers that apply for fare leg rules. </p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>network_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a network. Must be unique in <a href="#networkstxt">networks.txt</a>.</td> </tr> <tr> <td><code>network_name</code></td> <td>Text</td> <td><strong>Optional</strong></td> <td>The name of the network that apply for fare leg rules, as used by the local agency and its riders.</td> </tr> </tbody> </table> <h3 id="route_networkstxt">route_networks.txt<a class="headerlink" href="#route_networkstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Conditionally Forbidden</strong></p> <p>Primary key (<code>route_id</code>)</p> <p>Assigns routes from <a href="#routestxt">routes.txt</a> to networks. </p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>network_id</code></td> <td>Foreign ID referencing <code>networks.network_id</code></td> <td><strong>Required</strong></td> <td>Identifies a network to which one or multiple <code>route_id</code>s belong. A <code>route_id</code> can only be defined in one <code>network_id</code>.</td> </tr> <tr> <td><code>route_id</code></td> <td>Foreign ID referencing <code>routes.route_id</code></td> <td><strong>Required</strong></td> <td>Identifies a route.</td> </tr> </tbody> </table> <h3 id="shapestxt">shapes.txt<a class="headerlink" href="#shapestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>shape_id</code>, <code>shape_pt_sequence</code>)</p> <p>Shapes describe the path that a vehicle travels along a route alignment, and are defined in the file shapes.txt. Shapes are associated with Trips, and consist of a sequence of points through which the vehicle passes in order. Shapes do not need to intercept the location of Stops exactly, but all Stops on a trip should lie within a small distance of the shape for that trip, i.e. close to straight line segments connecting the shape points. The shapes.txt file should be included for all route-based services (not for zone-based demand-responsive services).</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>shape_id</code></td> <td>ID</td> <td><strong>Required</strong></td> <td>Identifies a shape.</td> </tr> <tr> <td><code>shape_pt_lat</code></td> <td>Latitude</td> <td><strong>Required</strong></td> <td>Latitude of a shape point. Each record in <a href="#shapestxt">shapes.txt</a> represents a shape point used to define the shape.</td> </tr> <tr> <td><code>shape_pt_lon</code></td> <td>Longitude</td> <td><strong>Required</strong></td> <td>Longitude of a shape point.</td> </tr> <tr> <td><code>shape_pt_sequence</code></td> <td>Non-negative integer</td> <td><strong>Required</strong></td> <td>Sequence in which the shape points connect to form the shape. Values must increase along the trip but do not need to be consecutive.<hr><em>Example: If the shape "A_shp" has three points in its definition, the <a href="#shapestxt">shapes.txt</a> file might contain these records to define the shape:</em> <br> <code>shape_id,shape_pt_lat,shape_pt_lon,shape_pt_sequence</code> <br> <code>A_shp,37.61956,-122.48161,0</code> <br> <code>A_shp,37.64430,-122.41070,6</code> <br> <code>A_shp,37.65863,-122.30839,11</code></td> </tr> <tr> <td><code>shape_dist_traveled</code></td> <td>Non-negative float</td> <td>Optional</td> <td>Actual distance traveled along the shape from the first shape point to the point specified in this record. Used by trip planners to show the correct portion of the shape on a map. Values must increase along with <code>shape_pt_sequence</code>; they must not be used to show reverse travel along a route. Distance units must be consistent with those used in <a href="#stop_timestxt">stop_times.txt</a>.<br><br>Recommended for routes that have looping or inlining (the vehicle crosses or travels over the same portion of alignment in one trip).<br><img src="../../../assets/inlining.svg" width=200px style="display: block; margin-left: auto; margin-right: auto;"> <br>If a vehicle retraces or crosses the route alignment at points in the course of a trip, <code>shape_dist_traveled</code> is important to clarify how portions of the points in <a href="#shapestxt">shapes.txt</a> line up correspond with records in <a href="#stop_timestxt">stop_times.txt</a>.<hr><em>Example: If a bus travels along the three points defined above for A_shp, the additional <code>shape_dist_traveled</code> values (shown here in kilometers) would look like this:</em> <br> <code>shape_id,shape_pt_lat,shape_pt_lon,shape_pt_sequence,shape_dist_traveled</code><br><code>A_shp,37.61956,-122.48161,0,0</code><br><code>A_shp,37.64430,-122.41070,6,6.8310</code> <br> <code>A_shp,37.65863,-122.30839,11,15.8765</code></td> </tr> </tbody> </table> <h3 id="frequenciestxt">frequencies.txt<a class="headerlink" href="#frequenciestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>trip_id</code>, <code>start_time</code>)</p> <p><a href="#frequenciestxt">Frequencies.txt</a> represents trips that operate on regular headways (time between trips). This file may be used to represent two different types of service.</p> <ul> <li>Frequency-based service (<code>exact_times</code>=<code>0</code>) in which service does not follow a fixed schedule throughout the day. Instead, operators attempt to strictly maintain predetermined headways for trips.</li> <li>A compressed representation of schedule-based service (<code>exact_times</code>=<code>1</code>) that has the exact same headway for trips over specified time period(s). In schedule-based service operators try to strictly adhere to a schedule.</li> </ul> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>trip_id</code></td> <td>Foreign ID referencing <code>trips.trip_id</code></td> <td><strong>Required</strong></td> <td>Identifies a trip to which the specified headway of service applies.</td> </tr> <tr> <td><code>start_time</code></td> <td>Time</td> <td><strong>Required</strong></td> <td>Time at which the first vehicle departs from the first stop of the trip with the specified headway.</td> </tr> <tr> <td><code>end_time</code></td> <td>Time</td> <td><strong>Required</strong></td> <td>Time at which service changes to a different headway (or ceases) at the first stop in the trip.</td> </tr> <tr> <td><code>headway_secs</code></td> <td>Positive integer</td> <td><strong>Required</strong></td> <td>Time, in seconds, between departures from the same stop (headway) for the trip, during the time interval specified by <code>start_time</code> and <code>end_time</code>. Multiple headways may be defined for the same trip, but must not overlap. New headways may start at the exact time the previous headway ends.</td> </tr> <tr> <td><code>exact_times</code></td> <td>Enum</td> <td>Optional</td> <td>Indicates the type of service for a trip. See the file description for more information. Valid options are:<br><br><code>0</code> or empty - Frequency-based trips.<br><code>1</code> - Schedule-based trips with the exact same headway throughout the day. In this case the <code>end_time</code> value must be greater than the last desired trip <code>start_time</code> but less than the last desired trip start_time + <code>headway_secs</code>.</td> </tr> </tbody> </table> <h3 id="transferstxt">transfers.txt<a class="headerlink" href="#transferstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>from_stop_id</code>, <code>to_stop_id</code>, <code>from_trip_id</code>, <code>to_trip_id</code>, <code>from_route_id</code>, <code>to_route_id</code>)</p> <p>When calculating an itinerary, GTFS-consuming applications interpolate transfers based on allowable time and stop proximity. <a href="#transferstxt">Transfers.txt</a> specifies additional rules and overrides for selected transfers.</p> <p>Fields <code>from_trip_id</code>, <code>to_trip_id</code>, <code>from_route_id</code> and <code>to_route_id</code> allow higher orders of specificity for transfer rules. Along with <code>from_stop_id</code> and <code>to_stop_id</code>, the ranking of specificity is as follows:</p> <ol> <li>Both <code>trip_id</code>s defined: <code>from_trip_id</code> and <code>to_trip_id</code>.</li> <li>One <code>trip_id</code> and <code>route_id</code> set defined: (<code>from_trip_id</code> and <code>to_route_id</code>) or (<code>from_route_id</code> and <code>to_trip_id</code>).</li> <li>One <code>trip_id</code> defined: <code>from_trip_id</code> or <code>to_trip_id</code>.</li> <li>Both <code>route_id</code>s defined: <code>from_route_id</code> and <code>to_route_id</code>.</li> <li>One <code>route_id</code> defined: <code>from_route_id</code> or <code>to_route_id</code>.</li> <li>Only <code>from_stop_id</code> and <code>to_stop_id</code> defined: no route or trip related fields set.</li> </ol> <p>For a given ordered pair of arriving trip and departing trip, the transfer with the greatest specificity that applies between these two trips is chosen. For any pair of trips, there should not be two transfers with equally maximal specificity that could apply.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>from_stop_id</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Identifies a stop (<code>location_type=0</code>) or a station (<code>location_type=1</code>) where a connection between routes begins. If this field refers to a station, the transfer rule applies to all its child stops. It must refer to a stop (<code>location_type=0</code>) if <code>transfer_type</code> is <code>4</code> or <code>5</code>.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>transfer_type</code> is <code>1</code>, <code>2</code>, or <code>3</code>.<br>- Optional if <code>transfer_type</code> is <code>4</code> or <code>5</code>.</td> </tr> <tr> <td><code>to_stop_id</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Identifies a stop (<code>location_type=0</code>) or a station (<code>location_type=1</code>) where a connection between routes ends. If this field refers to a station, the transfer rule applies to all child stops. It must refer to a stop (<code>location_type=0</code>) if <code>transfer_type</code> is 4 or 5.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>transfer_type</code> is <code>1</code>, <code>2</code>, or <code>3</code>.<br>- Optional if <code>transfer_type</code> is <code>4</code> or <code>5</code>.</td> </tr> <tr> <td><code>from_route_id</code></td> <td>Foreign ID referencing <code>routes.route_id</code></td> <td>Optional</td> <td>Identifies a route where a connection begins.<br><br>If <code>from_route_id</code> is defined, the transfer will apply to the arriving trip on the route for the given <code>from_stop_id</code>.<br><br>If both <code>from_trip_id</code> and <code>from_route_id</code> are defined, the <code>trip_id</code> must belong to the <code>route_id</code>, and <code>from_trip_id</code> will take precedence.</td> </tr> <tr> <td><code>to_route_id</code></td> <td>Foreign ID referencing <code>routes.route_id</code></td> <td>Optional</td> <td>Identifies a route where a connection ends.<br><br>If <code>to_route_id</code> is defined, the transfer will apply to the departing trip on the route for the given <code>to_stop_id</code>.<br><br>If both <code>to_trip_id</code> and <code>to_route_id</code> are defined, the <code>trip_id</code> must belong to the <code>route_id</code>, and <code>to_trip_id</code> will take precedence.</td> </tr> <tr> <td><code>from_trip_id</code></td> <td>Foreign ID referencing <code>trips.trip_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Identifies a trip where a connection between routes begins.<br><br>If <code>from_trip_id</code> is defined, the transfer will apply to the arriving trip for the given <code>from_stop_id</code>.<br><br>If both <code>from_trip_id</code> and <code>from_route_id</code> are defined, the <code>trip_id</code> must belong to the <code>route_id</code>, and <code>from_trip_id</code> will take precedence.<br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>transfer_type</code> is <code>4</code> or <code>5</code>. <br>- Optional otherwise.</td> </tr> <tr> <td><code>to_trip_id</code></td> <td>Foreign ID referencing <code>trips.trip_id</code></td> <td><strong>Conditionally Required</strong></td> <td>Identifies a trip where a connection between routes ends.<br><br>If <code>to_trip_id</code> is defined, the transfer will apply to the departing trip for the given <code>to_stop_id</code>.<br><br>If both <code>to_trip_id</code> and <code>to_route_id</code> are defined, the <code>trip_id</code> must belong to the <code>route_id</code>, and <code>to_trip_id</code> will take precedence. <br><br>Conditionally Required:<br>- <strong>Required</strong> if <code>transfer_type</code> is <code>4</code> or <code>5</code>. <br>- Optional otherwise.</td> </tr> <tr> <td><code>transfer_type</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates the type of connection for the specified (<code>from_stop_id</code>, <code>to_stop_id</code>) pair. Valid options are:<br><br> <code>0</code> or empty - Recommended transfer point between routes.<br><code>1</code> - Timed transfer point between two routes. The departing vehicle is expected to wait for the arriving one and leave sufficient time for a rider to transfer between routes.<br><code>2</code> - Transfer requires a minimum amount of time between arrival and departure to ensure a connection. The time required to transfer is specified by <code>min_transfer_time</code>.<br><code>3</code> - Transfers are not possible between routes at the location.<br><code>4</code> - Passengers can transfer from one trip to another by staying onboard the same vehicle (an "in-seat transfer"). More details about this type of transfer <a href="#linked-trips">below</a>. <br><code>5</code> - In-seat transfers are not allowed between sequential trips. The passenger must alight from the vehicle and re-board. More details about this type of transfer <a href="#linked-trips">below</a>.</td> </tr> <tr> <td><code>min_transfer_time</code></td> <td>Non-negative integer</td> <td>Optional</td> <td>Amount of time, in seconds, that must be available to permit a transfer between routes at the specified stops. The <code>min_transfer_time</code> should be sufficient to permit a typical rider to move between the two stops, including buffer time to allow for schedule variance on each route.</td> </tr> </tbody> </table> <h4 id="linked-trips">Linked trips<a class="headerlink" href="#linked-trips" title="Permanent link">¶</a></h4> <p>The following applies to <code>transfer_type=4</code> and <code>=5</code>, which are used to link trips together, with or without in-seats transfers.</p> <p>The trips linked together MUST be operated by the same vehicle. The vehicle MAY be coupled to, or uncoupled from, other vehicles.</p> <p>If both a linked trips transfer and a block_id are provided and they produce conflicting results, then the linked trips transfer shall be used.</p> <p>The last stop of <code>from_trip_id</code> SHOULD be geographically close to the first stop of <code>to_trip_id</code>, and the last arrival time of <code>from_trip_id</code> SHOULD be prior but close to the first departure time of <code>to_trip_id</code>. The last arrival time of <code>from_trip_id</code> MAY be later than the first departure time of <code>to_trip_id</code> in case the <code>to_trip_id</code> trip is occurring the subsequent service day. </p> <p>Trips MAY be linked 1-to-1 in the regular case, but MAY also be linked 1-to-n, n-to-1, or n-to-n to represent more complex trip continuations. For example, two train trips (trip A and trip B in the diagram below) can merge into a single train trip (trip C) after a vehicle coupling operation at a common station:</p> <ul> <li>In a 1-to-n continuation, the <code>trips.service_id</code> for each <code>to_trip_id</code> MUST be identical.</li> <li>In an n-to-1 continuation, the <code>trips.service_id</code> for each <code>from_trip_id</code> MUST be identical.</li> <li>n-to-n continuations must respect both constraints.</li> <li>Trips may be linked together as part of multiple distinct continuations, provided that the <code>trip.service_id</code> MUST NOT overlap on any day of service. </li> </ul> <pre> Trip A ───────────────────\ \ Trip C ───────────── Trip B / ───────────────────/ </pre> <h3 id="pathwaystxt">pathways.txt<a class="headerlink" href="#pathwaystxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>pathway_id</code>)</p> <p>Files <a href="#pathwaystxt">pathways.txt</a> and <a href="#levelstxt">levels.txt</a> use a graph representation to describe subway or train stations, with nodes representing locations and edges representing pathways.</p> <p>To navigate from the station entrance/exit (a node represented as a location with <code>location_type=2</code>) to a platform (a node represented as a location with <code>location_type=0</code> or empty), the rider will move through walkways, fare gates, stairs, and other edges represented as pathways. Generic nodes (nodes represented with <code>location_type=3</code>) can be used to connect pathways throughout a station.</p> <p>Pathways must be defined exhaustively in a station. If any pathways are defined, it is assumed that all pathways throughout the station are represented. Therefore, the following guidelines apply:</p> <ul> <li>No dangling locations: If any location within a station has a pathway, then all locations within that station should have pathways, except for platforms that have boarding areas (<code>location_type=4</code>, see guideline below).</li> <li>No pathways for a platform with boarding areas: A platform (<code>location_type=0</code> or empty) that has boarding areas (<code>location_type=4</code>) is treated as a parent object, not a point. In such cases, the platform must not have pathways assigned. All pathways should be assigned for each of the platform's boarding areas.</li> <li>No locked platforms: Each platform (<code>location_type=0</code> or empty) or boarding area (<code>location_type=4</code>) must be connected to at least one entrance/exit (<code>location_type=2</code>) via some chain of pathways. Stations not allowing a pathway to the outside of the station from a given platform are rare.</li> </ul> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>pathway_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a pathway. Used by systems as an internal identifier for the record. Must be unique in the dataset. <br><br> Different pathways may have the same values for <code>from_stop_id</code> and <code>to_stop_id</code>.<hr><em>Example: When two escalators are side-by-side in opposite directions, or when a stair set and elevator go from the same place to the same place, different <code>pathway_id</code> may have the same <code>from_stop_id</code> and <code>to_stop_id</code> values.</em></td> </tr> <tr> <td><code>from_stop_id</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Required</strong></td> <td>Location at which the pathway begins.<br><br>Must contain a <code>stop_id</code> that identifies a platform (<code>location_type=0</code> or empty), entrance/exit (<code>location_type=2</code>), generic node (<code>location_type=3</code>) or boarding area (<code>location_type=4</code>).<br><br> Values for <code>stop_id</code> that identify stations (<code>location_type=1</code>) are forbidden.</td> </tr> <tr> <td><code>to_stop_id</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Required</strong></td> <td>Location at which the pathway ends.<br><br>Must contain a <code>stop_id</code> that identifies a platform (<code>location_type=0</code> or empty), entrance/exit (<code>location_type=2</code>), generic node (<code>location_type=3</code>) or boarding area (<code>location_type=4</code>).<br><br> Values for <code>stop_id</code> that identify stations (<code>location_type=1</code>) are forbidden.</td> </tr> <tr> <td><code>pathway_mode</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Type of pathway between the specified (<code>from_stop_id</code>, <code>to_stop_id</code>) pair. Valid options are: <br><br><code>1</code> - Walkway. <br><code>2</code> - Stairs. <br><code>3</code> - Moving sidewalk/travelator. <br><code>4</code> - Escalator. <br><code>5</code> - Elevator. <br><code>6</code> - Fare gate (or payment gate): A pathway that crosses into an area of the station where proof of payment is required to cross. Fare gates may separate paid areas of the station from unpaid ones, or separate different payment areas within the same station from each other. This information can be used to avoid routing passengers through stations using shortcuts that would require passengers to make unnecessary payments, like directing a passenger to walk through a subway platform to reach a busway. <br><code>7</code>- Exit gate: A pathway exiting a paid area into an unpaid area where proof of payment is not required to cross.</td> </tr> <tr> <td><code>is_bidirectional</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates the direction that the pathway can be taken:<br><br><code>0</code> - Unidirectional pathway that can only be used from <code>from_stop_id</code> to <code>to_stop_id</code>.<br><code>1</code> - Bidirectional pathway that can be used in both directions.<br><br>Exit gates (<code>pathway_mode=7</code>) must not be bidirectional.</td> </tr> <tr> <td><code>length</code></td> <td>Non-negative float</td> <td>Optional</td> <td>Horizontal length in meters of the pathway from the origin location (defined in <code>from_stop_id</code>) to the destination location (defined in <code>to_stop_id</code>).<br><br>This field is recommended for walkways (<code>pathway_mode=1</code>), fare gates (<code>pathway_mode=6</code>) and exit gates (<code>pathway_mode=7</code>).</td> </tr> <tr> <td><code>traversal_time</code></td> <td>Positive integer</td> <td>Optional</td> <td>Average time in seconds needed to walk through the pathway from the origin location (defined in <code>from_stop_id</code>) to the destination location (defined in <code>to_stop_id</code>).<br><br>This field is recommended for moving sidewalks (<code>pathway_mode=3</code>), escalators (<code>pathway_mode=4</code>) and elevator (<code>pathway_mode=5</code>).</td> </tr> <tr> <td><code>stair_count</code></td> <td>Non-null integer</td> <td>Optional</td> <td>Number of stairs of the pathway.<br><br>A positive <code>stair_count</code> implies that the rider walk up from <code>from_stop_id</code> to <code>to_stop_id</code>. And a negative <code>stair_count</code> implies that the rider walk down from <code>from_stop_id</code> to <code>to_stop_id</code>.<br><br>This field is recommended for stairs (<code>pathway_mode=2</code>).<br><br>If only an estimated stair count can be provided, it is recommended to approximate 15 stairs for 1 floor.</td> </tr> <tr> <td><code>max_slope</code></td> <td>Float</td> <td>Optional</td> <td>Maximum slope ratio of the pathway. Valid options are:<br><br><code>0</code> or empty - No slope.<br><code>Float</code> - Slope ratio of the pathway, positive for upwards, negative for downwards.<br><br>This field should only be used with walkways (<code>pathway_mode=1</code>) and moving sidewalks (<code>pathway_mode=3</code>).<hr><em>Example: In the US, 0.083 (also written 8.3%) is the maximum slope ratio for hand-propelled wheelchair, which mean an increase of 0.083m (so 8.3cm) for each 1m.</em></td> </tr> <tr> <td><code>min_width</code></td> <td>Positive float</td> <td>Optional</td> <td>Minimum width of the pathway in meters.<br><br>This field is recommended if the minimum width is less than 1 meter.</td> </tr> <tr> <td><code>signposted_as</code></td> <td>Text</td> <td>Optional</td> <td>Public facing text from physical signage that is visible to riders.<br><br> May be used to provide text directions to riders, such as 'follow signs to '. The text in <code>singposted_as</code> should appear exactly how it is printed on the signs.<br><br>When the physical signage is multilingual, this field may be populated and translated following the example of <code>stops.stop_name</code> in the field definition of <code>feed_info.feed_lang</code>.</td> </tr> <tr> <td><code>reversed_signposted_as</code></td> <td>Text</td> <td>Optional</td> <td>Same as <code>signposted_as</code>, but when the pathway is used from the <code>to_stop_id</code> to the <code>from_stop_id</code>.</td> </tr> </tbody> </table> <h3 id="levelstxt">levels.txt<a class="headerlink" href="#levelstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Conditionally Required</strong></p> <p>Primary key (<code>level_id</code>)</p> <p>Describes levels in a station. Useful in conjunction with <a href="#pathwaystxt">pathways.txt</a>.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>level_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a level in a station.</td> </tr> <tr> <td><code>level_index</code></td> <td>Float</td> <td><strong>Required</strong></td> <td>Numeric index of the level that indicates its relative position. <br><br>Ground level should have index <code>0</code>, with levels above ground indicated by positive indices and levels below ground by negative indices.</td> </tr> <tr> <td><code>level_name</code></td> <td>Text</td> <td>Optional</td> <td>Name of the level as seen by the rider inside the building or station.<hr><em>Example: Take the elevator to "Mezzanine" or "Platform" or "-1".</em></td> </tr> </tbody> </table> <h3 id="location_groupstxt">location_groups.txt<a class="headerlink" href="#location_groupstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>location_group_id</code>)</p> <p>Defines location groups, which are groups of stops where a rider may request pickup or drop off.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>location_group_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a location group. ID must be unique across all <code>stops.stop_id</code>, locations.geojson <code>id</code>, and <code>location_groups.location_group_id</code> values. <br><br>A location group is a group of stops that together indicate locations where a rider may request pickup or drop off.</td> </tr> <tr> <td><code>location_group_name</code></td> <td>Text</td> <td>Optional</td> <td>The name of the location group as displayed to the rider.</td> </tr> </tbody> </table> <h3 id="location_group_stopstxt">location_group_stops.txt<a class="headerlink" href="#location_group_stopstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>*</code>)</p> <p>Assigns stops from stops.txt to location groups.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>location_group_id</code></td> <td>Foreign ID referencing <code>location_groups.location_group_id</code></td> <td><strong>Required</strong></td> <td>Identifies a location group to which one or multiple <code>stop_id</code>s belong. The same <code>stop_id</code> may be defined in many <code>location_group_id</code>s.</td> </tr> <tr> <td><code>stop_id</code></td> <td>Foreign ID referencing <code>stops.stop_id</code></td> <td><strong>Required</strong></td> <td>Identifies a stop belonging to the location group.</td> </tr> </tbody> </table> <h3 id="locationsgeojson">locations.geojson<a class="headerlink" href="#locationsgeojson" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Defines zones where riders can request either pickup or drop off by on-demand services. These zones are represented as GeoJSON polygons.</p> <ul> <li>This file uses a subset of the GeoJSON format, described in <a href="https://tools.ietf.org/html/rfc7946" target="_blank" rel="noopener">RFC 7946</a>.</li> <li>Each polygon must be valid by the definition of the <a href="http://www.opengis.net/doc/is/sfa/1.2.1" target="_blank" rel="noopener">OpenGIS Simple Features Specification, section 6.1.11</a>.</li> <li>The <code>locations.geojson</code> file must contain a <code>FeatureCollection</code>.</li> <li>A <code>FeatureCollection</code> defines various stop locations where riders may request pickup or drop off.</li> <li>Every GeoJSON <code>Feature</code> must have an <code>id</code>. The <code>id</code> must be unique across all <code>stops.stop_id</code>, locations.geojson <code>id</code>, and <code>location_group_id</code> values.</li> <li>Every GeoJSON <code>Feature</code> should have objects and associated keys according to the table below:</li> </ul> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>- <code>type</code></td> <td>String</td> <td><strong>Required</strong></td> <td><code>"FeatureCollection"</code> of locations.</td> </tr> <tr> <td>- <code>features</code></td> <td>Array</td> <td><strong>Required</strong></td> <td>Collection of <code>"Feature"</code> objects describing the locations.</td> </tr> <tr> <td> - <code>type</code></td> <td>String</td> <td><strong>Required</strong></td> <td><code>"Feature"</code></td> </tr> <tr> <td> - <code>id</code></td> <td>String</td> <td><strong>Required</strong></td> <td>Identifies a location. ID must be unique across all <code>stops.stop_id</code>, locations.geojson <code>id</code>, and <code>location_groups.location_group_id</code> values.</td> </tr> <tr> <td> - <code>properties</code></td> <td>Object</td> <td><strong>Required</strong></td> <td>Location property keys.</td> </tr> <tr> <td> - <code>stop_name</code></td> <td>String</td> <td>Optional</td> <td>Indicates the name of the location as displayed to riders.</td> </tr> <tr> <td> - <code>stop_desc</code></td> <td>String</td> <td>Optional</td> <td>Meaningful description of the location to help orient riders.</td> </tr> <tr> <td> - <code>geometry</code></td> <td>Object</td> <td><strong>Required</strong></td> <td>Geometry of the location.</td> </tr> <tr> <td> - <code>type</code></td> <td>String</td> <td><strong>Required</strong></td> <td>Must be of type:<br>- <code>"Polygon"</code><br>- <code>"MultiPolygon"</code></td> </tr> <tr> <td> - <code>coordinates</code></td> <td>Array</td> <td><strong>Required</strong></td> <td>Geographic coordinates (latitude and longitude) defining the geometry of the location.</td> </tr> </tbody> </table> <h3 id="booking_rulestxt">booking_rules.txt<a class="headerlink" href="#booking_rulestxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>booking_rule_id</code>)</p> <p>Defines the booking rules for rider-requested services</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>booking_rule_id</code></td> <td>Unique ID</td> <td><strong>Required</strong></td> <td>Identifies a rule.</td> </tr> <tr> <td><code>booking_type</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Indicates how far in advance booking can be made. Valid options are:<br><br><code>0</code> - Real time booking.<br><code>1</code> - Up to same-day booking with advance notice.<br><code>2</code> - Up to prior day(s) booking.</td> </tr> <tr> <td><code>prior_notice_duration_min</code></td> <td>Integer</td> <td><strong>Conditionally Required</strong></td> <td>Minimum number of minutes before travel to make the request.<br><br><strong>Conditionally Required</strong>:<br>- <strong>Required</strong> for <code>booking_type=1</code>.<br>- <strong>Forbidden</strong> otherwise.</td> </tr> <tr> <td><code>prior_notice_duration_max</code></td> <td>Integer</td> <td><strong>Conditionally Forbidden</strong></td> <td>Maximum number of minutes before travel to make the booking request.<br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> for <code>booking_type=0</code> and <code>booking_type=2</code>.<br>- Optional for <code>booking_type=1</code>.</td> </tr> <tr> <td><code>prior_notice_last_day</code></td> <td>Integer</td> <td><strong>Conditionally Required</strong></td> <td>Last day before travel to make the booking request. <br><br>Example: “Ride must be booked 1 day in advance before 5PM” will be encoded as <code>prior_notice_last_day=1</code>.<br><br><strong>Conditionally Required</strong>:<br>- <strong>Required</strong> for <code>booking_type=2</code>.<br>- <strong>Forbidden</strong> otherwise.</td> </tr> <tr> <td><code>prior_notice_last_time</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Last time on the last day before travel to make the booking request.<br><br>Example: “Ride must be booked 1 day in advance before 5PM” will be encoded as <code>prior_notice_last_time=17:00:00</code>.<br><br><strong>Conditionally Required</strong>:<br>- <strong>Required</strong> if <code>prior_notice_last_day</code> is defined.<br>- <strong>Forbidden</strong> otherwise.</td> </tr> <tr> <td><code>prior_notice_start_day</code></td> <td>Integer</td> <td><strong>Conditionally Forbidden</strong></td> <td>Earliest day before travel to make the booking request.<br><br>Example: “Ride can be booked at the earliest one week in advance at midnight” will be encoded as <code>prior_notice_start_day=7</code>.<br><br><strong>Conditionally Forbidden</strong>:<br>- <strong>Forbidden</strong> for <code>booking_type=0</code>.<br> - <strong>Forbidden</strong> for <code>booking_type=1</code> if <code>prior_notice_duration_max</code> is defined.<br> - Optional otherwise.</td> </tr> <tr> <td><code>prior_notice_start_time</code></td> <td>Time</td> <td><strong>Conditionally Required</strong></td> <td>Earliest time on the earliest day before travel to make the booking request.<br><br>Example: “Ride can be booked at the earliest one week in advance at midnight” will be encoded as <code>prior_notice_start_time=00:00:00</code>.<br><br><strong>Conditionally Required</strong>:<br>- <strong>Required</strong> if <code>prior_notice_start_day</code> is defined.<br>- <strong>Forbidden</strong> otherwise.</td> </tr> <tr> <td><code>prior_notice_service_id</code></td> <td>Foreign ID referencing <code>calendar.service_id</code></td> <td><strong>Conditionally Forbidden</strong></td> <td>Indicates the service days on which <code>prior_notice_last_day</code> or <code>prior_notice_start_day</code> are counted. <br><br>Example: If empty, <code>prior_notice_start_day=2</code> will be two calendar days in advance. If defined as a <code>service_id</code> containing only business days (weekdays without holidays), <code>prior_notice_start_day=2</code> will be two business days in advance.<br><br><strong>Conditionally Forbidden</strong>:<br> - Optional if <code>booking_type=2</code>. <br> - <strong>Forbidden</strong> otherwise.</td> </tr> <tr> <td><code>message</code></td> <td>Text</td> <td>Optional</td> <td>Message to riders utilizing service at a <code>stop_time</code> when booking on-demand pickup and drop off. Meant to provide minimal information to be transmitted within a user interface about the action a rider must take in order to utilize the service.</td> </tr> <tr> <td><code>pickup_message</code></td> <td>Text</td> <td>Optional</td> <td>Functions in the same way as <code>message</code> but used when riders have on-demand pickup only.</td> </tr> <tr> <td><code>drop_off_message</code></td> <td>Text</td> <td>Optional</td> <td>Functions in the same way as <code>message</code> but used when riders have on-demand drop off only.</td> </tr> <tr> <td><code>phone_number</code></td> <td>Phone number</td> <td>Optional</td> <td>Phone number to call to make the booking request.</td> </tr> <tr> <td><code>info_url</code></td> <td>URL</td> <td>Optional</td> <td>URL providing information about the booking rule.</td> </tr> <tr> <td><code>booking_url</code></td> <td>URL</td> <td>Optional</td> <td>URL to an online interface or app where the booking request can be made.</td> </tr> </tbody> </table> <h3 id="translationstxt">translations.txt<a class="headerlink" href="#translationstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>table_name</code>, <code>field_name</code>, <code>language</code>, <code>record_id</code>, <code>record_sub_id</code>, <code>field_value</code>)</p> <p>In regions that have multiple official languages, transit agencies/operators typically have language-specific names and web pages. In order to best serve riders in those regions, it is useful for the dataset to include these language-dependent values.</p> <p>If both referencing methods (<code>record_id</code>, <code>record_sub_id</code>) and <code>field_value</code> are used to translate the same value in 2 different rows, the translation provided with (<code>record_id</code>, <code>record_sub_id</code>) takes precedence.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>table_name</code></td> <td>Enum</td> <td><strong>Required</strong></td> <td>Defines the table that contains the field to be translated. Allowed values are:<br><br>- <code>agency</code><br>- <code>stops</code><br>- <code>routes</code><br>- <code>trips</code><br>- <code>stop_times</code><br>- <code>pathways</code><br>- <code>levels</code><br>- <code>feed_info</code><br>- <code>attributions</code><br><br> Any file added to GTFS will have a <code>table_name</code> value equivalent to the file name, as listed above (i.e., not including the <code>.txt</code> file extension).</td> </tr> <tr> <td><code>field_name</code></td> <td>Text</td> <td><strong>Required</strong></td> <td>Name of the field to be translated. Fields with type <code>Text</code> may be translated, fields with type <code>URL</code>, <code>Email</code> and <code>Phone number</code> may also be “translated” to provide resources in the correct language. Fields with other types should not be translated.</td> </tr> <tr> <td><code>language</code></td> <td>Language code</td> <td><strong>Required</strong></td> <td>Language of translation.<br><br>If the language is the same as in <code>feed_info.feed_lang</code>, the original value of the field will be assumed to be the default value to use in languages without specific translations (if <code>default_lang</code> doesn't specify otherwise).<hr><em>Example: In Switzerland, a city in an officially bilingual canton is officially called “Biel/Bienne”, but would simply be called “Bienne” in French and “Biel” in German.</em></td> </tr> <tr> <td><code>translation</code></td> <td>Text or URL or Email or Phone number</td> <td><strong>Required</strong></td> <td>Translated value.</td> </tr> <tr> <td><code>record_id</code></td> <td>Foreign ID</td> <td><strong>Conditionally Required</strong></td> <td>Defines the record that corresponds to the field to be translated. The value in <code>record_id</code> must be the first or only field of a table's primary key, as defined in the primary key attribute for each table and below:<br><br>- <code>agency_id</code> for <a href="#agencytxt">agency.txt</a><br>- <code>stop_id</code> for <a href="#stopstxt">stops.txt</a>;<br>- <code>route_id</code> for <a href="#routestxt">routes.txt</a>;<br>- <code>trip_id</code> for <a href="#tripstxt">trips.txt</a>;<br>- <code>trip_id</code> for <a href="#stop_timestxt">stop_times.txt</a>;<br>- <code>pathway_id</code> for <a href="#pathwaystxt">pathways.txt</a>;<br>- <code>level_id</code> for <a href="#levelstxt">levels.txt</a>;<br>- <code>attribution_id</code> for <a href="#attributionstxt">attributions.txt</a>.<br><br>Fields in tables not defined above should not be translated. However producers sometimes add extra fields that are outside the official specification and these unofficial fields may be translated. Below is the recommended way to use <code>record_id</code> for those tables:<br><br>- <code>service_id</code> for <a href="#calendartxt">calendar.txt</a>;<br>- <code>service_id</code> for <a href="#calendar_datestxt">calendar_dates.txt</a>;<br>- <code>fare_id</code> for <a href="#fare_attributestxt">fare_attributes.txt</a>;<br>- <code>fare_id</code> for <a href="#fare_rulestxt">fare_rules.txt</a>;<br>- <code>shape_id</code> for <a href="#shapestxt">shapes.txt</a>;<br>- <code>trip_id</code> for <a href="#frequenciestxt">frequencies.txt</a>;<br>- <code>from_stop_id</code> for <a href="#transferstxt">transfers.txt</a>.<br><br>Conditionally Required:<br>- <strong>Forbidden</strong> if <code>table_name</code> is <code>feed_info</code>.<br>- <strong>Forbidden</strong> if <code>field_value</code> is defined.<br>- <strong>Required</strong> if <code>field_value</code> is empty.</td> </tr> <tr> <td><code>record_sub_id</code></td> <td>Foreign ID</td> <td><strong>Conditionally Required</strong></td> <td>Helps the record that contains the field to be translated when the table doesn’t have a unique ID. Therefore, the value in <code>record_sub_id</code> is the secondary ID of the table, as defined by the table below:<br><br>- None for <a href="#agencytxt">agency.txt</a>;<br>- None for <a href="#stopstxt">stops.txt</a>;<br>- None for <a href="#routestxt">routes.txt</a>;<br>- None for <a href="#tripstxt">trips.txt</a>;<br>- <code>stop_sequence</code> for <a href="#stop_timestxt">stop_times.txt</a>;<br>- None for <a href="#pathwaystxt">pathways.txt</a>;<br>- None for <a href="#levelstxt">levels.txt</a>;<br>- None for <a href="#attributionstxt">attributions.txt</a>.<br><br>Fields in tables not defined above should not be translated. However producers sometimes add extra fields that are outside the official specification and these unofficial fields may be translated. Below is the recommended way to use <code>record_sub_id</code> for those tables:<br><br>- None for <a href="#calendartxt">calendar.txt</a>;<br>- <code>date</code> for <a href="#calendar_datestxt">calendar_dates.txt</a>;<br>- None for <a href="#fare_attributestxt">fare_attributes.txt</a>;<br>- <code>route_id</code> for <a href="#fare_rulestxt">fare_rules.txt</a>;<br>- None for <a href="#shapestxt">shapes.txt</a>;<br>- <code>start_time</code> for <a href="#frequenciestxt">frequencies.txt</a>;<br>- <code>to_stop_id</code> for <a href="#transferstxt">transfers.txt</a>.<br><br>Conditionally Required:<br>- <strong>Forbidden</strong> if <code>table_name</code> is <code>feed_info</code>.<br>- <strong>Forbidden</strong> if <code>field_value</code> is defined.<br>- <strong>Required</strong> if <code>table_name=stop_times</code> and <code>record_id</code> is defined.</td> </tr> <tr> <td><code>field_value</code></td> <td>Text or URL or Email or Phone number</td> <td><strong>Conditionally Required</strong></td> <td>Instead of defining which record should be translated by using <code>record_id</code> and <code>record_sub_id</code>, this field can be used to define the value which should be translated. When used, the translation will be applied when the fields identified by <code>table_name</code> and <code>field_name</code> contains the exact same value defined in field_value.<br><br>The field must have <strong>exactly</strong> the value defined in <code>field_value</code>. If only a subset of the value matches <code>field_value</code>, the translation won’t be applied.<br><br>If two translation rules match the same record (one with <code>field_value</code>, and the other one with <code>record_id</code>), the rule with <code>record_id</code> takes precedence.<br><br>Conditionally Required:<br>- <strong>Forbidden</strong> if <code>table_name</code> is <code>feed_info</code>.<br>- <strong>Forbidden</strong> if <code>record_id</code> is defined.<br>- <strong>Required</strong> if <code>record_id</code> is empty.</td> </tr> </tbody> </table> <h3 id="feed_infotxt">feed_info.txt<a class="headerlink" href="#feed_infotxt" title="Permanent link">¶</a></h3> <p>File: <strong>Conditionally Required</strong></p> <p>Primary key (none)</p> <p>The file contains information about the dataset itself, rather than the services that the dataset describes. In some cases, the publisher of the dataset is a different entity than any of the agencies.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>feed_publisher_name</code></td> <td>Text</td> <td><strong>Required</strong></td> <td>Full name of the organization that publishes the dataset. This may be the same as one of the <code>agency.agency_name</code> values.</td> </tr> <tr> <td><code>feed_publisher_url</code></td> <td>URL</td> <td><strong>Required</strong></td> <td>URL of the dataset publishing organization's website. This may be the same as one of the <code>agency.agency_url</code> values.</td> </tr> <tr> <td><code>feed_lang</code></td> <td>Language code</td> <td><strong>Required</strong></td> <td>Default language used for the text in this dataset. This setting helps GTFS consumers choose capitalization rules and other language-specific settings for the dataset. The file <code>translations.txt</code> can be used if the text needs to be translated into languages other than the default one.<br><br>The default language may be multilingual for datasets with the original text in multiple languages. In such cases, the <code>feed_lang</code> field should contain the language code <code>mul</code> defined by the norm ISO 639-2, and a translation for each language used in the dataset should be provided in <code>translations.txt</code>. If all the original text in the dataset is in the same language, then <code>mul</code> should not be used.<hr><em>Example: Consider a dataset from a multilingual country like Switzerland, with the original <code>stops.stop_name</code> field populated with stop names in different languages. Each stop name is written according to the dominant language in that stop’s geographic location, e.g. <code>Genève</code> for the French-speaking city of Geneva, <code>Zürich</code> for the German-speaking city of Zurich, and <code>Biel/Bienne</code> for the bilingual city of Biel/Bienne. The dataset <code>feed_lang</code> should be <code>mul</code> and translations would be provided in <code>translations.txt</code>, in German: <code>Genf</code>, <code>Zürich</code> and <code>Biel</code>; in French: <code>Genève</code>, <code>Zurich</code> and <code>Bienne</code>; in Italian: <code>Ginevra</code>, <code>Zurigo</code> and <code>Bienna</code>; and in English: <code>Geneva</code>, <code>Zurich</code> and <code>Biel/Bienne</code>.</em></td> </tr> <tr> <td><code>default_lang</code></td> <td>Language code</td> <td>Optional</td> <td>Defines the language that should be used when the data consumer doesn’t know the language of the rider. It will often be <code>en</code> (English).</td> </tr> <tr> <td><code>feed_start_date</code></td> <td>Date</td> <td>Recommended</td> <td>The dataset provides complete and reliable schedule information for service in the period from the beginning of the <code>feed_start_date</code> day to the end of the <code>feed_end_date</code> day. Both days may be left empty if unavailable. The <code>feed_end_date</code> date must not precede the <code>feed_start_date</code> date if both are given. It is recommended that dataset providers give schedule data outside this period to advise of likely future service, but dataset consumers should treat it mindful of its non-authoritative status. If <code>feed_start_date</code> or <code>feed_end_date</code> extend beyond the active calendar dates defined in <a href="#calendartxt">calendar.txt</a> and <a href="#calendar_datestxt">calendar_dates.txt</a>, the dataset is making an explicit assertion that there is no service for dates within the <code>feed_start_date</code> or <code>feed_end_date</code> range but not included in the active calendar dates.</td> </tr> <tr> <td><code>feed_end_date</code></td> <td>Date</td> <td>Recommended</td> <td>(see above)</td> </tr> <tr> <td><code>feed_version</code></td> <td>Text</td> <td>Recommended</td> <td>String that indicates the current version of their GTFS dataset. GTFS-consuming applications can display this value to help dataset publishers determine whether the latest dataset has been incorporated.</td> </tr> <tr> <td><code>feed_contact_email</code></td> <td>Email</td> <td>Optional</td> <td>Email address for communication regarding the GTFS dataset and data publishing practices. <code>feed_contact_email</code> is a technical contact for GTFS-consuming applications. Provide customer service contact information through <a href="#agencytxt">agency.txt</a>. It's recommended that at least one of <code>feed_contact_email</code> or <code>feed_contact_url</code> are provided.</td> </tr> <tr> <td><code>feed_contact_url</code></td> <td>URL</td> <td>Optional</td> <td>URL for contact information, a web-form, support desk, or other tools for communication regarding the GTFS dataset and data publishing practices. <code>feed_contact_url</code> is a technical contact for GTFS-consuming applications. Provide customer service contact information through <a href="#agencytxt">agency.txt</a>. It's recommended that at least one of <code>feed_contact_url</code> or <code>feed_contact_email</code> are provided.</td> </tr> </tbody> </table> <h3 id="attributionstxt">attributions.txt<a class="headerlink" href="#attributionstxt" title="Permanent link">¶</a></h3> <p>File: <strong>Optional</strong></p> <p>Primary key (<code>attribution_id</code>)</p> <p>The file defines the attributions applied to the dataset.</p> <table> <thead> <tr> <th>Field Name</th> <th>Type</th> <th>Presence</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td><code>attribution_id</code></td> <td>Unique ID</td> <td>Optional</td> <td>Identifies an attribution for the dataset or a subset of it. This is mostly useful for translations.</td> </tr> <tr> <td><code>agency_id</code></td> <td>Foreign ID referencing <code>agency.agency_id</code></td> <td>Optional</td> <td>Agency to which the attribution applies.<br><br>If one <code>agency_id</code>, <code>route_id</code>, or <code>trip_id</code> attribution is defined, the other ones must be empty. If none of them is specified, the attribution will apply to the whole dataset.</td> </tr> <tr> <td><code>route_id</code></td> <td>Foreign ID referencing <code>routes.route_id</code></td> <td>Optional</td> <td>Functions in the same way as <code>agency_id</code> except the attribution applies to a route. Multiple attributions may apply to the same route.</td> </tr> <tr> <td><code>trip_id</code></td> <td>Foreign ID referencing <code>trips.trip_id</code></td> <td>Optional</td> <td>Functions in the same way as <code>agency_id</code> except the attribution applies to a trip. Multiple attributions may apply to the same trip.</td> </tr> <tr> <td><code>organization_name</code></td> <td>Text</td> <td><strong>Required</strong></td> <td>Name of the organization that the dataset is attributed to.</td> </tr> <tr> <td><code>is_producer</code></td> <td>Enum</td> <td>Optional</td> <td>The role of the organization is producer. Valid options are:<br><br><code>0</code> or empty - Organization doesn’t have this role.<br><code>1</code> - Organization does have this role.<br><br>At least one of the fields <code>is_producer</code>, <code>is_operator</code>, or <code>is_authority</code> should be set at <code>1</code>.</td> </tr> <tr> <td><code>is_operator</code></td> <td>Enum</td> <td>Optional</td> <td>Functions in the same way as <code>is_producer</code> except the role of the organization is operator.</td> </tr> <tr> <td><code>is_authority</code></td> <td>Enum</td> <td>Optional</td> <td>Functions in the same way as <code>is_producer</code> except the role of the organization is authority.</td> </tr> <tr> <td><code>attribution_url</code></td> <td>URL</td> <td>Optional</td> <td>URL of the organization.</td> </tr> <tr> <td><code>attribution_email</code></td> <td>Email</td> <td>Optional</td> <td>Email of the organization.</td> </tr> <tr> <td><code>attribution_phone</code></td> <td>Phone number</td> <td>Optional</td> <td>Phone number of the organization.</td> </tr> </tbody> </table> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type="button" class="md-top md-icon" data-md-component="top" hidden> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class="md-footer"> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class="md-footer-copyright"> <c>Maintained by </c> <a class="footer-link" href="https://mobilitydata.org/" target="_blank" rel="noopener"> <svg class="only-light" width="26%" height="26%" style="vertical-align:middle" style="float:left" version="1.1" id="Calque_1" x="0px" y="0px" viewBox="0 0 850.40002 205.24001" xml:space="preserve" sodipodi:docname="md-white.svg" inkscape:version="1.1.1 (c3084ef, 2021-09-22)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"><defs id="defs39" /><sodipodi:namedview id="namedview37" pagecolor="#505050" bordercolor="#ffffff" borderopacity="1" inkscape:pageshadow="0" inkscape:pageopacity="0" inkscape:pagecheckerboard="1" showgrid="false" inkscape:zoom="0.44880624" inkscape:cx="355.38721" inkscape:cy="387.69514" inkscape:window-width="1277" inkscape:window-height="847" inkscape:window-x="0" inkscape:window-y="25" inkscape:window-maximized="0" inkscape:current-layer="Calque_1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" fit-margin-bottom="0" /> <style type="text/css" id="style2"> .st0{fill:#19132D;} </style> <g id="g32" style="fill:#ffffff" transform="translate(-31.33,-15.87)"> <path class="st0" d="m 322.73,81.87 h -12.08 c -0.37,0 -0.7,0.19 -0.89,0.51 L 287.48,115.86 265.1,82.37 c -0.19,-0.31 -0.52,-0.51 -0.89,-0.51 h -12.08 c -0.55,0 -1,0.45 -1,1 v 72.39 c 0,0.55 0.45,1 1,1 h 13.42 c 0.55,0 1,-0.45 1,-1 v -43.7 c 0,-0.14 0.18,-0.19 0.25,-0.07 l 19.81,28.8 c 0.19,0.3 0.52,0.46 0.87,0.47 0.35,0 0.67,-0.18 0.87,-0.48 l 19.59,-29.19 c 0.07,-0.12 0.25,-0.07 0.25,0.07 l 0.22,44.05 c 0,0.58 0.47,1.05 1.04,1.05 h 13.28 c 0.55,0 1,-0.45 1,-1 V 82.86 c 0,-0.55 -0.45,-0.99 -1,-0.99 z" id="path4" style="fill:#ffffff" /> <path class="st0" d="m 360.01,101.15 c -16.28,0 -29.03,12.42 -29.03,28.28 0,15.86 12.75,28.28 29.03,28.28 16.34,0 29.14,-12.42 29.14,-28.28 0,-15.86 -12.8,-28.28 -29.14,-28.28 z m 13.58,28.28 c 0,7.76 -5.71,13.4 -13.58,13.4 -7.81,0 -13.47,-5.64 -13.47,-13.4 0,-7.76 5.67,-13.4 13.47,-13.4 7.87,0 13.58,5.63 13.58,13.4 z" id="path6" style="fill:#ffffff" /> <path class="st0" d="m 427.6,101.15 c -6.77,0 -12.25,2.05 -16.35,6.11 v -24.4 c 0,-0.55 -0.45,-1 -1,-1 h -13.56 c -0.55,0 -1,0.45 -1,1 v 72.39 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 v -3.66 c 4.1,4.06 9.59,6.11 16.35,6.11 7.2,0 13.95,-2.9 19,-8.17 5.09,-5.31 7.9,-12.45 7.9,-20.11 0,-7.66 -2.8,-14.8 -7.9,-20.11 -5.06,-5.26 -11.81,-8.16 -19,-8.16 z m 11.34,28.28 c 0,8.07 -5.72,13.71 -13.9,13.71 -8.12,0 -13.79,-5.64 -13.79,-13.71 0,-8.07 5.67,-13.71 13.79,-13.71 8.18,0 13.9,5.63 13.9,13.71 z" id="path8" style="fill:#ffffff" /> <path class="st0" d="m 469.41,80.31 c -4.83,0 -8.9,4.02 -8.9,8.79 0,4.71 4.08,8.69 8.9,8.69 4.96,0 9,-3.9 9,-8.69 0,-4.77 -4.12,-8.79 -9,-8.79 z" id="path10" style="fill:#ffffff" /> <path class="st0" d="m 476.24,102.6 h -13.56 c -0.55,0 -1,0.45 -1,1 v 51.66 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0,-0.55 -0.45,-1 -1,-1 z" id="path12" style="fill:#ffffff" /> <path class="st0" d="m 504.74,78.76 h -13.56 c -0.55,0 -1,0.45 -1,1 v 75.5 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 v -75.5 c 0,-0.56 -0.45,-1 -1,-1 z" id="path14" style="fill:#ffffff" /> <path class="st0" d="m 532.65,102.6 h -13.56 c -0.55,0 -1,0.45 -1,1 v 51.66 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0,-0.55 -0.45,-1 -1,-1 z" id="path16" style="fill:#ffffff" /> <path class="st0" d="m 525.82,80.31 c -4.83,0 -8.9,4.02 -8.9,8.79 0,4.71 4.08,8.69 8.9,8.69 4.96,0 9,-3.9 9,-8.69 0.01,-4.77 -4.12,-8.79 -9,-8.79 z" id="path18" style="fill:#ffffff" /> <path class="st0" d="M 576.69,102.6 H 565.65 V 89.08 c 0,-0.55 -0.45,-1 -1,-1 h -13.56 c -0.55,0 -1,0.45 -1,1 v 13.52 h -8.27 c -0.55,0 -1,0.45 -1,1 v 12.67 c 0,0.55 0.45,1 1,1 h 8.27 v 20.66 c 0,6.93 1.56,11.56 4.91,14.57 3.13,2.81 7.86,4.18 14.64,4.18 2.17,0 4.55,-0.14 7.15,-0.42 0.51,-0.05 0.89,-0.48 0.89,-0.99 v -11.95 c 0,-0.27 -0.11,-0.54 -0.31,-0.72 -0.2,-0.19 -0.47,-0.29 -0.74,-0.27 -4.86,0.25 -8.41,0.32 -9.95,-1.14 -0.71,-0.67 -1.04,-1.7 -1.04,-3.25 v -20.66 h 11.04 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0.01,-0.55 -0.44,-1 -0.99,-1 z" id="path20" style="fill:#ffffff" /> <path class="st0" d="M 676.43,81.87 H 646.9 c -0.55,0 -1,0.45 -1,1 v 72.39 c 0,0.55 0.45,1 1,1 h 29.53 c 10.15,0 19.49,-3.82 26.31,-10.76 6.77,-6.89 10.5,-16.28 10.5,-26.44 0,-10.16 -3.73,-19.55 -10.5,-26.44 -6.82,-6.93 -16.16,-10.75 -26.31,-10.75 z m 20.93,37.19 c 0,12.77 -8.61,21.69 -20.93,21.69 H 662.42 V 97.37 h 14.01 c 12.32,0 20.93,8.92 20.93,21.69 z" id="path22" style="fill:#ffffff" /> <path class="st0" d="M 775.16,102.6 H 761.6 c -0.55,0 -1,0.45 -1,1 v 3.7 c -4.15,-4.03 -9.8,-6.15 -16.46,-6.15 -7.15,0 -13.87,2.9 -18.91,8.17 -5.08,5.31 -7.88,12.45 -7.88,20.1 0,7.65 2.8,14.79 7.88,20.11 5.04,5.27 11.76,8.17 18.91,8.17 6.66,0 12.3,-2.12 16.46,-6.15 v 3.7 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0,-0.55 -0.45,-1 -1,-1 z m -14.56,26.83 c 0,8.07 -5.72,13.71 -13.9,13.71 -8.12,0 -13.79,-5.64 -13.79,-13.71 0,-8.07 5.67,-13.71 13.79,-13.71 8.19,0 13.9,5.63 13.9,13.71 z" id="path24" style="fill:#ffffff" /> <path class="st0" d="M 818.36,102.6 H 807.32 V 89.08 c 0,-0.55 -0.45,-1 -1,-1 h -13.56 c -0.55,0 -1,0.45 -1,1 v 13.52 h -8.27 c -0.55,0 -1,0.45 -1,1 v 12.67 c 0,0.55 0.45,1 1,1 h 8.27 v 20.66 c 0,6.93 1.56,11.56 4.91,14.57 3.13,2.81 7.86,4.18 14.64,4.18 2.17,0 4.55,-0.14 7.15,-0.42 0.51,-0.05 0.89,-0.48 0.89,-0.99 v -11.95 c 0,-0.27 -0.11,-0.54 -0.31,-0.72 -0.2,-0.19 -0.47,-0.29 -0.74,-0.27 -4.85,0.25 -8.41,0.32 -9.95,-1.14 -0.71,-0.67 -1.04,-1.7 -1.04,-3.25 v -20.66 h 11.04 c 0.55,0 1,-0.45 1,-1 V 103.6 c 0.01,-0.55 -0.44,-1 -0.99,-1 z" id="path26" style="fill:#ffffff" /> <path class="st0" d="m 880.73,102.6 h -13.56 c -0.55,0 -1,0.45 -1,1 v 3.7 c -4.15,-4.03 -9.8,-6.15 -16.46,-6.15 -7.15,0 -13.87,2.9 -18.91,8.17 -5.08,5.31 -7.88,12.45 -7.88,20.1 0,7.65 2.8,14.79 7.88,20.11 5.04,5.27 11.76,8.17 18.91,8.17 6.66,0 12.31,-2.12 16.46,-6.15 v 3.7 c 0,0.55 0.45,1 1,1 h 13.56 c 0.55,0 1,-0.45 1,-1 V 103.6 c -0.01,-0.55 -0.45,-1 -1,-1 z m -14.56,26.83 c 0,8.07 -5.72,13.71 -13.9,13.71 -8.12,0 -13.79,-5.64 -13.79,-13.71 0,-8.07 5.67,-13.71 13.79,-13.71 8.18,0 13.9,5.63 13.9,13.71 z" id="path28" style="fill:#ffffff" /> <path class="st0" d="m 637.94,102.65 h -14.4 c -0.49,0 -0.92,0.31 -1.08,0.77 l -11.13,33.32 -13.05,-33.37 c -0.17,-0.44 -0.59,-0.72 -1.06,-0.72 h -14.71 c -0.38,0 -0.74,0.19 -0.95,0.51 -0.21,0.32 -0.25,0.72 -0.1,1.07 l 21.83,50.99 c -2.51,6.69 -6.12,9.31 -12.78,9.31 -0.05,0 -0.1,0 -0.14,0 -0.3,0 -0.59,0.12 -0.8,0.33 -0.22,0.21 -0.33,0.5 -0.33,0.8 v 12.36 c 0,0.61 0.48,1.11 1.08,1.14 0.63,0.03 1.25,0.05 1.87,0.05 6.25,0 11.45,-1.62 15.85,-4.92 4.83,-3.63 8.57,-9.21 11.43,-17.07 L 639,104.17 c 0.13,-0.35 0.08,-0.74 -0.13,-1.04 -0.21,-0.3 -0.56,-0.48 -0.93,-0.48 z" id="path30" style="fill:#ffffff" /> </g> <path class="st0" d="m 215.93,168.67 -9.88,-9.88 -3.3,3.3 5.03,5.03 h -22.43 c -0.93,-2.53 -2.93,-4.55 -5.45,-5.51 V 35.56 c 0,-2.16 -1.75,-3.91 -3.91,-3.91 h -27.18 c -1.8,0 -3.49,0.95 -4.42,2.49 L 108.64,90.65 72.71,34.12 C 71.77,32.59 70.09,31.65 68.3,31.65 H 49.2 C 48.24,29.13 46.23,27.13 43.7,26.2 V 0 h -6.4 v 26.2 c -2.56,0.94 -4.6,2.98 -5.54,5.54 H 8.83 l 5.03,-5.03 -3.3,-3.3 -9.88,9.88 C 0.24,33.73 0,34.32 0,34.94 c 0,0.62 0.25,1.21 0.68,1.65 l 9.88,9.88 3.3,-3.3 -5.03,-5.03 h 22.91 c 0.93,2.54 2.93,4.56 5.46,5.52 V 169.7 c 0,2.16 1.75,3.91 3.91,3.91 h 28.82 c 2.16,0 3.91,-1.75 3.91,-3.91 v -68.08 l 30.47,46.42 c 0.92,1.41 2.5,2.29 4.23,2.35 0.04,0 0.08,0 0.12,0 1.75,0 3.37,-0.89 4.34,-2.39 l 30.1,-46.99 0.35,67.38 c 0,2.87 2.32,5.21 5.18,5.21 h 19.26 c 0.96,2.52 2.97,4.52 5.51,5.45 v 26.19 h 6.4 v -26.19 c 2.56,-0.94 4.6,-2.98 5.54,-5.54 h 22.43 l -5.03,5.03 3.3,3.3 9.88,-9.88 c 0.92,-0.91 0.92,-2.38 0.01,-3.29 z M 40.49,39.6 c -0.16,0 -0.32,-0.01 -0.48,-0.02 -0.03,0 -0.06,-0.01 -0.09,-0.01 -0.13,-0.02 -0.25,-0.03 -0.37,-0.06 -0.02,0 -0.04,-0.01 -0.07,-0.02 -0.13,-0.03 -0.26,-0.06 -0.38,-0.1 -0.01,0 -0.03,-0.01 -0.04,-0.02 -0.13,-0.04 -0.26,-0.09 -0.39,-0.14 0,0 0,0 0,0 -0.14,-0.06 -0.27,-0.12 -0.4,-0.19 -0.4,-0.22 -0.76,-0.49 -1.07,-0.8 -0.03,-0.03 -0.05,-0.06 -0.08,-0.09 -0.2,-0.21 -0.38,-0.43 -0.53,-0.68 0,0 0,0 0,0 -0.08,-0.12 -0.15,-0.24 -0.22,-0.37 0,-0.01 -0.01,-0.02 -0.01,-0.03 -0.06,-0.12 -0.12,-0.24 -0.17,-0.36 -0.01,-0.02 -0.02,-0.05 -0.03,-0.07 -0.04,-0.11 -0.09,-0.22 -0.12,-0.34 -0.01,-0.04 -0.02,-0.09 -0.03,-0.14 -0.03,-0.1 -0.05,-0.2 -0.07,-0.3 -0.02,-0.08 -0.02,-0.15 -0.04,-0.23 -0.01,-0.07 -0.03,-0.15 -0.03,-0.22 -0.02,-0.15 -0.02,-0.31 -0.02,-0.46 0,0 0,0 0,0 0,-0.16 0.01,-0.31 0.02,-0.47 0.01,-0.08 0.02,-0.15 0.03,-0.22 0.01,-0.08 0.02,-0.15 0.03,-0.23 0.02,-0.1 0.05,-0.2 0.08,-0.3 0.01,-0.04 0.02,-0.09 0.03,-0.13 0.04,-0.12 0.08,-0.23 0.12,-0.35 0.01,-0.02 0.02,-0.04 0.02,-0.07 0.05,-0.13 0.11,-0.25 0.17,-0.37 0,-0.01 0.01,-0.02 0.01,-0.02 0.2,-0.39 0.46,-0.74 0.76,-1.05 0.05,-0.05 0.1,-0.1 0.15,-0.15 0.21,-0.2 0.44,-0.38 0.68,-0.54 0,0 0,0 0,0 0.12,-0.08 0.24,-0.15 0.37,-0.22 0.01,0 0.02,-0.01 0.02,-0.01 0.12,-0.06 0.24,-0.12 0.37,-0.17 0.02,-0.01 0.05,-0.02 0.07,-0.02 0.11,-0.04 0.23,-0.09 0.34,-0.12 0.04,-0.01 0.09,-0.02 0.13,-0.03 0.1,-0.03 0.2,-0.05 0.3,-0.07 0.08,-0.02 0.15,-0.02 0.23,-0.04 0.07,-0.01 0.14,-0.03 0.22,-0.03 0.15,-0.02 0.31,-0.02 0.47,-0.02 0.16,0 0.31,0.01 0.47,0.02 0.07,0.01 0.15,0.02 0.22,0.03 0.08,0.01 0.16,0.02 0.23,0.04 0.1,0.02 0.2,0.05 0.3,0.07 0.04,0.01 0.09,0.02 0.13,0.03 0.12,0.04 0.23,0.08 0.34,0.12 0.02,0.01 0.05,0.02 0.07,0.02 0.13,0.05 0.25,0.11 0.37,0.17 0.01,0 0.02,0.01 0.02,0.01 0.13,0.07 0.25,0.14 0.37,0.22 0,0 0,0 0,0 0.24,0.16 0.47,0.34 0.68,0.54 0.02,0.02 0.05,0.04 0.07,0.06 0.32,0.32 0.59,0.68 0.81,1.07 0,0 0,0 0,0 0.07,0.13 0.13,0.26 0.19,0.39 0,0.01 0.01,0.01 0.01,0.02 0.05,0.13 0.1,0.25 0.14,0.38 0,0.02 0.01,0.03 0.02,0.05 0.04,0.12 0.07,0.24 0.1,0.37 0.01,0.03 0.02,0.05 0.02,0.08 0.02,0.12 0.04,0.24 0.06,0.36 0,0.04 0.01,0.07 0.02,0.11 0.02,0.16 0.02,0.31 0.02,0.47 0,0 0,0 0,0 0.01,2.57 -2.07,4.65 -4.64,4.65 z m 109.13,50.25 c -0.01,-1.46 -0.97,-2.74 -2.37,-3.14 -1.4,-0.41 -2.9,0.16 -3.69,1.39 L 108.63,142.63 73.3,88.8 c -0.8,-1.22 -2.3,-1.76 -3.69,-1.35 -1.39,0.42 -2.35,1.7 -2.35,3.15 v 76.42 H 43.79 V 43.66 c 2.49,-0.95 4.48,-2.93 5.42,-5.43 h 18.3 l 38.35,60.33 c 0.6,0.95 1.65,1.53 2.78,1.53 0,0 0,0 0,0 1.13,0 2.18,-0.58 2.78,-1.53 l 38.16,-60.32 h 23.72 v 123.37 c -2.49,0.94 -4.47,2.93 -5.42,5.42 h -17.87 z m 30.18,83.83 v 0 c -0.21,0.2 -0.44,0.38 -0.68,0.54 0,0 0,0 0,0 -0.12,0.08 -0.24,0.15 -0.37,0.22 -0.01,0 -0.02,0.01 -0.03,0.01 -0.12,0.06 -0.24,0.12 -0.37,0.17 -0.02,0.01 -0.05,0.02 -0.07,0.02 -0.11,0.04 -0.23,0.09 -0.34,0.12 -0.04,0.01 -0.09,0.02 -0.13,0.03 -0.1,0.03 -0.2,0.05 -0.3,0.07 -0.07,0.01 -0.15,0.02 -0.23,0.03 -0.07,0.01 -0.15,0.03 -0.22,0.03 -0.15,0.02 -0.31,0.02 -0.47,0.02 -0.16,0 -0.31,-0.01 -0.47,-0.02 -0.07,-0.01 -0.15,-0.02 -0.22,-0.03 -0.08,-0.01 -0.15,-0.02 -0.23,-0.03 -0.1,-0.02 -0.2,-0.05 -0.3,-0.07 -0.04,-0.01 -0.09,-0.02 -0.13,-0.03 -0.12,-0.04 -0.23,-0.08 -0.34,-0.12 -0.02,-0.01 -0.05,-0.02 -0.07,-0.03 -0.12,-0.05 -0.25,-0.11 -0.36,-0.17 -0.01,0 -0.02,-0.01 -0.03,-0.01 -0.13,-0.07 -0.25,-0.14 -0.37,-0.22 0,0 0,0 0,0 -0.24,-0.16 -0.47,-0.34 -0.68,-0.54 -0.03,-0.02 -0.05,-0.05 -0.08,-0.07 -0.32,-0.32 -0.59,-0.68 -0.8,-1.07 0,0 0,0 0,0 -0.07,-0.13 -0.13,-0.26 -0.19,-0.4 0,0 0,-0.01 -0.01,-0.01 -0.05,-0.12 -0.1,-0.25 -0.14,-0.38 -0.01,-0.02 -0.01,-0.03 -0.02,-0.05 -0.04,-0.12 -0.07,-0.24 -0.09,-0.36 -0.01,-0.03 -0.02,-0.06 -0.02,-0.08 -0.02,-0.11 -0.04,-0.22 -0.05,-0.34 -0.01,-0.04 -0.01,-0.08 -0.02,-0.13 -0.02,-0.16 -0.02,-0.31 -0.02,-0.48 0,-2.56 2.09,-4.65 4.65,-4.65 0.16,0 0.32,0.01 0.48,0.02 0.04,0 0.08,0.01 0.13,0.02 0.11,0.01 0.22,0.03 0.33,0.05 0.03,0.01 0.06,0.02 0.09,0.02 0.12,0.03 0.24,0.06 0.36,0.09 0.02,0.01 0.04,0.02 0.06,0.02 0.12,0.04 0.25,0.08 0.37,0.14 0.01,0 0.02,0.01 0.03,0.01 0.13,0.06 0.25,0.12 0.38,0.18 0,0 0.01,0 0.01,0.01 0.39,0.21 0.75,0.48 1.06,0.8 0.02,0.03 0.05,0.05 0.07,0.08 v 0 c 0.2,0.21 0.38,0.44 0.54,0.68 0,0 0,0 0,0 0.08,0.12 0.15,0.24 0.22,0.37 0,0.01 0.01,0.02 0.01,0.03 0.06,0.12 0.12,0.24 0.17,0.37 0.01,0.02 0.02,0.05 0.03,0.07 0.04,0.11 0.09,0.23 0.12,0.34 0.01,0.04 0.02,0.09 0.03,0.13 0.03,0.1 0.05,0.2 0.07,0.3 0.01,0.07 0.02,0.15 0.03,0.23 0.01,0.07 0.03,0.15 0.03,0.22 0.02,0.15 0.02,0.31 0.02,0.47 0,0.16 -0.01,0.31 -0.02,0.47 -0.01,0.08 -0.02,0.15 -0.03,0.22 -0.01,0.08 -0.02,0.15 -0.03,0.23 -0.02,0.1 -0.05,0.2 -0.07,0.3 -0.01,0.04 -0.02,0.09 -0.03,0.13 -0.04,0.12 -0.08,0.23 -0.12,0.34 -0.01,0.02 -0.02,0.05 -0.03,0.07 -0.05,0.12 -0.11,0.25 -0.17,0.37 0,0.01 -0.01,0.02 -0.01,0.03 -0.07,0.13 -0.14,0.25 -0.22,0.37 0,0 0,0 0,0 -0.16,0.24 -0.34,0.47 -0.54,0.68 v 0 c -0.06,0.06 -0.11,0.12 -0.17,0.17 z" id="path34" style="fill:#ffffff" /> </svg> </a> </div> <div class="md-social"> <a href="https://gtfs.org/blog/feed_rss_created.xml" target="_blank" rel="noopener" title="GTFS Digest RSS feed" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M64 32C28.7 32 0 60.7 0 96v320c0 35.3 28.7 64 64 64h320c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64zm32 104c0-13.3 10.7-24 24-24 137 0 248 111 248 248 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-110.5-89.5-200-200-200-13.3 0-24-10.7-24-24m0 96c0-13.3 10.7-24 24-24 83.9 0 152 68.1 152 152 0 13.3-10.7 24-24 24s-24-10.7-24-24c0-57.4-46.6-104-104-104-13.3 0-24-10.7-24-24m0 120a32 32 0 1 1 64 0 32 32 0 1 1-64 0"/></svg> </a> <a href="https://github.com/MobilityData" target="_blank" rel="noopener" title="github.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> <a href="https://www.linkedin.com/company/mobilitydata" target="_blank" rel="noopener" title="www.linkedin.com" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3M135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5m282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9z"/></svg> </a> <a href="https://share.mobilitydata.org/slack" target="_blank" rel="noopener" title="share.mobilitydata.org" class="md-social__link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M94.12 315.1c0 25.9-21.16 47.06-47.06 47.06S0 341 0 315.1s21.16-47.06 47.06-47.06h47.06zm23.72 0c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06v117.84c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06zm47.06-188.98c-25.9 0-47.06-21.16-47.06-47.06S139 32 164.9 32s47.06 21.16 47.06 47.06v47.06zm0 23.72c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06H47.06C21.16 243.96 0 222.8 0 196.9s21.16-47.06 47.06-47.06zm188.98 47.06c0-25.9 21.16-47.06 47.06-47.06S448 171 448 196.9s-21.16 47.06-47.06 47.06h-47.06zm-23.72 0c0 25.9-21.16 47.06-47.06 47.06s-47.06-21.16-47.06-47.06V79.06c0-25.9 21.16-47.06 47.06-47.06s47.06 21.16 47.06 47.06zM283.1 385.88c25.9 0 47.06 21.16 47.06 47.06S309 480 283.1 480s-47.06-21.16-47.06-47.06v-47.06zm0-23.72c-25.9 0-47.06-21.16-47.06-47.06s21.16-47.06 47.06-47.06h117.84c25.9 0 47.06 21.16 47.06 47.06s-21.16 47.06-47.06 47.06z"/></svg> </a> </div> </div> </div> </footer> </div> <div class="md-dialog" data-md-component="dialog"> <div class="md-dialog__inner md-typeset"></div> </div> <div class="md-consent" data-md-component="consent" id="__consent" hidden> <div class="md-consent__overlay"></div> <aside class="md-consent__inner"> <form class="md-consent__form md-grid md-typeset" name="consent"> <h4>Cookie Consent</h4> <p>We use cookies to track visits, stored anonymously. With your consent, you're helping us to make our documentation better. See our <a href="https://mobilitydata.org/privacy-policy/" target="_blank" rel="noopener">Privacy Policy</a>.</p> <input class="md-toggle" type="checkbox" id="__settings" > <div class="md-consent__settings"> <ul class="task-list"> <li class="task-list-item"> <label class="task-list-control"> <input type="checkbox" name="analytics" checked> <span class="task-list-indicator"></span> Google Analytics </label> </li> <li class="task-list-item"> <label class="task-list-control"> <input type="checkbox" name="github" checked> <span class="task-list-indicator"></span> GitHub </label> </li> </ul> </div> <div class="md-consent__controls"> <button class="md-button md-button--primary">Accept</button> <button type="reset" class="md-button md-button--primary">Reject</button> <label class="md-button" for="__settings">Manage settings</label> </div> </form> </aside> </div> <script>var consent=__md_get("__consent");if(consent)for(var input of document.forms.consent.elements)input.name&&(input.checked=consent[input.name]||!1);else"file:"!==location.protocol&&setTimeout((function(){document.querySelector("[data-md-component=consent]").hidden=!1}),250);var form=document.forms.consent;for(var action of["submit","reset"])form.addEventListener(action,(function(e){if(e.preventDefault(),"reset"===e.type)for(var n of document.forms.consent.elements)n.name&&(n.checked=!1);__md_set("__consent",Object.fromEntries(Array.from(new FormData(form).keys()).map((function(e){return[e,!0]})))),location.hash="",location.reload()}))</script> <script id="__config" type="application/json">{"base": "../../..", "features": ["navigation.tabs", "navigation.indexes", "navigation.top", "navigation.footer", "content.tabs.link", "search.suggest"], "search": "../../../assets/javascripts/workers/search.c7c1ca2c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src="../../../assets/javascripts/bundle.203fd0bc.min.js"></script> </body> </html>