Rail Station Information

Rail line and station information, including locations, fares, times, and parking.

XML - Lines

Description

Returns information about all rail lines.

Response Elements

Element Description
Lines Array containing line information (Line).
DisplayName Full name of line color.
EndStationCode End station code. For example, will be E10 (Greenbelt) for the Green Line, B11 (Glenmont) for the Red Line, etc. Use this value in other rail-related APIs to retrieve data about a station.
InternalDestination1 Intermediate terminal station code. During normal service, some trains on some lines might end their trip prior to the StartStationCode or EndStationCode. A good example is on the Red Line where some trains stop at A11 (Grosvenor) or B08 (Silver Spring). Empty string if not defined.
InternalDestination2 Similar to InternalDestination1.
LineCode Two-letter abbreviation for the line (e.g.: RD, BL, YL, OR, GR, or SV).
StartStationCode Start station code. For example, will be F11 (Branch Avenue) for the Green Line, A15 (Shady Grove) for the Red Line, etc. Use this value in other rail-related APIs to retrieve data about a station.

Try it

Request URL

Request headers

string
Subscription key which provides access to this API. Found in your Profile.

Request body

Response 200

Default response code.

<LinesResp xmlns="http://www.wmata.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Lines>
        <Line>
            <DisplayName>Green</DisplayName>
            <EndStationCode>E10</EndStationCode>
            <InternalDestination1/>
            <InternalDestination2/>
            <LineCode>GR</LineCode>
            <StartStationCode>F11</StartStationCode>
        </Line>
        <Line>
            <DisplayName>Blue</DisplayName>
            <EndStationCode>G05</EndStationCode>
            <InternalDestination1/>
            <InternalDestination2/>
            <LineCode>BL</LineCode>
            <StartStationCode>J03</StartStationCode>
        </Line>
        <Line>
            <DisplayName>Silver</DisplayName>
            <EndStationCode>G05</EndStationCode>
            <InternalDestination1/>
            <InternalDestination2/>
            <LineCode>SV</LineCode>
            <StartStationCode>N06</StartStationCode>
        </Line>
        <Line>
            <DisplayName>Red</DisplayName>
            <EndStationCode>B11</EndStationCode>
            <InternalDestination1>A11</InternalDestination1>
            <InternalDestination2>B08</InternalDestination2>
            <LineCode>RD</LineCode>
            <StartStationCode>A15</StartStationCode>
        </Line>
        <Line>
            <DisplayName>Orange</DisplayName>
            <EndStationCode>D13</EndStationCode>
            <InternalDestination1/>
            <InternalDestination2/>
            <LineCode>OR</LineCode>
            <StartStationCode>K08</StartStationCode>
        </Line>
        <Line>
            <DisplayName>Yellow</DisplayName>
            <EndStationCode>E06</EndStationCode>
            <InternalDestination1>E01</InternalDestination1>
            <InternalDestination2/>
            <LineCode>YL</LineCode>
            <StartStationCode>C15</StartStationCode>
        </Line>
    </Lines>
</LinesResp>

Code samples

@ECHO OFF

curl -v -X GET "https://api.wmata.com/Rail.svc/Lines"
-H "api_key: {subscription key}"

