Share:
 

CTA Train Tracker API Documentation

Introduction

CTA Train Tracker SM is a product currently in the beta testing phase. This document covers the arrivals API, currently under release for testing and evaluation by developers who work with CTA data.

For complete information about the API and tips, see the main CTA Train Tracker API page.

Note that, to use this API, you must agree to our Developers License Agreement and Terms of Use. You’ll also need to apply for a key.

This documentation is also available as a PDF

 

Table of Contents

 

 

About this document

What this document covers

This document explains how to request information and what information is provided through the single arrivals API. Additional APIs may be released at a later date, and this documentation would then be updated accordingly.

 

What this document does not cover

This document does not cover information provided through the CTA Customer Alerts API, Google Transit Feed Specification data package nor the CTA Bus Tracker API. Go to our Developer Center for more information on these other data services from CTA.

 

How information gets into our system

Information in the CTA Train Tracker beta comes from data fed to CTA from its rail infrastructure (unlike buses, our current railcar fleet does not have GPS hardware). This data is then processed by software we use to monitor our rail system which also generates the predictions for train arrivals based on recent train travel times from one point to another. (The software is a product called QuicTrak®.)

Prediction data are combined with other data and polished to help present information in the most meaningful way possible.

 

Some other things you should know

This service is in beta—it may not always be available and may be changed (see DLA for complete details). Here are some notes about what you can expect from the data:

  • Predictions for train arrivals are generated as trains move from one section of track to another and for estimated arrivals up to fifteen minutes beyond the train’s current position.
     
  • Predictions may be withheld in circumstances where we expect them to be inaccurate, such as during major work, reroutes or unavoidable service disruptions.

    Important tip: Use the Customer Alerts API to determine whether or not an event is affecting service and relay to your end-users when some or all predictions may be affected or unavailable due to an event that affects service.
     
  • When no predictions are available for a station, such as because no train has yet departed a terminal, we offer up to one scheduled departure time in place of a live prediction so long as service is scheduled. Terminal departures are always represented as a scheduled departure, as live information is not presently available until a train leaves.
     
  • Arrival predictions are available for locations where trains pick up passengers (predictions for terminal arrivals and exit-only platforms are not presently available in the data).
     
  • Predictions for a specific train run number are not available at this time—only for arrival/departures from stops where passengers are accepted.
     
  • Internal testing has shown train arrival accuracy averages <±1 minute from prediction times. Average actual variance from predictions may vary as traffic conditions change.
     
  • Unscheduled express runs (where a train runs non-stop from one point on a route to another, such as to space out service following an unavoidable delay) are not expressed in CTA Train Tracker at this time.
     
  • The default daily transaction limit for this API is 50,000 transactions. If you need additional transactions, contact webmaster@transitchicago.com with your request. Additionally, there is DoS protection installed on our servers which may trigger a temporary “time-out” if a large number of transactions from a single IP address.

 

This is a beta

The entire CTA Train Tracker service is in beta—including the data that powers it, the processing and presentation of the information and means of syndication such as this API. Nothing you see here is final.

A variety of improvements to information from CTA Train Tracker are under evaluation, and some under active development. As new and better information becomes available, we may also make additions to this API or publish additional APIs for the service.

If you experience any issues or have any comments regarding this service and related policies, please contact us right away. Your feedback is extremely valuable to us!

 

Why we’re providing this API

The hope is that, by publishing this data, it ends up in all sorts of places beyond CTA’s sites and services. By having transit information in as many contexts as people might use it, we can extend our reach and help people make informed decisions which can improve people’s experiences with transit.

 

Legal notice

By using this API, you agree to our Developer License Agreement and Terms of Use, the latest version of which is included, as of the publication date of this document, in this document’s appendices.

It’s important that you, the developer, understand that this service is provided on an as-is basis and without any guarantees as to availability or accuracy. You must read and agree to the full Developer Terms of Use to use this API.

 
 

A few definitions…

There are a few bits of lingo that you’ll find in this document (we’ll try to keep it to a minimum) that we’d like to explain first, so you know what we’re talking about.

  • Customer Alert – An entry in our Customer Alerts database which describes a condition that can affect someone’s trip on CTA; see Customer Alerts API for comprehensive alert information, including a special flag for train alerts that indicates whether or not an event may cause Train Tracker to behave less-reliably than normal.
     
  • Google Transit Feed Specification (GTFS) – This is a “common format for public transportation schedules and associated geographic information.” GTFS is used by hundreds of transit agencies to feed service information to Google™. A GTFS package is generated, as needed, by transit agencies and can be distributed as a simple .zip file with several comma-delimited text files inside. You can read more about GTFS on Google Code. For consistency, the same route IDs and stop IDs are used throughout the Bus Tracker system, the Alerts system as are specified in the CTA GTFS feed (with a few special exceptions—see appendix).
     
  • Delay – In the context of this document, a delayed train is one that has not moved from one track circuit to another for an abnormally long period of time.
     
  • Terminal – A point of departure or terminus on a train route.


 

Train location data coming soon

We’re working on releasing an API into train location data (like what powers our beta map).

We understand that this is an exciting new feature lots of you have been waiting for, but we just need a little time to finish the development on the API bits. We're sorry we don't have this yet, but we appreciate your patience while we put together something that'll be stable and supported.

 

Arrivals API

Description

This API produces a list of arrival predictions for all platforms at a given train station in a well-formed XML document. Registration and receipt of an API key is required for use of this API.

Each separate prediction describes a single train, when it’s expected to arrive, and various bits of information that explain where it’s expected to arrive and certain attributes about the train.

 

Base URL

http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx

 

Parameters

Use URL query string method.

Name

Value

Description

mapid

Numeric station identifier (required if stpid not specified)

A single five-digit code to tell the server which station you’d like to receive predictions for. See appendix for information about valid station codes.

stpid

Numeric stop identifier
(required if mapid not specified)

A single five-digit code to tell the server which specific stop (in this context, specific platform or platform side within a larger station) you’d like to receive predictions for. See appendix for information about valid stop codes.

max

Maximum results (optional)

The maximum number you’d like to receive (if not specified, all available results for the requested stop or station will be returned)

rt

Route code (optional)

Allows you to specify a single route for which you’d like results (if not specified, all available results for the requested stop or station will be returned)

key

Alphanumeric API key
(required)

Your unique API key, assigned to you after agreeing to DLA and requesting a key be generated for you.

 

 

Response fields:

Name

Description

ctatt

Root element

./tmst

Shows time when response was generated in format:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)

./errCd

Numeric error code (see appendices)

./errNm

Textual error description/message (see appendices)

./eta

Container element (one per individual prediction)

././staId

Numeric GTFS parent station ID which this prediction is for (five digits in 4xxxx range) (matches “mapid” specified by requestor in query)

././stpId

Numeric GTFS unique stop ID within station which this prediction is for (five digits in 3xxxx range)

././staNm

