Tourmind Flight Distribution API (1.0)
Download Swagger specification: Download
This is a development document for the Tourmind Flight Distribution API.
Overview
- This is the specification for the Tourmind Flight Distribution API.
- All communications from agents to the Tourmind Flight Distribution API are published via HTTP.
- The format of request payloads is based on JSON.
- All requests include common request headers, including authentication information.
Update Log
| Version | Date | Description |
|---|---|---|
| v1.0.1 | 2025.01.07 | Interface documentation v1 |
| v1.0.2 | 2025.02.21 | Add signature case |
| v1.0.3 | 2025.04.09 | Add JavaScript signature example, adjust signature algorithm |
| v1.0.4 | 2025.04.16 | Add invoice type; Correct price field to decimal string type |
| v1.0.5 | 2025.07.15 | Adjust signature algorithm; Correct return data structure for booking and payment interfaces |
| v1.0.6 | 2025.08.14 | Add pre-sale ancillary interface;Add schedule change push interface |
| v1.0.7 | 2025.09.25 | Add error code documentation |
| v1.0.8 | 2026.06.08 | Add infant type parameters and descriptions |
Error Codes
Search Error Codes (101xx)
| code | message | Error description |
|---|---|---|
| 10101 | look2book error | Price deviation exceeds |
| 10102 | currency not same | Currency mismatch |
| 10103 | parse supplier resp | Failed to parse supplier response |
| 10104 | search time invalid | Invalid search time |
| 10105 | iata code invalid | Invalid IATA code |
| 10106 | there should be at least one adult | At least one adult is required |
| 10107 | the number of infant passengers can not exceed the number of adult passengers | The number of infants cannot exceed the number of adults |
| 10108 | the maximum number of passengers with seat is 9 | Maximum number of passengers with seats is 9 |
| 10109 | can not find the related data | Related data not found |
| 10110 | shopping failed from upstream | Upstream shopping failed |
Verification Error Codes (201xx)
| code | message | Error description |
|---|---|---|
| 20101 | verify error | Verification failed |
| 20102 | verify price change | Price change |
| 20103 | verify no seat | No seat |
| 20104 | verify no solution | No corresponding quote |
| 20105 | verify permission denied | Verification permission denied |
| 20106 | flight near take-off | Flight is near take-off |
| 20107 | can not find any price for this flight | No price found for this flight |
| 20108 | can not find any supplier for current search | No supplier found for current search |
Booking Error Codes (301xx)
| code | message | Error description |
|---|---|---|
| 30101 | booking error | Booking failed |
| 30102 | booking price change | Price change |
| 30103 | booking params error | Parameter error |
| 30104 | booking no seat | No seat |
| 30105 | booking passenger info error | Passenger information exception |
| 30106 | too late booking | Verify price to booking timeout |
| 30107 | session id expired | Session ID expired |
| 30108 | solution not found | Quote solution not found |
| 30109 | ancillary not found | Ancillary not found |
| 30110 | permission denied | Booking permission denied |
| 30111 | need card info | Document information required |
| 30113 | duplicate reservation | Duplicate reservation |
| 30114 | flight re-schedule | Flight may be rescheduled |
| 30115 | airline pnr missing | Airline PNR missing |
| 30116 | create failed from gds | GDS order creation failed |
| 30117 | retrieve pnr failed | GDS PNR retrieval failed |
| 30118 | save price failed from gds | GDS price save failed |
| 30119 | airline or flight restriction | Airline or flight restriction |
| 30120 | last ticketing time not enough | Last ticketing time is not enough |
| 30121 | segment status invalid | Segment status invalid |
| 30122 | saved booking failed | Save booking failed |
| 30123 | infant type error | Infant passenger type error |
| 30124 | associatedIndex required for infant | Associated passenger index is required for infant |
| 30125 | passenger name too long | Passenger name too long |
| 30126 | adult age error | Adult age error |
| 30127 | verify data expired | Verification data expired |
| 30128 | flight invalid, please select other flight options | Flight invalid, please select other flight options |
| 30129 | fare unavailable, please select other flight options | Fare unavailable, please select other flight options |
| 30130 | children age error | Child age error |
| 30131 | passenger name illegal | Passenger name illegal |
| 30132 | passenger doc required | Passenger document information required |
| 30133 | passenger age limitation | Passenger age limitation |
| 30134 | lack of passenger index | Passenger index missing |
| 30135 | duplicate baggages | Duplicate baggage |
| 30136 | multiple seat selection | Duplicate seat selection |
Pre-payment Validation Error Codes (401xx)
| code | message | Error description |
|---|---|---|
| 40101 | pay valid error | Pre-payment validation failed |
| 40102 | pay valid timeout | Payment timeout |
| 40103 | pay valid order status error | Order status error |
| 40104 | no airline pnr exist | Airline PNR does not exist |
| 40105 | pnr status invalid | PNR status invalid |
| 40106 | price changed | Price changed |
| 40107 | latest ticketing time expired | Latest ticketing time expired |
| 40108 | flight changed | Flight changed |
| 40109 | order not found | Order not found |
| 40110 | supplier status is invalid | Supplier status invalid |
| 40111 | flight status invalid | Flight status invalid |
| 40112 | fare is not guaranteed | Fare is not guaranteed |
| 40113 | no price | No price |
| 40114 | order pricing failed, please try again | Order pricing failed, please try again |
| 40115 | no seat | No seat |
Payment Error Codes (501xx)
| code | message | Error description |
|---|---|---|
| 50101 | pay error | Payment failed |
| 50102 | pay order cancel | Order cancelled |
| 50103 | pay duplicate | Duplicate payment |
| 50104 | pay balance not enough | Insufficient balance |
| 50105 | pay deadline expired | Payment deadline expired |
| 50106 | pay deadline expired | Order number does not exist |
| 50107 | pay order status invalid | Payment order status invalid |
Ancillary Error Codes (601xx)
| code | message | Error description |
|---|---|---|
| 60101 | ancillary not support | Ancillary not supported |
| 60102 | ancillary search failed | Ancillary search failed |
| 60103 | ssr count seg count not same | Ancillary result count does not match segment count |
Query Error Codes (701xx)
| code | message | Error description |
|---|---|---|
| 70101 | query error | Search failed |
Change Error Codes (801xx)
| code | message | Error description |
|---|---|---|
| 80101 | change not support | Change not supported |
| 80102 | change exists change | Change request already in progress |
| 80103 | miss required data | Required data missing |
| 80104 | amount error | Amount error |
Refund Error Codes (901xx)
| code | message | Error description |
|---|---|---|
| 90101 | refund not support | Refund not supported |
| 90102 | refund exists refund | Refund request already in progress |
| 90103 | miss required data | Required data missing |
Void Error Codes (1001xx)
| code | message | Error description |
|---|---|---|
| 100101 | void not support | Void not supported |
| 100102 | void exists void | Void request already in progress |
| 100103 | miss required data | Required data missing |
Error Code Category Description
- 101xx: Search related errors
- 201xx: Verification related errors
- 301xx: Booking related errors
- 401xx: Pre-payment validation related errors
- 501xx: Payment related errors
- 601xx: Ancillary related errors
- 701xx: Search related errors
- 801xx: Change related errors
- 901xx: Refund related errors
- 1001xx: Void related errors
API Call Flow
Description:

