7 days ago
How to check Railway's platform status programmatically (working endpoint + dead ends) 06/30/2026
Goal: poll Railway's platform status from a script (an internal dashboard that shows whether each upstream provider is up, so we can tell "is it us or Railway").
What does NOT work (documenting the dead ends to save others time):
-
status.railway.com (the public status page) returns HTTP 403 to non-browser requests. Every common path I tried 403'd: /api/v2/status.json (Atlassian Statuspage), /summary.json (Instatus), and /feed/rss. So the status page itself can't be polled.
-
railway.instatus.com (the Instatus mirror) is reachable and returns {"page":{"status":"UP"}}, but per Railway support it is deprecated and perpetually returns "UP" regardless of the real state. Do not use it. It is a false-green zombie.
What works: Railway has a separate status API that is reachable, no-auth, and not blocked:
GET https://api.railwaystatus.com/statusSample response (abridged):
{
"components": [
{ "name": "Dashboard (railway.com)", "status": "OPERATIONAL", "type": "component" },
{
"name": "Deployments (Railway Metal)",
"type": "group",
"components": [
{ "name": "US East (Metal / Virginia, USA)", "status": "OPERATIONAL" }
]
}
],
"incidents": [],
"maintenances": []
}Notes for anyone consuming it:
-
Each component has a "status" (e.g. OPERATIONAL). Components can nest under entries with "type": "group", so flatten recursively to collect all leaf statuses.
-
There is no single top-level "overall status" field, so derive your own, e.g. the worst component status, escalated when "incidents" or "maintenances" is non-empty.
-
Railway support mentioned they are working on publishing a JSON Schema for this endpoint, so the shape should be officially documented soon. Until then, code defensively (an unexpected or empty body should read as "unknown," not "operational").
Thanks to Railway support for pointing me to the real endpoint.
0 Replies