API docs

BonusLink Travel API Documentation

VERSION 1.0

February 2026


Change Log

VersionDateChanges
1.0Feb 2026Initial API documentation for BonusLink Travel integration

Table of Contents

  1. Introduction
  2. API Workflow
  3. API Specification
  4. Authentication API
  5. Booking Retrieval API
  6. Booking Products API
    • 6.1 Request Headers
    • 6.2 Request Parameters
    • 6.3 Request Sample
    • 6.4 Response Parameters
    • 6.5 Product Data Object (Hotel)
    • 6.6 Room Object
    • 6.7 Room Rate Object
    • 6.8 Cancellation Object
    • 6.9 Product Type Object
    • 6.10 Currency Info Object
    • 6.11 Price Info Object
    • 6.12 Reward Info Object
    • 6.13 Response Sample
  7. Status Codes
  8. Error Codes

<a id="1-introduction"></a>

1. Introduction

This document provides guidance for integrating with the BonusLink Travel API system. The API provides authentication and booking retrieval capabilities for hotel bookings.

Key Features:

  • JWT-based authentication with agent scope
  • Comprehensive hotel booking retrieval with payment details
  • Support for multi-traveler hotel bookings
  • Detailed payment transaction information with WowPay gateway integration
  • Hotel-specific pricing breakdown and voucher status tracking

<a id="2-api-workflow"></a>

2. API Workflow

<a id="21-complete-booking-retrieval-sequence"></a>

2.1 Complete Booking Retrieval Sequence


<a id="3-api-specification"></a>

3. API Specification

  • Protocol: HTTPS only
  • Encoding: UTF-8
  • Content-Type: application/json
  • Authentication: Bearer token in Authorization header
  • Base URL: https://booking.travel.bonuslink.com.my

<a id="authentication-header"></a>

Authentication Header

Authorization: Bearer {access_token}

<a id="error-response-format"></a>

Error Response Format

{
    "error": "ErrorCode",
    "message": "Human readable error message",
    "meta": {
        "additional_info": "value"
    }
}

<a id="4-authentication-api"></a>

4. Authentication API

Endpoint: POST /v2/auth

This endpoint authenticates an agent user and returns a JWT access token for subsequent API requests.

<a id="41-request-parameters"></a>

4.1 Request Parameters

ParameterTypeRequiredDescription
emailstringYesAgent email address
passwordstringYesAgent password
flow_typestringYesAuthentication flow type (e.g., "Basic")
scope_typestringYesAccess scope type (e.g., "Agent")

<a id="42-request-sample"></a>

4.2 Request Sample

{
    "email": "agent@example.com",
    "password": "your_secure_password",
    "flow_type": "Basic",
    "scope_type": "Agent"
}

<a id="43-response-parameters"></a>

4.3 Response Parameters

ParameterTypeDescription
expintegerToken expiration timestamp (Unix timestamp)
account_idstringAgent account identifier (UUID)
emailstringAgent email address
access_tokenstringJWT token for API authentication

<a id="44-success-response-sample"></a>

4.4 Success Response Sample

{
    "exp": 1752503790,
    "account_id": "2463c7d1-316f-452e-a903-0dc5038c9d0f",
    "email": "agent@example.com",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3NTI1MDM3OTAsInJlZnJlc2hfdG9rZW4iOiIyNDYzYzdkMS0zMTZmLTQ1MmUtYTkwMy0wZGM1MDM4YzlkMGYiLCJhY2NvdW50X2lkIjoiMjQ2M2M3ZDEtMzE2Zi00NTJlLWE5MDMtMGRjNTAzOGM5ZDBmIn0..."
}

<a id="45-token-usage"></a>

4.5 Token Usage

Include the access_token in the Authorization header for all subsequent API requests:

Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...

<a id="46-token-expiration"></a>

4.6 Token Expiration

  • The token expires at the Unix timestamp specified in the exp field
  • Tokens are typically valid for 30 days from issuance
  • When a token expires, you must authenticate again to obtain a new token
  • Monitor the exp timestamp and refresh before expiration to avoid service interruption

<a id="5-booking-retrieval-api"></a>

5. Booking Retrieval API

Endpoint: GET /booking

This endpoint retrieves complete booking details including contact information, payment status, travelers, products, and pricing.

<a id="51-request-parameters"></a>

5.1 Request Parameters (Query String)

ParameterTypeRequiredDescription
booking_codestringYesUnique booking confirmation code

<a id="52-request-sample"></a>

5.2 Request Sample

GET /booking?booking_code=DEMOP010156
Authorization: Bearer {access_token}

<a id="53-response-parameters"></a>

5.3 Response Parameters

