Key Info at a Glance
- Mandate Start: July 15, 2025 – every Tatkal booking (web, app, PRS) requires Aadhaar‑OTP
- Linking Deadline: July 1, 2025 – one‑time authentication of IRCTC profile with Aadhaar/VID
- Blackout Window: AC 10:00–10:30 AM; Non‑AC 11:00–11:30 AM (no automated/agent bookings)
- Impact: Standard rotating datacenter scripts without OTP support will fail
- Solution: Follow these six enriched steps: pre‑booking setup, blackout timing, session init, auto-fill & trigger, OTP capture & submit, confirmation & cleanup
In July 2025, Indian Railways imposed an Aadhaar-based OTP check on its Tatkal ticket platform—covering IRCTC’s website, mobile app, PRS counters, and travel agents. This strengthens fairness by blocking bot-driven bulk bookings but disrupts longstanding proxy‑driven automation.
Many users, accustomed to rotating proxy pools and rapid-fire scripts, now encounter “Verification Required” errors, session timeouts, and a mandatory 30-minute blackout that neutralizes brute-force tactics. To restore reliable automation, you must integrate OTP handling, maintain IP-session consistency, and respect the blackout window.
This guide breaks down each requirement into six clear steps, with purpose, prerequisites, concrete commands or code snippets, pro‑tips, and verification checks—ensuring both beginners and professionals can follow along and adapt GoProxy workflows.