Interface call flow:

Signature
Code examples for generating API request signatures。secretKey will be provided by Tourmind。
To ensure the security of API requests, all requests must include a signature in the request header: X-Key is appKey (optional), X-Timestamp is the timestamp, X-Signature is the signature.
The signature algorithm is as follows:
- Define a string with the format:body×tamp
- Use secretKey as the key to perform HMAC-SHA256 encryption on the string.
- HMAC-SHA256 encrypted result to a hexadecimal string.
- Perform Base64 encoding on the hexadecimal string.
Here is the signature generation example:
secretKey: 3bdba1ec69824e1f
body: `{
"key":"g6xTdXBwbGllckNvZGWjRElEqVNlYXJjaEtledmXU2VhcmNoOmg2aFVjbWx3Vkhsd1pRR3FSbXhwWjJoMFZIbHdaUUNxUTJGaWFXNURiR0Z6YzZDbVFXUjFiSFJ6QWFoRGFHbHNaSEpsYmdDblNXNW1ZVzUwY3dDa1RHVm5jNUdEbzBSbGNLTkRSMHVuUkdWd1JHRjBaYW95TURJMUxUQTBMVEl5bzBGeWNxTlRVa2M9OkRJRKpTZWdtZW50S2V52SA4YzMxZjRhMWY1YjFjZGY0YTZiY2ViNWY1ZWIxOGYyOQ==",
"adults":1
}`
timestamp: 1682068743
sign: ZDM2NGJjMWQ2ODQ1MTk3MDcxYTEyOWU2YTg3ODdmZTM2NjVhNzdiOWIyNTlkOGNhZmVjMDg2MGEyOGM2Y2VlNg==Here are example codes in PHP, Java and Go:
<?php
function getSign(string $secretKey, string $requestBody, string $timestamp): string {
$str2Sign = $requestBody . "&" . $timestamp;
$hmacSha256 = hash_hmac('sha256', $str2Sign, $secretKey, true);
$hexString = bin2hex($hmacSha256);
return base64_encode($hexString);
}
// Example usage
$secretKey = "your_secret_key";
$requestBody = "your_request_body";
$timestamp = time();
$signature = getSign($secretKey, $requestBody, $timestamp);
echo "Signature: " . $signature . PHP_EOL;
?>import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class SignatureGenerator {
public static String getSign(String secretKey, String requestBody, String timestamp)
throws NoSuchAlgorithmException, InvalidKeyException {
String str2Sign = requestBody + "&" + timestamp;
SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(secretKeySpec);
byte[] hmacSha256Bytes = mac.doFinal(str2Sign.getBytes(StandardCharsets.UTF_8));
String hexString = bytesToHex(hmacSha256Bytes);
return Base64.getEncoder().encodeToString(hexString.getBytes(StandardCharsets.UTF_8));
}
private static String bytesToHex(byte[] bytes) {
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(String.format("%02x", b));
}
return sb.toString();
}
public static void main(String[] args) throws Exception {
String secretKey = "your_secret_key";
String requestBody = "your_request_body";
String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
String signature = getSign(secretKey, requestBody, timestamp);
System.out.println("Signature: " + signature);
}
}package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"fmt"
"strconv"
"time"
)
func getSign(secretKey, requestBody string, timestamp string) string {
str2Sign := fmt.Sprintf("%s&%s", requestBody, timestamp)
hmacSha256 := hmac.New(sha256.New, []byte(secretKey))
hmacSha256.Write([]byte(str2Sign))
hashBytes := hmacSha256.Sum(nil)
hexString := hex.EncodeToString(hashBytes)
return base64.StdEncoding.EncodeToString([]byte(hexString))
}
func main() {
secretKey := "your_secret_key"
requestBody := "your_request_body"
timestamp := fmt.Sprintf("%d", time.Now().Unix())
signature := getSign(secretKey, requestBody, timestamp)
fmt.Println("Signature:", signature)
}const CryptoJS = require('crypto-js');
function getSign(secretKey, requestBody, timestamp) {
const str2Sign = `${requestBody}&${timestamp}`;
const hmacSha256 = CryptoJS.HmacSHA256(str2Sign, secretKey);
const hexString = hmacSha256.toString(CryptoJS.enc.Hex);
return CryptoJS.enc.Base64.stringify(
CryptoJS.enc.Utf8.parse(hexString)
);
}
const secretKey = pm.environment.get('secretKey');
const requestBody = pm.request.body.raw;
const timestamp = Math.floor(Date.now() / 1000);
const signature = getSign(secretKey, requestBody, timestamp);
pm.request.headers.add({
key: 'X-Signature',
value: signature
});
pm.request.headers.add({
key: 'X-Key',
value: pm.environment.get('appKey')
});
pm.request.headers.add({
key: 'X-Timestamp',
value: timestamp.toString()
});
console.log("secretKey:", secretKey)
console.log("body:", requestBody)
console.log("timestamp:", timestamp)
console.log("sign:", signature)Price
Search
Search for flight combinations based on conditions, return quotation list if successful
API Call Schema
| Name | Value |
|---|---|
| Request URL | https://test.hlzinterface.cn/api/standard/search |
| Request method | POST |
{
"adults": 1,
"cabinClass": "Y",
"children": 0,
"flightType": 0,
"infants": 0,
"legs": [
{
"arr": "HKG",
"dep": "BJS",
"depDate": "2025-04-02"
}
],
"tripType": 1
}{
"code": 0,
"data": {
"solutions": [
{
"adtFare": "1000.00",
"adtTax": "50.00",
"adults": 1,
"baggageRules": [
{
"baggageType": 1,
"passengerType": 1,
"piece": 2,
"segmentIndex": 1,
"weight": 23
}
],
"changeRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"chdFare": "800.00",
"chdTax": "50.00",
"children": 0,
"convenienceFee": "0.00",
"currency": "CNY",
"identify": "hKxTdXBwbGllckNvZGWkRlIyNKlTZWFyY2hLZXnZmFNlYXJjaDpoNmhVY21sd1ZIbHdaUUdxUm14cFoyaDBWSGx3WlFDcVEyRmlhVzVEYkdGemM2Rlpwa0ZrZFd4MGN3bW9RMmhwYkdSeVpXNEFwMGx1Wm1GdWRITUFwRXhsWjNPUmc2TkVaWENqU0V0SHAwUmxjRVJoZEdXcU1qQXlOUzB3TVMweU5hTkJjbktqUWtwVDpGUjI0qlNlZ21lbnRLZXnZIGVhYjdiYjRiMDRhNTJlMjIwYzk3ZTdjOWU1ZjI2MDM3qVRvdGFsRmFycQI/////gIW9iA=",
"journeys": [
{
"arrAirport": "PVG",
"arrCity": "SHA",
"depAirport": "PEK",
"depCity": "BJS",
"duration": 120,
"index": 1,
"segmentIndexs": [],
"transferCount": 0
}
],
"merchantFee": "0.00",
"platformServiceFee": "0.00",
"pnr": "EJB6GT",
"qCharge": "100.00",
"refundRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"segments": [
{
"airline": "CA",
"arrAirport": "PVG",
"arrCity": "SHA",
"arrTime": "2025-01-01 14:00",
"cabinClass": "Y",
"cabinCode": "Y",
"cabinCount": 9,
"codeShare": 0,
"depAirport": "PEK",
"depCity": "BJS",
"depTime": "2025-01-01 12:00",
"duration": 120,
"flightNo": "123",
"group": 0,
"index": 1,
"stopovers": [
{
"airport": "CAN",
"arrTime": "2025-01-01 13:00",
"city": "CAN",
"depTime": "2025-01-01 14:00",
"duration": 60
}
]
}
],
"ticketCarrier": "CA",
"tktFee": "0.00",
"totalFare": "1050.00",
"tripType": 1
}
]
},
"message": "success"
}Verify
Verify the flight quotation. If successful, return the quotation content and SessionId for booking
API Call Schema
| Name | Value |
|---|---|
| Request URL | https://test.hlzinterface.cn/api/standard/verify |
| Request method | POST |
{
"adults": 1,
"children": 0,
"infants": 0,
"key": "hKxTdXBwbGllckNvZGWkRlIyNKlTZWFyY2hLZXnZmFNlYXJjaDpoNmhVY21sd1ZIbHdaUUdxUm14cFoyaDBWSGx3WlFDcVEyRmlhVzVEYkdGemM2Rlpwa0ZrZFd4MGN3bW9RMmhwYkdSeVpXNEFwMGx1Wm1GdWRITUFwRXhsWjNPUmc2TkVaWENqU0V0SHAwUmxjRVJoZEdXcU1qQXlOUzB3TVMweU5hTkJjbktqUWtwVDpGUjI0qlNlZ21lbnRLZXnZIGVhYjdiYjRiMDRhNTJlMjIwYzk3ZTdjOWU1ZjI2MDM3qVRvdGFsRmFycQI/////gIW9iA="
}{
"code": 0,
"data": {
"sessionId": "0E553602C2EC4FC1851D0D2B01C15276",
"solution": {
"adtFare": "1000.00",
"adtTax": "50.00",
"adults": 1,
"baggageRules": [
{
"baggageType": 1,
"passengerType": 1,
"piece": 2,
"segmentIndex": 1,
"weight": 23
}
],
"changeRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"chdFare": "800.00",
"chdTax": "50.00",
"children": 0,
"convenienceFee": "0.00",
"currency": "CNY",
"identify": "hKxTdXBwbGllckNvZGWkRlIyNKlTZWFyY2hLZXnZmFNlYXJjaDpoNmhVY21sd1ZIbHdaUUdxUm14cFoyaDBWSGx3WlFDcVEyRmlhVzVEYkdGemM2Rlpwa0ZrZFd4MGN3bW9RMmhwYkdSeVpXNEFwMGx1Wm1GdWRITUFwRXhsWjNPUmc2TkVaWENqU0V0SHAwUmxjRVJoZEdXcU1qQXlOUzB3TVMweU5hTkJjbktqUWtwVDpGUjI0qlNlZ21lbnRLZXnZIGVhYjdiYjRiMDRhNTJlMjIwYzk3ZTdjOWU1ZjI2MDM3qVRvdGFsRmFycQI/////gIW9iA=",
"journeys": [
{
"arrAirport": "PVG",
"arrCity": "SHA",
"depAirport": "PEK",
"depCity": "BJS",
"duration": 120,
"index": 1,
"segmentIndexs": [],
"transferCount": 0
}
],
"merchantFee": "0.00",
"platformServiceFee": "0.00",
"pnr": "EJB6GT",
"qCharge": "100.00",
"refundRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"segments": [
{
"airline": "CA",
"arrAirport": "PVG",
"arrCity": "SHA",
"arrTime": "2025-01-01 14:00",
"cabinClass": "Y",
"cabinCode": "Y",
"cabinCount": 9,
"codeShare": 0,
"depAirport": "PEK",
"depCity": "BJS",
"depTime": "2025-01-01 12:00",
"duration": 120,
"flightNo": "123",
"group": 0,
"index": 1,
"stopovers": [
{
"airport": "CAN",
"arrTime": "2025-01-01 13:00",
"city": "CAN",
"depTime": "2025-01-01 14:00",
"duration": 60
}
]
}
],
"ticketCarrier": "CA",
"tktFee": "0.00",
"totalFare": "1050.00",
"tripType": 1
}
},
"message": "success"
}Pre-sale ancillary
Available ancillary products for flight quotes
API Call Schema
| Name | Value |
|---|---|
| Request URL | https://test.hlzinterface.cn/api/standard/ssr |
| Request method | POST |
{
"sessionId": "0E553602C2EC4FC1851D0D2B01C15276"
}{
"code": 0,
"data": {
"ancillaries": [
{
"flightNumber": "CA1234",
"isDirect": true,
"items": [
{
"code": "7e122baf-3af3-4510-98bd-8713dac383ec",
"currency": "USD",
"desc": "",
"name": "Checked baggage",
"piece": 1,
"price": 87.02,
"serviceFee": 0,
"size": "",
"unit": "KG",
"weight": 23
}
],
"segmentIndex": 1
}
]
},
"message": "success"
}Booking & Pay
Booking
Book flights based on the quotation. If successful, return the generated Tourmind order information
API Call Schema
| Name | Value |
|---|---|
| Request URL | https://test.hlzinterface.cn/api/standard/booking |
| Request method | POST |
{
"agentOrderNo": "5J2501021544NL",
"ancillaryItems": [
{
"code": "7e122baf-3af3-4510-98bd-8713dac383ec",
"count": 1,
"currency": "USD",
"desc": "Checked baggage",
"flightNo": "CA1234",
"name": "Checked baggage",
"passengerIndex": 1,
"piece": 1,
"price": 87.02,
"unit": "KG",
"weight": 23
}
],
"contact": {
"address": "北京市朝阳区",
"areaCode": "86",
"email": "test@example.com",
"name": "张三",
"phone": "13800138000"
},
"passengers": [
{
"associatedIndex": 0,
"birthday": "1990-01-01",
"cardExpired": "2030-01-01",
"cardIssuePlace": "CN",
"cardNo": "E12345678",
"cardType": "PP",
"email": "test@example.com",
"firstName": "JOHN",
"index": 1,
"lastName": "DOE",
"nationality": "CN",
"phone": "13800138000",
"sex": 1,
"type": 1
}
],
"sessionId": "0E553602C2EC4FC1851D0D2B01C15276"
}{
"code": 0,
"data": {
"order": {
"adults": 1,
"amount": "1000.00",
"ancillaryItems": [
{}
],
"children": 0,
"contact": {
"address": "北京市朝阳区",
"areaCode": "86",
"email": "test@example.com",
"name": "张三",
"phone": "13800138000"
},
"currency": "CNY",
"orderNo": "1876513316759830528",
"passengers": [
{
"associatedIndex": 0,
"birthday": "1990-01-01",
"cardExpired": "2030-01-01",
"cardIssuePlace": "CN",
"cardNo": "E12345678",
"cardType": "PP",
"email": "test@example.com",
"firstName": "JOHN",
"index": 1,
"lastName": "DOE",
"nationality": "CN",
"phone": "13800138000",
"sex": 1,
"type": 1
}
],
"paytime": "2023-01-01 12:00:00",
"status": 1,
"ticketingTime": "2023-01-01 12:00:00",
"tickets": [
{
"airlinePnr": "DEF456",
"firstName": "John",
"group": 1,
"lastName": "Doe",
"passengerIndex": 1,
"pnrCode": "KC4862",
"segmentIndex": 1,
"ticketNo": "EJB6GT"
}
]
},
"orderNo": "1876513316759830528",
"solution": {
"adtFare": "1000.00",
"adtTax": "50.00",
"adults": 1,
"baggageRules": [
{
"baggageType": 1,
"passengerType": 1,
"piece": 2,
"segmentIndex": 1,
"weight": 23
}
],
"changeRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"chdFare": "800.00",
"chdTax": "50.00",
"children": 0,
"convenienceFee": "0.00",
"currency": "CNY",
"identify": "hKxTdXBwbGllckNvZGWkRlIyNKlTZWFyY2hLZXnZmFNlYXJjaDpoNmhVY21sd1ZIbHdaUUdxUm14cFoyaDBWSGx3WlFDcVEyRmlhVzVEYkdGemM2Rlpwa0ZrZFd4MGN3bW9RMmhwYkdSeVpXNEFwMGx1Wm1GdWRITUFwRXhsWjNPUmc2TkVaWENqU0V0SHAwUmxjRVJoZEdXcU1qQXlOUzB3TVMweU5hTkJjbktqUWtwVDpGUjI0qlNlZ21lbnRLZXnZIGVhYjdiYjRiMDRhNTJlMjIwYzk3ZTdjOWU1ZjI2MDM3qVRvdGFsRmFycQI/////gIW9iA=",
"journeys": [
{
"arrAirport": "PVG",
"arrCity": "SHA",
"depAirport": "PEK",
"depCity": "BJS",
"duration": 120,
"index": 1,
"segmentIndexs": [],
"transferCount": 0
}
],
"merchantFee": "0.00",
"platformServiceFee": "0.00",
"pnr": "EJB6GT",
"qCharge": "100.00",
"refundRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"segments": [
{
"airline": "CA",
"arrAirport": "PVG",
"arrCity": "SHA",
"arrTime": "2025-01-01 14:00",
"cabinClass": "Y",
"cabinCode": "Y",
"cabinCount": 9,
"codeShare": 0,
"depAirport": "PEK",
"depCity": "BJS",
"depTime": "2025-01-01 12:00",
"duration": 120,
"flightNo": "123",
"group": 0,
"index": 1,
"stopovers": [
{
"airport": "CAN",
"arrTime": "2025-01-01 13:00",
"city": "CAN",
"depTime": "2025-01-01 14:00",
"duration": 60
}
]
}
],
"ticketCarrier": "CA",
"tktFee": "0.00",
"totalFare": "1050.00",
"tripType": 1
}
},
"message": "success"
}Pre-payment verification
Verify if the order is in a payable state before payment
API Call Schema
| Name | Value |
|---|---|
| Request URL | https://test.hlzinterface.cn/api/standard/pay/valid |
| Request method | POST |
{
"orderNo": "1876513316759830528"
}{
"code": 0,
"data": {},
"message": "success"
}Pay
Pay
API Call Schema
| Name | Value |
|---|---|
| Request URL | https://test.hlzinterface.cn/api/standard/pay |
| Request method | POST |
{
"orderNo": "1876513316759830528"
}{
"code": 0,
"data": {
"orderNo": "1876513316759830528",
"solution": {
"adtFare": "1000.00",
"adtTax": "50.00",
"adults": 1,
"baggageRules": [
{
"baggageType": 1,
"passengerType": 1,
"piece": 2,
"segmentIndex": 1,
"weight": 23
}
],
"changeRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"chdFare": "800.00",
"chdTax": "50.00",
"children": 0,
"convenienceFee": "0.00",
"currency": "CNY",
"identify": "hKxTdXBwbGllckNvZGWkRlIyNKlTZWFyY2hLZXnZmFNlYXJjaDpoNmhVY21sd1ZIbHdaUUdxUm14cFoyaDBWSGx3WlFDcVEyRmlhVzVEYkdGemM2Rlpwa0ZrZFd4MGN3bW9RMmhwYkdSeVpXNEFwMGx1Wm1GdWRITUFwRXhsWjNPUmc2TkVaWENqU0V0SHAwUmxjRVJoZEdXcU1qQXlOUzB3TVMweU5hTkJjbktqUWtwVDpGUjI0qlNlZ21lbnRLZXnZIGVhYjdiYjRiMDRhNTJlMjIwYzk3ZTdjOWU1ZjI2MDM3qVRvdGFsRmFycQI/////gIW9iA=",
"journeys": [
{
"arrAirport": "PVG",
"arrCity": "SHA",
"depAirport": "PEK",
"depCity": "BJS",
"duration": 120,
"index": 1,
"segmentIndexs": [],
"transferCount": 0
}
],
"merchantFee": "0.00",
"platformServiceFee": "0.00",
"pnr": "EJB6GT",
"qCharge": "100.00",
"refundRules": [
{
"conditionList": [
{
"amount": "100.00",
"status": 1
}
],
"currency": "CNY",
"fee": "100.00",
"noShowFee": "200.00",
"noShowStatus": 1,
"noShowTime": 24,
"passengerType": 1,
"status": 1,
"ticketStatus": 1,
"useCondition": false
}
],
"segments": [
{
"airline": "CA",
"arrAirport": "PVG",
"arrCity": "SHA",
"arrTime": "2025-01-01 14:00",
"cabinClass": "Y",
"cabinCode": "Y",
"cabinCount": 9,
"codeShare": 0,
"depAirport": "PEK",
"depCity": "BJS",
"depTime": "2025-01-01 12:00",
"duration": 120,
"flightNo": "123",
"group": 0,
"index": 1,
"stopovers": [
{
"airport": "CAN",
"arrTime": "2025-01-01 13:00",
"city": "CAN",
"depTime": "2025-01-01 14:00",
"duration": 60
}
]
}
],
"ticketCarrier": "CA",
"tktFee": "0.00",
"totalFare": "1050.00",
"tripType": 1
}
},
"message": "success"
}Order
Order detail
Query order details based on Tourmind order number
API Call Schema
| Name | Value |
|---|---|
| Request URL | https://test.hlzinterface.cn/api/standard/order |
| Request method | POST |
{
"orderNo": "1876513316759830528"
}{
"code": 0,
"data": {
"order": {
"adults": 1,
"amount": "1000.00",
"ancillaryItems": [
{}
],
"children": 0,
"contact": {
"address": "北京市朝阳区",
"areaCode": "86",
"email": "test@example.com",
"name": "张三",
"phone": "13800138000"
},
"currency": "CNY",
"orderNo": "1876513316759830528",
"passengers": [
{
"associatedIndex": 0,
"birthday": "1990-01-01",
"cardExpired": "2030-01-01",
"cardIssuePlace": "CN",
"cardNo": "E12345678",
"cardType": "PP",
"email": "test@example.com",
"firstName": "JOHN",
"index": 1,
"lastName": "DOE",
"nationality": "CN",
"phone": "13800138000",
"sex": 1,
"type": 1
}
],
"paytime": "2023-01-01 12:00:00",
"status": 1,
"ticketingTime": "2023-01-01 12:00:00",
"tickets": [
{
"airlinePnr": "DEF456",
"firstName": "John",
"group": 1,
"lastName": "Doe",
"passengerIndex": 1,
"pnrCode": "KC4862",
"segmentIndex": 1,
"ticketNo": "EJB6GT"
}
]
},
"segments": [
{
"airline": "CA",
"arrAirport": "PVG",
"arrCity": "SHA",
"arrTime": "2025-01-01 14:00",
"cabinClass": "Y",
"cabinCode": "Y",
"cabinCount": 9,
"codeShare": 0,
"depAirport": "PEK",
"depCity": "BJS",
"depTime": "2025-01-01 12:00",
"duration": 120,
"flightNo": "123",
"group": 0,
"index": 1,
"stopovers": [
{
"airport": "CAN",
"arrTime": "2025-01-01 13:00",
"city": "CAN",
"depTime": "2025-01-01 14:00",
"duration": 60
}
]
}
]
},
"message": "success"
}Ticket
Order ticket notice
Order ticket notice
API Call Schema
| Name | Value |
|---|---|
| Request URL | |
| Request method | POST |
{
"agentOrderNo": "1876513316759830528",
"orderNo": "1876513316759830528",
"tickets": [
{
"airlinePnr": "DEF456",
"firstName": "John",
"group": 1,
"lastName": "Doe",
"passengerIndex": 1,
"pnrCode": "KC4862",
"segmentIndex": 1,
"ticketNo": "EJB6GT"
}
]
}{
"code": 0,
"message": "success"
}After-sales
Schedule Change
Push order schedule change data
API Call Schema
| Name | Value |
|---|---|
| Request URL | |
| Request method | POST |
{
"agentOrderNo": "1947498981984833536",
"changedSegments": [
{
"arrAirport": "FUK",
"arrTime": "2025-09-07 10:50",
"cabinClass": "Y",
"cabinCode": "W",
"depAirport": "ICN",
"depTime": "2025-09-07 09:30",
"flightNo": "ZE641",
"group": 1
}
],
"changedType": 1,
"orderNo": "1947498981984833536",
"originalSegments": [
{
"arrAirport": "FUK",
"arrTime": "2025-09-07 09:55",
"cabinClass": "Y",
"cabinCode": "W",
"depAirport": "ICN",
"depTime": "2025-09-07 08:35",
"flightNo": "ZE641",
"group": 1
}
],
"pnr": "CWQRS4",
"tickets": [
{
"airlinePnr": "CWQRS4",
"firstName": "John",
"flightNo": "ZE641",
"lastName": "Doe",
"passengerIndex": 1,
"pnrCode": "CWQRS4",
"ticketNo": "8392882170841"
}
]
}{
"code": 0,
"message": "success",
"orderNo": "1947498981984833536"
}