ParameterTypeDescription
idstringBooking UUID
created_atstringBooking creation timestamp (ISO 8601)
updated_atstringLast update timestamp (ISO 8601)
deletedbooleanDeletion status
codestringBooking confirmation code
tax_invoice_numberstringTax invoice number (if applicable)
app_idstringApplication identifier (UUID)
agent_idstringAgent identifier (UUID)
payment_idstringPayment transaction identifier (UUID)
account_idstringAccount identifier (UUID)
customer_idstringCustomer identifier (UUID)
shopping_idstringShopping session identifier
trip_idstringTrip identifier (UUID)
package_idstringPackage identifier (UUID)
office_idstringOffice identifier (UUID)
flight_campaign_idstringFlight campaign identifier (UUID)
currency_codestringCurrency code (e.g., "USD", "MYR")
language_codestringLanguage code (e.g., "en-US")
promotion_codestringPromotion code applied
partner_idstringPartner identifier (UUID)
statusstringBooking status (success, pending, failed, cancelled)
numberintegerBooking sequence number
total_amountfloatTotal booking amount
elevy_amountfloatE-levy amount
webhook_dataobjectWebhook callback data
package_searchobjectPackage search criteria
promotionobjectPromotion details
group_bookingbooleanGroup booking flag
group_booking_confirmedbooleanGroup booking confirmation status
departure_datestringTravel departure date (ISO 8601)
offline_payment_refstringOffline payment reference
offline_payment_originstringOffline payment origin
is_offline_paymentbooleanOffline payment indicator
cidstringCampaign identifier
contactobjectContact person details (see Contact Object)
paymentobjectPayment transaction details (see Payment Object)
json_urlstringJSON booking data URL
travel_start_datestringTravel start date (ISO 8601)
travel_end_datestringTravel end date (ISO 8601)
travelersarrayList of travelers (see Traveler Object)
productsarrayList of booked products (see Product Object)
insuranceobjectInsurance details
pricesarrayPricing breakdown by product (see Price Object)

<a id="54-response-sample"></a>

5.4 Response Sample

{
    "id": "829763bb-950d-44a3-82b7-0c499463fb4f",
    "created_at": "2026-01-10T14:31:50.016973+00:00",
    "updated_at": "2026-01-10T14:32:40.417212+00:00",
    "deleted": false,
    "code": "DEMOP010156",
    "tax_invoice_number": null,
    "app_id": "bbf70af6-4382-4ff8-beb3-b2847f682f34",
    "agent_id": null,
    "payment_id": "f34b4742-01fd-422b-8f8f-57791da7e44c",
    "account_id": "bbfad219-30d7-4b00-bb4e-359fd42dcf43",
    "customer_id": null,
    "shopping_id": "17b6d15bbf5c4093abca1523ba34e647",
    "trip_id": null,
    "package_id": "4a5c9770-f901-4b96-8673-ecdc5ee49102",
    "office_id": null,
    "flight_campaign_id": null,
    "currency_code": "USD",
    "language_code": "en-US",
    "promotion_code": null,
    "partner_id": null,
    "status": "success",
    "number": 10156,
    "total_amount": 6727.05,
    "elevy_amount": 0.0,
    "webhook_data": {},
    "package_search": {},
    "promotion": null,
    "group_booking": false,
    "group_booking_confirmed": false,
    "departure_date": "2026-02-01T00:00:00+00:00",
    "offline_payment_ref": null,
    "offline_payment_origin": null,
    "is_offline_payment": false,
    "cid": "",
    "contact": {
        "id": "ce70ccc9399a4a68bd29f3649acdc627",
        "created_at": "2026-01-10T14:31:50.022467+00:00",
        "updated_at": "2026-01-10T14:31:50.022482+00:00",
        "deleted": false,
        "booking_id": "829763bb-950d-44a3-82b7-0c499463fb4f",
        "first_name": "asd",
        "last_name": "asd",
        "title": "Mr",
        "email": "abdelrhman.awaad@gmail.com",
        "phone": "+20 12346654",
        "city": null,
        "country_code": "EG",
        "country_name": null,
        "address": "cairo",
        "postcode": null,
        "country": null,
        "middle_name": "dsa",
        "details": {
            "country_code": "EG",
            "phone": "+20 12346654",
            "address": "cairo",
            "last_name": "asd",
            "email": "abdelrhman.awaad@gmail.com",
            "title": "Mr",
            "first_name": "asd",
            "middle_name": "dsa"
        }
    },
    "payment": {
        "id": "f34b4742-01fd-422b-8f8f-57791da7e44c",
        "created_at": "2026-01-10T14:31:50.428441+00:00",
        "updated_at": "2026-01-10T14:32:35.410683+00:00",
        "deleted": false,
        "scope_type": "App",
        "account_id": "bbfad219-30d7-4b00-bb4e-359fd42dcf43",
        "shopping_id": "17b6d15bbf5c4093abca1523ba34e647",
        "promotion_code": null,
        "scope_id": "bbf70af6-4382-4ff8-beb3-b2847f682f34",
        "transaction_id": "f76021490c6a6fca",
        "status": "success",
        "method": "wow-pay",
        "flow_type": "ProductBooking",
        "desc": "Payment for booking: DEMOP010156",
        "amount": 6727.05,
        "postpaid": false,
        "meta": {
            "booking_code": "DEMOP010156"
        },
        "currency_info": {
            "origin": "USD",
            "conversion": "USD",
            "rate": 1.0
        },
        "client_info": {
            "origin": "demo.apps.easygds.com",
            "redirect_url": "https://demo.apps.easygds.com/api/payment/callback",
            "ip": "156.201.113.66"
        },
        "contact": {
            "country_code": "EG",
            "phone_number": "+20 12346654",
            "phone": "+20 12346654",
            "title": "Mr",
            "first_name": "asd",
            "address": "cairo",
            "last_name": "asd",
            "email": "abdelrhman.awaad@gmail.com",
            "middle_name": "dsa"
        },
        "lines": [
            {
                "id": "f0bd63450e384a31b8464949b38ac104",
                "transaction_id": "450516165a075e07",
                "status": "success",
                "method": "wow-pay",
                "amount": 6727.05,
                "desc": "Payment for booking: DEMOP010156",
                "message": "Payment complete.",
                "meta": {
                    "app_id": "bbf70af6-4382-4ff8-beb3-b2847f682f34",
                    "switch_id": "cccce8af-f966-49eb-9b62-4080e15e6344",
                    "wow-pay": {
                        "response": {
                            "CARD_HOLDER_NAME": "",
                            "CURRENCY": "USD",
                            "PAYMENT_TYPE": "CreditCard",
                            "PAYMENT_REFERENCE3": "KCA002641",
                            "PAYMENT_REFERENCE1": "ch_3So3DRCbbjpW3zmI0xCpvpua",
                            "CARD_TYPE": "Visa",
                            "PAYMENT_DESCRIPTION": "Payment complete.",
                            "MERCHANT_ID": "e81932f2-71b7-4e78-96c8-f8cc42f2d6b7",
                            "ORDERREF": "450516165a075e07",
                            "PAYMENT_STATUSCODE": "1",
                            "APPROVAL_CODE": "pi_3So3DRCbbjpW3zmI0JQaGEjs",
                            "EXPIRY_YEAR": "2026",
                            "PAYMENT_STATUS": "APPROVED",
                            "CARD_NUMBER": "401288XXXXXX1881",
                            "EXPIRY_MONTH": "01",
                            "PAYMENT_CHANNEL": "Visa",
                            "AMOUNT": 6727.05
                        }
                    }
                },
                "created_at": "2026-01-10T14:31:50.432182+00:00"
            }
        ]
    },
    "json_url": "https://core.services.easygds.com/api/bookings/json?token=a0b3445308ac291a02b135e74d7be739302ee1dc14bfdc54eefcc53748b988bb&code=DEMOP010156",
    "travel_start_date": "2026-02-01T00:00:00",
    "travel_end_date": "2026-02-08T00:00:00",
    "travelers": [
        {
            "id": "a4d2ddac52c947b4a4fb597f53cfbebf",
            "created_at": "2026-01-10T14:31:51.203691+00:00",
            "updated_at": "2026-01-10T14:31:51.203706+00:00",
            "deleted": false,
            "booking_id": "829763bb-950d-44a3-82b7-0c499463fb4f",
            "details": {
                "title": {
                    "value": "Mr",
                    "key": "title",
                    "data_type": "str",
                    "translation_label": "travelers.title"
                },
                "birthday": {
                    "value": "2001-02-03",
                    "key": "birthday",
                    "data_type": "date",
                    "translation_label": "travelers.birthday"
                },
                "last_name": {
                    "value": "asd",
                    "key": "last_name",
                    "data_type": "str",
                    "translation_label": "travelers.last_name"
                },
                "country_code": {
                    "value": "EG",
                    "key": "country_code",
                    "data_type": "str",
                    "translation_label": "travelers.country_code"
                },
                "type": {
                    "value": "adult",
                    "key": "type",
                    "data_type": "str",
                    "translation_label": "travelers.type"
                },
                "first_name": {
                    "value": "asd",
                    "key": "first_name",
                    "data_type": "str",
                    "translation_label": "travelers.first_name"
                },
                "middle_name": {
                    "value": "dsa",
                    "key": "middle_name",
                    "data_type": "str",
                    "translation_label": "travelers.middle_name"
                }
            },
            "data": {
                "title": "Mr",
                "birthday": "2001-02-03",
                "last_name": "asd",
                "country_code": "EG",
                "type": "adult",
                "first_name": "asd",
                "middle_name": "dsa"
            }
        }
    ],
    "products": [
        {
            "id": "a2c4bb36-1072-47d8-ad82-5b3b1ffb1a27",
            "status": "vouchered",
            "product_code": "hotel"
        }
    ],
    "insurance": {},
    "prices": [
        {
            "product_code": "hotel",
            "total_amount": 6727.05,
            "currency_code": "USD",
            "scope_type": "BookingProduct"
        }
    ]
}