--data-ascii "{body}" 
using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }
        
        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("api_key", "{subscription key}");

            var uri = "https://api.wmata.com/Rail.svc/Lines?" + queryString;

            var response = await client.GetAsync(uri);
        }
    }
}	
// // This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class JavaSample 
{
    public static void main(String[] args) 
    {
        HttpClient httpclient = HttpClients.createDefault();

        try
        {
            URIBuilder builder = new URIBuilder("https://api.wmata.com/Rail.svc/Lines");


            URI uri = builder.build();
            HttpGet request = new HttpGet(uri);
            request.setHeader("api_key", "{subscription key}");


            // Request body
            StringEntity reqEntity = new StringEntity("{body}");
            request.setEntity(reqEntity);

            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

            if (entity != null) 
            {
                System.out.println(EntityUtils.toString(entity));
            }
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
    }
}

<!DOCTYPE html>
<html>
<head>
    <title>JSSample</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
</head>
<body>

<script type="text/javascript">
    $(function() {
        var params = {
            "api_key": "{subscription key}",
            // Request parameters
        };
      
        $.ajax({
            url: "https://api.wmata.com/Rail.svc/Lines?" + $.param(params),
            type: "GET",
        })
        .done(function(data) {
            alert("success");
        })
        .fail(function() {
            alert("error");
        });
    });
</script>
</body>
</html>
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    
    NSString* path = @"https://api.wmata.com/Rail.svc/Lines";
    NSArray* array = @[
                         // Request parameters
                         @"entities=true",
                      ];
    
    NSString* string = [array componentsJoinedByString:@"&"];
    path = [path stringByAppendingFormat:@"?%@", string];

    NSLog(@"%@", path);

    NSMutableURLRequest* _request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:path]];
    [_request setHTTPMethod:@"GET"];
    // Request headers
    [_request setValue:@"{subscription key}" forHTTPHeaderField:@"api_key"];
    // Request body
    [_request setHTTPBody:[@"{body}" dataUsingEncoding:NSUTF8StringEncoding]];
    
    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData* _connectionData = [NSURLConnection sendSynchronousRequest:_request returningResponse:&response error:&error];

    if (nil != error)
    {
        NSLog(@"Error: %@", error);
    }
    else
    {
        NSError* error = nil;
        NSMutableDictionary* json = nil;
        NSString* dataString = [[NSString alloc] initWithData:_connectionData encoding:NSUTF8StringEncoding];
        NSLog(@"%@", dataString);
        
        if (nil != _connectionData)
        {
            json = [NSJSONSerialization JSONObjectWithData:_connectionData options:NSJSONReadingMutableContainers error:&error];
        }
        
        if (error || !json)
        {
            NSLog(@"Could not parse loaded json with error:%@", error);
        }
        
        NSLog(@"%@", json);
        _connectionData = nil;
    }
    
    [pool drain];

    return 0;
}
<?php
// This sample uses the Apache HTTP client from HTTP Components (http://hc.apache.org/httpcomponents-client-ga/)
require_once 'HTTP/Request2.php';

$request = new Http_Request2('https://api.wmata.com/Rail.svc/Lines');
$url = $request->getUrl();

$headers = array(
    // Request headers
    'api_key' => '{subscription key}',
);

$request->setHeader($headers);

$parameters = array(
    // Request parameters
);

$url->setQueryVariables($parameters);

$request->setMethod(HTTP_Request2::METHOD_GET);

// Request body
$request->setBody("{body}");

try
{
    $response = $request->send();
    echo $response->getBody();
}
catch (HttpException $ex)
{
    echo $ex;
}

?>
########### Python 2.7 #############
import httplib, urllib, base64

headers = {
    # Request headers
    'api_key': '{subscription key}',
}

params = urllib.urlencode({
})

try:
    conn = httplib.HTTPSConnection('api.wmata.com')
    conn.request("GET", "/Rail.svc/Lines?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################

########### Python 3.2 #############
import http.client, urllib.request, urllib.parse, urllib.error, base64

headers = {
    # Request headers
    'api_key': '{subscription key}',
}

params = urllib.parse.urlencode({
})

try:
    conn = http.client.HTTPSConnection('api.wmata.com')
    conn.request("GET", "/Rail.svc/Lines?%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(data)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

####################################
require 'net/http'

uri = URI('https://api.wmata.com/Rail.svc/Lines')

request = Net::HTTP::Get.new(uri.request_uri)
# Request headers
request['api_key'] = '{subscription key}'
# Request body
request.body = "{body}"

response = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
    http.request(request)
end

puts response.body