My Bookings Endpoint
Returns the authenticated customer's bookings, newest first, paginated. Flight bookings are returned inline with full itinerary and passenger detail.
- Endpoint:
/api/v1/bookings - Method:
GETorPOST
Results are scoped to the logged-in customer and your partner account. A booking placed under a different partner is never returned.
Headers
| Header | Value | Required | Description |
|---|---|---|---|
Partner-Access-Token | Base64 String | Yes | Your encrypted AES-256 time-sensitive token. |
Authorization | Bearer <token> | Yes | Customer access token from Login. |
X-Currency | Currency Code | Optional | Display currency. |
Accept-Language | Language Code | Optional | e.g. en, th, my. |
Content-Type | application/json | Yes | |
Accept | application/json | Yes |
Parameters
Accepted as query string (GET) or JSON body (POST).
| Parameter | Type | Required | Description |
|---|---|---|---|
page | Integer | Yes | Page number, minimum 1. |
limit | Integer | Optional | Results per page. Minimum 1, maximum 100. Default 10. |
keywords | String | Optional | Partial match against booking_number or payment_ref. |
payment_status | String | Optional | Exact match. See values below. |
Payment status values
| Value | Label |
|---|---|
pending | Pending |
paid | Paid |
unpaid | Unpaid |
rejected | Rejected |
cancelled | Cancelled |
failed | Failed |
refund_processing | Refund Processing |
refunded | Refunded |
timeout | Timeout |
Sample Request
GET /api/v1/bookings?page=1&limit=10&payment_status=paid
{
"page": 1,
"limit": 10,
"keywords": "650E23E8",
"payment_status": "paid"
}
Response
Note the nesting: pagination and rows both live inside data.
| Field | Type | Description |
|---|---|---|
data.meta.current_page | Integer | Current page. |
data.meta.last_page | Integer | Total pages. |
data.meta.per_page | Integer | Page size. |
data.meta.total | Integer | Total bookings matching the filter. |
data.data | Array | Booking rows. |
Booking row
| Field | Type | Description |
|---|---|---|
id | Integer | Internal booking ID. |
booking_number | String | Booking number. Use it with Booking Detail. |
payment_ref | String | Payment reference. |
currency | String | Display currency. |
exchange_rate | Float | THB → display currency rate. |
sub_total | Float | Total before bank fee, display currency. |
grand_total | Float | Total including bank fee, display currency. |
payment_status | String | See table above. |
payment_method / payment_option | String | Payment used. |
remark | String|null | Internal note. |
buyer_info | Object | Buyer details, nationality resolved to a country name. |
bank_fee_type / bank_fee_amount / bank_fee_price | Mixed | Bank fee breakdown. |
booked_at | String|null | Booking timestamp. |
coupon / campaign | Object|null | Coupon and campaign, when used. |
discount_amount | Float | Discount applied. |
created_at | String | Creation timestamp. |
expired_at | String | Payment hold expiry — 30 minutes after creation. |
items | Array | Products in this booking. |
Flight item (pd9)
Each flight item carries product_type, booking_number, pnr_code, booking_summary,
contact_details, passengers, flight_details, journey_list, pricing_details,
baggage_info, cancellation_policy, ancillary_details and booking_detail_link. The
fields are identical to the flight item described in
Booking Result.
:::note Key casing
Unlike the /unified-booking/* endpoints, /bookings* responses are not snake-cased.
Nested provider payloads such as solution keep their original camelCase keys
(solutionId, journeyList, segmentList).
:::
:::info Empty items
A booking whose items cannot be resolved is filtered out of the list rather than returned
with an empty items array. A page can therefore contain fewer rows than per_page even
when last_page is higher.
:::
Sample Response
Truncated.
{
"result": 1,
"message": "success",
"data": {
"meta": {
"current_page": 1,
"last_page": 3,
"per_page": 10,
"total": 24
},
"data": [
{
"id": 10482,
"booking_number": "650E23E81BFC54D8",
"payment_ref": "7992370634757",
"currency": "THB",
"exchange_rate": 1,
"sub_total": 9830.00,
"grand_total": 10124.90,
"payment_status": "paid",
"payment_method": "two_c2p",
"payment_option": "card_payment",
"buyer_info": {
"first_name": "Alex",
"last_name": "Doe",
"email": "buyer@example.com",
"nationality": "Myanmar",
"nationality_code": "MM",
"phone_code": "66",
"phone_number": "800000001"
},
"bank_fee_type": "percentage",
"bank_fee_amount": 3,
"bank_fee_price": 294.90,
"discount_amount": 0,
"booked_at": "2026-08-26 09:02:11",
"created_at": "2026-08-26T09:02:11.000000Z",
"expired_at": "2026-08-26T09:32:11.000000Z",
"items": [
{
"product_type": "pd9",
"booking_number": "650E23E81BFC54D8",
"pnr_code": "XY7Z2Q",
"booking_summary": {
"booking_status": "completed",
"payment_status": "paid",
"trip_type": "1",
"adult_quantity": 1,
"grand_total": 10124.90,
"currency_code": "THB"
},
"passengers": [ ],
"journey_list": [ ],
"flight_details": [ ]
}
]
}
]
}
}
Errors
| HTTP | Cause |
|---|---|
401 | Missing or invalid Authorization bearer token. |
422 | page missing or not a positive integer, or limit above 100. |
Next Step
Open a single booking with Booking Detail.