<a id="55-booking-object-structure"></a>

5.5 Booking Object Structure

The main booking object contains all booking-related information organized into the following sections:

  • Booking Metadata: Core booking identifiers and status
  • Contact Information: Primary contact person details
  • Payment Information: Payment transaction and processing details
  • Travelers: List of all travelers in the booking
  • Products: Booked travel products (hotels, flights, etc.)
  • Pricing: Detailed pricing breakdown by product

<a id="56-contact-object"></a>

5.6 Contact Object

The contact object contains information about the primary contact person for the booking.

ParameterTypeDescription
idstringContact record identifier
created_atstringContact creation timestamp (ISO 8601)
updated_atstringLast update timestamp (ISO 8601)
deletedbooleanDeletion status
booking_idstringAssociated booking identifier (UUID)
first_namestringContact first name
last_namestringContact last name
titlestringContact title (Mr, Ms, Mrs, etc.)
emailstringContact email address
phonestringContact phone number with country code
citystringContact city
country_codestringContact country code (ISO 2-letter)
country_namestringContact country name
addressstringContact address
postcodestringContact postal code
countrystringContact country
middle_namestringContact middle name
detailsobjectNested contact details object

<a id="57-payment-object"></a>

5.7 Payment Object

The payment object contains comprehensive payment transaction information.

ParameterTypeDescription
idstringPayment record identifier (UUID)
created_atstringPayment creation timestamp (ISO 8601)
updated_atstringLast update timestamp (ISO 8601)
deletedbooleanDeletion status
scope_typestringPayment scope type (App, Agent, etc.)
account_idstringAccount identifier (UUID)
shopping_idstringShopping session identifier
promotion_codestringApplied promotion code
scope_idstringScope identifier (UUID)
transaction_idstringUnique transaction identifier
statusstringPayment status (success, pending, failed)
methodstringPayment method (wow-pay, credit-card, etc.)
flow_typestringPayment flow type (ProductBooking, etc.)
descstringPayment description
amountfloatPayment amount
postpaidbooleanPostpaid payment indicator
metaobjectPayment metadata including booking code
currency_infoobjectCurrency conversion information
client_infoobjectClient origin and IP information
contactobjectPayment contact information
linesarrayPayment transaction lines with detailed gateway response

