Railway infrastructure,
without the scraping.
Powering modern railway applications with live train tracking, PNR status, seat availability, and station intelligence through one clean developer API.
import { configure, checkPNRStatus, trackTrain }
from "railkit"
// one-time setup
configure(process.env.RAILKIT_API_KEY)
const pnr = await checkPNRStatus("1234567890")What it includes
16 methods.
Every use case.
Each method maps to a clear railway data use case. Your team can understand the integration at a glance.
checkPNRStatus()Get complete PNR status with passenger details, journey route, and confirmation updates.
getTrainInfo()Retrieve route details, running schedule, stoppages, and station-level metadata.
trackTrain()Track live movement with the complete NTES schedule, intermediate station times, distance and progress metrics, Hindi names when supplied, coach metadata, and layout snapshots when coach composition changes.
trackTrainV2()Track live movement using the WIMT-backed v2 endpoint, with expanded route points, current location, halt summaries, delay, speed, and coach-position data.
getTrainHistory()Get the completed journey history of a train for a specific date — full station-by-station timeline, per-stop delays, and final coach position once the train has reached its destination.
liveAtStation()Get upcoming and passing trains at a station with near real-time status, delays, and platform info.
searchTrainBetweenStations()Find available trains between stations with timetable and running-day data.
getAvailability()Check availability forecasts and detailed fare breakup by quota and class.
fareLookup()Get the full fare breakdown for a journey — base fare, reservation, superfast, catering, GST, dynamic fare, and total collectible amount.
cancelList()Get the complete list of fully and partially cancelled trains, with route details and the affected segment for partial cancellations.
trainTimetableAtStation()Get all scheduled trains at a station, or filter by a nearby running date.
stationByCode()Resolve a station code to its name and coordinates.
stationAmenities()Get station facilities in a readable structure, including platforms, passenger amenities, counts, and facility availability.
stationsByName()Find up to 10 matching stations by partial name.
trainByNumber()Find up to 10 stored trains matching a train-number prefix.
trainsByName()Find up to 10 trains matching a partial train name.
Implementation guides
Build with real railway data.
Follow request, response, error, and data freshness examples for common integrations.
How developers use it
Small surface.
Built for backends.
Works in API routes, background jobs, support tools, or mobile app backends. One key, one import, 16 methods.
- Predictable response shape
- Works with any server-side framework
- Usage plans and developer dashboard
- TypeScript types included
import { configure,
checkPNRStatus, trackTrain }
from "railkit"
// one-time setup
configure(process.env.RAILKIT_API_KEY)
export async function getJourney(pnr: string) {
const status = await
checkPNRStatus(pnr)
const live = await
trackTrain("12342", "06-12-2025")
return { status, live }
}Ready to build?
Connect your app to Indian Railways.
Create an account, get your key, and start calling railway endpoints from your own backend in minutes.
Get API keyView on GitHubQuestions, answered
Frequently asked
questions.
Everything developers ask before integrating the Indian Railways API — PNR status, live tracking, seat availability and more.
How do I check PNR status with an API?
Sign up for a free RailKit API key, then call the getPNRStatus method (or the REST PNR endpoint) with a 10-digit PNR number. You get back the booking status, coach and berth details, boarding point, and chart status as JSON — ready to use in any Node.js, JavaScript, or TypeScript backend.
How do I track a train live and get its running status?
Use the live train tracking method with a five-digit train number and journey date. V1 returns stoppages and intermediate stations in route order, scheduled and actual stop times, scheduled-only intermediate times, distance and progress metrics, and detailed coach metadata. Hindi names are included when supplied by NTES.
How do I search for trains between two stations?
Call the train-between-stations method with a source and destination station code (and optional date). RailKit returns every train on that route with departure and arrival times, running days, train type, and available classes — ideal for building journey-planning features.
Is there a free tier and how do I get an API key?
Yes. RailKit has a free tier so you can start building right away. Create an account, generate your API key from the dashboard, and start calling railway endpoints in minutes. Paid plans start at ₹49 when you need higher rate limits — see the pricing page for details.
Does it support seat availability and fare enquiry?
It does. You can check seat and berth availability for a train, class, and date, and run a fare enquiry to get class-wise ticket prices. Both are exposed as simple promise-based methods in the SDK and as REST endpoints.
Does RailKit support Node.js and TypeScript?
RailKit is a promise-based Node.js SDK with first-class TypeScript types built in. Install it with npm install railkit, import the client, and every method is fully typed with autocomplete for requests and responses.