Batch seat availability

Check up to 25 train and class combinations.

POST /v1/availability/seats/batch

Scope availability:read · Credits max(5, 2 x item/class combinations) · Plans All plans

Returns independent availability results for every item. Pricing is dynamic based on each requested item and class.

Authentication

Send your key in the X-RailCore-Key header. This operation requires the availability:read scope. See the authentication guide.

Request parameters

This operation takes no path or query parameters.

JSON body

FieldTypeDescription
itemsAvailabilityInput[]Array with 1 to 25 items.
items[].train_numberstringTrain number.
items[].fromstringBoarding station code.
items[].tostringDestination station code.
items[].datestring(date)Journey date.
items[].classesClassCode[]Up to 8 classes. Omission prices and checks four default classes.
items[].quotaQuotaOptional reservation quota.

Code examples

Base URL https://ir.railcore.tech/v1. Keep the key in an environment variable and call from a trusted server-side environment.

cURL

curl -sS -X POST \
  -H "X-RailCore-Key: $RAILCORE_KEY" \
  -H "Content-Type: application/json" \
  --data '{"items":[{"train_number":"12656","from":"BSL","to":"ADI","date":"2026-08-27","classes":["SL","3A"],"quota":"GN"},{"train_number":"12952","from":"NDLS","to":"BCT","date":"2026-08-28","classes":["2A"],"quota":"TQ"}]}' \
  "https://ir.railcore.tech/v1/availability/seats/batch"

JavaScript

const response = await fetch("https://ir.railcore.tech/v1/availability/seats/batch", {
  method: "POST",
  headers: {
    "X-RailCore-Key": process.env.RAILCORE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "items": [
    {
      "train_number": "12656",
      "from": "BSL",
      "to": "ADI",
      "date": "2026-08-27",
      "classes": [
        "SL",
        "3A"
      ],
      "quota": "GN"
    },
    {
      "train_number": "12952",
      "from": "NDLS",
      "to": "BCT",
      "date": "2026-08-28",
      "classes": [
        "2A"
      ],
      "quota": "TQ"
    }
  ]
}),
});

const body = await response.json();
console.log(response.status, body);

Python

import json
import os
import requests

response = requests.request(
    "POST",
    "https://ir.railcore.tech/v1/availability/seats/batch",
    headers={"X-RailCore-Key": os.environ["RAILCORE_KEY"]},
    json=json.loads("{\"items\":[{\"train_number\":\"12656\",\"from\":\"BSL\",\"to\":\"ADI\",\"date\":\"2026-08-27\",\"classes\":[\"SL\",\"3A\"],\"quota\":\"GN\"},{\"train_number\":\"12952\",\"from\":\"NDLS\",\"to\":\"BCT\",\"date\":\"2026-08-28\",\"classes\":[\"2A\"],\"quota\":\"TQ\"}]}"),
    timeout=20,
)
print(response.status_code, response.json())

Rate limits and credits

This call costs max(5, 2 x item/class combinations) 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.

Response fields

FieldTypeDescription
results[]AvailabilityResponse[]Per-input availability result.
results[].train_numberstringTrain number.
results[].from_station_code / to_station_codestringRequested segment.
results[].journey_datestring(date)Requested journey date.
results[].quotaQuotaApplied quota.
results[].classes[].class_codeClassCodeTravel class.
results[].classes[].statusstringAVAILABLE, RAC, WAITLIST, REGRET, NOT_AVAILABLE, TRAIN_CANCELLED, TRAIN_DEPARTED, or UNKNOWN.
results[].classes[].availability_textstringSource availability text normalized for display.
results[].classes[].available_countintegerKnown available berth count.
results[].classes[].waitlist_count / rac_countintegerKnown waitlist and RAC positions.
results[].classes[].wl_poolstring | nullGNWL, PQWL, RLWL, RSWL, TQWL, NLWL, or CKWL.
results[].classes[].fare / total_fareinteger | nullFare values in INR.
results[].classes[].confirmation_probabilityobject | nullPercentage, LOW/MEDIUM/HIGH label, and explanatory text.
results[].classes[].last_updated_atstring | nullLive source update time.

Example response

{
  "success": true,
  "data": {
    "results": [
      {
        "train_number": "12656",
        "from_station_code": "BSL",
        "to_station_code": "ADI",
        "journey_date": "2026-08-27",
        "quota": "GN",
        "classes": [
          {
            "class_code": "3A",
            "status": "AVAILABLE",
            "availability_text": "AVAILABLE 24",
            "available_count": 24,
            "waitlist_count": 0,
            "rac_count": 0,
            "wl_pool": null,
            "fare": 1125,
            "total_fare": 1125,
            "confirmation_probability": {
              "percentage": 96,
              "label": "HIGH",
              "text": "High confirmation likelihood"
            },
            "last_updated_at": "2026-08-20T17:12:23.304Z"
          }
        ]
      }
    ]
  },
  "meta": {
    "api_version": "v1",
    "request_id": "req_01J5Z7Y8N2K4M6P8R0T2V4X6Z8",
    "trace_id": "trc_01J5Z7Y8N2K4M6P8R0T2V4X6Z9",
    "timestamp": "2026-08-20T17:12:23.305Z",
    "freshness": {
      "mode": "live",
      "retrieved_at": "2026-08-20T17:12:23.305Z",
      "sources": [
        {
          "confidence": "high"
        }
      ]
    }
  }
}

Errors

StatusCodeDescriptionRetry
400VALIDATION_ERRORA required field is missing or invalid.Not retryable
401MISSING_API_KEY / INVALID_API_KEYThe credential is absent, unknown, disabled, or expired.Not retryable
403SCOPE_MISSING / PLAN_ENDPOINT_DISABLEDThe key lacks the required scope or plan entitlement.Not retryable
402CREDITS_EXHAUSTEDThe account balance cannot cover this operation.Not retryable
429RATE_LIMITEDMinute or daily request budget is exhausted. Honor Retry-After.Retryable
410API_VERSION_SUNSETThis API version has reached its announced sunset date. Migrate to a supported major version.Not retryable
502UPSTREAM_UNAVAILABLELive data could not be retrieved. Retry with backoff.Retryable
504UPSTREAM_TIMEOUTThe live-data request exceeded its deadline. Retry with backoff.Retryable
503METERING_UNAVAILABLECredit settlement is temporarily unavailable and no data was returned.Retryable

Related Availability endpoints

All RailCore Indian Railways API endpoints · Quickstart · Rate limits