IRCTC Connect
A comprehensive Node.js package for Indian Railways services. Get real-time PNR status, detailed train information, live train tracking, station updates, and search trains between stations.
PNR Status
Real-time booking status
Train Info
Complete route details
Live Tracking
Real-time location
Installation
npm install irctc-connectRequirements
- ✓ Node.js 14+
- ✓ Internet connection
- ✓ Valid credentials
Supported Platforms
- → Node.js apps
- → Express.js servers
- → Next.js applications
- → React Native
Quick Start
import {
checkPNRStatus, getTrainInfo, trackTrain, liveAtStation, searchTrainBetweenStations
} from 'irctc-connect';
// Check PNR status
const pnrResult = await checkPNRStatus('1234567890');
// Get train information
const trainResult = await getTrainInfo('12345');
// Track live train status
const trackResult = await trackTrain('12345', '06-12-2025');
// Get live trains at station
const stationResult = await liveAtStation('NDLS');
// Search trains between stations
const searchResult = await searchTrainBetweenStations('NDLS', 'BCT');checkPNRStatus(pnr)
Get comprehensive PNR status with passenger details and journey information.
Parameters
pnr(string) — 10-digit PNR numberconst result = await checkPNRStatus('1234567890');
if (result.success) {
console.log('PNR:', result.data.pnr);
console.log('Status:', result.data.status);
console.log('Train:', result.data.train.name);
console.log('Journey:', result.data.journey.from.name, '→', result.data.journey.to.name);
result.data.passengers.forEach(passenger => {
console.log(`${passenger.name}: ${passenger.status} - ${passenger.seat}`);
});
}{
success: true,
data: {
pnr: "1234567890",
status: "CNF",
train: { number: "12345", name: "Rajdhani Express", class: "3A" },
journey: {
from: { name: "New Delhi", code: "NDLS", platform: "16" },
to: { name: "Mumbai Central", code: "BCT", platform: "3" },
departure: "20:05",
arrival: "08:35",
duration: "12h 30m"
},
passengers: [
{ name: "JOHN DOE", status: "CNF", seat: "B1-45", berthType: "SL" }
]
}
}getTrainInfo(trainNumber)
Get detailed train information including complete route with station coordinates.
Parameters
trainNumber(string) — 5-digit train numberconst result = await getTrainInfo('12345');
if (result.success) {
const { trainInfo, route } = result.data;
console.log(`🚂 ${trainInfo.train_name} (${trainInfo.train_no})`);
console.log(`📍 ${trainInfo.from_stn_name} → ${trainInfo.to_stn_name}`);
console.log(`⏱️ ${trainInfo.from_time} - ${trainInfo.to_time}`);
console.log(`📅 Running Days: ${trainInfo.running_days}`);
route.forEach(station => {
console.log(` ${station.stnName} - ${station.departure}`);
});
}trackTrain(trainNumber, date)
Get real-time train status and tracking for a specific date with detailed station-wise information including delays and coach positions.
Parameters
trainNumber(string) — 5-digit train numberdate(string) — Date in dd-mm-yyyy formatconst result = await trackTrain('12342', '06-12-2025');
if (result.success) {
const { trainNo, trainName, statusNote, stations } = result.data;
console.log(`🚂 ${trainName} (${trainNo})`);
console.log(`📍 Status: ${statusNote}`);
stations.forEach(station => {
console.log(`🚉 ${station.stationName} (${station.stationCode})`);
console.log(` Arrival: ${station.arrival.scheduled} → ${station.arrival.actual}`);
if (station.arrival.delay) {
console.log(` ⚠️ Delay: ${station.arrival.delay}`);
}
});
}liveAtStation(stationCode)
Get list of upcoming trains at any station with real-time information.
Parameters
stationCode(string) — Station code (e.g., 'NDLS', 'BCT', 'HWH')const result = await liveAtStation('NDLS');
if (result.success) {
console.log(`🚉 Live trains at ${result.data.stationName}:`);
result.data.trains.forEach(train => {
console.log(`🚂 ${train.trainName} (${train.trainNumber})`);
console.log(` 📍 ${train.source} → ${train.destination}`);
console.log(` ⏰ Expected: ${train.expectedTime}`);
console.log(` 📊 Status: ${train.status}`);
});
}searchTrainBetweenStations(from, to)
Find all trains running between two stations with timing and availability.
Parameters
fromStationCode(string) — Origin station codetoStationCode(string) — Destination station codeconst result = await searchTrainBetweenStations('NDLS', 'BCT');
if (result.success) {
console.log(`🔍 Trains from ${result.data.from} to ${result.data.to}:`);
result.data.trains.forEach(train => {
console.log(`🚂 ${train.trainName} (${train.trainNumber})`);
console.log(` ⏰ ${train.departure} → ${train.arrival}`);
console.log(` ⏱️ Duration: ${train.duration}`);
console.log(` 📅 Days: ${train.runningDays}`);
});
}Input Validation
PNR Number
- • Must be exactly 10 digits
- • Only numeric characters
- • Auto-cleans non-numeric input
Train Number
- • Must be exactly 5 characters
- • Valid train number string
Date Format
- • Format: dd-mm-yyyy
- • Validates actual dates
- • No invalid dates like 32-01-2025
Station Codes
- • Valid station code strings
- • Examples: NDLS, BCT, HWH
Status Codes
| Code | Description |
|---|---|
CNF | Seat is confirmed |
WL | Not confirmed yet |
RAC | Partially confirmed |
CAN | Ticket cancelled |
PQWL | On pooled quota |
TQWL | On tatkal quota |
GNWL | On general quota |
Error Handling
All functions return a consistent response structure. Always check the success field before accessing data.
✅ Success Response
{
success: true,
data: { ... }
}❌ Error Response
{
success: false,
error: "Error message"
}Common Error Scenarios
- • Invalid input parameters
- • Network timeouts (10-second timeout)
- • API service unavailable
- • Invalid PNR/train numbers
- • Invalid date formats
Live Playground
Test the API functions with your own data. See live JSON response, status code, and response time.