Skip to main content

Get Booking Details - Chi Tiết Booking

API Endpoint: GET /api/v1/services/booking/v1/thong-tin-ve/{ve_id}


📋 Overview

Lấy thông tin chi tiết của một booking (vé, hành khách, chặng bay, dịch vụ đã mua).

When to call: After selecting booking from list to view/manage details.


🔌 API Specification

Endpoint

GET {{base_url}}/api/v1/services/booking/v1/thong-tin-ve/{ve_id}

URL Parameters:

ParameterTypeRequiredDescription
ve_idnumber✅ YesBooking ID from list API

Headers

{
"Content-Type": "application/json",
"Accept": "application/json",
"Authorization": "Bearer {access_token}"
}

✅ Success Response

Status: 200 OK

{
"message": "Lấy thông tin vé thành công",
"data": {
"ve": {
"id": 68,
"pnr": "37UQPF",
"uuid": "b31c2b48-aea3-11f0-8b81-86d224031662",
"trang_thai": 0,
"hang_bay": "VJ",
"so_hieu": "VJ 636",
"hanh_trinh": "SGN - DAD",
"nguoi_dai_dien": "NGUYEN VAN TEST",
"tong_hanh_khach": 1,
"tong_nguoi_lon": 1,
"tong_tre_em": 0,
"tong_em_be": 0,
"ngay_bay": "25-10-2025 20:20:00",
"ngay_book": "22-10-2025 00:31:00",
"ngay_het_han": "22-10-2025 04:31:00",
"ngay_xuat": null,
"gia_net": 1436400,
"gia_fare": 1339400,
"thue": 97000,
"hang_ve": "Eco1",
"quoc_te": false
},
"chang_bay": [
{
"key_chang_bay": "encoded-key",
"hang_bay": "VJ",
"so_hieu": "VJ 636",
"hanh_trinh": "SGN - DAD",
"diem_di": "SGN",
"tinh_di": "Hồ Chí Minh",
"diem_den": "DAD",
"tinh_den": "Đà Nẵng",
"ngay_di": "25-10-2025 20:20:00",
"ngay_den": "25-10-2025 21:40:00",
"thoi_gian_bay": "1h 20m",
"hang_ve": "Z1_ECO",
"loai_hang_ve": "Eco1",
"cabin": "ECONOMY",
"gia_net": 1436400
}
],
"hanh_khach": [
{
"id": 93,
"ve_id": 68,
"ho": "NGUYEN VAN",
"ten": "TEST",
"email": "test@example.com",
"so_dien_thoai": "0987654321",
"ngay_sinh": "01-01-1990",
"loai_hanh_khach": 1,
"danh_xung": 1
}
]
},
"status": "success",
"code": 200
}

📦 Response Structure

Booking Info (ve)

FieldTypeDescription
idnumberBooking ID (ve_id)
pnrstringPNR - Booking reference
uuidstringBooking UUID
trang_thainumberStatus: 0 = HOLD, 1 = ISSUED
hang_baystringAirline code ("VJ")
so_hieustringFlight number
hanh_trinhstringRoute (e.g., "SGN - HAN")
nguoi_dai_dienstringLead passenger name
tong_hanh_khachnumberTotal passengers
ngay_baystringFlight date
ngay_bookstringBooking date
ngay_het_hanstring/nullPayment deadline (HOLD only)
ngay_xuatstring/nullIssue date (ISSUED only)
gia_netnumberTotal net price (VND)
gia_farenumberBase fare
thuenumberTax
hang_vestringFare class
quoc_tebooleanInternational flight

Flight Segments (chang_bay)

FieldTypeDescription
key_chang_baystringSegment key (for MMB operations)
hang_baystringAirline
so_hieustringFlight number
diem_distringDeparture airport code
tinh_distringDeparture city
diem_denstringArrival airport code
tinh_denstringArrival city
ngay_distringDeparture time
ngay_denstringArrival time
thoi_gian_baystringFlight duration
cabinstringCabin class
gia_netnumberSegment price

Passengers (hanh_khach)

FieldTypeDescription
idnumberPassenger ID (hanh_khach_id)
ve_idnumberBooking ID
hostringLast name
tenstringFirst name
emailstringEmail
so_dien_thoaistringPhone
ngay_sinhstringDate of birth
loai_hanh_khachnumberType: 1=Adult, 2=Child, 3=Infant
danh_xungnumberTitle: 1=Mr, 2=Mrs, 3=Ms