Textual proper name of parent station

././stpDe

Textual description of platform for which this prediction applies

././rn

Run number of train being predicted for

././rt

Textual, abbreviated route name of train being predicted for (matches GTFS routes)

././destSt

GTFS unique stop ID where this train is expected to ultimately end its service run (experimental and supplemental only—see note below)

././destNm

Friendly destination description (see note below)

././trDr

Numeric train route direction code (see appendices)

././prdt

Date-time format stamp for when the prediction was generated:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)

././arrT

Date-time format stamp for when a train is expected to arrive/depart:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)

././isApp

Indicates that Train Tracker is now declaring “Approaching” or “Due” on site for this train

././isSch

Boolean flag to indicate whether this is a live prediction or based on schedule in lieu of live data

././isFlt

Boolean flag to indicate whether a potential fault has been detected (see note below)

././isDly

Boolean flag to indicate whether a train is considered “delayed” in Train Tracker

././flags Train flags (not presently in use)
././lat Latitude position of the train in decimal degrees
././lon Longitude position of the train in decimal degrees
././heading Heading, expressed in standard bearing degrees (0 = North, 90 = East, 180 = South, and 270 = West; range is 0 to 359, progressing clockwise)

 

Sample Request URL:

http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=a8456dcbhf8475683cf7818bca81&mapid=40380&max=5  

 

Remarks:

Stop IDs:
Use stop information in GTFS Stops table for associated geolocation of stops listed here. For purposes of this API, use the parent station ID (4xxxx range of stop ID numbers) to specify a station.

Destination station ID #s:
IDs in destSt refer to the ultimate destination of a train per the information about each train that’s on the move.

These destination station ID #s are only available once a train has departed (on schedule-based predictions, this element will show “0”) and doesn’t necessarily match with what will be indicated on a train’s destination sign (particularly on routes that operate around the whole Loop).

Once a train leaves Midway, its ultimate destination station’s ID is “Midway” because the train will make all stops to the Loop, go around it, and come back to Midway. This allows you to write your own logic on what to show, but we’ve already gone and done the work for you.

The destNm element is the public, friendly-name that should match the destination sign of approaching trains. For example, predictions a train heading toward the Loop on the Orange Line, using this element, will return “Loop” in a result set at Roosevelt, but that same train, even while still Loop-bound, will be listed as being to “Midway” for Harold Washington Library/State-Van Buren, because our system knows that once it gets to Library, it’ll now be considered a Midway-bound train.

Lat/lon/heading: This information is available only for trains that are in-service (i.e., have left their terminals). Some entries are based on our written schedule, as a courtesy, for when live information isn’t available. Schedule-based entries in a response will simply have an empty lat, lon and heading element as location info isn’t available.

Calculating a number of minutes: See Appendix D for extended notes on this subject.

 


 

XML Schema

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:element name="ctatt">
   <xs:complexType>
     <xs:sequence>
       <xs:element name="tmst" type="xs:string" />
       <xs:element name="errCd" type="xs:unsignedByte" />
       <xs:element name="errNm" />
       <xs:element maxOccurs="unbounded" name="eta">
         <xs:complexType>
           <xs:sequence>
             <xs:element name="staId" type="xs:unsignedShort" />
             <xs:element name="stpId" type="xs:unsignedShort" />
             <xs:element name="staNm" type="xs:string" />
             <xs:element name="stpDe" type="xs:string" />
             <xs:element name="rn" type="xs:unsignedShort" />
             <xs:element name="rt" type="xs:string" />
             <xs:element name="destSt" type="xs:unsignedShort" />
             <xs:element name="destNm" type="xs:string" />
             <xs:element name="trDr" type="xs:unsignedByte" />
             <xs:element name="prdt" type="xs:string" />
             <xs:element name="arrT" type="xs:string" />
             <xs:element name="isApp" type="xs:unsignedByte" />
             <xs:element name="isSch" type="xs:unsignedByte" />
             <xs:element name="isDly" type="xs:unsignedByte" />
             <xs:element name="isFlt" type="xs:unsignedByte" />
             <xs:element name="flags" type="xs:string" />
             <xs:element name="lat" type="xs:decimal" />
             <xs:element name="lon" type="xs:decimal" />
             <xs:element name="heading" type="xs:unsignedShort" />
           </xs:sequence>
         </xs:complexType>
       </xs:element>
     </xs:sequence>
   </xs:complexType>
 </xs:element>
</xs:schema>

 

Example

Request:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=a8456dcbhf8475683cf7818bca81&max=1&mapid=40360

What this request is asking for:
A maximum of one arrival prediction result from the station with the ID #40360. It also passes the API key for authorization (required).

 

Response:

<?xml version="1.0" encoding="UTF-8"?>
<ctatt>

  <tmst>20110618 23:26:50</tmst>
  <errCd>
0</errCd>
  <errNm/>
  <eta>
    <staId>
40360</staId>
    <stpId>
30070</stpId>
    <staNm>
Southport</staNm>
    <stpDe>
Service toward Kimball</stpDe>
    <rn>
419</rn>
    <rt>
Brn</rt>
    <destSt>
30249</destSt>
    <destNm>
Kimball</destNm>
    <trDr>
1</trDr>
    <prdt>
20110618 23:26:12</prdt>
    <arrT>
20110618 23:28:12</arrT>
    <isApp>
0</isApp>
    <isSch>
0</isSch>
    <isDly>
0</isDly>
    <isFlt>
0</isFlt>
    <flags/>
  
  <lat>41.97776</lat>
   
<lon>-87.77567</lon>
    <heading>
299</heading>
  </eta>
</ctatt>

 

 

Follow This Train API

Description

This API produces a list of arrival predictions for a given train at all subsequent stations for which that train is estimated to arrive, up to 20 minutes in the future or to the end of its trip.

Each separate prediction describes a single train, when it’s expected to arrive, and various bits of information that explain where it’s expected to arrive and certain attributes about the train.

Base URL

lapi.transitchicago.com/api/1.0/ttfollow.aspx

Parameters

Use URL query string method.

 

Name
Value
Description
runnumber
Train Run Number (required)
Allows you to specify a single run number for a train for which you’d like a series of upcoming arrival estimations.
key
Alphanumeric API key
(required)
Your unique API key, assigned to you after agreeing to DLA and requesting a key be generated for you.

 
 
Response fields:

