Full Screen Tube Status 404

Anyone know what’s happened to the TFL Tube Status full screen display?


It’s been dead for a few days now.



This has been depreciated. You are expected to make your own board up from a call to https://api.tfl.gov.uk/line/mode/tube/status

Well that would sure explain it!

Are there any alternatives (full screen simple tube status)? Or am I going to have learn how to code!? I was using it as part of a digital sign.

Here’s a basic routine in PHP that generates a serviceboard… The CSS might need fixing to get a full-screen display.

    echo "<style>.rainbowBoard{border:1px solid #ccc;margin-top:10px}.rainbowBoard td{padding:8px 15px 8px 15px}.rainbowBoard tr>td:nth-child(1){color:#fff;width:50%}.rainbowBoard tr>td:nth-child(2){color:#fff}.
    $tflData = json_decode(file_get_contents("https://api.tfl.gov.uk/line/mode/tube,overground,dlr,tflrail,tram/status?"));
    $arrSavedNames = [];
    $arrResult = [];
    foreach ($tflData as $tflDatum) {
        $strLineID = strtr($tflDatum->id, ["-" => ""]);
        $strMode = $tflDatum->modeName;
        if ($strMode == "tube") {
            $strMode = "line";
        } else if ($strMode == "overground") {
            $strMode = "";
        } else if ($strMode == "dlr") {
            $strMode = "";
            $strLineID = "docklandslightrailway";
        } else if ($strMode == "tflrail") {
            $strMode = "";
            $strLineID = "tflrail";
        } else if ($strMode == "tram") {
            $strLineID = "londontrams";
            $strMode = "";
        $strLineID = $strLineID;
        if (isset($tflDatum->name)) {
            $arrSavedNames[$strLineID . $strMode] = $tflDatum->name;
        foreach ($tflDatum->lineStatuses as $lineStatus) {
            if (!isset($arrResult[$strLineID . $strMode])) {
                $arrResult[$strLineID . $strMode] = $lineStatus->statusSeverityDescription;
            } else {
                    $arrResult[$strLineID . $strMode] .= ", " . $lineStatus->statusSeverityDescription;
    $strStandardRainbowBoard = "";
    foreach ($arrResult as $strID => $strStatus) {
        $strStandardRainbowBoard .= PHP_EOL . "<tr><td class='$strID'>" . $arrSavedNames[$strID] . "</td><td class='$strID'>$strStatus</td></tr>";
    echo "<table class='rainbowBoard'>" . $strStandardRainbowBoard . "</table>";

That is awesome, thank you!

I have made some tweaks and added a ‘Last updated’ row and it is perfect.

Not really sure why the TFL one had to be scrapped, but this is working well.

My pleasure.

I think that the TfL one was removed for a good reason, probably something to do with https and iFrames.


We are using tube serviceboard status on our website.
Any alternative? other than PHP code.


Welcome. I guess you could do the same sort of this in Javascript, it’s just I had the code from the MTR Crossrail system’s backend that I could cut and paste.

Here’s a quick knock-together code for Javascript…

    <!DOCTYPE html>
    <html lang="en">
        <meta charset="UTF-8">
<style>.rainbowBoard{border:1px solid #ccc;margin-top:10px;color:#fff}.rainbowBoard td{padding:8px 15px 8px 15px}.rainbowBoard tr>td:nth-child(1){width:50%}.rainbowBoard tr>td:nth-child(2){}
    .londonoverground{background:#e86a10}.london-overground{background:#e86a10}.piccadilly{background:#0019a8;color:white}.bakerloo{background:#894e24; color:#fff}.central{background:#dc241f}.circle{background:#ffce00;color:#0019a8}
        // Store XMLHttpRequest and the JSON file location in variables
        var xhr = new XMLHttpRequest();
        var url = "https://api.tfl.gov.uk/line/mode/tube,overground,dlr,tflrail,tram/status";
        // Called whenever the readyState attribute changes
        xhr.onreadystatechange = function () {
            // Check if fetch request is done
            if (xhr.readyState == 4 && xhr.status == 200) {
                // Parse the JSON string
                var jsonData = JSON.parse(xhr.responseText);
                // Call the showTfL(), passing in the parsed JSON string
        // Do the HTTP call using the url variable we specified above
        xhr.open("GET", url, true);
        // Function that formats the string with HTML tags, then outputs the result
        function showTfL(data) {
            var output = ""; // Open list
            // Loop through the artists, and add them as list items
            for (var i in data) {
                output += "<tr><td class='" + data[i].id + "'>" + data[i].name + "</td>";
                var str = "";
                for (var j in data[i].lineStatuses)
                str = str + data[i].lineStatuses[j].statusSeverityDescription
            output += "<td class='" + data[i].id + "'>" + str + "</td></tr>";
        // Output the data to the "artistlist" element
        document.getElementById("divOut").innerHTML = "<table class='rainbowBoard'>" + output + "</>";
    <div id="divOut"></div>
1 Like

Awesome ! this is working perfectly.
Thank you.

1 Like

@andyj300 @briantist is correct. I posted on here a while ago about the deprecation of the widgets - https://techforum.tfl.gov.uk/t/tfl-widgets-to-be-decommissioned-on-31-july-2019/1030/3 Unfortunately, we don’t have a database of people who are using them so couldn’t contact you direct. Glad @briantist has been able to help you out!

No problem! I didn’t know this forum existed until I was searching to find out why it had stopped working. We are all good now though.

I did find some other web facing status screens, but have since lost them. Don’t suppose you have some links?