Payment Lines Object

Each payment line represents a payment transaction attempt.

ParameterTypeDescription
idstringPayment line identifier
transaction_idstringTransaction identifier
statusstringTransaction status (success, failed)
methodstringPayment method used
amountfloatTransaction amount
descstringTransaction description
messagestringTransaction status message
metaobjectDetailed payment gateway response
created_atstringTransaction creation timestamp

<a id="58-traveler-object"></a>

5.8 Traveler Object

The traveler object contains information about each traveler in the booking.

ParameterTypeDescription
idstringTraveler record identifier
created_atstringTraveler record creation timestamp (ISO 8601)
updated_atstringLast update timestamp (ISO 8601)
deletedbooleanDeletion status
booking_idstringAssociated booking identifier (UUID)
detailsobjectDetailed traveler attributes with metadata
dataobjectSimplified traveler data object

Traveler Details Structure

The details object contains structured traveler attributes:

AttributeTypeDescription
titleobjectTraveler title (value, key, data_type, translation_label)
birthdayobjectTraveler date of birth (value, key, data_type, translation_label)
first_nameobjectTraveler first name (value, key, data_type, translation_label)
last_nameobjectTraveler last name (value, key, data_type, translation_label)
middle_nameobjectTraveler middle name (value, key, data_type, translation_label)
country_codeobjectTraveler country code (value, key, data_type, translation_label)
typeobjectTraveler type: adult, child, infant (value, key, data_type, translation_label)

Traveler Data Structure

The data object contains simplified traveler information:

ParameterTypeDescription
titlestringTraveler title
birthdaystringDate of birth (YYYY-MM-DD)
first_namestringFirst name
last_namestringLast name
middle_namestringMiddle name
country_codestringCountry code (ISO 2-letter)
typestringTraveler type (adult, child, infant)

<a id="59-product-object"></a>

5.9 Product Object

The product object represents a booked hotel product.

ParameterTypeDescription
idstringProduct record identifier (UUID)
statusstringHotel product status (see Product Status for all possible values)
product_codestringProduct type code (currently only "hotel" is supported)

Note: This API currently supports hotel bookings only. For detailed information on all hotel product status values and their meanings, see Section 7.2 - Product Status (Hotel Only).

<a id="510-price-object"></a>

5.10 Price Object

The price object provides pricing breakdown by hotel product.

ParameterTypeDescription
product_codestringProduct type code (currently only "hotel")
total_amountfloatTotal amount for the hotel booking
currency_codestringCurrency code (e.g., "USD", "MYR")
scope_typestringPricing scope type (typically "BookingProduct")

6. Booking Products API

Endpoint: GET /bookings/products

This endpoint retrieves detailed product information for a specific booking, including hotel booking data, supplier details, voucher information, and room-level pricing breakdown.

6.1 Request Headers

HeaderRequiredDescription
AuthorizationYesBearer token obtained from Authentication API. Format: Bearer {access_token}

6.2 Request Parameters (Query String)

ParameterTypeRequiredDescription
booking_codestringYesUnique booking confirmation code

6.3 Request Sample

GET /bookings/products?booking_code=BL100022
Authorization: Bearer {access_token}

6.4 Response Parameters

The response contains a total count and a result array of booking product objects.

ParameterTypeDescription
totalintegerTotal number of booking products
resultarrayList of booking product objects

Booking Product Object

ParameterTypeDescription
idstringBooking product identifier (UUID)
created_atstringProduct creation timestamp (ISO 8601)
updated_atstringLast update timestamp (ISO 8601)
deletedbooleanDeletion status
booking_idstringAssociated booking identifier (UUID)
package_idstringPackage identifier (UUID, nullable)
product_idstringProduct definition identifier
product_refstringProduct reference identifier
shopping_idstringShopping session identifier
shopping_item_idstringShopping item identifier
statusstringProduct status (see Product Status for all possible values)
free_cancellation_deadlinestringFree cancellation deadline (ISO 8601, nullable)
free_cancellationbooleanWhether free cancellation is currently available
dataobjectDetailed hotel product data (see Section 6.5 Product Data Object)
currency_infoobjectCurrency conversion information (see Section 6.10 Currency Info Object)
productobjectProduct type metadata (see Section 6.9 Product Type Object)
pdf_urlstringURL to download the booking voucher PDF
error_messagestringError message if booking failed (nullable)
searchobjectOriginal search parameters and metadata
logsarrayProduct processing log entries

6.5 Product Data Object (Hotel)

The data object contains comprehensive hotel booking details including supplier information, room details, pricing, and hotel content.

