Download OpenAPI specification:
Order API and outbound channel integration contracts.
Request and response bodies are intentionally displayed as decrypted JSON objects so integrating channels can see the complete field structure and examples. During actual transmission, bodies identified as encrypted must be JSON serialized and encrypted according to the security specification.
Dispatches the decrypted payload according to header.serviceName.
For integration clarity, the request and response selectors below show
the decrypted JSON body. The actual transmitted body is encrypted.
| serviceName | Decrypted request | Decrypted success response |
|---|---|---|
CreatePreOrder |
CreatePreOrderRequestBody |
CreatePreOrderResponseBody |
PayPreOrder |
PayPreOrderRequestBody |
PayPreOrderResponseBody |
CancelPreOrder |
CancelPreOrderRequestBody |
Header only |
CancelOrder |
CancelOrderRequestBody |
CancelOrderResponseBody |
QueryOrder |
QueryOrderRequestBody |
QueryOrderResponseBody |
QueryProduct |
ProductListRequestBody |
array of ProductInquiryBody |
Authentication is performed with the account ID and signature fields in the envelope header. The endpoint does not use HTTP Bearer authentication.
required | object (CommonRequestHeader) Standard NOL request header |
required | object request body (This field requires AES encryption during transmission) |
{- "header": {
- "accountId": "CHANNEL_ID",
- "serviceName": "CreatePreOrder",
- "requestTime": "2025-05-07 14:23:59",
- "version": "1.0",
- "sign": "abcdef1234567890"
}, - "body": {
- "sequenceId": "20250507A1B2C3D4E5F6G7H8",
- "otaOrderId": "OTA1234567890",
- "contacts": [
- {
- "name": "Michal Scott",
- "mobile": "13800000000",
- "intlCode": "91",
- "optionalMobile": "string",
- "optionalIntlCode": "string",
- "email": "user@example.com"
}
], - "items": [
- {
- "PLU": "PLU12345",
- "locale": "en-US",
- "distributionChannel": "Channel_name",
- "useStartDate": "2025-06-15",
- "useEndDate": "2025-06-15",
- "remark": "Window seat requested",
- "price": 150,
- "priceCurrency": "KRW",
- "salePrice": 180,
- "salePriceCurrency": "KRW",
- "quantity": 2,
- "passengers": [
- {
- "passengerId": "P1",
- "name": "Michal Scott",
- "firstName": "San",
- "lastName": "Zhang",
- "mobile": "13800000000",
- "intlCode": "91",
- "cardType": "ID",
- "cardNo": "123456789012345678",
- "birthDate": "1985-10-20",
- "ageType": "ADU",
- "gender": "M",
- "nationalityCode": "CN",
- "nationalityName": "China",
- "cardIssueCountry": "CN",
- "cardIssuePlace": "Beijing",
- "cardIssueDate": "2000-01-01",
- "cardValidDate": "2030-01-01",
- "cardIssueNumber": "1",
- "birthPlace": "Shanghai",
- "height": 170,
- "weight": 65,
- "myopiaDegreeL": 0,
- "myopiaDegreeR": 0,
- "shoeSize": 42
}
], - "adjunctions": [
- {
- "name": "SpecialRequest",
- "nameCode": "REQ01",
- "content": "Vegetarian meal",
- "contentCode": "ENC01"
}
], - "deposit": {
- "type": 1,
- "amount": 50,
- "amountCurrency": "CNY"
}, - "expressDelivery": {
- "type": "1",
- "name": "张三",
- "mobile": "13800000000",
- "intlCode": "86",
- "country": "China",
- "province": "Beijing",
- "city": "Beijing",
- "district": "Chaoyang",
- "address": "No.1 Park Road"
}
}
]
}
}{- "header": {
- "resultCode": "0000",
- "resultMessage": "Success"
}, - "body": {
- "otaOrderId": "OTA1234567890",
- "supplierOrderId": "SUP0987654321",
- "items": [
- {
- "PLU": "PLU12345",
- "inventorys": [
- {
- "useDate": "2025-06-15",
- "quantity": 5
}
]
}
]
}
}Placeholder for the callback endpoint supplied by the external channel. The decrypted body conforms to PaymentConfirmRequest.body.
required | object (CommonRequestHeader) Standard NOL request header |
required | object request body (AES-encrypted) |
{- "header": {
- "accountId": "CHANNEL_ID",
- "serviceName": "CreatePreOrder",
- "requestTime": "2025-05-07 14:23:59",
- "version": "1.0",
- "sign": "abcdef1234567890"
}, - "body": {
- "sequenceId": "20250507A1B2C3D4E5F6G7H8",
- "otaOrderId": "OTA1234567890",
- "supplierOrderId": "SUP0987654321",
- "confirmResultCode": "0000",
- "confirmResultMessage": "Confirmation succeeded",
- "voucherSender": 1,
- "vouchers": [
- {
- "itemId": "LI123456",
- "voucherId": "VCH123456",
- "voucherType": 3,
- "voucherCode": "string",
- "voucherData": "string",
- "voucherSeatInfo": "string"
}
], - "orderExtendMessage": "Please present this voucher at the entrance.",
- "items": [
- {
- "itemId": "LI123456",
- "isCredentialVouchers": 1,
- "passengerVouchers": [
- {
- "passengerId": "P1",
- "voucherId": "VCH123456"
}
], - "inventorys": [
- {
- "useDate": "2025-06-15",
- "quantity": 5
}
]
}
]
}
}{- "header": {
- "resultCode": "0000",
- "resultMessage": "Success"
}
}Placeholder for the callback endpoint supplied by the external channel. The decrypted body conforms to CancelConfirmRequest.body.
required | object (CommonRequestHeader) Standard NOL request header |
required | object request body (AES-encrypted) |
{- "header": {
- "accountId": "CHANNEL_ID",
- "serviceName": "CreatePreOrder",
- "requestTime": "2025-05-07 14:23:59",
- "version": "1.0",
- "sign": "abcdef1234567890"
}, - "body": {
- "sequenceId": "20250507A1B2C3D4E5F6G7H8",
- "otaOrderId": "OTA1234567890",
- "supplierOrderId": "SUP0987654321",
- "confirmResultCode": "0000",
- "confirmResultMessage": "Cancellation accepted",
- "items": [
- {
- "itemId": "LI123456",
- "vouchers": [
- {
- "voucherId": "VCH123456"
}
]
}
]
}
}{- "header": {
- "resultCode": "0000",
- "resultMessage": "Success"
}
}Placeholder for the notification endpoint supplied by the external channel. The decrypted body conforms to OrderConsumedNotificationRequest.body.
required | object (CommonRequestHeader) Standard NOL request header |
required | object |
{- "header": {
- "accountId": "CHANNEL_ID",
- "serviceName": "CreatePreOrder",
- "requestTime": "2025-05-07 14:23:59",
- "version": "1.0",
- "sign": "abcdef1234567890"
}, - "body": {
- "sequenceId": "string",
- "otaOrderId": "string",
- "supplierOrderId": "string",
- "items": [
- {
- "itemId": "string",
- "useStartDate": "2019-08-24",
- "useEndDate": "2019-08-24",
- "quantity": 1,
- "useQuantity": 0,
- "passengers": [
- {
- "passengerId": "string"
}
], - "vouchers": [
- {
- "voucherId": "string"
}
]
}
], - "remark": "string",
- "discount": {
- "policyList": [
- {
- "date": "2019-08-24",
- "quantity": 1,
- "lostAmount": 0,
- "lostAmountCurrency": "CNY"
}
]
}
}
}{- "header": {
- "resultCode": "0000",
- "resultMessage": "Success"
}
}Placeholder for the price-sync endpoint supplied by the external channel. The decrypted body conforms to ResourcePriceSyncRequest.body.
required | object (CommonRequestHeader) Standard NOL request header |
required | object Request body (AES-encrypted) |
{- "header": {
- "accountId": "CHANNEL_ID",
- "serviceName": "CreatePreOrder",
- "requestTime": "2025-05-07 14:23:59",
- "version": "1.0",
- "sign": "abcdef1234567890"
}, - "body": {
- "sequenceId": "20250507A1B2C3D4E5F6G7H8",
- "otaOptionId": 12345,
- "supplierOptionId": "PLU98765",
- "dateType": "DATE_REQUIRED",
- "prices": [
- {
- "date": "2025-06-15",
- "salePrice": 120.5,
- "costPrice": 100
}
]
}
}{- "header": {
- "resultCode": "0000",
- "resultMessage": "Success"
}
}Placeholder for the inventory-sync endpoint supplied by the external channel. The decrypted body conforms to ResourceInventorySyncRequest.body.
required | object (CommonRequestHeader) Standard NOL request header |
required | object request body (AES-encrypted) |
{- "header": {
- "accountId": "CHANNEL_ID",
- "serviceName": "CreatePreOrder",
- "requestTime": "2025-05-07 14:23:59",
- "version": "1.0",
- "sign": "abcdef1234567890"
}, - "body": {
- "sequenceId": "20250507A1B2C3D4E5F6G7H8",
- "otaOptionId": 12345,
- "supplierOptionId": "PLU98765",
- "dateType": "DATE_REQUIRED",
- "inventorys": [
- {
- "date": "2025-06-15",
- "quantity": 50
}
]
}
}{- "header": {
- "resultCode": "0000",
- "resultMessage": "Success"
}
}Placeholder for the image-upload endpoint supplied by the external channel. The decrypted body is the image URL string.
Decrypted image URL string sent in the content-sync envelope body.
{- "header": {
- "resultCode": "0000",
- "resultMessage": "Success"
}, - "data": {
- "tripImageId": "IMG_123456789"
}
}Placeholder for the product-sync endpoint supplied by the external channel. The decrypted body conforms to SyncProductRequest.
| supplierProductId required | string <= 40 characters The supplier product id. |
| reference | string Optional supplier identifier. |
| contractId required | integer Contract ID between supplier and channel |
| primaryLanguage required | string Enum: "zh-CN" "zh-HK" "en-US" "ko-KR" "ja-JP" "th-TH" Language code of the primary product content. |
| status required | string Enum: "active" "inactive" Product status (active=valid, inactive=not valid). |
required | Array of objects (ProductCategory) |
Array of objects (ProductTag) | |
| title required | string <= 100 characters Supplier product name. |
Array of objects or objects (ProductPoi) | |
Array of objects or objects (SupplierDestination) | |
Array of objects or objects (SupplierDeparture) | |
required | object (TicketInfo) Ticket delivery method information |
required | object (RedemptionInfo) Ticket redemption information. |
Array of objects (ServiceLanguage) | |
required | Array of objects (ProductImage) <= 20 items |
| inclusions | Array of strings <= 20 items [ items <= 500 characters ] Free-text fees included. |
| exclusions | Array of strings <= 20 items [ items <= 500 characters ] Free-text fees excluded. |
| highlight | Array of strings <= 3 items [ items <= 200 characters ] |
| description required | string <= 8000 characters Rich-text product description. |
| howToUse | Array of strings <= 20 items [ items <= 4000 characters ] |
| additionalInfo | string <= 4000 characters |
object (TravelDuration) Duration of the product or itinerary segment | |
Array of objects (Itinerary) <= 1 items | |
| rawDescription | string <= 8000 characters Unstructured free-text itinerary description. Required when |
required | object (GuestInformation) Guest information collected during booking. |
required | object (BookingSettings) Booking rules emitted by Swallow Channel. |
required | object (CancellationPolicy) Cancellation policy. |
required | Array of objects (TicketType) <= 10 items Ticket type information per product unit. |
Array of objects (ProductOption) <= 4 items Option objects when product requires option or time slot selection. | |
| metaData | string <= 8000 characters Extended information in JSON or free text |
| sync_status required | string Enum: "active" "inactive" Synchronization status emitted by Swallow Channel. |
{- "supplierProductId": "string",
- "reference": "string",
- "contractId": 0,
- "primaryLanguage": "zh-CN",
- "status": "active",
- "category": [
- {
- "code": "ATTRACTION_TICKET"
}
], - "tags": [
- {
- "id": "TAG1234",
- "tagName": "Wi-Fi available"
}
], - "title": "string",
- "poi": [
- {
- "supplierPOI": {
- "supplierId": "POI_12345",
- "mappingElements": {
- "name": "Eiffel Tower",
- "addressDetail": "Champ de Mars, 5 Avenue Anatole France, 75007 Paris",
- "latitude": 48.8584,
- "longitude": 2.2945
}
}
}
], - "destination": [
- {
- "supplierDestination": {
- "supplierId": "DEST_1001",
- "mappingElements": {
- "name": "Paris",
- "addressDetail": "Île de la Cité",
- "latitude": 48.8566,
- "longitude": 2.3522
}
}
}
], - "departure": [
- {
- "supplierDeparture": {
- "supplierId": "DEPT_2002",
- "mappingElements": {
- "name": "Lyon",
- "addressDetail": "Place Bellecour",
- "latitude": 45.764,
- "longitude": 4.8357
}
}
}
], - "ticketInfo": {
- "deliveryMethods": "DIGITAL"
}, - "redemptionInfo": {
- "redemptionType": "Direct_Entry",
- "redemptionLocation": [
- {
- "supplierLocation": {
- "supplierId": "string",
- "mappingElements": {
- "name": "string",
- "addressDetail": "string",
- "latitude": 0,
- "longitude": 0
}
}, - "googlePlaceId": "string"
}
]
}, - "serviceLanguage": [
- {
- "languageCode": "en"
}
], - "gallery": [
- {
- "channelImageId": "IMG_123456789"
}
], - "inclusions": [
- "string"
], - "exclusions": [
- "string"
], - "highlight": [
- "string"
], - "description": "string",
- "howToUse": [
- "string"
], - "additionalInfo": "string",
- "duration": {
- "unit": "Hour",
- "value": 2
}, - "itinerary": [
- {
- "start": [
- {
- "startTime": "string",
- "startType": "Meet_at_Start_Point",
- "location": [
- {
- "supplierPOI": {
- "supplierId": "POI_12345",
- "mappingElements": {
- "name": "Eiffel Tower",
- "addressDetail": "Champ de Mars, 5 Avenue Anatole France, 75007 Paris",
- "latitude": 48.8584,
- "longitude": 2.2945
}
}
}
], - "duration": {
- "unit": "Hour",
- "value": 2
}, - "description": "string"
}
], - "end": [
- {
- "endTime": "string",
- "endType": "End_on_the_Spot",
- "location": [
- {
- "supplierPOI": {
- "supplierId": "POI_12345",
- "mappingElements": {
- "name": "Eiffel Tower",
- "addressDetail": "Champ de Mars, 5 Avenue Anatole France, 75007 Paris",
- "latitude": 48.8584,
- "longitude": 2.2945
}
}
}
], - "duration": {
- "unit": "Hour",
- "value": 2
}, - "description": "string"
}
], - "days": [
- {
- "dayNumber": 1,
- "items": [
- {
- "time": "string",
- "location": [
- {
- "supplierPOI": {
- "supplierId": null,
- "mappingElements": { }
}
}
], - "duration": {
- "unit": "Hour",
- "value": 2
}, - "feeInclusions": "Include",
- "visitType": "View_Outside",
- "description": "string"
}
]
}
]
}
], - "rawDescription": "string",
- "guestInformation": {
- "requiresGuestInfo": true,
- "forms": [
- {
- "formName": "string",
- "formType": "Default",
- "formItems": [
- {
- "itemId": "string",
- "displayName": "string",
- "required": true
}
]
}
]
}, - "bookingSettings": {
- "advanceBooking": {
- "minAdvanceHours": 0,
- "maxAdvanceHours": 0
}, - "bookingLimit": {
- "minPax": 0,
- "maxPax": 0
}, - "preOrderCancel": {
- "cancellationPolicyId": "string"
}
}, - "cancellationPolicy": {
- "type": "Non_Cancellable",
- "rateList": [
- {
- "dayBeforeVisitDate": 100,
- "time": "string",
- "unit": "PERCENTAGE",
- "value": 100
}
], - "confirmationTime": 8
}, - "ticketType": [
- {
- "code": "Adult",
- "customCode": "string",
- "customName": "string",
- "restrictions": {
- "description": "string"
}, - "description": "string"
}
], - "option": [
- {
- "optionCode": "Option"
}
], - "metaData": "string",
- "sync_status": "active"
}{- "header": {
- "resultCode": "string",
- "resultMessage": "string"
}
}Placeholder for the package-sync endpoint supplied by the external channel. The decrypted body conforms to SyncPackageRequest.
| supplierProductId required | string <= 40 characters The supplier product id. |
required | Array of objects (PackageOptionList) Option list of this package. |
{- "supplierProductId": "string",
- "optionList": [
- {
- "option": [
- {
- "optionCode": "Options",
- "valueCode": "string",
- "valueName": "string"
}
], - "optionStatus": "active",
- "optionDescription": "string",
- "bookingCutOffTime": {
- "dayBeforeVisitDate": "string",
- "time": "string"
}, - "bookingQuestions": [
- {
- "code": "string",
- "name": "string",
- "answerType": "Single_Selection",
- "allowedAnswers": {
- "code": "string",
- "name": "string"
}, - "description": "string"
}
], - "unit": [
- {
- "PLU": "string",
- "reference": "string",
- "ticketTypeCode": "Adult",
- "customCode": "string",
- "restrictions": {
- "minUnits": "string",
- "maxUnits": "string",
- "unitPax": "string",
- "companionRequired": "Not_Required"
}, - "currency": {
- "netPriceCurrency": "string",
- "retailPriceCurrency": "string"
}
}
]
}
]
}{- "header": {
- "resultCode": "string",
- "resultMessage": "string"
}
}