Name
Description
ctatt
Root element
./tmst
Shows time when response was generated in format:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)
./errCd
Numeric error code (see appendices)
./errNm
Textual error description/message (see appendices)
./position Container element (one per response describing train)
././lat Latitude position of the train in decimal degrees
././lon Longitude position of the train in decimal degrees
././heading Heading, expressed in standard bearing degrees (0 = North, 90 = East, 180 = South, and 270 = West; range is 0 to 359, progressing clockwise)
./eta
Container element (one per individual prediction)
././staId
Numeric GTFS parent station ID which this prediction is for (five digits in 4xxxx range) (matches “mapid” specified by requestor in query)
././stpId
Numeric GTFS unique stop ID within station which this prediction is for (five digits in 3xxxx range)
././staNm
Textual proper name of parent station
././stpDe
Textual description of platform for which this prediction applies
././rn
Run number of train being predicted for
././rt
Textual, abbreviated route name of train being predicted for (matches GTFS routes)
././destSt
GTFS unique stop ID where this train is expected to ultimately end its service run (experimental and supplemental only—see note below)
././destNm
Friendly destination description (see note below)
././trDr
Numeric train route direction code (see appendices)
././prdt
Date-time format stamp for when the prediction was generated:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)
././arrT
Date-time format stamp for when a train is expected to arrive/depart:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)
././isApp
Indicates that Train Tracker is now declaring “Approaching” or “Due” on site for this train
././isSch
Boolean flag to indicate whether this is a live prediction or based on schedule in lieu of live data
././isFlt
Boolean flag to indicate whether a potential fault has been detected (see note below)
././isDly
Boolean flag to indicate whether a train is considered “delayed” in Train Tracker
././flags Train flags (not presently in use)

 
Sample Request URL:
 
Remarks:

Stop IDs: Use stop information in GTFS Stops table for associated geolocation of stops listed here. For purposes of this API, use the parent station ID (4xxxx range of stop ID numbers) to specify a station.

Destination station ID #s: in destSt refer to the ultimate destination of a train per the information about each train that’s on the move.

These destination station ID #s are only available once a train has departed (on schedule-based predictions, this element will show “0”) and doesn’t necessarily match with what will be indicated on a train’s destination sign (particularly on routes that operate around the whole Loop).

Once a train leaves Midway, its ultimate destination station’s ID is “Midway” because the train will make all stops to the Loop, go around it, and come back to Midway. This allows you to write your own logic on what to show, but we’ve already gone and done the work for you.

The destNm element is the public, friendly-name that should match the destination sign of approaching trains. For example, predictions a train heading toward the Loop on the Orange Line, using this element, will return “Loop” in a result set at Roosevelt, but that same train, even while still Loop-bound, will be listed as being to “Midway” for Harold Washington Library/State-Van Buren, because our system knows that once it gets to Library, it’ll now be considered a Midway-bound train.

Calculating a number of minutes: See Appendix D for extended notes on this subject.

 

XML Schema

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="ctatt">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="tmst" type="xs:string" />
                <xs:element name="errCd" type="xs:unsignedByte" />
                <xs:element name="errNm" />
                <xs:element name="position" />
                    <xs:complexType>
                        <xs:sequence>
                               <xs:element name="lat" type="xs:decimal" />
                               <xs:element name="lon" type="xs:decimal" />
                               <xs:element name="heading" type="xs:unsignedShort" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
                <xs:element maxOccurs="unbounded" name="eta">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="staId" type="xs:unsignedShort" />
                            <xs:element name="stpId" type="xs:unsignedShort" />
                            <xs:element name="staNm" type="xs:string" />
                            <xs:element name="stpDe" type="xs:string" />
                            <xs:element name="rn" type="xs:unsignedByte" />
                            <xs:element name="rt" type="xs:string" />
                            <xs:element name="destSt" type="xs:unsignedShort" />
                            <xs:element name="destNm" type="xs:string" />
                            <xs:element name="trDr" type="xs:unsignedByte" />
                            <xs:element name="prdt" type="xs:string" />
                            <xs:element name="arrT" type="xs:string" />
                            <xs:element name="isApp" type="xs:unsignedByte" />
                            <xs:element name="isSch" type="xs:unsignedByte" />
                            <xs:element name="isDly" type="xs:unsignedByte" />
                            <xs:element name="isFlt" type="xs:unsignedByte" />
                            <xs:element name="flags" type="xs:string" />
                            <xs:element name="lat" type="xs:decimal" />
                            <xs:element name="lon" type="xs:decimal" />
                            <xs:element name="heading" type="xs:unsignedShort" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
 
 

Example

Request:
http://lapi.transitchicago.com/api/1.0/ttarrivals.aspx?key=e3875818a474304&runnumber=12

What this request is asking for:
Upcoming arrivals for run 123 (a Blue Line train). It also passes the API key for authorization (required).

(For brevity, what would be a longer series of “eta” sequence element is limited to two in this example.)
 
Response:
 

<?xml version="1.0" encoding="utf-8" ?>
<ctatt>
  <tmst>20130515 14:11:17</tmst>
  <errCd>0</errCd> 
  <errNm />
  <position>
    <lat>
41.97776</lat>
    <lon>
-87.77567</lon>
    <heading>
299</heading>
  </position>

  <eta>
    <staId>40010</staId>
    <stpId>30001</stpId>
    <staNm>Austin</staNm>
    <stpDe>Austin to O'Hare</stpDe>
    <rn>123</rn>
    <rt>Blue Line</rt>
    <destSt>30171</destSt>
    <destNm>O'Hare</destNm>
    <trDr>1</trDr>
    <prdt>20130515 14:10:23</prdt>
    <arrT>20130515 14:11:23</arrT>
    <isApp>1</isApp>
    <isSch>0</isSch>
    <isDly>0</isDly>
    <isFlt>0</isFlt>
    <flags/> 
  </eta>
  <eta>
    <staId>40970</staId>
    <stpId>30187</stpId>
    <staNm>Cicero</staNm>
    <stpDe>Cicero to O'Hare</stpDe>
    <rn>123</rn>
    <rt>Blue Line</rt>
    <destSt>30171</destSt>
    <destNm>O'Hare</destNm>
    <trDr>1</trDr>
    <prdt>20130515 14:10:23</prdt>
    <arrT>20130515 14:15:23</arrT>
    <isApp>0</isApp>
    <isSch>0</isSch>
    <isDly>0</isDly>
    <isFlt>0</isFlt>
    <flags/> 
  </eta>
</ctatt>


 

Locations API

Description

This API produces a list of in-service trains and basic info and their locations for one or more specified ‘L’ routes.

Each separate entry describes a single train and provides coordinate, geospatial heading, certain train attributes and next stop information.

Base URL

lapi.transitchicago.com/api/1.0/ttpositions.aspx

Parameters:
Use URL query string method.

 

Name
Value
Description
rt
Train route(s) (required)
Allows you to specify one or more routes for which you’d like train location information.
key
Alphanumeric API key
(required)
Your unique API key, assigned to you after agreeing to DLA and requesting a key be generated for you.

 
 
Response fields:

