A1B2C3D4) that remains constant throughout its lifecycle.opengetOpenBooking multiple times returns the same bookingsaveOpenBooking until paymentcheckOffer to confirm live availability and get the current pricegetOpenBooking (creates if doesn't exist)saveOpenBooking with new items| Status | Description | User-Facing | Triggers Workflows |
|---|---|---|---|
open | Shopping cart (unpaid) | "In Progress" | No |
payment_pending | Payment initiated but not confirmed | "Processing Payment" | No |
paid | Payment successful | "Paid" | Yes - Books with suppliers |
booked | Confirmed with all suppliers | "Confirmed" | No |
confirmed | Booking confirmed to customer | "Confirmed" | No |
completed | Trip finished | "Completed" | No |
cancelled | Booking cancelled | "Cancelled" | May trigger cancellations |
refunded | Payment refunded | "Refunded" | No |
payment_failed | Payment processing failed | "Payment Failed" | No |
open → payment_pending → paid → booked → confirmed → completed
↓ ↓ ↓ ↓ ↓
cancelled ← ← ← ← ← ← ← ← ← ← ← ← ← ← (can cancel from most states)
↓
refunded (after cancellation)open once payment beginscompleted or refunded)paidpaid status, the system automatically triggers critical workflows:BookManually=true) or requiring pickup selection (PickupRequired=true) are skipped during automatic booking.paid = Real Bookingsopen to paid, the system immediately begins booking with live suppliers. This creates real reservations that may incur charges and cancellation fees.paidsaveOpenBooking with checkBeforePayment=true before payment to validate availability and pricinggetOpenBookingsaveOpenBookingcheckBeforePayment=true)Details object, validates ownership, cleans invalid itemssaveBookingStatuspaid (triggers supplier bookings)bookedconfirmedcancelledopen, syncs to external systemslistBookingscheckOfferAVAILABLE, NOT_AVAILABLE, or UNKNOWN per offer with refreshed price. Accepts up to 10 offers per request, checked in parallel.getBookingsendMessage can become stale -- prices shift and rooms sell out between search and checkout. checkOffer performs a real-time availability and price check against the supplier so your UI always shows current data.checkOffer when a customer selects an offer, adds it to their cart, or reaches a checkout page. Avoid calling it on every search result -- reserve it for offers the customer has expressed interest in.sendMessage and browses resultscheckOffer to get the current price and confirm availabilityAVAILABLE, proceed to create the booking with the refreshed priceOfferKey -- A client-defined identifier (printable ASCII, max 256 characters). Echoed back so you can match results to your UI elements.GiataID -- The hotel identifier from Products[].ProviderID in the sendMessage response (cast the string to an integer). This value lives on the product, not inside the PackageOffer object.PackageOffer -- A single offer from Products[].Details.PackageOffers[] in the sendMessage response. Pass it through unchanged.TravellerAges (optional) -- Array of traveller ages (up to 9, each between 0 and 120). Defaults to a single adult aged 30 if omitted.Locale field controls the language of returned messages (e.g. "de", "en").PackageOffer:Accommodation.ArrivalDate -- Arrival date in YYYY-MM-DD formatAccommodation.LengthOfStay -- Number of nights (must be greater than 0)Accommodation.Rooms[0].BookingCode -- The room booking code (e.g. "DB1U")Price.Currency is set inside PackageOffer, it is used as the preferred currency for the price check; otherwise the system defaults to EUR.| Status | Meaning | Client Action |
|---|---|---|
AVAILABLE | Offer is sellable at the returned price | Display refreshed Price / Currency and allow booking |
NOT_AVAILABLE | Offer exists but cannot be sold | Show the user that this offer is no longer available. Check Reason for details (e.g. "accommodation", "transport", "accommodation,transport") |
UNKNOWN | No match found, upstream error, or timeout | Treat as unavailable. Check Error for diagnostic details |
AVAILABLE, always use the refreshed Price and Currency instead of the original search price.{
"Results": [
{
"OfferKey": "cart-item-1",
"Status": "AVAILABLE",
"SubStatus": "",
"Price": 1299.50,
"Currency": "EUR",
"Reason": "",
"Error": ""
}
]
}400 error.checkOffer returns a 400 error. Contact your account manager to enable this feature.checkBeforePayment=true before accepting paymentpaid after payment confirmationlistBookings with filters for efficient queriespaid before payment succeedscheckBeforePayment validation stepopen after paymentsaveOpenBooking on bookings that aren't open{
"Data": null,
"Error": {
"Code": "NOT_FOUND",
"Message": "Booking not found"
}
}{
"Data": null,
"Error": {
"Code": "BAD_REQUEST",
"Message": "Cannot revert booking status back to 'open'"
}
}paid booking back to opensaveOpenBooking?checkBeforePayment=true or checkBookingAvailability):{
"Data": null,
"Error": {
"Code": "BAD_REQUEST",
"Message": "offer is no longer available: accommodation"
}
}accommodation -- the hotel is no longer availabletransport -- the flight is no longer availableaccommodation,transport -- both hotel and flight are unavailableunknown -- the unavailable component could not be determined{
"Data": null,
"Error": {
"Code": "INTERNAL_ERROR",
"Message": "Failed to complete booking with supplier: Activity no longer available"
}
}paid:paid (payment confirmed)booked - Successfully confirmed with Musementbooked - Successfully confirmed with Exfinitypaid - Pending confirmation from Peakworkbooked status, you can transition the booking to booked status overall.paid