Getting Started
All API requests must be sent to the specified base host (BASE_HOST).
In the endpoint documentation, only relative URLs are provided; these should be appended to the base host when making requests.
INFO
For example, /json/shopping refers to BASE_HOST + /json/shopping.
All API requests require a SIGN field to verify the identity of the requester. The signature is generated using the PARTNER_ID and PARTNER_KEY fields. To calculate the signature, concatenate these two values and compute the MD5 hash of the resulting string.
Authentication Parameters Requirements
The PARTNER_ID and PARTNER_KEY are generated on the Partner’s side according to the rules described below. After being generated, these keys are provided to the TTN side to form requests.
PARTNER_ID Format
- Length: Between 8 and 64 characters.
- Allowed characters: Only alphanumeric characters from the English alphabet (
a-z,A-Z,0-9), as well as hyphens (-) and underscores (_). Spaces are strictly prohibited. - Example: - kL9-2PqX_7
PARTNER_KEY Format
- Length: Minimum 32 and maximum 128 characters.
- Complexity: The string must be cryptographically random and include at least one of each:
- Uppercase English letter (
A-Z) - Lowercase English letter (
a-z) - Number (
0-9) - Special character (e.g.,
!@#$%^&*()_+={}[]|:;<>,.?/~)
- Uppercase English letter (
- Example: - kR4*jT0_YbA7#xP9@qL2$wM5%vA1^zN8 сссс
TIP
Recommendation: Use reliable random string generators or cryptographic utilities (e.g., openssl rand -base64 32) to create the PARTNER_KEY value. Never expose this key in client-side code.
Example
Below is an example of generating the SIGN field using JavaScript:
const SIGN = md5(PARTNER_ID + PARTNER_KEY);Concatenation = kL9-2PqX_7kR4*jT0_YbA7#xP9@qL2$wM5%vC1^zN8;
SIGN = f2300a43a4f802c63b06bcfb4f96e159;The generated SIGN value must be included in the authentication object of every request body.
Request body example:
{
"authentication": {
"partnerId": "{{PARTNER_ID}}",
"sign": "{{SIGN}}"
},
"...": "..."
}
}Workflow
Below is the workflow diagram illustrating the booking process between the TTN and Partner sides.

Order Status Explanation
| Enum | Description | Final state |
|---|---|---|
| ISS_PRC | Ticket is issuing | No |
| CHG_PRC | Change order is proceeding | No |
| REFD_PRC | Refund order is proceeding | No |
| VOID_PRC | Ticket is voiding | No |
| TO_BE_PAID | To be Paid | No |
| ISSUED | Ticket issued | Yes ⚠️ |
| TO_BE_RSV | To be reserved | No |
| UNDER_REVIEW | Under review | No |
| HOLD | Order is holding manually, please contact customer service for further action | No |
| RSV_FAIL | Reservation failed | Yes ⚠️ |
| CLOSED | Order closed | No |
| CNCL | Order Cancelled | Yes ⚠️ |
| CNCL_TO_BE_REIM | Order Cancelled, and reimbursement is under processing | No |
| CNCL_REIMED | Order Cancelled, and payment has been reimbursed | Yes ⚠️ |
| CHG_RQ | Change Order is requested | No |
| CHG_TO_BE_PAID | Change Order is to be paid | No |
| CHG_REJ | Change Order is rejected | Yes ⚠️ |
| CHGD | Change Order is changed | Yes ⚠️ |
| REFD_REJ | Refund Order is rejected | Yes ⚠️ |
| REFD_TO_BE_REIM | Refunded to be reimbursed | No |
| REFD_REIMED | Refunded and reimbursed | Yes ⚠️ |
| VOID_REJ | Void request is rejected | Yes ⚠️ |
| VOID_TO_BE_REIM | Void to be reimbursed | No |
| VOID_REIMED | Void and reimbursed | Yes ⚠️ |
| VOID | Voided | No |
Scenarios :
- Issued success: TO_BE_PAID > ISS_PRC > ISSUED
- PNR cancelling: TO_BE_PAID > CNCL
- Issued Failed: TO_BE_PAID > ISS_PRC > CNCL_TO_BE_REIM > CNCL_REIMED
- Refund Rejected: UNDER_REVIEW > REFD_REJ
- Refund Success: UNDER_REVIEW > REFD_PRC > REFD_TO_BE_REIM > REFD_REIMED
- Change Rejected: CHG_RQ > UNDER_REVIEW > CHG_REJ
- Change Success: CHG_RQ > UNDER_REVIEW > CHG_TO_BE_PAID > CHG_PRC > CHGD
Price Breakdown Explanation
Individual Adult Price = Adult Ticket Fare [adtFare] + Adult Ticket Tax [adtTax] + Ticketing Fee [tktFee]
Individual Child Price = Child Ticket Fare [chdFare] + Child Ticket Tax [chdTax] + Ticketing Fee [tktFee]
Individual Infant Price = Infant Ticket Fare [infFare] + Infant Ticket Tax [infTax] + Ticketing Fee [tktFee]
Total Price = Individual Adult Price * adult passenger number [adults] + Individual Child Price * child passenger number [children] + Individual Infant Price * Infant passenger number [infant]