The Aadhaar-OTP Mandate: Timeline & Scope
Date |
Requirement |
By July 1, 2025 |
Link your IRCTC profile to Aadhaar/Virtual ID |
From July 15, 2025 |
Every Tatkal booking must include an OTP check |
Daily Window |
No automated/agent bookings: AC 10:00–10:30 AM;NonAC 11:00–11:30 AM |
Aadhaar Linking (One-Time)
Enter a 12-digit Aadhaar number or UIDAI-issued VID under My Profile → Link Aadhaar.
IRCTC calls UIDAI’s e-KYC API to send an OTP to the registered mobile.
Input the OTP to authenticate and lock down your official name and address.
Mandatory OTP Verification
After filling passenger details and clicking Book, IRCTC triggers an SMS OTP to your Aadhaar‑linked phone. Successful booking only after entering the correct OTP.
Agent Blackout Window
Automated or agent-based bookings are paused for the first 30 minutes of each Tatkal window, preventing bulk-booking services from sweeping seats.
Step 1: Pre-Booking Setup (Before July 1)
Prepare your IRCTC account and proxy environment so you’re fully authenticated and equipped to handle OTPs, eliminating last-minute failures.
Prerequisites
Active IRCTC account
Aadhaar number or Virtual ID (VID)
GoProxy dashboard access for reserving proxy pools
SMS-relay service credentials or readiness for manual OTP entry
1. Authenticate IRCTC Profile
Log in to IRCTC → My Profile → Link Aadhaar
Enter 12-digit Aadhaar/VID → click Send OTP
Receive OTP on your Aadhaar-registered mobile → enter to link
2. Reserve Sticky Residential IPs
Allocate a dedicated pool (e.g., 5–10 IRCTC proxy IPs) for your IRCTC sessions. For easy identification, you can tag it as "Tatkal-July2025".
3. Configure SMS-Relay or User Prompt
SMS-Relay: Obtain API key from your provider (e.g., Twilio) and configure a webhook endpoint
User Prompt: Plan a pause in your automation script to request manual OTP input from end users
4. Pre-Save Passenger Data
In IRCTC → Master List, add frequent travelers’ names and details. Verify entries match Aadhaar-authenticated profile to avoid mismatch errors.
Pro Tips
Use high-TTL (≥ 60 s) on your sticky IPs to prevent mid-booking churn. GoProxy supports that!
Store your SMS-relay API key securely, and test OTP delivery with a dummy IRCTC login.
Verification
Confirm IRCTC profile shows “Aadhaar Linked”
Send a test OTP via SMS‑relay API and verify you receive JSON with {"otp":"123456"}
Step 2: Blackout-Aware Scheduling
Avoid the enforced 30-minute agent blackout by automating a precise pause and resume in your script, ensuring you only launch bookings when allowed.
Prerequisites
System clock synced to IST (GMT+05:30)
Scheduler or cron‑like capability in your script environment
1. Calculate Blackout Window
AC bookings: 10:00–10:30 AM IST
Non-AC bookings: 11:00–11:30 AM IST
2. Implement Pause Logic
In Python, for example:
python
import time, datetime
# Pause until blackout ends
target = datetime.datetime.now().replace(hour=10, minute=30, second=0)
while datetime.datetime.now() < target:
time.sleep(1)
3. Resume Execution
Confirm current time ≥ target before proceeding to Step 3
Pro Tips
Include a grace buffer of 2–3 seconds in your resume time to account for script startup.
Record blackout start and end times for audit and troubleshooting.
Verification
Check your logs show script idle during the blackout and resume exactly at target time.
Step 3: Session Initialization
Establish an IP‑session link using a reserved residential proxy to satisfy IRCTC’s IP‑Aadhaar consistency requirement.
Prerequisites
Reserved GoProxy sticky IP pool from Step 1
Automation library (e.g., Selenium, Puppeteer)
1. Allocate Proxy to Session
python
proxy = go_proxy.assign_proxy(pool="Tatkal-July2025")
selenium_options.add_argument(f"--proxy-server=http://{proxy.ip}:{proxy.port}")
driver = webdriver.Chrome(options=selenium_options)
2. Load Tatkal Booking Page
Navigate to https://www.irctc.co.in/nget/train-search under your proxy session
3. Verify IP (optional)
Load https://api.ipify.org?format=json to confirm the exit IP matches your allocated proxy
Pro Tips
Reuse the same driver instance for Steps 3–5 to maintain session cookies.
If IP allocation fails, implement retry logic with a different sticky IP.
Verification
Ensure api.ipify.org returns the expected sticky IP.
Step 4: Auto-Fill & Trigger OTP
Automatically complete form filling and trigger an OTP to the user’s Aadhaar-linked mobile, minimizing manual interactions and improving efficiency.
Prerequisites
Pre‑saved Master List passenger index
Loaded the IRCTC booking page under the correct proxy session
1. Select Tatkal Option & Class
python
driver.find_element(By.ID, "quotaTatkal").click()
driver.find_element(By.ID, "classAC").click() # or classNonAC
2. Populate Passenger Details
python
passenger = master_list[0] # first passenger
driver.find_element(By.NAME, "passengerName0").send_keys(passenger.name)
driver.find_element(By.NAME, "passengerAge0").send_keys(passenger.age)
3. Click “Book”
python
driver.find_element(By.ID, "bookButton").click()
This action sends an OTP to the Aadhaar‑registered mobile.
Pro Tips
Use explicit waits (e.g., Selenium’s WebDriverWait) to ensure elements are interactable.
Pre-load passenger data into a local cache to avoid network delays.
Verification
Observe the page transition to an OTP input field within 3 seconds of clicking “Book.”.
Step 5: OTP Capture & Submission
Retrieve the OTP and submit it swiftly to complete the booking process.
Prerequisites
SMS‑relay API endpoint or user prompt mechanism
1. Fetch OTP via SMS‑Relay
python
import requests, time
start = time.time()
while True:
resp = requests.get(
"https://api.smsrelay.com/v1/otps",
params={"session_id": SESSION_ID},
headers={"Authorization": f"Bearer {API_KEY}"}
)
if resp.status_code == 200 and resp.json().get("otp"):
otp = resp.json()["otp"]
break
if time.time() - start > 30:
raise TimeoutError("OTP fetch timed out")
time.sleep(1)
2. Submit OTP in IRCTC Form
python
driver.find_element(By.ID, "otpInput").send_keys(otp)
driver.find_element(By.ID, "submitOtpButton").click()
3. Fallback User-Prompt
python
if not otp:
otp = input("Enter OTP from your mobile: ")
submit_otp(otp)
Pro Tips
Keep the proxy session active during OTP fetch to avoid IP changes.
Log timestamps for OTP request, retrieval, and submission to monitor latency.
Verification
IRCTC displays a confirmation message and PNR number.
Step 6: Confirmation & Cleanup
Finalize the booking, log outcomes, and manage proxy resources for subsequent operations.
Prerequisites
Successful OTP submission
1. Capture Confirmation
python
pnr = driver.find_element(By.ID, "pnrNumber").text
log_success(session_id=SESSION_ID, pnr=pnr)
2. Handle Failures
python
if "Verification Required" in driver.page_source:
log_failure(session_id=SESSION_ID, reason="Verification Required")
3. Release or Retain Proxy
python
go_proxy.release_proxy(proxy) # or keep for next booking
driver.quit()
Pro Tips
Retain the proxy if you plan multiple bookings in quick succession to reduce re‑auth delays.
Archive logs with timestamps, proxy IP, OTP latency, and outcome for audit.
Verification
Review your logs for a successful PNR or recorded error, ensuring proper cleanup.
Monitoring, Error Handling & Optimization
1. Track Key Metrics
OTP Latency: Time between OTP generation and capture.
Booking Success Rate: Confirmed bookings vs. attempts.
Error Patterns: Frequency of “Verification Required,” timeouts, or blackout breaches.
2. Set Automated Alerts
Notify operators if OTPs aren’t received in 45 seconds or if repeated session rejections occur.
3. Adaptive Rate-Limiting
Throttle retries when failure spikes indicate proxy health, mobile network, or UIDAI service issues.
Comments
The Aadhaar-OTP mandate reshapes Tatkal automation into a compliance-focused orchestration. Though friction increases, GoProxy’s sticky IRCTC IPs and SMS-relay integrations offer a resilient path to fast, fair bookings—transforming regulation into a competitive advantage. Sign up today and get a free trial!
Missed some basic info? Get up to speed on proxy configuration and script structure:
How to Automate IRCTC Ticket Booking »