node package manager



An NYC MTA API library


npm install mta-gtfs --save



var Mta = require('mta-gtfs');
var mta = new Mta({
  key: 'MY-MTA-API-KEY-HERE', // only needed for mta.schedule() method
  feed_id: 1                  // optional, default = 1
  • uses node-fetch to make http requests
  • returns Promise objects and makes use of native Promises (make sure you are using >= Node v0.12)


For feed information, see

In order to use the MTA real-time APIs, you will need an MTA API key from here:

Get subway stop info

Get ids, name, and lat/long for all subway stops.

mta.stop().then(function (result) {
}).catch(function (err) {

Get info for specific stop, given an id.

mta.stop(635).then(function (result) {

An array of ids may also be passed to this method.

The stop ids given here are used in mta.schedule().

Get MTA service status info

You can get ALL service types:

mta.status().then(function (result) {

Or, specify a specific service type (subway, bus, BT, LIRR, MetroNorth):

mta.status('subway').then(function (result) {

The API route this method hits is updated by the MTA every 60 seconds.

Get real-time subway schedule data

Only available for the routes found in this list.

Given a single subway stop id (or an array of stop ids) and an optional feedId, it gives schedule data for both northbound and southbound trains.

mta.schedule(635, 1).then(function (result) {

The API route this method hits is updated by the MTA every 30 seconds.


See test cases for more examples.

MTA_API_KEY='your-api-key-here' npm test

To do

  • MTA Bus Time API (
  • return static schedules for lines not included in real-time feeds