💡 Example: cURL

curl -X GET "{{base_url}}/api/v1/services/booking/v1/thong-tin-ve/68" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {access_token}"

Response:

{
"message": "Lấy thông tin vé thành công",
"data": {
"ve": {
"id": 68,
"pnr": "37UQPF",
"trang_thai": 0,
"gia_net": 1436400
},
"chang_bay": [...],
"hanh_khach": [...]
},
"status": "success"
}

🎯 Use Cases

1. Display Booking Details

const { ve, chang_bay, hanh_khach } = response.data;

console.log("PNR:", ve.pnr);
console.log("Status:", ve.trang_thai === 0 ? "HOLD" : "ISSUED");
console.log("Route:", ve.hanh_trinh);
console.log("Flight:", ve.so_hieu);
console.log("Date:", ve.ngay_bay);
console.log("Total:", ve.gia_net.toLocaleString(), "VND");

if (ve.trang_thai === 0) {
console.log("Payment deadline:", ve.ngay_het_han);
}

2. Check if Can Be Modified

const canPay = ve.trang_thai === 0; // HOLD bookings can be paid
const canAddServices = ve.trang_thai === 0; // Usually HOLD only
const canUpdateJourney = true; // Both HOLD and ISSUED (with fees)

console.log("Can pay:", canPay);
console.log("Can add services:", canAddServices);

3. Get IDs for MMB Operations

// Save these for later operations
const ve_id = ve.id; // 68
const hanh_khach_id = hanh_khach[0].id; // 93
const key_chang_bay = chang_bay[0].key_chang_bay; // "encoded-key"

// Use in subsequent API calls

⚠️ Important Notes

1. Save Critical IDs

From response, save these for MMB operations:

STATE.ve_id = response.data.ve.id;
STATE.hanh_khach_id = response.data.hanh_khach[0].id;
STATE.key_chang_bay_0 = response.data.chang_bay[0].key_chang_bay;

2. Status Meanings

if (ve.trang_thai === 0) {
// HOLD - Can pay, add services
// Has payment deadline
} else if (ve.trang_thai === 1) {
// ISSUED - Already paid
// Limited modifications
}

3. Payment Deadline

For HOLD bookings:

const deadline = new Date(ve.ngay_het_han);
const now = new Date();
const hoursLeft = (deadline - now) / (1000 * 60 * 60);

if (hoursLeft < 0) {
console.log("Payment deadline expired!");
} else {
console.log(`${hoursLeft.toFixed(1)} hours left to pay`);
}

4. Multiple Passengers

hanh_khach.forEach((pax, index) => {
console.log(`Passenger ${index + 1}:`, pax.ho, pax.ten);
console.log(" ID:", pax.id); // Use for seat/service assignment
});

🐛 Common Issues

Booking Not Found (404)

Response:

{
"message": "Không tìm thấy vé",
"status": "error"
}

Cause: Invalid ve_id

Solution: Verify ve_id from list API


Unauthorized (401)

Cause: Invalid or expired token

Solution: Re-authenticate


🔗 Next Steps

After getting details, you can:

If HOLD (trang_thai: 0)

  1. Payment03-PAYMENT.md

    POST /api/v1/services/booking/v1/thanh-toan
  2. Add Services04-UPDATE-SERVICES.md

    POST /api/v1/services/booking/v1/cap-nhat-dich-vu
  3. Buy Seat05-BUY-SEAT.md

    POST /api/v1/services/booking/v1/cap-nhat-cho-ngoi

If ISSUED (trang_thai: 1)

  1. Update Journey06-UPDATE-JOURNEY.md
    POST /api/v1/services/booking/v1/cap-nhat-hanh-trinh

📝 Notes

  • Returns complete booking information
  • Includes passengers, flights, and services
  • Save ve_id, hanh_khach_id, key_chang_bay for MMB operations
  • Check trang_thai to determine available actions:
    • 0 (HOLD): Can pay, add services/seats
    • 1 (ISSUED): Can update journey (with fees)
  • HOLD bookings have ngay_het_han (payment deadline)
  • ISSUED bookings have ngay_xuat (issue date)