India's Smartest Online BUS Booking Portal

www.etravelsmart.com

Web Service Integration Document

Support Email: customersupport@etravelsmart.com

This document is confidential and may be privileged or otherwise protected from disclosure and may include proprietary information. Unauthorized reproduction or disclosure of this information, in whole or in part, is prohibited.

1. Introduction

ETS (eTravelSmart) API is implemented using RESTful web services. ETS API clients are authenticated using the Digest Authentication mechanism. ETS API requests are authenticated using the client's username/email and password.

2. Getting Started

To start integrating with the ETS API, you need authentication details (username and password) and the API URL for all supported operations. You need to provide the list of IP addresses being used to access the ETS API. Only these IP addresses are allowed to access the API.

You can follow the rest of the documentation to learn how to use the different API calls. You can use simple HTTP GET and POST requests to perform all your operations. The integration is straightforward, and no SOAP requests/knowledge are required.

YK Software Solutions Pvt. Ltd. has a strict policy regarding unwanted load from API users and screen scrapers. To protect your IP address from being blacklisted, please follow the Best Practices section for your integration.

For more details, please contact customersupport@etravelsmart.com.

3. Stations / City Info

This API provides the list of all available stations.

Note: Please refresh this API daily around 3:00 AM during low-traffic hours to fetch the latest city and route updates. Station and city data may change frequently as bus operators add or discontinue services on various routes.

Request Method: HTTP GET

Request URL: http://localhost:8080/etsAPI/api/getStations

Sample Response: The response format of the Stations JSON is shown below.

{
    "apiStatus": {
            "message": "SUCCESS",
            "success": true
        },
    "stationList": [
          {
             "stationId": -1,
             "stationName": "10 dol"
          },
          {
             "stationId": 10086,
             "stationName": "10dol"
          },
          {
             "stationId": 13286,
             "stationName": "365 head"
          },
          {
              "stationId": 3012,
              "stationName": "Achanta"
          },
          {
               "stationId": 2886,
               "stationName": "Addanki"
          }
       ]
}

Response Parameters:

PARAMETER NAME

TYPE

DESCRIPTION

apiStations

Object

List of Stations. It contains the following member variables apiStatus,list of apiStation

apiStation

Object

It contains stationId,stationName

stationId

int

Id of the station

stationName

String

Name of the station

apiStatus

Object

Contains the status and message. It contains the following member variables message, isSuccess

Message

String

Contains the message, mostly used when the response fails.

isSuccess

Boolean

True if the response is success else false

4. AvailableBuses

This API provides the list of available routes between the given source and destination stations for the journey date.

Request Method: HTTP GET

Request URL: http://localhost:8080/etsAPI/api/getAvailableBuses?sourceCity=Hyderabad&destinationCity=Bangalore&doj=2014-02-28

Required Details for the Available Buses Information:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

sourceCity

String

Yes

sourceCity Name

destinationCity

String

Yes

Destination city name

doj

String

Yes

DOJ,yyyy-MM-dd

The sample response format of the AvailableBuses JSON is:

{
	"apiStatus": {
	            "message": "SUCCESS",
	            "success": true
	        }
    "apiAvailableBuses": [
            {
                "inventoryType": 1,
				"routeScheduleId": "1000011422440947912",
				"serviceId": "1000011400000947912",
				"fare": "1509.00",
				"departureTime": "10:16 PM",
				"arrivalTime": "08:00 AM",
				"availableSeats": 42,
                "operatorName": "Uttar Pradesh State Road Transport Corporation(UPSRTC)",
				"cancellationPolicy": "[{\"cutoffTime\":\"0-1\",\"refundInPercentage\":\"75\"},
				 {\"cutoffTime\":\"1-2\",\"refundInPercentage\":\"85\"},{\"cutoffTime\":\"2-24\",\"refundInPercentage\":\"90\"},
				 {\"cutoffTime\":\"24\",\"refundInPercentage\":\"100\"}]",
                "boardingPoints": [
                    {
                        "id": "1360101",                                    
						"location": "ANAND VIHAR",
                        "time": "10:16 PM",
						"pointName": "KASHMIRIGATE",
                        "landmark": "KASHMIRIGATE",
						"address" "204 KASHMIRIGATE",
                        "boardingDate": "2026-9-10"
                     }
				 ],
                  "droppingPoints": [
                      {
						   "id": "1360091",
                           "location": "CHARBAGH",
						   "droppingDate": "2026-9-11"
						   "pointName": "Alambagh ",
						   "landmark": "CHARBAGH",
						   "address" "204 CHARBAGH"
                           "time": "08:00 AM",
                       }
                   ],
				   "busType": "Scania A/C Multi Axle Seater (2+2)",
				   "partialCancellationAllowed": false,
				   "idProofRequired": false,
				   "operatorId": 11044,
                   "commPCT": 0.0,
				   "mTicketAllowed": false,
				   "isRTC": true,
				   "isOpTicketTemplateRequired": false,
				   "isOpLogoRequired": false,
				   "isFareUpdateRequired": true,
				   "is_child_concession": true,
                   "isGetLayoutByBPDP": false,
				   "socialDistancing": false,
				   "durationInMins": 584,
                   "busAmenities": [
                           "Blanket",
                           "Water Bottle",
                           "WiFi"
                    ]
				   "dpTimeDate":"04:00 AM (11-Sep)",
				   "nextDay":false,
				   "rtc":true,
           ],
		   
	},
    
}

Response Parameters:

PARAMETER NAME

TYPE

DESCRIPTION

apiAvailableBuses

Object

Contain APIStatus and list of apiAvailablebuses

apiStatus

Object

Contains the status and message. It contains the following member variables message, isSuccess

message

String

Contains the message, mostly used when the response fails.

success

Boolean

True if the response is success else false

apiAvailableBuses

Object

Contains the following member variables inventoryType, routeScheduleId, serviceId, fare, departureTime, arrivalTime, availableSeats, operatorName, cancellationPolicy, boardingPoints, droppingPoints, busType, partialCancellationAllowed, idProofRequired, operatorId, commPCT, mTicketAllowed

inventoryType

String

Inventory type value.

routeScheduleId

String

Route schedule Id

serviceId

String

Service id or operator route Id

fare

String

Ticket fare. Coma separated in case of multiple fares.

departureTime

String

Bus departure time (AM/PM format)

arrivalTime

String

Destination arrival time

availableSeats

Int

Available seats in a particular bus

operatorName

String

Name of the Operator

cancellationPolicy

String

List of Cancellation Policy Objects(cutoffTime, refundInPercentage)

cutoffTime

String

Cut off time in hours before journey

refundInPercentage

String

Refund Percentage if cancelled before cutOffTime.

boardingPoints

Object

List of boarding points. Contains id, location, time, pointName, lankmark, address, boardingDate

id

String

Boarding point id

location

String

Location of the boarding point

time

String

Leaving time from boarding point

lankmark

String

Landmark or location details of the dropping point

pointName

String

Name of the boarding or dropping point.

address

String

Complete address of the boarding or dropping point.

boardingDate

String

Date of boarding

droppingPoints

Object

List of dropping points. Contains id, pointName, lankmark, address, location, time

id

String

Dropping point id

location

String

Dropping point location

time

String

Arrival time of dropping point (AM/PM)

lankmark

String

Landmark or location details of the dropping point

pointName

String

Name of the boarding or dropping point.

address

String

Complete address of the boarding or dropping point.

droppingDate

String

Date of Dropping

busType

String

Type of bus(Volvo, semi sleeper)

partialCancellationAllowed

Boolean

True or false

idProofRequired

Boolean

True or false

operatorId

Int

Operator Id

commPCT

Double

Offered commission percentage

isMTicketAllowed

Boolean

True/False, Bus can be boarded by showing the SMS if the value is True.

isRTC

Boolean

Given operator is RTC operator If the value is True

isOpTicketTemplateRequired

Boolean

Recommend to use the ticket template suggested by Bus Operator (Mostly for RTCs) If the value is True

isOpLogoRequired

Boolean

Recommend to use the Logo of Bus Operator (Mostly for RTCs) in ticket template If the value is True

isFareUpdateRequired

Boolean

Fare changes based on the boarding and dropping point selected if the value if True. Then call getRtcUpdatedFare() after blockTicket() to get Updated Fare If the value is True.

is_child_concession

Boolean

Value True indicates that the child concession is applicable for this bus operator (Mostly RTCs). Rules like less than 11 years is child,Adult should accompany child,etc is defined by bus operator. Decreased fare is returned in getRtcUpdatedFare() method after successful block method.

Note: when primary along with child this will work and here fare is reduced.

isGetLayoutByBPDP

Boolean

If the value is True, Have to pass Boarding & Dropping point in busLayout request to get Updated Fare in busLayout response.

Note:It may applicable for RTC services only.

socialDistancing

Boolean

Bus Operator follows the socialDistancing rules in booking process If the value is True.

durationInMins

Long

Journey duration time in minutes (total journey time from departureTime to arrivalTime).

busAmenities

List<String>

List of Amenities that provided by the Bus Operator (Blanket,Water Bottle,WiFi,Charging Point,AI Assist,First Aid Box,Water Bottle Holder,CCTV,Vomiting Bag,Pillow,Reading Light,Hammer,Fire Extinguisher,Emergency Exit,GPS,etc...).

dpTimeDate

String

Dropping point departure/arrival time and date.

nextDay

Boolean

Indicates whether the bus reaches the dropping point on the next day. True if it is the next day, otherwise false.

NOTE : While sending source and destination in the availableBuses and busLayout request you should encode and send to etsAPI.

5. BusLayout

This API provides the bus seat information.

Request Method: HTTP GET

Request URL :

http://localhost:8080/etsAPI/api/getBusLayout?sourceCity=Hyderabad&destinationCity=Bangalore&doj=2014-03-04&inventoryType=114&routeScheduleId=11553

Required Details for viewing the Seat Information:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

sourceCity

String

Yes

sourceCity Name

destinationCity

String

Yes

Destination city name

doj

String

Yes

DOJ, yyyy-MM-dd

inventoryType

Int

Yes

InventoryType value

routeScheduleId

String

Yes

routeScheduleId value

The sample response format of the BusLayout JSON is:

{
    "apiStatus": {
        "message": "SUCCESS",
        "success": true
    },
    "inventoryType": 5,
    "boardingPoints": [
        {
            "id": "STP288D2959H",
            "location": "Kashmir GateKashmir Gate Metro gate no.5Near Metro gate no.5",
            "time": "07:45 PM",
            "pointName": "Kashmir Gate",
            "landmark": "Near Metro gate no.5",
            "address": "Kashmir Gate Metro gate no.5",
            "boardingDate": "2026-09-10"
        },
    ],
    "droppingPoints": [
        {
            "id": "STP5A8F38H",
            "location": "LucknowNear Alambagh Neharia ChowkAlambagh Neharia Chowk",
            "droppingDate": "2026-09-11",
            "pointName": "Lucknow",
            "landmark": "Alambagh Neharia Chowk",
            "address": "Near Alambagh Neharia Chowk",
            "time": "04:00 AM"
        }
    ],
    "seats": [
        {
            "id": "1",
            "row": 1,
            "column": 2,
            "zIndex": 0,
            "length": 1,
            "width": 1,
            "fare": 1199,
            "commission": null,
            "available": false,
            "ladiesSeat": false,
            "malesSeat": false,
            "bookedBy": "BLP99F12",
            "ac": true,
            "sleeper": false,
            "totalFareWithTaxes": 1258.95,
            "serviceTaxAmount": 59.95,
            "serviceTaxPer": 0.0,
            "childFare": 0.0,
            "operatorServiceChargeAbsolute": 0.0,
            "operatorServiceChargePercent": 0.0,
            "reservedForSocialDistancing": false
        },
        {
            "id": "EME",
            "row": 3,
            "column": 10,
            "zIndex": 0,
            "length": 1,
            "width": 1,
            "fare": 0,
            "commission": null,
            "available": false,
            "ladiesSeat": false,
            "malesSeat": false,
            "bookedBy": "BLQ6KG933",
            "ac": true,
            "sleeper": false,
            "totalFareWithTaxes": 0,
            "serviceTaxAmount": 0,
            "serviceTaxPer": 0.0,
            "childFare": 0.0,
            "operatorServiceChargeAbsolute": 0.0,
            "operatorServiceChargePercent": 0.0,
            "reservedForSocialDistancing": false
        }
    ],
    "serviceTaxApplicable": false,
    "etsServiceChargePer": 0.0
}

Response Parameters:

PARAMETER NAME

TYPE

DESCRIPTION

apiBusLayout

Object

Contains apiStatus,list of boardingPoints, list of seatInfo, serviceTaxApplicable, inventoryType

apiStatus

Object

Contains the status and message. It contains the following member variables message, isSuccess

Message

String

Contains the message, mostly used when the response fails.

success

Boolean

True if the response is success else false

inventoryType

Int

Inventory type

boardingPoints

Object

Contains id, location, time

droppingPoints

Object

Contains id, location, time

id

String

Boarding point id

location

String

Location of the boarding point

pointName

String

Name of the boarding or dropping point.

landmark

String

Landmark or location details of the boarding or dropping point.

address

String

Complete address of the boarding or dropping point.

time

String

Leaving time from boarding point

seatInfo

Object

Contains id, row, column, zIndex, length, width, fare, commission, available, ladiesSeat, malesSeat, bookedBy, ac, sleeper, totalFareWithTaxes, serviceTaxAmount, serviceTaxPer, childFare, operatorServiceChargeAbsolute, operatorServiceChargePercent, reservedForSocialDistancing

id

String

Seat Id/Name
The following values represent special positions in the bus layout. These positions should be displayed according to their respective position in the bus layout.
EME - Emergency Exit
WSR - Toilet / Rest Room
SEE - Side Emergency Exit
BEE - Back Emergency Exit
REE - Roof Emergency Exit

row

Int

Row number

column

Int

Column number

zIndex

Int

Index(0-lower,1-upper)

length

Int

Length of a seat, possible values are 1 or 2

width

Int

Width of a seat, possible values are 1 or 2

fare

BigDecimal

Ticket fare

commission

BigDecimal

Commission on this seat if applicable

available

Boolean

Is seat available or not(true/false)

ladiesSeat

Boolean

Is ladies seat or not(true/false) if available

malesSeat

Boolean

Is male seat or not(true/false) if available

bookedBy

String

Who book the ticket (Male/Female) if not available

ac

Boolean

Is ac seat or not(true/false)

sleeper

Boolean

Is sleeper seat or not(true/false)

totalFareWithTaxes

BigDecimal

Ticket fare with taxes and operator service charges

serviceTaxAmount

BigDecimal

GST Amount

serviceTaxPer

double

GST in percentages

childFare

BigDecimal

Child fare

operatorServiceChargeAbsolute

double

operator serviceChargeAmount

operatorServiceChargePercent

double

operator serviceChargeAmount in percentages

reservedForSocialDistancing

Boolean

Indicates whether the seat is reserved for social distancing.

serviceTaxApplicable

boolean

If the service tax is applicable, it is true; otherwise, it is false.

etsServiceChargePer

double

ETS service charge in percentage

Bus Layout Example

Seater/Semi Sleeper

zIndex=0, Length=1 and Width=1

Vertical Sleeper

zIndex=0/1, Length=1 and Width=2 with lower and upper berths

Horizontal Sleeper

zIndex=0, Length=2 and Width=1 with all lower berths

Horizontal Sleeper cum semi sleeper

zIndex=0/1, Length=1/2 and Width=1 with lower seats/berths and upper berths

6. BlockTicket

This API is used to block the ticket for a period of 10 minutes.

Request Method:HTTP POST

Request URL:http://localhost:8080/etsAPI/api/blockTicket

Required Passenger Ticket Details:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

APIBlockTicketRequest

Object

Yes

Elements of APIBlockTicketRequest array. It contains the following member variables.

sourceCity, destinationCity, customerEmail,customerName,customerLastName,DOJ, boardingPoint, routeScheduleId, customerPhone, emergencyPhNumber, CustomerAddress, inventoryType, blockSeatPaxDetails

sourceCity

String

Yes

Name of the source city

destinationCity

String

Yes

Name of the destination city

inventoryType

Int

Yes

InventoryType value

routeScheduleId

String

Yes

routeScheduleId value

customerName

String

Yes

Name of the person whobook the ticket

customerLastName

String

Yes

Last Name of the person who book the ticket

customerEmail

String

Yes

Email id of the person who book the ticket

DOJ

String

Yes

Date of Journey in the yyyy//mm/dd format

boardingPoint

Object

Yes

It consists of id, location, time

droppingPoint

Object

Yes

It consists of id, location, time

Id

String

Yes

Boarding point id

location

String

Yes

Boarding point location

Time

String

Yes

Boarding point dispatcher time

customerPhone

String

Yes

Mobile number of the person who book the ticket

emergencyPhNumber

String

Yes

Emergency mobile number

CustomerAddress

String

Yes

Address of the person who book the ticket

blockSeatPaxDetails

Object

Yes

List of BlockSeatPaxDetails member variables. It Consists of age, name, seatNbr, sex, fare, totalFareWithTaxes, ladiesSeat, lastName, mobile, title, email, idType, idNumber, nameOnId, primary, ac, sleeper.

Age

String

Yes

Passenger Age

name

String

Yes

Passenger Name

seatNbr

String

Yes

Passenger Seat Number

Sex

String

Yes

Sex(M/F)

Fare

BigDecimal

Yes

Seat Fare

serviceTaxAmount

BigDecimal

Yes

serviceTaxAmount in Seat Level

operatorServiceChargeAbsolute

double

Yes

operatorServiceChargeAbsolute in Seat Level

totalFareWithTaxes

BigDecimal

Yes

Seat Fare with service tax amount

ladiesSeat

Boolean

Yes

LadiesSeat(true/false)

lastName

String

Yes

Last name of the Passenger

mobile

String

Yes

Mobile number of the person who travel

Title

String

Yes

Mr/Ms/Mrs

email

String

Yes

Email id of the person who travel

idType

String

Yes

Id Card Type(pan,passport,.....)

idNumber

String

Yes

Id Card Number of given Card

nameOnId

String

Yes

Name on the Id Card

primary

Boolean

Yes

Is primary passenger (true/false)

Ac

Boolean

Yes

Is AC bus(true/false)

sleeper

Boolean

Yes

Is Sleeper(true/false)

The sample request format of the BlockTicket JSON is:

{
    "sourceCity": "Hyderabad",
    "destinationCity": "Bangalore",
    "doj": "2026-09-11",
    "routeScheduleId": "6310",
	"inventoryType": 0,
    "boardingPoint": {
            "id": "6",
            "location": "Ameerpet,|Jeans Corner",
            "time": "09:00PM"
        },
    "droppingPoint": {
            "id": "4",
            "location": "Anand Rao Circle,|Bangalore",
            "time": "10:40 PM"
        },
    "customerName": "test",
    "customerLastName": "testing",
    "customerEmail": "test@gmail.com",
    "customerPhone": "9999999999",
    "emergencyPhNumber": "8888888888",
    "customerAddress": "kphp",
    "blockSeatPaxDetails": [
       	{
           "age": "26",
           "name": "test123",
           "seatNbr": "R9",
           "sex": "M",
           "fare": 425,
           "serviceTaxAmount": 21.00,
           "operatorServiceChargeAbsolute": 30.00,
           "totalFareWithTaxes": 476.00,
           "ladiesSeat": false,
           "lastName": "test456",
           "mobile": "7777777777",
           "title": "Mr",
           "email": "testing@gmail.com",
           "idType": "PAN",
           "idNumber": "AWk123232",
           "nameOnId": "test",
           "primary": true,
           "ac": false,
           "sleeper": false
         }
       ],
}

Response Parameters:

MESSAGE

TYPE

DESCRIPTION

APIBlockTicketResponse

Object

Contains apiStatus, inventoryType, blockTicketKey, and updatedFareBreakup.

apiStatus

Object

Contains the response status, success indicator, and message.

message

String

Contains the response message. For example, "SUCCESS".

success

Boolean

Indicates whether the API request was successful. Returns true for a successful response and false otherwise.

inventoryType

Integer

Indicates the inventory type number.

blockTicketKey

String

Unique key generated for the blocked ticket.

updatedFareBreakup

Object

Contains the updated fare details, including the total fare, operator service charge, service tax, and seat-wise fare breakup. This applies to certain private bus operators, such as FlixBus, Intercity SmartBus, and other private operators, as well as RTC operators, such as UPSRTC, HRTC, and other RTC operators. If the fare is updated during the booking process, ensure that the updated fare amount is collected from the customer before proceeding with the booking. It can be null for some bus operators if there is no fare update.

previousTotalFareWithTaxes

BigDecimal

Previous total fare including applicable taxes before the fare update during the block ticket process.

updatedTotalFareWithTaxes

BigDecimal

Updated total fare including applicable taxes for all selected seats.

updatedTotalOperatorServiceCharge

BigDecimal

Updated total operator service charge including applicable taxes for all selected seats. This amount is calculated based on the sum of all applicable fare components, such as LEVIES_CHARGES, TOLL_FEE, SERVICE_FEE, RESERVATION_FEE, CONCESSIONS_FEE, etc., provided in the seat fare breakup, excluding BASIC_FARE, SERVICE_TAX, and TOTAL_FARE.

updatedTotalServiceTax

BigDecimal

Updated total service tax for all selected seats.

seatFareBreakUp

Object

Contains seat-wise fare breakup details. The seat number is used as the key and the value contains the list of fare component for that seat.

fareType

String

Specifies the fare type, such as BASIC_FARE, LEVIES_CHARGES, TOLL_FEE, SERVICE_FEE, RESERVATION_FEE, CONCESSIONS_FEE, SERVICE_TAX, or TOTAL_FARE. BASIC_FARE,SERVICE_TAX and TOTAL_FARE are applicable to all the bus operators and other fare types are applicable to some bus operators only.

cancellationType

String

Specifies how the fare typr is handled during cancellation, such as CANCELLATION_POLICY, FULLY_REFUNDED, or NOT_REFUNDED.

amount

BigDecimal

Amount associated with the corresponding fare type.

refundableAmount

BigDecimal

Amount that is eligible for refund for the corresponding fare type.

discountType

String

Specifies the discount type applied to the fare type, such as NON_DISCOUNT.

s

The sample response format of the BlockTicket JSON is:

{
	    "apiStatus": {
	        "message": "SUCCESS",
	        "success": true
	    },
	    "inventoryType": 1,
	    "blockTicketKey": "uKQbijjonm",
	    "updatedFareBreakup": {
	        "previousTotalFareWithTaxes": 675,
	        "updatedTotalFareWithTaxes": 718.20,
	        "updatedTotalOperatorServiceCharge": 41,
	        "updatedTotalServiceTax": 34.20,
	        "seatFareBreakUp": {
	            "39": [
	                {
	                    "fareType": "BASIC_FARE",
	                    "cancellationType": "CANCELLATION_POLICY",
	                    "amount": 643.00,
	                    "refundableAmount": 643.0,
	                    "discountType": "NON_DISCOUNT"
	                },
	                {
	                    "fareType": "LEVIES_CHARGES",
	                    "cancellationType": "CANCELLATION_POLICY",
	                    "amount": 7.00,
	                    "refundableAmount": 7.0,
	                    "discountType": "NON_DISCOUNT"
	                },
	                {
	                    "fareType": "TOLL_FEE",
	                    "cancellationType": "CANCELLATION_POLICY",
	                    "amount": 23.00,
	                    "refundableAmount": 23.0,
	                    "discountType": "NON_DISCOUNT"
	                },
	                {
	                    "fareType": "SERVICE_FEE",
	                    "cancellationType": "NOT_REFUNDED",
	                    "amount": 11.00,
	                    "refundableAmount": 0.0,
	                    "discountType": "NON_DISCOUNT"
	                },
	                {
	                    "fareType": "RESERVATION_FEE",
	                    "cancellationType": "NOT_REFUNDED",
	                    "amount": 0.00,
	                    "refundableAmount": 0.0,
	                    "discountType": "NON_DISCOUNT"
	                },
	                {
	                    "fareType": "CONCESSIONS_FEE",
	                    "cancellationType": "NOT_REFUNDED",
	                    "amount": 0.00,
	                    "refundableAmount": 0.0,
	                    "discountType": "NON_DISCOUNT"
	                },
	                {
	                    "fareType": "SERVICE_TAX",
	                    "cancellationType": "FULLY_REFUNDED",
	                    "amount": 34.20,
	                    "refundableAmount": 34.20,
	                    "discountType": "NON_DISCOUNT"
	                },
	                {
	                    "fareType": "TOTAL_FARE",
	                    "cancellationType": "CANCELLATION_POLICY",
	                    "amount": 718.20,
	                    "refundableAmount": 707.20,
	                    "discountType": "NON_DISCOUNT"
	                }
	            ]
	        }
	    }
	}
}

7. Seat Booking

This API is used to book the blocked ticket from BlockTicket API.

Request Method:HTTP GET

Request URL : http://localhost:8080/etsAPI/api/seatBooking?blockTicketKey=blockTicketKey

Request Parameters:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

blockTicketKey

String

Yes

We need to provideblockTicketKey

The sample response format of the seatBooking JSON is:

{
	"apiStatus": {
	     "message": "SUCCESS",
	     "success": true
	 },
	"inventoryType": 0,
    "opPNR": "ABRS947604",
	"commPCT": 7.2,
	"totalFare": 800.0,
    "cancellationPolicy": "[{\"cutoffTime\":\"0-10 minutes\",\"refundInPercentage\":\"100\"},
	 {\"cutoffTime\":\"0-24\",\"refundInPercentage\":\"5\"},{\"cutoffTime\":\"24-48\",\"refundInPercentage\":\"20\"},
	 {\"cutoffTime\":\"48-120\",\"refundInPercentage\":\"30\"},{\"cutoffTime\":\"120-720\",\"refundInPercentage\":\"70\"}]",
    "tripCode": "15437",
	"etstnumber": "ETS962B0PT82"
   
}

Response Parameters:

MESSAGE

TYPE

DESCRIPTION

APIBookSeatResp

Object

Contains apiStatus, inventoryType, etstnumber, opPNR, commPCT, totalFare, cancellationPolicy

APIStatus

Object

Contains the status and message

success

Boolean

True if the response is success else false

message

String

Contains the message, mostly used when the response fails.

inventoryType

Int

Inventory type number

opPNR

String

Operator PNR number

commPCT

Double

Commission

totalFare

Double

Total fare

cancellationPolicy

String

Cancellation Policy

tripCode

String

As of now Tripcode is used in GSRTC ticket booking to show in ticket template.

etstnumber

String

ETS Ticket Number

Note: 1. If you get sleeper seats which is having one row in Upper, Lower deck and zIndex=0/1, Length=2 and Width=1 then you have to show as zIndex=0/1, Length=1 and Width=2.

8. Get Booked Ticket

This method is used to get the booked ticket information by passing the ETS ticket number.

Request Method:HTTP GET

Request URL: http://localhost:8080/etsAPI/api/getTicketByETSTNumber?ETSTNumber=ETSTNumber

Request Parameters:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

ETSTNumber

String

Yes

ETS Ticket number generated after successful booking.

The sample response format of the seatBooking JSON is:

{
	  "apiStatus": {
	    "message": "SUCCESS",
	    "success": true
	  },
	  "ticketStatus": "CONFIRMED",
	  "inventoryType": "7",
	  "sourceCity": "Delhi",
	  "destinationCity": "Lucknow",
	  "journeyDate": "Sat,05-Sep-2026",
	  "departureTime": "13:00",
	  "routeScheduleId": "20260905",
	  "serviceProvider": "TO-FRO.AQI",
	  "service_type": "2+1 AC Sleeper 13.5 M Washroom",
	  "serviceId": "100",
	  "serviceProviderContact": "Akshardham Metro Station",
	  "boardingPoint": "Akshardham Metro Station",
	  "droppingPoint": "Alambagh - Alambagh Chauraha",
	  "travelerDetails": [
	    {
	      "title": null,
	      "firstName": null,
	      "middleName": null,
	      "lastName": "User",
	      "gender": "M",
	      "dob": null,
	      "passportNumber": null,
	      "passportIssuedCountry": null,
	      "passportExpDate": null,
	      "seatingPref": null,
	      "mealPref": null,
	      "specialService": null,
	      "bassinetRequired": false,
	      "name": "Test",
	      "seatNo": "LHSL2",
	      "age": 28,
	      "fare": 5000,
	      "freqFlyNumber": null
	    }
	  ],
	  "opPNR": "IC853659729",
	  "commPCT": 9,
	  "cancellationPolicy": "[{\"cutoffTime\":\"0-10 minutes\",\"refundInPercentage\":\"100\"},{\"cutoffTime\":\"0-24\",\"refundInPercentage\":\"5\"},
	  {\"cutoffTime\":\"24-48\",\"refundInPercentage\":\"20\"},{\"cutoffTime\":\"48-120\",\"refundInPercentage\":\"30\"},
	  {\"cutoffTime\":\"120-720\",\"refundInPercentage\":\"70\"}]",
	  "bookingDate": "2026-09-03T08:50:48.000+0000",
	  "cancelDate": null,
	  "refundAmount": 0,
	  "totalFareWithTaxes": 5250,
	  "serviceTaxAmount": 250,
	  "tdsCharge": 38.13,
	  "insuranceAmount": 0,
	  "totalDiscountAmount": 450,
	  "paidAmount": 4838.13,
	  "actualAmount": 5000,
	  "tripCode": null,
	  "etstnumber": "ETS44522"
}

Response Parameters:

MESSAGE

TYPE

DESCRIPTION

APIStatus

Object

Contains the message and isSuccess

message

String

Contains the message, mostly used when the response fails.

success

Boolean

True if the response is success else false

ticketStatus

String

Ticket Status CONFIRMED,CANCELLED,TRAVELLED,

SERVICE_CANCELLED

inventoryType

String

Inventory type value.

sourceCity

String

sourceCity Name

destinationCity

String

Destination city name

journeyDate

String

DOJ, yyyy-MM-dd

departureTime

String

Bus departure time (AM/PM format)

routeScheduleId

String

Route schedule Id

serviceProvider

String

Name of the Operator

service_type

String

Type of bus(Volvo, semi sleeper)

serviceId

String

Service id or operator route Id

serviceProviderContact

String

Service Provider contact address at boarding point.

boardingPoint

String

Boarding point Name.

droppingPoint

String

Droppoing point

travelerDetails

Object

Passenger details object. It contains Name, lastName, seatNo, Age, Gender and Fare.

title

String

title of passenger.

firstName

String

Frist Name of Passenger.

middleName

String

Middle Name of Passenger.

lastName

String

Last Name of Passenger.

gender

String

Passenger Gender (M/F)

dob

String

Date of birth of passenger.

passportNumber

String

Passport number of passenger.

passportIssuedCountry

String

Country where the passport was issued.

passportExpDate

String

Passport expiry date.

seatingPref

String

Passenger seating preference.

mealPref

String

Passenger meal preference.

specialService

String

Special service requested by the passenger.

bassinetRequired

Boolean

Indicates whether a bassinet is required for the passenger.

name

String

Name of passenger.

seatNo

String

Seat number

age

Long

Passenger Age

fare

double

Seat fare.

freqFlyNumber

String

Frequent flyer number of the passenger.

opPNR

String

Operator PNR

commPCT

Double

Commission Value

cancellationPolicy

String

Cancellation Policy. Contains cutoffTime and refundInPercentage

bookingDate

Date

Ticket booked date.

cancelDate

Date

Ticket cancelled date if ticket is cancelled

refundAmount

Double

Refund Amount if ticket is cancelled.

totalFareWithTaxes

Double

Total fare including taxes.

serviceTaxAmount

Double

Service tax amount.

tdsCharge

Double

TDS charge amount.

insuranceAmount

Double

Insurance amount.

totalDiscountAmount

Double

Total discount amount.

paidAmount

Double

Amount paid for the ticket.

actualAmount

Double

Actual ticket amount before discounts and applicable charges.

tripCode

String

As of now Tripcode is used in GSRTC ticket booking to show in ticket template.

ETSTNumber

String

ETS Ticket number

9. Cancel Ticket Confirmation

This API is used to confirm the ticket cancellation details before actually cancelling the ticket.

Request Method: HTTP POST

Request URL : http://localhost:8080/etsAPI/api/cancelTicketConfirmation

Request Parameters:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

APICancelRequest

Object

Yes

Consists of etsTicketNo, List of seatNbrsToCancel

etsTicketNo

String

Yes

We need to provide etsTicketNo

seatNbrsToCancel

List<String>

Yes

List seat numbers to cancel

The sample request format of the cancelTicketConfirmation JSON is:

{
	  "etsTicketNo": "ETS978B7LCT57",
	  "seatNbrsToCancel": [
	    "A",
		"B"
	  ]
}

Response Parameters:

MESSAGE

TYPE

DESCRIPTION

APICancelResp

Object

Contains apiStatus, cancellable, partiallyCancellable, totalTicketFare, totalRefundAmount, cancelChargesPercentage, cancellationCharges

APIStatus

Object

Contains the isSuccess and message

success

Boolean

True if the response is success else false

message

String

Contains the message, mostly used when the response fails.

cancellable

Boolean

Is cancellable(true/false)

partiallyCancellable

Boolean

Is partiallyCancellable

totalTicketFare

String

Total ticket fare

totalRefundAmount

String

Total refund amount

cancelChargesPercentage

String

Cancellation Charges Percentage

cancellationCharges

double

Cancellation Charges in rupees

serviceTaxOnCancellationCharge

Double

Service tax amount applicable on cancellation charges.

refundGSTAmount

Double

GST amount refunded on cancellation.

The sample response format of the cancelTicketConfirmation JSON is:

{
	    "apiStatus": {
	        "message": "SUCCESS",
	        "success": true
	    },
	    "cancellable": true,
	    "partiallyCancellable": false,
	    "totalTicketFare": "5000.0",
	    "totalRefundAmount": "262.0",
	    "cancelChargesPercentage": "95%",
	    "cancellationCharges": 4750.0,
	    "serviceTaxOnCancellationCharge": 238.0,
	    "refundGSTAmount": 0.0
}

10. Cancel Ticket

This API is used to cancel the ticket after confirmation from the cancelTicketConfirmation API.

Request Method: HTTP POST

Request URL : http://localhost:8080/etsAPI/api/cancelTicket

Request Parameters:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

APICancelRequest

Object

Yes

Consists of etsTicketNo, List of seatNbrsToCancel

etsTicketNo

String

Yes

We need to provide etsTicketNo

seatNbrsToCancel

List<String>

Yes

List seat numbers to cancel

The sample request format of the cancelTicket JSON is:

{
    "etsTicketNo": "ETS289B0PT77",
    "seatNbrsToCancel": [
            "L4",
            "L5"
        ]
}

Response Parameters:

MESSAGE

TYPE

DESCRIPTION

APICancelResp

Object

Contains apiStatus, cancellable, partiallyCancellable, totalTicketFare, totalRefundAmount, cancelChargesPercentage, cancellationCharges

APIStatus

Object

Contains the isSuccess and message

isSuccess

Boolean

True if the response is success else false

Message

String

Contains the message, mostly used when the response fails.

Cancellable

Boolean

Is cancellable(true/false)

partiallyCancellable

Boolean

Is partiallyCancellable

totalTicketFare

String

Total ticket fare

totalRefundAmount

String

Total refund amount

cancelChargesPercentage

String

Cancellation Charges Percentage

cancellationCharges

double

Cancellation Charges in rupees

serviceTaxOnCancellationCharge

Double

Service tax amount applicable on cancellation charges.

refundGSTAmount

Double

GST amount refunded on cancellation.

The sample response format of the cancelTicket JSON is:

{
	    "apiStatus": {
	        "message": "SUCCESS",
	        "success": true
	    },
	    "cancellable": true,
	    "partiallyCancellable": false,
	    "totalTicketFare": "5000.0",
	    "totalRefundAmount": "262.0",
	    "cancelChargesPercentage": "95%",
	    "cancellationCharges": 4750.0,
	    "serviceTaxOnCancellationCharge": 238.0,
	    "refundGSTAmount": 0.0
}

11. Cancelled Buses Information API

This API returns the list of cancelled bus services within the given date range.

Request Method: HTTP GET

Request URL:http://localhost:8080/etsAPI/api/cancelledBusesInfo?fromDate=2025-05-18&toDate=2025-05-31

Request Parameters:

PARAMETER NAME

TYPE

REQUIRED

DESCRIPTION

fromDate

String

Optional

Start date to fetch cancelled buses.

toDate

String

Optional

End date to fetch cancelled buses.

Response Parameters:

PARAMETER NAME

TYPE

DESCRIPTION

tripRefNumber

String

ETS Ticket Number.

pnr

String

Bus Operator PNR.

blockKey

String

Unique key for the trip.

journeyDate

String

Journey date in dd-MMM-yyyy format.

The sample response format of the cancelledBusesInfo JSON is:

[
    {
            "tripRefNumber": "ETS135B1PT295724",
            "pnr": "TS250518005239529555LHSV/GCR10302/CBE TO BLR NIGHT",
            "blockKey": "6AGPSYP4",
            "journeyDate": "18-May-2025"
        },
    {
            "tripRefNumber": "ETS319B1PT294886",
            "pnr": "TS250511102158682355ESOQ/88521/MDU_CHE_BYPASS_NEW",
            "blockKey": "6AH44ATM",
            "journeyDate": "18-May-2025"
        }
]

12. getLiveTracking API

This API is used to get the bus number, driver details and live tracking details (GPS) of a confirmed bus booking before 2 hours of the journey only. This is only applicable and supported by the operators who have the GPS access.

Request Method: HTTP GET

Request URL : http://localhost:8080/etsAPI/api/getLiveTracking?ticketNo=ETS275B1PT330000

Request Parameters:

PARAMETER NAME

TYPE

MANDATORY

DESCRIPTION

ticketNo

String

Yes

eTravelSmart ticket number.

The sample response format of the getLiveTracking JSON is:

{
    "success": true,
    "message": "success",
    "errorCode": null,
    "vehicleNumber": "TG01AB1234",
    "driverDetails": [
            {
              "name": "Ram",
              "mobile": "9000000000"
            }
        ],
    "trackingUrl": "http://s.yourbus.in/?2aBj"
}

Response Parameters:

PARAMETER NAME

TYPE

DESCRIPTION

success

Boolean

Indicates whether the API request was successful.

message

String

Response message.

errorCode

String

Error code returned when the API request is unsuccessful.

vehicleNumber

String

Vehicle number of the bus.

driverDetails

Array

Contains the driver details.

name

String

Name of the bus driver.

mobile

String

Mobile number of the bus driver.

trackingUrl

String

URL used to track the bus location.

13. MyPlan and Current Balance

This API is used to get the plan and balance information of an API partner.

Request Method: HTTP GET

Request URL:http://localhost:8080/etsAPI/api/getMyPlanAndBalance

The sample response format of the getMyPlanAndBalance JSON is:

{
	    "apiStatus": {
	        "message": "SUCCESS",
	        "success": true
	    },
	    "apiUserLogin": "abc",
	    "allowedIPs": "ALL",
	    "inventoryTypes": "-1",
	    "referredBy": null,
	    "rmName": "Balu",
	    "rmEmail": "abc@gmail.com",
	    "rmContactNumber": "9000000000",
	    "lowBalanceAmount": 1000,
	    "domainName": "abc",
	    "registrationDate": "2015-06-19T00:00:00.000+0000",
	    "renewalDate": "2016-06-19T00:00:00.000+0000",
	    "registrationAmount": 0.0,
	    "balanceAmount": 27.53,
	    "planName": "IH9",
	    "product": "BUS",
	    "planNature": "HYBRID",
	    "userType": "API_USER",
	    "planDescription": "Fhybrid 9",
	    "fixedCommission": 9.0,
	    "dynamicCommission": 90.0,
	    "serviceCharges": 0.0,
	    "paidRegistrationAmount": true,
	    "notificationEnabled": true
}

For more details, please contact customersupport@etravelsmart.com.

MESSAGE

TYPE

DESCRIPTION

APIMyPlanAndBalanceResponse

Object

Contains apiStatus, apiUserLogin, allowedIPs, inventoryTypes, referredBy, rmName, rmEmail, rmContactNumber, lowBalanceAmount, domainName, registrationDate, renewalDate, registrationAmount, balanceAmount, planName, product, planNature, userType, planDescription, fixedCommission, dynamicCommission, serviceCharges, paidRegistrationAmount, notificationEnabled

APIStatus

Object

Contains the message and isSuccess

isSuccess

Boolean

True if the response is success else false

message

String

Contains the message, mostly used when the response fails.

apiUserLogin

String

API UserName

allowedIPs

String

IP Addresses allowed to access ETS inventory.

inventoryTypes

String

Inventory type

referredBy

String

Who referred by

rmName

String

Relationship Manager Name

rmEmail

String

Relationship Manager Email

rmContactNumber

String

Relationship Manager ContactNumber

lowBalanceAmount

int

lowBalanceAmount used for email notification.

domainName

String

domainName

registrationDate

Timestamp

registrationDate

renewalDate

Timestamp

renewalDate

registrationAmount

Double

registrationAmount

balanceAmount

Double

balanceAmount

planName

String

planName

product

String

Product

planNature

String

planNature (Dynamic, Fixed and Hybrid)

userType

String

userType

planDescription

String

planDescription

fixedCommission

Double

fixedCommission

dynamicCommission

Double

dynamicCommission

serviceCharges

Double

serviceCharge amount if any

paidRegistrationAmount

Boolean

Indicates whether the registration amount has been paid.

notificationEnabled

Boolean

Indicates whether notifications are enabled.


14. Sample Code

Sample Code

Combined code (for Java and PHP):

Java Code PHP Code

SeatLayout


Sample JavaScript SeatLayout rendering code:

SeatLayoutCode - JS SeatLayoutCode - PHP


15. FAQs

  • 1. Is stationId used to get the bus operator data?

    No. Only the station name is used; you can leave stationId as it is for now.
    If there are any changes, we will communicate them by email in advance.

  • 2. Are there many junk/invalid station names or similar names?

    Yes. We aggregate operators across India from different API sources, so we may receive invalid station names or minor variations (Tirupathi/Tirupati, Amballoor/Amballur, etc.). We have identified these stations and removed or changed the names to provide you with the best and valid station names. Our team is continuously working to eliminate these types of station names. This is a daily automated and manual activity performed by our system and team to validate and provide the best stations to you.

  • 3. What data should be posted if no dropping points are available or the value is null?

    In some cases, operators may not provide the dropping point(s). In those cases, you can show the destination city as the dropping point on your website or app.In that case, while blocking the ticket, you need not send the dropping point in the API request.If you receive dropping points, you must send them in the API request.

  • 4. When do you get Tentative Failed Booking OR Oops, ticket blocking/booking failed ?

    There can be external dependencies, such as changes at the operator's end. In such cases, 'TENTATIVE BOOKING FAILED ERROR' may occur.
    a.Whenever the selected seat is a 'LADIES SEAT', but the passenger's title is 'Mr' or the gender is 'MALE', 'TENTATIVE BOOKING FAILED ERROR' occurs.
    b.Whenever the data accessed by partners is stale, 'TENTATIVE BOOKING FAILED ERROR' occurs.
    c.ID proof is mandatory in some cases , but idtype and idnumber is mandatory in all cases , so even if there is no value to be entered the fields must be entered in the JSON request. Make sure that the ID type must be written as PAN_CARD, VOTER_CARD, PASSPORT,DRIVING_LICENCE, RATION_CARD, AADHAR.
    Note:As we receive only one error message'TENTATIVE BOOKING FAILED ERROR' for all above errors(a,b,c) from the operator end for all of the above errors (a, b, and c), we cannot show the specific error message for each case.

  • 5. What value should be set for primary for all passengers in the blockSeat request?

    There should be one customer/passenger with primary set to true, and all other passengers should have primary set to false.

  • 6. What should be done if a bus service is cancelled and the customer informs you before eTravelSmart?

    If you receive any information about the service cancellation,
    please do not cancel the ticket. Send an email to the eTravelSmart customer support team customersupport@etravelsmart.com , so that we will check with bus operator and refund the full amount if confirmed.


TOP