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: AdultC: ChildS: SeniorO: 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
- Obtain your
Operatorcode andSecret Keyfrom the system administrator - Generate the
Signatureusing MD5 hash of (Operator Code + Depart Date + Secret Key) - Include required headers in all API requests
- Test endpoints using the provided demo URL
- Implement error handling for various response codes
- 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.