Name
Description
ctatt
Root element
./tmst
Shows time when response was generated in format:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)
./errCd
Numeric error code (see appendices)
./errNm
Textual error description/message (see appendices)
./route name=
Container element (one per route in response), name attribute indicates route per GTFS-matching route identifiers (see appendices)
././train
Container element (one per train in response)
./././rn
Run number
./././destSt
GTFS unique stop ID where this train is expected to ultimately end its service run (experimental and supplemental only—see note below)
./././destNm
Friendly destination description (see note below)
./././trDr
Numeric train route direction code (see appendices)
./././nextStaId
Next station ID (parent station ID matching GTFS)
./././nextStpId
Next stop ID (stop ID matching GTFS)
./././nextStaNm
Proper name of next station
./././prdt
Date-time format stamp for when the prediction was generated:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)
./././arrT
Date-time format stamp for when a train is expected to arrive/depart:
yyyyMMdd HH:mm:ss (24-hour format, time local to Chicago)
./././isApp
Indicates that Train Tracker is now declaring “Approaching” or “Due” on site for this train
./././isDly
Boolean flag to indicate whether a train is considered “delayed” in Train Tracker
./././flags
Train flags (not presently in use)
./././lat
Latitude position of the train in decimal degrees
./././lon
Longitude position of the train in decimal degrees
./././heading
Heading, expressed in standard bearing degrees (0 = North, 90 = East, 180 = South, and 270 = West; range is 0 to 359, progressing clockwise)

 
 

XML Schema

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="ctatt">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="tmst" type="xs:string" />
                <xs:element name="errCd" type="xs:unsignedByte" />
                <xs:element name="errNm" />
                <xs:element maxOccurs="unbounded" name="route">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element maxOccurs="unbounded" name="train">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="rn" type="xs:unsignedShort" />
                                        <xs:element name="destSt" type="xs:unsignedShort" />
                                        <xs:element name="destNm" type="xs:string" />
                                        <xs:element name="trDr" type="xs:unsignedByte" />
                                        <xs:element name="nextStaId" type="xs:unsignedShort" />
                                        <xs:element name="nextStpId" type="xs:unsignedShort" />
                                        <xs:element name="nextStaNm" type="xs:string" />
                                        <xs:element name="prdt" type="xs:string" />
                                        <xs:element name="arrT" type="xs:string" />
                                        <xs:element name="isApp" type="xs:unsignedByte" />
                                        <xs:element name="isDly" type="xs:unsignedByte" />
                                        <xs:element name="flags" type="xs:string" />
                                        <xs:element name="lat" type="xs:decimal" />
                                        <xs:element name="lon" type="xs:decimal" />
                                        <xs:element name="heading" type="xs:unsignedShort" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
 
       </xs:complexType>
    </xs:element>
</xs:schema>

 

Example:

 
Response:
<?xml version="1.0" encoding="utf-8" ?>
<ctatt>
 <tmst>20130610 15:00:21</tmst>
 <errCd>0</errCd>
 <errNm />
 <route name="red">
    <train>
      <rn>804</rn>
      <destSt>30173</destSt>
      <destNm>Howard</destNm>
      <trDr>1</trDr>
      <nextStaId>41400</nextStaId>
      <nextStpId>30269</nextStpId>
      <nextStaNm>Roosevelt</nextStaNm>
      <prdt>20130610 14:58:48</prdt>
      <arrT>20130610 14:59:48</arrT>
      <isApp>1</isApp>
      <isDly>0</isDly>
      <flags />
      <lat>41.86579</lat>
      <lon>-87.62736</lon>
      <heading>358</heading>
    </train>
    <train>
      <rn>808</rn>
      <destSt>30173</destSt>
      <destNm>Howard</destNm>
      <trDr>1</trDr>
      <nextStaId>40510</nextStaId>
      <nextStpId>30099</nextStpId>
      <nextStaNm>Garfield</nextStaNm>
      <prdt>20130610 14:58:03</prdt>
      <arrT>20130610 15:00:03</arrT>
      <isApp>0</isApp>
      <isDly>0</isDly>
      <flags />
      <lat>41.78697</lat>
      <lon>-87.6187</lon>
      <heading>81</heading>
    </train>
  </route>
</ctatt>

 

Appendices

 

Appendix A: Route ID Quick Reference

CTA ‘L’

‘L’ routes (rapid transit train services) are identified as follows:

  • Red = Red Line (Howard-95th/Dan Ryan service)
  • Blue = Blue Line (O’Hare-Forest Park service)
  • Brn = Brown Line (Kimball-Loop service)
  • G = Green Line (Harlem/Lake-Ashland/63rd-Cottage Grove service)
  • Org = Orange Line (Midway-Loop service)
  • P = Purple Line (Linden-Howard shuttle service)
  • Pink = Pink Line (54th/Cermak-Loop service)
  • Y = Yellow Line (Skokie-Howard [Skokie Swift] shuttle service)

 

Note: In the separate Customer Alerts API, alerts that apply specifically to the Purple Line Express (but not Purple Line Local/Shuttle service north of Howard) will use the additional route designator “Pexp”. When integrating Customer Alert information into your code project, be sure to account that alerts applying to the Purple Line may have either route designator “P” or “Pexp” (or both).

 


 

Appendix B: Station IDs

Each bus or train stop on the CTA system, as you’ll see if you look at the “stops” table in our Google Transit Feed Specification feed, has its own unique identifier. This helps to power trip planners such as the Google Maps transit directions capability in identifying individual locations and paths where vehicles make stops along a route in each direction.
 

Note, however, that in the GTFS data, most train stations have three entries in the stops table—one in each direction, with a third entry that covers the entire station facility, known as the “parent stop.” We’ve numbered our stops differently, using the following convention:

0-29999                  = Bus stops
30000-39999          = Train stops
40000-49999          = Train stations (parent stops)

The API accepts and responds with both train stop IDs and station IDs to allow you maximum flexibility in how you build your application.

 

More help
A packed, quick reference stop list is available for download here:
Stop List Quick Reference (.zip)
 

 

 

Example from GTFS

For example, Southport, on the Brown Line has three entries in our GTFS table (only relevant rows shown here):

stop_id,stop_code,stop_name,stop_lat,stop_lon,location_type,parent_station,wheelchair_boarding
30070,,"Southport",41.943744,-87.663619,0,40360,1
30071,,"Southport",41.943744,-87.663619,0,40360,1
40360,,"Southport",41.943744,-87.663619,1,,1 

The first two represent specific stops in GTFS—one for each direction from the Southport station (toward Loop or toward Kimball).

The third entry is the associated parent station GTFS, which represents the entire station facility known as “Southport” inside of which these separate “stops” are grouped.

Note that while Southport’s parent entry and individual stop entries all have the same basic attributes, this may vary in some stations for map clarity and to assist trip planners (particularly where bus stops also reference a parent station at a larger transfer facility like the transit center at Jefferson Park).

 

How these look in the API

In the Arrivals API, for example, responses for Southport might include either:

<staId>40360</staId>
<stpId>30071</stpId>
<staNm>Southport</staNm>
<stpDe>Service toward Loop</stpDe>

Or

<staId>40360</staId>
<stpId>30070</stpId>
<staNm>Southport</staNm>
<stpDe>Service toward Kimball</stpDe>

