Get uncached live status with full-route position context.
GET /v1/trains/{train_number}/live-status
Scope live:read · Credits 5 · Plans All plans
Keeps a running train active when only part of its route is cancelled, while exposing the affected station range separately.
Send your key in the X-RailCore-Key header. This operation requires the live:read scope. See the authentication guide.
| Name | In | Type | Required | Description |
|---|---|---|---|---|
train_number | path | string | Required | Train number, 4 to 6 uppercase letters or digits. |
date | query | string(date) | Required | Journey date in YYYY-MM-DD format. |
from | query | string | Required | Boarding station code. |
to | query | string | Required | Destination station code. |
Base URL https://ir.railcore.tech/v1. Keep the key in an environment variable and call from a trusted server-side environment.
curl -sS -X GET \
-H "X-RailCore-Key: $RAILCORE_KEY" \
"https://ir.railcore.tech/v1/trains/12656/live-status?date=2026-10-10&from=BSL&to=ADI"
const response = await fetch("https://ir.railcore.tech/v1/trains/12656/live-status?date=2026-10-10&from=BSL&to=ADI", {
method: "GET",
headers: {
"X-RailCore-Key": process.env.RAILCORE_KEY,
},
});
const body = await response.json();
console.log(response.status, body);
import os
import requests
response = requests.request(
"GET",
"https://ir.railcore.tech/v1/trains/12656/live-status?date=2026-10-10&from=BSL&to=ADI",
headers={"X-RailCore-Key": os.environ["RAILCORE_KEY"]},
timeout=20,
)
print(response.status_code, response.json())
This call costs 5 credits and is available on All plans. Per-minute and daily budgets, and the headers reporting remaining quota, are documented in rate limits and credits and billing.
| Field | Type | Description |
|---|---|---|
status / status_text | string | Aggregate operating state and display text. CANCELLED is reserved for a whole-run cancellation. |
cancellation | object | null | Whether the whole run or only the from_station_code to to_station_code segment is cancelled. |
current_station_code / previous_station_code / next_station_code | string | null | Current route and next-halt context. |
approaching_station_code / approaching_station_name | string | null | First route point ahead, including pass-through stations. |
delay_minutes | integer | null | Current delay. |
travel_classes | string[] | null | Schedule-backed classes when available. |
started_at / scheduled_duration_minutes | string | integer | null | Actual start instant and scheduled end-to-end duration. |
distance_from_current_station_km / distance_to_approaching_station_km | number | null | Section progress when the provider exposes trustworthy position precision. |
freshness | object | RailCore retrieval time, train observation time, age, and cache state. |
{
"success": true,
"data": {
"train_number": "19006",
"train_name": "Surat BSL SURAT EXP",
"journey_date": "2026-10-10",
"status": "RUNNING",
"status_text": "Running 24 minutes late",
"cancellation": {
"fully_cancelled": false,
"from_station_code": "UDN",
"to_station_code": "ST"
},
"current_station_code": "DDE",
"previous_station_code": "VKH",
"next_station_code": "RNL",
"approaching_station_code": "RNL",
"delay_minutes": 24,
"train_type": "MEX",
"train_type_label": "express",
"travel_classes": [
"GN",
"3A",
"SL"
],
"distance_from_current_station_km": 4.885,
"distance_to_approaching_station_km": 7.115,
"confidence": "high",
"last_reported_at": "2026-10-03T11:46:23.351Z"
},
"meta": {
"api_version": "v1",
"request_id": "req_01J5Z7Y8N2K4M6P8R0T2V4X6Z8",
"trace_id": "trc_01J5Z7Y8N2K4M6P8R0T2V4X6Z9",
"timestamp": "2026-10-03T11:46:23.351Z",
"freshness": {
"mode": "live",
"retrieved_at": "2026-10-03T11:46:23.351Z",
"sources": [
{
"confidence": "high"
}
]
}
}
}
| Status | Code | Description | Retry |
|---|---|---|---|
| 400 | VALIDATION_ERROR | A required field is missing or invalid. | Not retryable |
| 401 | MISSING_API_KEY / INVALID_API_KEY | The credential is absent, unknown, disabled, or expired. | Not retryable |
| 403 | SCOPE_MISSING / PLAN_ENDPOINT_DISABLED | The key lacks the required scope or plan entitlement. | Not retryable |
| 402 | CREDITS_EXHAUSTED | The account balance cannot cover this operation. | Not retryable |
| 429 | RATE_LIMITED | Minute or daily request budget is exhausted. Honor Retry-After. | Retryable |
| 410 | API_VERSION_SUNSET | This API version has reached its announced sunset date. Migrate to a supported major version. | Not retryable |
| 502 | UPSTREAM_UNAVAILABLE | Live data could not be retrieved. Retry with backoff. | Retryable |
| 504 | UPSTREAM_TIMEOUT | The live-data request exceeded its deadline. Retry with backoff. | Retryable |
| 503 | METERING_UNAVAILABLE | Credit settlement is temporarily unavailable and no data was returned. | Retryable |
All RailCore Indian Railways API endpoints · Quickstart · Rate limits