SMARTicket V5 (ST5) Operator API Specification

Version: 1.5.0

Last Modified: 21 Apr 2025

Status: Beta

Introduction

The ST5 Operator API provides a comprehensive interface for terminal management systems to interact with the ticketing platform. This API enables operators to manage seat availability, process bookings, handle cancellations, and manage ticket collections at terminals.

Base URL

Demo URL: https://test-api.smarticket.my/{tenant}/api/v1/tms/
Live URL: https://api.smarticket.my/{tenant}/api/v1/tms/

Communication Requirements

Item Description
Protocol HTTP
Message Format JSON
HTTP Header Value
Content-type application/json
Signature MD5(Operator Code + Depart Date + Secret Key)
Operator Operator Code

Authentication Signature Format:

MD5(Operator Code + Depart Date (DD/MM/YYYY) + Secret Key)

Example:
Input: 'BAYU08/05/2025D3MB4YU'
MD5 Hash: '9428aa99eae6cd4e753fd850f58ee241'

API Specification

POST /querySeat

Query Seat Availability

Get latest seating availability for a specific trip.

Request Parameters

Name Data Type Length Required Description
route_id string 20 Y Operator route id
trip_no string 20 Y Operator trip number
depart_date string 10 Y Date of departure (dd/mm/yyyy)
depart_from_code string 10 Y Origin location code
depart_to_code string 10 Y Destination location code

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message
depart_time string 6 Trip depart time (HHmmss)
price.adult string 10 Adult Selling Price
price.child string 10 Child Selling Price
price.senior string 10 Senior Selling Price
price.others string 10 Others Selling Price
price.insurance string 10 Insurance amount
seats.available string 1 Y - available, N - unavailable
seats.seat_no string 3 Seat number
seats.deck_no int 1 Deck number for seating
seats.deck_name string 30 Deck Name
seats.position_x int 2 Seat position horizontally
seats.position_y int 2 Seat position vertically

Sample Request

{
"route_id": "SHAHGM01",
"trip_no": "3F",
"depart_date": "08/05/2025",
"depart_from_code": "SHA",
"depart_to_code": "HGM"
}

Sample Response

{
"depart_time": "103500",
"price": {
    "adult": "37.30",
    "child": "37.30",
    "senior": "37.30",
    "others": "37.30",
    "insurance": "0.50"
},
"details": [
    {
        "available": "Y",
        "seat_no": "1A",
        "deck_no": 2,
        "deck_name": "Upper Deck",
        "position_x": 4,
        "position_y": 1
    },
    {
        "available": "N",
        "seat_no": "1B",
        "deck_no": 1,
        "deck_name": "Lower Deck",
        "position_x": 5,
        "position_y": 9
    }
],
"status": "200",
"message": "Success"
}

POST /seatBlock

Block Seats

Block seating before confirmation

Request Parameters

Name Data Type Length Required Description
route_id string 20 Y Operator route id
trip_no string 20 Y Operator trip number
depart_date string 10 Y Date of departure (dd/mm/yyyy)
depart_time string 6 N Trip depart time (HHmmss)
depart_from_code string 10 Y Origin location code
depart_to_code string 10 Y Destination location code
details.seat_no string 3 Y Selected seat
details.seat_type string 1 Y Seat type (A-Adult, C-Child, S-Senior, O-Others)
details.selling_price string 10 Y Selling price based on seat type
details.cust_name string 255 N Customer Name
details.contact_no string 50 N Customer Phone No
details.ic_no string 50 N Customer NRIC or password
details.email string 255 N Customer Email

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message
block_id string 50 Operator block id reference

Sample Request

{
"route_id": "SHAHGM01",
"trip_no": "3F",
"depart_date": "08/05/2025",
"depart_from_code": "SHA",
"depart_to_code": "HGM",
"details": [
    {
        "seat_no": "1A",
        "seat_type": "A",
        "selling_price": "38.00",
        "cust_name": "Ahmad",
        "contact_no": "01234456",
        "ic_no": "1245",
        "email": "[email protected]"
    },
    {
        "seat_no": "1B",
        "seat_type": "C",
        "selling_price": "28.00",
        "cust_name": "syafiq",
        "contact_no": "012342456",
        "ic_no": "1245",
        "email": "[email protected]"
    }
]
}

Sample Response

{
"block_id": "TSL25050000075",
"status": "200",
"message": "Success"
}

POST /seatConfirm

Confirm Seat Sales

Confirm seat sales.

Request Parameters

Name Data Type Length Required Description
route_id string 20 Y Operator route id
trip_no string 20 Y Operator trip number
depart_date string 10 Y Date of departure (dd/mm/yyyy)
depart_time string 6 N Trip depart time (HHmmss)
depart_from_code string 10 Y Origin location code
depart_to_code string 10 Y Destination location code
block_id string 50 N Operator block id reference
ref_no string 50 Y Terminal reference No
details.seat_no string 3 Y Selected seat
details.seat_type string 1 Y Seat type (A-Adult, C-Child, S-Senior, O-Others)
details.selling_price string 10 Y Selling price based on seat type
details.cust_name string 255 Y Customer Name
details.contact_no string 50 Y Customer Phone No
details.ic_no string 50 N Customer NRIC or password
details.email string 255 N Customer Email

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message
details.seat_no string 3 Selected seat
details.ticket_no string 50 Operator ticket no

Sample Request