ParameterTypeDescription
source_idstringSupplier source identifier
contract_idstringHotel contract identifier
hotel_idstringHotel identifier in supplier system
easygds_idstringEasyGDS internal hotel identifier
eps_idstringExpedia property system identifier
supplier_codestringSupplier code (e.g., "APItude", "HMS")
supplier_sourcestringSupplier data source identifier
currencystringSupplier pricing currency code
is_clientbooleanWhether this is a client-contracted rate
is_has_refundable_roomsbooleanWhether refundable rooms are available
namestringHotel name
street_addressstringHotel full street address
typestringProduct type (e.g., "hotel")
starfloatHotel star rating
phonestringHotel phone number
room_countintegerNumber of rooms booked
pax_countintegerNumber of guests
night_countintegerNumber of nights
checkin_datestringCheck-in date (ISO 8601)
checkout_datestringCheck-out date (ISO 8601)
checkin_timestringCheck-in time
checkout_timestringCheck-out time
roomsarrayList of room objects (see Section 6.6 Room Object)
selected_roomsarrayList of selected/booked room objects with booking references
free_cancellationbooleanWhether free cancellation is available
free_cancellation_deadlinestringFree cancellation deadline (ISO 8601, nullable)
cancellation_deadlinestringCancellation deadline (ISO 8601, nullable)
price_infoobjectAggregated price information (see Section 6.11 Price Info Object)
pricesarrayPrice breakdown by level
reward_infoobjectReward/loyalty points information (see Section 6.12 Reward Info Object)
currency_infoobjectCurrency conversion information
search_idstringOriginal search session identifier
package_idstringPackage identifier (nullable)
locationobjectHotel location with GPS coordinates
avatarobjectHotel thumbnail image URLs (sm, md, lg)
ratingsobjectHotel ratings from various sources (expedia, liteapi, tripadvisor)
contentsobjectHotel content details (descriptions, amenities, policies, fees)
booking_refstringSupplier booking reference number
country_codestringBooking country code (ISO 2-letter)

6.6 Room Object

Each room object within the rooms array contains details about a booked room.

ParameterTypeDescription
idxintegerRoom index (1-based)
room_namestringRoom type display name
room_type_idstringRoom type identifier
namestringRoom name (mapped)
supplier_room_namestringOriginal room name from supplier
easygds_idstringEasyGDS room identifier
source_idstringSource identifier
supplier_codestringSupplier code
hotel_idstringHotel identifier
hotel_easygds_idstringHotel EasyGDS identifier
free_cancellationbooleanWhether free cancellation is available for this room
cancellation_deadlinestringRoom cancellation deadline (ISO 8601, nullable)
supplier_cancellation_deadlinestringSupplier cancellation deadline (ISO 8601)
cancellation_bufferintegerCancellation buffer in hours
imagesarrayRoom image URLs
contentsobjectRoom description content
areaobjectRoom area (square_meters, square_feet)
occupancyobjectRoom occupancy limits (adults, children, infants)
bedsobjectBed configuration (nullable)
attribute_idsarrayRoom amenity/attribute identifiers
rateobjectRoom rate details (see Section 6.7 Room Rate Object)
ratesarrayRate breakdown array
remainingsintegerNumber of remaining rooms available
prebook_map_idstringPre-booking mapping identifier

6.7 Room Rate Object

The rate object within each room contains detailed pricing and cancellation policy.

ParameterTypeDescription
base_pricefloatBase room price in supplier currency
net_pricefloatNet price
gross_pricefloatGross price
pricefloatFinal price in supplier currency
taxintegerTax amount
currencystringRate currency code
board_basisstringBoard basis / meal plan description (e.g., "Room Only")
board_codestringBoard basis code (e.g., "RO")
board_basis_codestringNormalized board basis code (e.g., "room-only")
non_refundablebooleanWhether the rate is non-refundable
free_cancellationbooleanWhether free cancellation applies
free_cancellation_deadlinestringFree cancellation deadline
cancellationsarrayCancellation policy periods with penalty amounts (see Section 6.8 Cancellation Object)
price_infoobjectPrice breakdown (see Section 6.11 Price Info Object)
currency_infoobjectCurrency conversion details
pricesarrayMulti-level price breakdown
reward_infoobjectReward points information
remainingsintegerRemaining rooms at this rate
room_namestringRoom type name
room_type_idstringRoom type identifier
remarksarraySpecial remarks or notes

6.8 Cancellation Object

The cancellations array defines time-based cancellation penalty periods. Each period specifies a date range and the penalty amount charged if the booking is cancelled within that period. Periods are ordered chronologically.

ParameterTypeDescription
fromstringPeriod start date (ISO 8601)
tostringPeriod end date (ISO 8601)
utc_fromstringPeriod start date in UTC (ISO 8601)
utc_tostringPeriod end date in UTC (ISO 8601)
amountfloatCancellation penalty amount in supplier currency
price_infoobjectPenalty price breakdown (see Section 6.11 Price Info Object)
currency_infoobjectCurrency conversion details (see Section 6.10 Currency Info Object)
pricesarrayMulti-level penalty price breakdown
base_amountfloatPenalty base amount in converted currency
markup_amountfloatPenalty markup amount
discount_amountfloatPenalty discount amount
tax_amountfloatPenalty tax amount
vat_amountfloatPenalty VAT amount
total_amountfloatPenalty total amount in converted currency
supplier_base_amountfloatPenalty amount in supplier currency
supplier_total_amountfloatPenalty total in supplier currency

Cancellation Policy Example:

The following example shows a 3-period cancellation policy:

PeriodDate RangePenaltyDescription
12026-03-03 → 2026-03-25 14:580.00 MYRFree cancellation period
22026-03-25 14:58 → 2026-03-26 14:58206.82 MYRPartial penalty (1 night charge)
32026-03-26 14:59 → 2026-03-26 23:591,034.16 MYRFull penalty (no refund)

Cancellation Sample:

{
    "cancellations": [
        {
            "from": "2026-03-03T05:48:23.437431",
            "to": "2026-03-25T14:58:00",
            "amount": 0,
            "utc_from": "2026-03-03T00:00:00",
            "utc_to": "2026-03-25T14:58:00",
            "price_info": {
                "base_amount": 0.0,
                "markup_amount": 0,
                "tax_amount": 0,
                "vat_amount": 0,
                "discount_amount": 0,
                "total_amount": 0.0,
                "supplier_base_amount": 0,
                "supplier_total_amount": 0
            },
            "currency_info": {
                "rate": 3.1798671043,
                "conversion": "MYR",
                "original": "SGD",
                "rounding": 2
            },
            "base_amount": 0.0,
            "total_amount": 0.0,
            "supplier_base_amount": 0,
            "supplier_total_amount": 0
        },
        {
            "from": "2026-03-25T14:58:00",
            "to": "2026-03-26T14:58:00",
            "amount": 65.04,
            "utc_from": "2026-03-25T14:59:00",
            "utc_to": "2026-03-26T14:58:00",
            "price_info": {
                "base_amount": 206.82,
                "markup_amount": 0,
                "tax_amount": 0,
                "vat_amount": 0,
                "discount_amount": 0,
                "total_amount": 206.82,
                "supplier_base_amount": 65.04,
                "supplier_total_amount": 65.04
            },
            "currency_info": {
                "rate": 3.1798671043,
                "conversion": "MYR",
                "original": "SGD",
                "rounding": 2
            },
            "base_amount": 206.82,
            "total_amount": 206.82,
            "supplier_base_amount": 65.04,
            "supplier_total_amount": 65.04
        },
        {
            "from": "2026-03-26T14:59:00",
            "to": "2026-03-26T23:59:00",
            "amount": 325.22,
            "utc_from": "2026-03-26T14:59:00",
            "utc_to": "2026-03-26T23:59:00",
            "price_info": {
                "base_amount": 1034.16,
                "markup_amount": 0,
                "tax_amount": 0,
                "vat_amount": 0,
                "discount_amount": 0,
                "total_amount": 1034.16,
                "supplier_base_amount": 325.22,
                "supplier_total_amount": 325.22
            },
            "currency_info": {
                "rate": 3.1798671043,
                "conversion": "MYR",
                "original": "SGD",
                "rounding": 2
            },
            "base_amount": 1034.16,
            "total_amount": 1034.16,
            "supplier_base_amount": 325.22,
            "supplier_total_amount": 325.22
        }
    ]
}

6.9 Product Type Object

ParameterTypeDescription
idstringProduct type identifier
codestringProduct code (e.g., "hotel")
namestringProduct display name (e.g., "Hotel")
iconstringProduct icon identifier

6.10 Currency Info Object

ParameterTypeDescription
ratefloatExchange rate
conversionstringTarget currency code (e.g., "MYR")
originalstringSource currency code (e.g., "SGD")
roundingintegerDecimal rounding precision

6.11 Price Info Object

ParameterTypeDescription
base_amountfloatBase price amount
markup_amountfloatMarkup amount applied
tax_amountfloatTax amount
vat_amountfloatVAT amount
discount_amountfloatDiscount amount
total_amountfloatTotal amount after all adjustments
supplier_base_amountfloatOriginal supplier base amount
supplier_total_amountfloatOriginal supplier total amount
reward_pointsfloatReward points earned (if applicable)
old_amountfloatOriginal amount before promotions (if applicable)

6.12 Reward Info Object

ParameterTypeDescription
reward_pointsfloatTotal reward points earned
ratefloatPoints conversion rate
currency_codestringCurrency code for points calculation
conversion_idstringConversion rule identifier (nullable)
is_enabledbooleanWhether rewards are enabled for this booking

6.13 Response Sample