This allows you to reference GTFS for a variety of things, and also provides you additional descriptive information which helps you explain results to your customers, depending on how you wish to present them.

 

Parent Stop ID Quick Reference

This is a list of the parent stops and their associated ID# in GTFS.

A packed, quick reference stop list is available for download here:
Stop List Quick Reference (.zip)


 

Descriptive station name

StopID

18th

40830

35th-Bronzeville-IIT

41120

35th/Archer

40120

43rd

41270

47th (Green Line)

41080

47th (Red Line)

41230

51st

40130

54th/Cermak

40580

63rd

40910

69th

40990

79th

40240

87th

41430

95th

40450

Adams/Wabash

40680

Addison (Blue Line)

41240

Addison (Brown Line)

41440

Addison (Red Line)

41420

Argyle

41200

Armitage

40660

Ashland/63rd

40290

Ashland (Green, Pink Lines)

40170

Ashland (Orange Line)

41060

Austin (Blue Line)

40010

Austin (Green Line)

41260

Belmont (Red, Brown, Purple Lines)

41320

Belmont (Blue Line)

40060

Berwyn

40340

Bryn Mawr

41380

California (Pink Line)

40440

California (Green Line)

41360

California (Blue Line-O'Hare Branch)

40570

Central Park

40780

Central (Green Line)

40280

Central (Purple Line)

41250

Cermak-Chinatown

41000

Chicago (Blue Line)

41410

Chicago (Brown Line)

40710

Chicago (Red Line)

41450

Cicero (Pink Line)

40420

Cicero (Blue Line-Forest Park Branch)

40970

Cicero (Green Line)

40480

Clark/Division

40630

Clark/Lake

40380

Clinton (Blue Line)

40430

Clinton (Green Line)

41160

Conservatory

41670

Cumberland

40230

Damen (Brown Line)

40090

Damen (Pink Line)

40210

Damen (Blue Line-O'Hare Branch)

40590

Davis

40050

Dempster

40690

Diversey

40530

Division

40320

Cottage Grove

40720

Forest Park

40390

Foster

40520

Francisco

40870

Fullerton

41220

Garfield (Green Line)

40510

Garfield (Red Line)

41170

Grand (Blue Line)

40490

Grand (Red Line)

40330

Granville

40760

Halsted (Green Line)

40940

Halsted (Orange Line)

41130

Harlem (Blue Line-Forest Park Branch)

40980

Harlem (Green Line)

40020

Harlem (Blue Line-O'Hare Branch)

40750

Harold Washington Library-State/Van Buren

40850

Harrison

41490

Howard

40900

Illinois Medical District

40810

Indiana

40300

Irving Park (Blue Line)

40550

Irving Park (Brown Line)

41460

Jackson (Blue Line)

40070

Jackson (Red Line)

40560

Jarvis

41190

Jefferson Park

41280

Kedzie (Brown Line)

41180

Kedzie (Pink Line)

41040

Kedzie (Green Line)

41070

Kedzie-Homan (Blue Line)

40250

Kedzie (Orange Line)

41150

Kimball

41290

King Drive

41140

Kostner

40600

Lake

41660

Laramie

40700

LaSalle

41340

LaSalle/Van Buren

40160

Lawrence

40770

Linden

41050

Logan Square

41020

Loyola

41300

Madison/Wabash

40640

Main

40270

Merchandise Mart

40460

Midway

40930

Monroe (Blue Line)

40790

Monroe (Red Line)

41090

Montrose (Blue Line)

41330

Montrose (Brown Line)

41500

Morgan

41510

Morse

40100

North/Clybourn

40650

Noyes

40400

Oak Park (Blue Line)

40180

Oak Park (Green Line)

41350

Oakton 41680

O'Hare

40890

Paulina

41310

Polk

41030

Pulaski (Pink Line)

40150

Pulaski (Blue Line-Forest Park Branch)

40920

Pulaski (Green Line)

40030

Pulaski (Orange Line)

40960

Quincy/Wells

40040

Racine

40470

Randolph/Wabash

40200

Ridgeland

40610

Rockwell

41010

Roosevelt

41400

Rosemont

40820

Sedgwick

40800

Sheridan

40080

Skokie

40140

South Boulevard

40840

Southport

40360

Sox-35th

40190

State/Lake

40260

Thorndale

40880

UIC-Halsted

40350

Washington/Wells

40730

Washington (Blue Line)

40370

Wellington

41210

Western (Brown Line)

41480

Western (Pink Line)

40740

Western (Blue Line-Forest Park Branch)

40220

Western (Blue Line-O'Hare Branch)

40670

Western (Orange Line)

40310

Wilson

40540

 

 

Individual Stop IDs Quick Reference

In addition to the stop IDs that represent a whole station, each place where a train stops has its own identifier. You may find these relevant as well.

A packed, quick reference stop list is available for download here:
Stop List Quick Reference (.zip)

 

 

Stop_ID

Descriptive Stop Name

Normal traffic flow to:

Parent Stop_ID

30162

18th

West

40830

30161

18th

East

40830

30214

35-Bronzeville-IIT

South

41120

30213

35-Bronzeville-IIT

North

41120

30023

35th/Archer

South

40120

30022

35th/Archer

North

40120

30246

43rd

South

41270

30245

43rd

North

41270

30209

47th (Green Line)

North

41080

30210

47th (Green Line)

South

41080

30237

47th (Red Line)

North

41230

30238

47th (Red Line)

South

41230

30024

51st

North

40130

30025

51st

South

40130

30114

54th/Cermak

West

40580

30113

54th/Cermak

East

40580

30177

63rd

North

40910

30178

63rd

South

40910

30192

69th

South

40990

30191

69th

North

40990

30046

79th

North

40240

30047

79th

South

40240

30276

87th

South

41430

30275

87th

North

41430

30088

95th

North

40450

30089

95th

South

40450

30131

Adams/Wabash

North (Outer Loop)

40680

30132

Adams/Wabash

South (Inner Loop)

40680

30240

Addison (Blue Line)

South

41240

30239

Addison (Blue Line)

North

41240

30278

Addison (Brown Line)

South

41440

30277

Addison (Brown Line)

North

41440

30273

Addison (Red Line)

North

41420

30274

Addison (Red Line)

South

41420

30230

Argyle

South

41200

30229

Argyle

North

41200

30127

Armitage

North

40660

30128

Armitage

South

40660

30056

Ashland/63rd

East

40290

30057

Ashland/63rd

West

40290

30032

Ashland-Lake

West

40170

30033

Ashland-Lake

East

40170

30205

Ashland (Orange Line)

North

41060

30206

Ashland (Orange Line)

South

41060

30001

Austin (Blue Line)

East

40010

30002

Austin (Blue Line)

West

40010

30243

Austin (Green Line)

East

41260

30244

Austin (Green Line)

West

41260

30255

Belmont

North

41320

30256

Belmont

South

41320

30257

Belmont

North

41320

30258

Belmont

South

41320

30013

Belmont (Blue Line)

South

40060

30012

Belmont (Blue Line)

North

40060

30067

Berwyn

South

40340

30066

Berwyn

North

40340

30267

Bryn Mawr

North

41380

30268

Bryn Mawr

South

41380

30087

California (Pink Line)

West

40440

30086

California (Pink Line)

East

40440

30266

California (Green Line)

West

41360

30265

California (Green Line)

East

41360

30111

California (Blue Line-O'Hare Branch)

North

40570

30112

California (Blue Line-O'Hare Branch)

South

40570

30151

Central Park

East

40780

30152

Central Park

West

40780

30054

Central (Green Line)

East

40280

30055

Central (Green Line)

West

40280

30241

Central-Purple

North

41250

30242

Central-Purple

South

41250

30194

Cermak-Chinatown

South

41000

30193

Cermak-Chinatown

North

41000

30271

Chicago (Blue Line)

North

41410

30272

Chicago (Blue Line)

South

41410

30137

Chicago (Brown Line)

North

40710

30138

Chicago (Brown Line)

South

40710

30280

Chicago (Red Line)

South

41450

30279

Chicago (Red Line)

North

41450

30082

Cicero (Pink Line)

East

40420

30083

Cicero (Pink Line)

West

40420

30188

Cicero-Forest Park

West

40970

30187

Cicero-Forest Park

East

40970

30009

Cicero (Green Line)

West

40480

30094

Cicero (Green Line)

East

40480

30122

Clark/Division

South

40630

30121

Clark/Division

North

40630

30074

Clark/Lake (Elevated)

East (Inner Loop)

40380

30075

Clark/Lake (Elevated)

West (Outer Loop)

40380

30375

Clark/Lake (Subway)

North

40380

30374

Clark/Lake (Subway)

South

40380

30084

Clinton (Blue Line)

East

40430

30085

Clinton (Blue Line)

West

40430

30221

Clinton (Green Line)

East

41160

30222

Clinton (Green Line)

West

41160

30291

Conservatory

East

41670

30292

Conservatory

West

41670

30045

Cumberland

South

40230

30044

Cumberland

North

40230

30018

Damen (Brown Line)

North

40090

30019

Damen (Brown Line)

South

40090

30040

Damen (Pink Line)

East

40210

30041

Damen (Pink Line)

West

40210

30116

Damen (Blue Line-O'Hare Branch)

South

40590

30115

Damen (Blue Line-O'Hare Branch)

North

40590

30010

Davis

North

40050

30011

Davis

South

40050

30134

Dempster

South

40690

30133

Dempster

North

40690

30103

Diversey

North

40530

30104

Diversey

South

40530

30062

Division

North

40320

30063

Division

South

40320

30139

East 63rd-Cottage Grove

East

40720

30140

East 63rd-Cottage Grove

West

40720

30077

Forest Park

West

40390

30076

Forest Park

East

40390

30101

Foster

North

40520

30102

Foster

South

40520

30168

Francisco

South

40870

30167

Francisco

North

40870

30233

Fullerton

North

41220

30236

Fullerton

South

41220

30235

Fullerton

North

41220

30234

Fullerton

South

41220

30099

Garfield (Green Line)

North

40510

30100

Garfield (Green Line)

South

40510

30223

Garfield (Red Line)

North

41170

30224

Garfield (Red Line)

South

41170

30096

Grand (Blue Line)

South

40490

30095

Grand (Blue Line)

North

40490

30064

Grand (Red Line)

North

40330

30065

Grand (Red Line)

South

40330

30148

Granville

South

40760

30147

Granville

North

40760

30184

Halsted (Green Line)

West

40940

30183

Halsted (Green Line)

East

40940

30215

Halsted (Orange Line)

North

41130

30216

Halsted (Orange Line)

South

41130

30189

Harlem-Forest Park

East

40980

30190

Harlem-Forest Park

West

40980

30004

Harlem (Green Line)

West

40020

30003

Harlem (Green Line)

East

40020

30145

Harlem (Blue Line-O'Hare Branch)

North

40750

30146

Harlem (Blue Line-O'Hare Branch)

South

40750

30165

Harold Washington Library-State/Van Buren

East (Outer Loop)

40850

30166

Harold Washington Library-State/Van Buren

West (Inner Loop)

40850

30285

Harrison

North

41490

30286

Harrison

South

41490

30176

Howard

South

40900

30175

Howard

North

40900

30173

Howard

North

40900

30174

Howard

South

40900

30158

Illinois Medical District

West

40810

30157

Illinois Medical District

East

40810

30059

Indiana

South

40300

30058

Indiana

North

40300

30107

Irving Park (Blue Line)

North

40550

30108

Irving Park (Blue Line)

South

40550

30282

Irving Park (Brown Line)

South

41460

30281

Irving Park (Brown Line)

North

41460

30015

Jackson (Blue Line)

South

40070

30014

Jackson (Blue Line)

North

40070

30110

Jackson (Red Line)

South

40560

30109

Jackson (Red Line)

North

40560

30228

Jarvis

South

41190

30227

Jarvis

North

41190

30248

Jefferson Park

South

41280

30247

Jefferson Park

North

41280

30225

Kedzie (Brown Line)

North

41180

30226

Kedzie (Brown Line)

South

41180

30201

Kedzie (Pink Line)

East

41040

30202

Kedzie (Pink Line)

West

41040

30208

Kedzie (Green Line)

West

41070

30207

Kedzie (Green Line)

East

41070

30048

Kedzie-Homan

East

40250

30049

Kedzie-Homan

West

40250

30219

Kedzie (Orange Line)

North

41150

30220

Kedzie (Orange Line)

South

41150

30249

Kimball

North

41290

30250

Kimball

South

41290

30217

King Drive

East

41140

30218

King Drive

West

41140

30117

Kostner

East

40600

30118

Kostner

West

40600

30289

Lake

North

41660

30290

Lake

South

41660

30136

Laramie

West

40700

30135

Laramie

East

40700

30261

LaSalle

East

41340

30262

LaSalle

West

41340

30031

LaSalle/Van Buren

West (Inner Loop)

40160

30030

LaSalle/Van Buren

East (Outer Loop)

40160

30150

Lawrence

South

40770

30149

Lawrence

North

40770

30204

Linden

South

41050

30203

Linden

North

41050

30197

Logan Square

North

41020

30198

Logan Square

South

41020

30251

Loyola

North

41300

30252

Loyola

South

41300

30124

Madison/Wabash

South (Inner Loop)

40640

30123

Madison/Wabash

North (Outer Loop)

40640

30052

Main

North

40270

30053

Main

South

40270

30090

Merchandise Mart

North

40460

30091

Merchandise Mart

South

40460

30182

Midway

South

40930

30181

Midway

North

40930

30153

Monroe (Blue Line)

North

40790

30154

Monroe (Blue Line)

South

40790

30212

Monroe (Red Line)

South

41090

30211

Monroe (Red Line)

North

41090

30259

Montrose (Blue Line)

North

41330

30260

Montrose (Blue Line)

South

41330

30288

Montrose (Brown Line)

South

41500

30287

Montrose (Brown Line)

North

41500

30296

Morgan

West

41510

30295

Morgan

East

41510

30021

Morse

South

40100

30020

Morse

North

40100

30126

North/Clybourn

South

40650

30125

North/Clybourn

North

40650

30078

Noyes

North

40400

30079

Noyes

South

40400

30034

Oak Park (Blue Line)

East

40180

30035

Oak Park (Blue Line)

West

40180

30263

Oak Park (Green Line)

East

41350

30264

Oak Park (Green Line)

West

41350

30297 Oakton North 41680
30298 Oakton South 41680

30172

O'Hare

South

40890

30171

O'Hare

North

40890

30254

Paulina

South

41310

30253

Paulina

North

41310

30200

Polk

West

41030

30199

Polk

East

41030

30029

Pulaski (Pink Line)

West

40150

30028

Pulaski (Pink Line)

East

40150

30180

Pulaski (Blue Line-Forest Park Branch)

West

40920

30179

Pulaski (Blue Line-Forest Park Branch)

East

40920

30005

Pulaski (Green Line)

East

40030

30006

Pulaski (Green Line)

West

40030

30186

Pulaski (Orange Line)

South

40960

30185

Pulaski (Orange Line)

North

40960

30008

Quincy/Wells

South (Outer Loop)

40040

30007

Quincy/Wells

North (Inner Loop)

40040

30092

Racine

East

40470

30093

Racine

West

40470

30038

Randolph/Wabash

North (Outer Loop)

40200

30039

Randolph/Wabash

South (Inner Loop)

40200

30120

Ridgeland

West

40610

30119

Ridgeland

East

40610

30196

Rockwell

South

41010

30195

Rockwell

North

41010

30080

Roosevelt (Elevated)

North

41400

30081

Roosevelt (Elevated)

South

41400

30270

Roosevelt (Subway)

South

41400

30269

Roosevelt (Subway)

North

41400

30159

Rosemont

North

40820

30160

Rosemont

South

40820

30156

Sedgwick

South

40800

30155

Sedgwick

North

40800

30017

Sheridan

South

40080

30016

Sheridan

North

40080

30293

Sheridan

North

40080

30294

Sheridan

South

40080

30026

Skokie

North

40140

30027

Skokie

South

40140

30164

South Boulevard

South

40840

30163

South Boulevard

North

40840

30071

Southport

South

40360

30070

Southport

North

40360

30037

Sox-35th

South

40190

30036

Sox-35th

North

40190

30051

State/Lake

West (Outer Loop)

40260

30050

State/Lake

East (Inner Loop)

40260

30169

Thorndale

North

40880

30170

Thorndale

South

40880

30069

UIC-Halsted

West

40350

30068

UIC-Halsted

East

40350

30141

Washington/Wells

North (Inner Loop)

40730

30142

Washington/Wells

South (Outer Loop)

40730

30073

Washington (Blue Line)

South

40370

30072

Washington (Blue Line)

North

40370

30098

Washington (Red Line)

South

40500

30097

Washington (Red Line)

North

40500

30232

Wellington

South

41210

30231

Wellington

North

41210

30283

Western (Brown Line)

North

41480

30284

Western (Brown Line)

South

41480

30143

Western (Pink Line)

East

40740

30144

Western (Pink Line)

West

40740

30043

Western (Blue Line-Forest Park Branch)

West

40220

30042

Western (Blue Line-Forest Park Branch)

East

40220

30130

Western (Blue Line-O'Hare Branch)

South

40670

30129

Western (Blue Line-O'Hare Branch)

North

40670

30060

Western (Orange Line)

North

40310

30061

Western (Orange Line)

South

40310

30106

Wilson

South

40540

30105

Wilson

North

40540

 


 

Appendix C: Route Direction Code Quick Reference

In the Arrivals API response, you’ll see a train direction (“trDr”) element. These values represent what you might describe as an “operational” direction—it’s not expressive of the physical direction of a train at its current location so much as the big-picture route direction (even though it often coincides).

How a train’s direction is defined here loosely translates to a “northbound” (trDr=1) or “southbound” (trDr=5) direction, it can be a little tricky to imagine how that applies to routes such as the Blue Line.

Also, note that this value represents the current operational direction of the train as of when the prediction was generated, not which operational direction it’ll have once it reaches a given station that it’s predicted to reach. For example, an Orange Line train that’s at Halsted on its way to the Loop will be shown as such, even for predictions at Harold Washington Library-State/Van Buren by which time it’ll have changed to being a train to Midway the moment it enters the Loop.

Here’s a quick reference to help you understand what these values mean, on a per-route basis:

Red Line
1 = Howard-bound
5 = 95th/Dan Ryan-bound

Blue Line
1 = O’Hare-bound
5 = Forest Park-bound

Brown Line
1 = Kimball-bound
5 = Loop-bound

Green Line
1 = Harlem/Lake-bound
5 = Ashland/63rd- or Cottage Grove-bound (toward 63rd St destinations)

Orange Line
1 = Loop-bound
5 = Midway-bound

Purple Line
1 = Linden-bound
5 = Howard- or Loop-bound

Pink Line
1 = Loop-bound
5 = 54th/Cermak-bound

Yellow Line
1 = Skokie-bound
5 = Howard-bound

 


 

Appendix D: Insight into Polishing Your Output from the Experts

While the raw information alone is powerful, it’s helpful to interpret results and present them in such a way that can make them more meaningful for your customers.

 

Delays

The CTA Train Tracker service looks at how long it’s been since a train has moved from one track circuit to the next and identifies delays if a train appears to not be moving.

The “isDly” element is an expression of whether or not we’ve detected the likelihood that a train is delayed. If the value of isDly = 1, then consider indicating that the train is delayed rather than simply representing the last prediction, which might be growing stale (which you could compare timestamps to determine, independently).

 

Schedule faults

The isFlt element in the results indicates what we call a “schedule fault” in the context of Train Tracker. A fault on an ETA that is schedule-based (isSch=1) indicates that the scheduled arrival time given might not be feasible to serve due to the lack of a scheduled departure having occurred. Our system is designed to do some math in order to calculate whether or not a scheduled arrival is feasible based on minimum travel times from a terminal to where the arrival is being estimated for.

Note that this doesn’t necessarily mean that there are delays or that service is not good at the time—it only means that a train didn’t leave when the planned schedule had provisioned. Transit systems are complex and delays are sometimes unavoidable; our transportation managers use a variety of strategies, including making on-the-go schedule modifications, to maintain service levels (particularly during peak periods when trains leave every few minutes) and provide the best possible service. This is normal and provides a better service to our customers.

 

Events that affect prediction quality

Some construction or unplanned events that affect service (particularly if they cause trains to be routed differently than normal) can affect the quality of predictions in Train Tracker. While we work to improve back-end exception handling, we can alert users that the quality of predictions may be affected by a current event (or altogether unavailable). In certain situations where we know the information may be unreliable, we may temporarily stop offering predictions for all or portions of a route, which will also be reflected in the API. Our Customer Alerts API Alerts Feed contains a special “Train Tracker impact” flag (element “ttim”) to indicate when works are affecting prediction quality.

 

Calculating a number of minutes until arrival from this data

To calculate the number of minutes until arrival (so you can say “4 min” instead of 2:35 p.m., for example, we recommend comparing arrT to prdt – this will give you the number of minutes we calculated from when a train last moved into a new track circuit until when it should get to a station.

The reason for this is because the arrival time value is actually based on how long it should take to get from where the train was when its location was last updated in our prediction database, weighted in such a way to improve prediction accuracy, which happens on a frequent cycle.

The reason we represent this information in date-time form is for added flexibility in defining your own logic, as it allows you to show clock times or make computations as you feel is best for your code project, and can be more meaningful if your app doesn’t update very frequently.

Thus, it gives you the control to compare arrT to prdt if you do have the capability to update frequently, but, if not, you might then also consider other, more advanced scenarios, where you weight that comparison against the age of your last update. (It’s your app, so it’s really all up to you!)

Additionally, note that output for the arrT element, at least at this stage in the beta (we are open to your feedback as developers), is a minimum of 60 seconds from most recent prediction generation (trains disappear from result sets once they actually reach the station).

 

Due Trains

We show “due” or “approaching” on trains which are expected to arrive shortly because “1 min” is a very short period of time, and encourage you to consider doing the same.

 

Accessibility

We work very hard to design our Web services to be fully accessible to people with a wide range of levels of ability, including people with limited or no vision, limited mobility, cognitive disabilities and more.

While it’s up to you how to implement our data in your product and to what lengths you go to cater to audiences who are less able to interact with technology than others, we strongly encourage you to take into consideration accessibility implications on whatever platform you write for and to make sure your incorporation of public transit information helps the whole public, to the best of your ability.

We encourage you to catch up on accessibility standards such as those laid out in the Federal Section 508 guidelines, the Illinois Information Technology Accessibility Act (IITAA), as well as staying up on modern Web or software accessibility best practices. It’ll lead to better products for you and everyone who might benefit from them.

 


 

Appendix E: Error Codes

Error codes are given in the event an unexpected request was made or if an error in processing occurred. A good response comes with an error code of 0.

 

Arrivals API Error Codes

Error Code

Error Name

Error Explanation

0
OK
No error.
100
Required parameter [value] is missing.
The query string does not contain one of the required parameters, currently: "mapid or stpid", "key".
101
Invalid API key
The value for the required parameter "key" is not a valid API key.
102
Maximum Daily CTA Train Tracker API usage exceeded.
The number of successful API Requests using the supplied "key" have exceeded the maximum daily value.
103
Invalid mapid: [value]
At least one of the supplied values for the "mapid" parameter is not valid. The first invalid id is returned.
104
Mapid's need to be integers: [value]
At least one of the supplied values for the "mapid" parameter is not an integer value. The first invalid id is returned.
105
Maximum of mapid's you can request is 4.
A maximum of 4 values may be specified for the parameter "mapid". More than 4 were supplied.
106
Invalid Route Identifier: [value]
At least one of the supplied values for the "rt" parameter is invalid. Supported values are: "Red", "Blue", "Brn", "G", "Org", "P", "Pink", "Y".
107
Maximum of rt's you can request is 4.
A maximum of 4 values may be specified for the parameter "rt". More than 4 were supplied.
108
Invalid stpId specified: [value]
At least one of the supplied values for the "stpId" parameter is invalid. The first invalid value is returned.
109
Maximum of stpid's you can request is 4.
A maximum of 4 values may be specified for the parameter "stpId". More than 4 were supplied.
110
Invalid max specified: [value]
A non-integer value was specified for the "max" parameter.
111
Parameter 'max' must be a positive integer.
A value less than 1 was specified for the "max" parameter. The value must be an integer greater than zero.
112
Stpid's need to be integers: [value]
At least one of the supplied values for the "stpid" parameter is not an integer value. The first invalid id is returned.
500
Invalid parameter: [value]
The query string contains a parameter that is not supported by the train tracker API, currently supported parameters are: "mapid", "key", "rt", "stpid", "max".
900
Server Error
A server error occurred.

 
 
Follower API Error Codes

Error Code
Error Name
Error Explanation
100
Required parameter [value] is missing.
One or more of the required parameters is missing. For this API, the required parameters are: “runnumber”, and “key”
101
Invalid API key.
The supplied API key was not a valid API key.
102
Maximum daily Train Tracker API usage exceeded.
The daily usage limit for the supplied key has been exceeded.
500
Invalid parameter [value].
Valid parameters for this API are: “runnumber”, and “key”.
501
No trains with runnumber [value] were found.
The indicated train may have left service or may simply be incorrect.
502
Unable to determine upcoming stops.
The indicated train has an unexpected exit station id, and the system cannot reliably determine which predictions to report.
503
Unable to find predictions
The train exists, however none of the available predictions are for active stations.

 
 
Locations API Error Codes

Error code
Message
Description
100
Required parameter  [value]  is missing.
One of the required parameters (rt, key) was not provided.
101
Invalid API key.
The API key given in the parameter ‘key’ was either not found or inactive.
102
Maximum daily Train Tracker API usage exceeded.
Key usage has exceeded daily limits. Limits are reset at midnight.
106
Invalid route identifier: [value].
Valid route identifiers are: red, blue, brn, g, org, p, pink, y
107
Maximum number of rt’s per request is 8.
No more than 8 routes can be issued per request. Note duplicates are counted but not returned.
500
Invalid parameter: [value]
The indicated parameter is not valid. Valid parameters are: rt, key.

 

 

Note: "QuicTrak" is a registered trademark of QEI, Inc.

Plan a trip

 
Start (e.g. O'Hare Airport)

End (e.g. 1 N State St, Chicago, IL)


Leave Now
More
 
 Get directions with:
 

About trip planners (and more options)..
 

System Status

 

Trains:

Red Line Normal Service
Blue Line Planned Work w/Station(s) Bypassed
Brown Line Normal Service
Green Line Normal Service
Orange Line Normal Service
Purple Line Normal Service
Pink Line Normal Service
Yellow Line Normal Service

Buses:

Routes with Current Alerts (View All):
 
 
©2014 Chicago Transit Authority|Terms of Use|Privacy|Unsubscribe|Jobs|Contact Us|RSS|Social Media
international globe Languages [En] [Pl] [Zh] [Es]