{
"route_id": "SHAHGM01",
"trip_no": "3F",
"depart_date": "08/05/2025",
"depart_from_code": "SHA",
"depart_to_code": "HGM",
"block_id": "TSL25050000080",
"ref_no": "283941",
"details": [
    {
        "seat_no": "1A",
        "seat_type": "A",
        "selling_price": "38.00",
        "cust_name": "Ahmad",
        "contact_no": "01234456",
        "ic_no": "1245",
        "email": "[email protected]"
    },
    {
        "seat_no": "1B",
        "seat_type": "C",
        "selling_price": "28.00",
        "cust_name": "syafiq",
        "contact_no": "012342456",
        "ic_no": "1245",
        "email": "[email protected]"
    }
]
}

Sample Response

{
"details": [
    {
        "seat_no": "2A",
        "ticket_no": "BYU25050000039"
    },
    {
        "seat_no": "2B",
        "ticket_no": "BYU25050000040"
    }
],
"status": "200",
"message": "Success"
}

POST /seatCancel

Cancel Sales Seating

Cancel sales seating.

Request Parameters

Name Data Type Length Required Description
ticket_no string 20 Y Operator ticket no
depart_date string 10 Y Date of departure (dd/mm/yyyy)

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message

Sample Request

{
"ticket_no": "BYU25050000036",
"depart_date": "08/05/2025"
}

Sample Response

{
"status": "200",
"message": "Success"
}

POST /seatRefund

Refund Sales Seating

Refund sales seating.

Request Parameters

Name Data Type Length Required Description
ticket_no string 20 Y Operator ticket no
depart_date string 10 Y Date of departure (dd/mm/yyyy)

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message

Sample Request

{
"ticket_no": "BYU25050000036",
"depart_date": "08/05/2025"
}

Sample Response

{
"status": "200",
"message": "Success"
}

POST /transRelease

Release Transaction

To release seating after confirmed.

Request Parameters

Name Data Type Length Required Description
ref_no string 50 Y Terminal reference No
depart_date string 10 Y Date of departure (dd/mm/yyyy)

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message

Sample Request

{
"ref_no": "283941",
"depart_date": "08/05/2025"
}

Sample Response

{
"status": "200",
"message": "Success"
}

POST /queryTicket

Query Ticket Details

To get ticket details

Request Parameters

Name Data Type Length Required Description
ticket_no string 20 Y Operator ticket no
depart_date string 10 Y Date of departure (dd/mm/yyyy)

Response Parameters

Name Data Type Length Description
status string 3 Response code
message string 10 Response message
route_id string 20 Operator route id
trip_no string 20 Operator trip no
seat_no string 3 Seat no
depart_from_code string 5 Origin location code
depart_to_code string 5 Destination location code
cust_name string 255 Customer Name
contact_no string 50 Customer Phone No
depart_date string 10 Date of departure (dd/mm/yyyy)
selling_price string 10 Selling price based on seat type
seat_type string 1 Seat type (A-Adult, C-Child, S-Senior, O-Others)

Sample Request

{
"ticket_no": "BYU25050000031",
"depart_date": "08/05/2025"
}

Sample Response

{
"seat_no": "5A",
"depart_from_code": "SHA",
"depart_to_code": "HGM",
"trip_no": "3F",
"route_id": "_R190200000006",
"cust_name": "Mohammad Khairul Azmi Mat Esa",
"contact_no": "60145029129",
"depart_date": "08/05/2025",
"selling_price": "7.30",
"seat_type": "A",
"status": "200",
"message": "Success"
}

POST /collectTicket

Collect Ticket

To collect ticket.

Request Parameters

Name Data Type Length Required Description
ticket_no string 20 Y Operator ticket no
depart_date string 10 Y Date of departure (dd/mm/yyyy)

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message

Sample Request

{
"ticket_no": "BYU25050000031",
"depart_date": "08/05/2025"
}

Sample Response

{
"status": "200",
"message": "Success"
}

POST /cancelCollectTicket

Cancel Collected Ticket

To cancel the ticket collected.

Request Parameters

Name Data Type Length Required Description
ticket_no string 20 Y Operator ticket no
depart_date string 10 Y Date of departure (dd/mm/yyyy)

Response Parameters

Name Data Type Length Description
status string 0 Response code
message string 10 Response message

Sample Request

{
"ticket_no": "BYU25050000031",
"depart_date": "08/05/2025"
}

Sample Response

{
"status": "200",
"message": "Success"
}

Common Data Types

Seat Types

  • A: Adult
  • C: Child
  • S: Senior
  • O: Others

Response Format

All API responses follow a standard format:

{
"status": "200",        // "200" for success, error code for failures
"message": "Success", // Descriptive message
// Additional response data specific to each endpoint
}

Getting Started

  1. Obtain your Operator code and Secret Key from the system administrator
  2. Generate the Signature using MD5 hash of (Operator Code + Depart Date + Secret Key)
  3. Include required headers in all API requests
  4. Test endpoints using the provided demo URL
  5. Implement error handling for various response codes
  6. Follow the booking flow: Query → Block → Confirm

Revision History

Version Date Changes
1.0 22 Nov 2017 Initial Release
1.1 04 July 2018 QuerySeat - Add Pricing every type
1.2 01 July 2020 SeatConfirm - Add warrant
1.3 19 Mar 2024 Add namespace Terminal KLIA2
1.4 01 Aug 2024 CancelCollectedTicket - Add cancel collect ticket
1.5 21 Apr 2025 Convert to Json from Soap api

Support

For technical support and integration assistance, please contact our system support or refer to the detailed API documentation for each endpoint.

© Energetic Point Sdn. Bhd. All Rights Reserved.

This document contains confidential and proprietary information and should not be duplicated, used or disclosed without express written consent.