{
    "total": 1,
    "result": [
        {
            "id": "d35036d1-1c44-4120-a6ca-36f1e39bc3c7",
            "created_at": "2026-03-03T05:49:49.925846+00:00",
            "updated_at": "2026-03-03T05:51:32.000741+00:00",
            "deleted": false,
            "booking_id": "82bd719f-99e4-4648-a304-ef4623cfe86b",
            "package_id": null,
            "product_id": "f20072987bfa43bfab8d60f584dbb5ea",
            "product_ref": "18997",
            "shopping_id": "e0381ba558704f7fa5d3d4713178d03e",
            "shopping_item_id": "70a2299335644efa9462080f32b65115",
            "status": "vouchered",
            "free_cancellation_deadline": "2026-03-25T14:58:00+00:00",
            "free_cancellation": true,
            "data": {
                "source_id": "apyacwgpawq",
                "contract_id": "166",
                "hotel_id": "109794",
                "easygds_id": "18997",
                "eps_id": "18997",
                "is_has_refundable_rooms": true,
                "supplier_code": "APItude",
                "supplier_source": "APItude",
                "currency": "SGD",
                "is_client": false,
                "name": "Shinagawa Prince Hotel",
                "street_address": "4-10-30 Takanawa Minato-ku, Tokyo, Tokyo-to, 108-8611, JP",
                "type": "hotel",
                "star": 4.0,
                "phone": "81-3-3440-1111",
                "room_count": 1,
                "pax_count": 2,
                "night_count": 1,
                "checkin_date": "2026-03-27T00:00:00",
                "checkout_date": "2026-03-28T00:00:00",
                "checkin_time": "midnight",
                "checkout_time": "11:00 AM",
                "free_cancellation": true,
                "free_cancellation_deadline": "2026-03-25T14:58:00",
                "cancellation_deadline": "2026-03-25T14:58:00",
                "country_code": "MY",
                "booking_ref": "gq-x102v0uezhfcv8z",
                "rooms": [
                    {
                        "idx": 1,
                        "room_name": "Main Tower Twin Room (6th–16th Floors) Non-Smoking",
                        "room_type_id": "TWN.C2-2",
                        "name": "16th floor Twin Main tower",
                        "supplier_room_name": "Main Tower Twin Room (6th–16th Floors) Non-Smoking",
                        "easygds_id": "6e7f65703b104cd09dd4abf333ad7ff3",
                        "free_cancellation": true,
                        "cancellation_deadline": "2026-03-25T14:58:00",
                        "supplier_cancellation_deadline": "2026-03-25T14:58:00",
                        "cancellation_buffer": 0,
                        "source_id": "apyacwgpawq",
                        "supplier_code": "APItude",
                        "hotel_id": "109794",
                        "hotel_easygds_id": "18997",
                        "images": [],
                        "contents": {
                            "description": "Rooms come with a fridge and an en suite bathroom with a bathtub and shower. Free toiletries and a hairdryer are provided. Guests will also find a personal locker in the room."
                        },
                        "area": {
                            "square_meters": 21,
                            "square_feet": null
                        },
                        "occupancy": {
                            "adults": 2,
                            "children": 2,
                            "infants": null
                        },
                        "beds": null,
                        "remainings": 19,
                        "rate": {
                            "base_price": 292.7,
                            "board_basis": "Room Only",
                            "board_code": "RO",
                            "currency": "SGD",
                            "gross_price": 292.7,
                            "net_price": 292.7,
                            "price": 292.7,
                            "tax": 0,
                            "non_refundable": false,
                            "free_cancellation": true,
                            "free_cancellation_deadline": "2026-03-25 14:58",
                            "board_basis_code": "room-only",
                            "cancellations": [
                                {
                                    "from": "2026-03-03T05:48:23.437431",
                                    "to": "2026-03-25T14:58:00",
                                    "amount": 0,
                                    "utc_from": "2026-03-03T00:00:00",
                                    "utc_to": "2026-03-25T14:58:00",
                                    "price_info": {
                                        "markup_amount": 0,
                                        "discount_amount": 0,
                                        "base_amount": 0.0,
                                        "tax_amount": 0,
                                        "vat_amount": 0,
                                        "total_amount": 0.0,
                                        "supplier_base_amount": 0,
                                        "supplier_total_amount": 0
                                    },
                                    "currency_info": {
                                        "rate": 3.1798671043,
                                        "conversion": "MYR",
                                        "original": "SGD",
                                        "rounding": 2
                                    },
                                    "base_amount": 0.0,
                                    "total_amount": 0.0,
                                    "supplier_base_amount": 0,
                                    "supplier_total_amount": 0
                                },
                                {
                                    "from": "2026-03-25T14:58:00",
                                    "to": "2026-03-26T14:58:00",
                                    "amount": 65.04,
                                    "utc_from": "2026-03-25T14:59:00",
                                    "utc_to": "2026-03-26T14:58:00",
                                    "price_info": {
                                        "markup_amount": 0,
                                        "discount_amount": 0,
                                        "base_amount": 206.82,
                                        "tax_amount": 0,
                                        "vat_amount": 0,
                                        "total_amount": 206.82,
                                        "supplier_base_amount": 65.04,
                                        "supplier_total_amount": 65.04
                                    },
                                    "currency_info": {
                                        "rate": 3.1798671043,
                                        "conversion": "MYR",
                                        "original": "SGD",
                                        "rounding": 2
                                    },
                                    "base_amount": 206.82,
                                    "total_amount": 206.82,
                                    "supplier_base_amount": 65.04,
                                    "supplier_total_amount": 65.04
                                },
                                {
                                    "from": "2026-03-26T14:59:00",
                                    "to": "2026-03-26T23:59:00",
                                    "amount": 325.22,
                                    "utc_from": "2026-03-26T14:59:00",
                                    "utc_to": "2026-03-26T23:59:00",
                                    "price_info": {
                                        "markup_amount": 0,
                                        "discount_amount": 0,
                                        "base_amount": 1034.16,
                                        "tax_amount": 0,
                                        "vat_amount": 0,
                                        "total_amount": 1034.16,
                                        "supplier_base_amount": 325.22,
                                        "supplier_total_amount": 325.22
                                    },
                                    "currency_info": {
                                        "rate": 3.1798671043,
                                        "conversion": "MYR",
                                        "original": "SGD",
                                        "rounding": 2
                                    },
                                    "base_amount": 1034.16,
                                    "total_amount": 1034.16,
                                    "supplier_base_amount": 325.22,
                                    "supplier_total_amount": 325.22
                                }
                            ],
                            "price_info": {
                                "markup_amount": 0,
                                "discount_amount": 0,
                                "base_amount": 930.75,
                                "tax_amount": 0,
                                "vat_amount": 0,
                                "total_amount": 930.75,
                                "supplier_base_amount": 292.7,
                                "supplier_total_amount": 292.7,
                                "reward_points": 9308.0
                            },
                            "currency_info": {
                                "rate": 3.1798671043,
                                "conversion": "MYR",
                                "original": "SGD",
                                "rounding": 2
                            },
                            "reward_info": {
                                "reward_points": 9308.0,
                                "rate": 10.0,
                                "currency_code": "MYR",
                                "conversion_id": null,
                                "is_enabled": true
                            },
                            "remainings": 19,
                            "room_name": "Main Tower Twin Room (6th–16th Floors) Non-Smoking",
                            "room_type_id": "TWN.C2-2",
                            "remarks": [
                                "Accommodation tax (100 - 200 yen per person per night) will be separately collected at the hotel from Oct 1st, 2021. .  Check-in hour 15:00-00:00.Car park YES (With additional debit notes).Check-out hour -11:00.Identification card at arrival.Single-Use Plastic Free."
                            ]
                        }
                    }
                ],
                "price_info": {
                    "base_amount": 930.75,
                    "markup_amount": 0,
                    "tax_amount": 0,
                    "vat_amount": 0,
                    "discount_amount": 0,
                    "total_amount": 930.75,
                    "supplier_base_amount": 292.7,
                    "supplier_total_amount": 292.7,
                    "reward_points": 9308.0,
                    "old_amount": 930.75
                },
                "reward_info": {
                    "reward_points": 9308.0,
                    "rate": 10.0,
                    "currency_code": "MYR",
                    "conversion_id": null,
                    "is_enabled": true
                },
                "currency_info": {
                    "rate": 3.1798671043,
                    "conversion": "MYR",
                    "original": "SGD",
                    "rounding": 2
                },
                "location": {
                    "point": {
                        "type": "Point",
                        "coordinates": [
                            139.73671,
                            35.62796
                        ]
                    },
                    "country_code": "JP",
                    "city_codes": [
                        "TYO"
                    ],
                    "city_code": "TYO"
                },
                "avatar": {
                    "caption": null,
                    "id": null,
                    "urls": {
                        "sm": "https://i.travelapi.com/lodging/1000000/20000/19000/18997/f43980b3_t.jpg",
                        "md": "https://i.travelapi.com/lodging/1000000/20000/19000/18997/f43980b3_b.jpg",
                        "lg": "https://i.travelapi.com/lodging/1000000/20000/19000/18997/f43980b3_z.jpg"
                    },
                    "file_ids": null,
                    "sm": "https://i.travelapi.com/lodging/1000000/20000/19000/18997/f43980b3_t.jpg",
                    "md": "https://i.travelapi.com/lodging/1000000/20000/19000/18997/f43980b3_b.jpg",
                    "lg": "https://i.travelapi.com/lodging/1000000/20000/19000/18997/f43980b3_z.jpg"
                },
                "ratings": {
                    "tripadvisor": null,
                    "liteapi": {
                        "count": 9664,
                        "overall": 3.95
                    },
                    "expedia": {
                        "count": 3544,
                        "overall": 4.2,
                        "cleanliness": 4.3,
                        "service": 4.3,
                        "comfort": 4.1,
                        "condition": 4.0,
                        "amenities": 4.1
                    }
                },
                "search_id": "80755bf5f3d4458202e6c6545d1e0510",
                "package_id": null
            },
            "currency_info": {
                "rate": 3.1798671043,
                "conversion": "MYR",
                "original": "SGD",
                "rounding": 2
            },
            "product": {
                "id": "f20072987bfa43bfab8d60f584dbb5ea",
                "code": "hotel",
                "name": "Hotel",
                "icon": "hotel"
            },
            "pdf_url": "https://core.stg-services.easygds.com/api/bookings/products/pdf?bp_id=d35036d1-1c44-4120-a6ca-36f1e39bc3c7&token=ecbdc0c7d1b7a3584bdf576e2d18832514baf84dcf5698748583344cebb50731",
            "error_message": null,
            "search": {
                "id": "80755bf5f3d4458202e6c6545d1e0510",
                "trip_id": null,
                "package_id": null,
                "product_code": "hotel",
                "progress": 1
            }
        }
    ]
}

Note: The response sample above is trimmed for readability. The actual response may contain additional fields such as selected_rooms (rooms with booking reference numbers like pvd_bk_ref and bk_ref), contents (hotel descriptions, amenities, policies, fees), amenity_ids, and expanded search with full payload details.


<a id="7-status-codes"></a>

7. Status Codes

<a id="71-booking-status"></a>

7.1 Booking Status

The status field in the booking object indicates the current state of the booking.

StatusDescription
processingBooking is being processed after payment
successBooking completed successfully and confirmed
failedBooking failed due to payment or supplier error
canceledBooking has been cancelled
quoteBooking created as a quote/estimate

<a id="72-product-status"></a>

7.2 Product Status (Hotel Only)

The status field in the products array indicates the state of each booked hotel product.

StatusDescription
processingHotel booking is being processed
confirmedHotel booking successful, awaiting voucher generation
voucheredHotel voucher has been issued
failedHotel booking failed
canceledHotel reservation has been cancelled
refundedHotel cancelled and payment refunded

<a id="73-payment-status"></a>

7.3 Payment Status

The status field in the payment object indicates the payment transaction state.

StatusDescription
processingPayment being processed by gateway
successPayment successfully completed
failedPayment failed
refundedPayment refunded to customer

<a id="74-payment-line-status"></a>

7.4 Payment Line Status

The status field in payment.lines[] array indicates individual payment transaction attempts. Each payment line represents a single attempt to process payment through the gateway.

StatusDescription
successTransaction completed successfully
failedTransaction failed
processingTransaction being processed

<a id="8-error-codes"></a>

8. Error Codes

General Error Codes

Error CodeHTTP StatusDescription
InvalidCredentials401Invalid email or password
Unauthorized401Invalid or expired access token
AccountLocked403Account has been locked
AccountInactive403Account is not active
BookingNotFound404Booking code does not exist
InvalidBookingCode400Invalid booking code format
InternalServerError500Server error occurred

Error Response Examples

Invalid Credentials

{
    "error": "InvalidCredentials",
    "message": "Invalid email or password"
}

Expired Token

{
    "error": "Unauthorized",
    "message": "Access token has expired"
}

Booking Not Found

{
    "error": "BookingNotFound",
    "message": "Booking with code DEMOP010156 not found"
}