BookInput
Booking input details
Prefer optionQuote.optionRefId after prebooking. When skipping quote
(no RATE_TYPE remark containing RECHECK on that connection), pass the search option id.
Response language code (ISO 639-1)
enrooms object[]required
Room booking details
Possible values: >= 1
Reference to occupancy from search
paxes object[]
Guest details for the room
Guest age
Guest name
Guest surname
Optional title (MR, MRS, MS, etc.) for the guest
holder objectrequired
Booking holder information
Holder name
Holder surname
Title (MR, MRS, MS, etc.)
contactInfo object
Optional contact details (email, phone) for the holder; used by some providers
Email address
phone object
Phone number
Country code
Phone number
additionalData object
Optional string map. Aggregator currently reads skipMarkup ("true" / "1") for margin.
paymentMode is enforced at quote/prebooking, not at book — forwarding it does not change book policy.
remarks object[]
Booking remarks. Must be an array of Remark objects (not a string).
Example:
"remarks": [
{"type": "GENERAL", "value": "Late check-in requested"}
]
Common Error: Sending a string like "remarks": "-" will cause a proto parsing error.
Omit the field entirely or send an empty array "remarks": [] if no remarks are needed.
Remark type
Remark value
Price Tolerance: Maximum allowed price increase (as percentage) between the quote (prebooking) and the final booking price. Buyer decision — no platform default.
How it works:
- When a booking is submitted, the system re-validates the price with the provider.
- If the current price exceeds the quoted price by more than
priceDeltapercent, the booking is rejected. - For providers that support an upstream tolerance tag, the value is forwarded as-is (percentage units). For all providers it also drives the Bundleport price validation.
If omitted (or 0):
- Strict matching: any increase of one cent rejects the booking.
- Some connections receive an explicit zero tolerance tag on the wire (not a platform default of 2).
Example:
- Quote price: 100.00 EUR
priceDelta: 2.0 (2%)- Booking allowed if current price <= 102.00 EUR
- Booking rejected if current price > 102.00 EUR
Buyer guidance:
- Send an explicit value when you accept a limited increase (e.g.
2). The cost of any accepted increase is borne by the buyer, not by the provider. - Send
0or omit the field for maximum price control (more confirmation / price-change errors expected). - Capped at 999.99 for safety.
Client booking reference
paymentCard object
Payment card information
Card type (VI, MC, etc.)
Card number
Card verification code
expire object
Card expiration date
Expiration month (1-12)
Expiration year
holder object
Card holder information
Card holder name
Card holder surname
Title
contactInfo object
Contact information
Email address
phone object
Phone number
Country code
Phone number
Whether it's a virtual credit card
virtualCreditCard object
Virtual credit card details
Activation date
Deactivation date
Current balance
Currency code
threeDomainSecurity object
3D Secure authentication details
3DS version
Directory server transaction ID
Electronic commerce indicator
Cardholder authentication verification value
Payer response
Payer response status
Card enrolled status
Merchant name
Signature status
Funnel Tracking (Optional): Search ID from original availability search operation.
How it works:
- Pass the
search_idfrom the original/hotels/v1/availabilityrequest. - Links this booking to the original search for complete funnel tracking.
- If not provided, the system will attempt to link using:
- Request context (if same request flow)
- Correlation ID (as fallback for cross-request linking)
- The source of the ID is tracked in analytics (
search_id_source: "request", "context", "correlation_id").
Example: "search_id": "550e8400-e29b-41d4-a716-446655440000"
Funnel Tracking (Optional): Quote ID from prebooking quote operation.
How it works:
- Pass the
quote_idfrom the/hotels/v1/prebookingrequest (if available). - Links this booking to the prebooking quote for funnel tracking.
- If not provided, the system will attempt to link using:
- Request context (if same request flow)
- Correlation ID (as fallback for cross-request linking)
- The source of the ID is tracked in analytics (
quote_id_source: "request", "context", "correlation_id"). - Note: Direct bookings without a quote may not have a quote_id.
Example: "quote_id": "660e8400-e29b-41d4-a716-446655440001"
Funnel Flow:
Search (generates search_id)
↓
Quote (receives search_id, generates quote_id)
↓
Book (receives search_id + quote_id)
{
"optionRefId": "string",
"language": "en",
"rooms": [
{
"occupancyRefId": 0,
"paxes": [
{
"age": 0,
"name": "string",
"surname": "string",
"title": "string"
}
]
}
],
"holder": {
"name": "string",
"surname": "string",
"title": "string",
"contactInfo": {
"email": "user@example.com",
"phone": {
"countryCode": "string",
"number": "string"
}
}
},
"additionalData": {
"skipMarkup": "false"
},
"remarks": [
{
"type": "string",
"value": "string"
}
],
"priceDelta": 0,
"clientReference": "string",
"paymentCard": {
"type": "string",
"number": "string",
"CVC": "string",
"expire": {
"month": 0,
"year": 0
},
"holder": {
"name": "string",
"surname": "string",
"title": "string",
"contactInfo": {
"email": "user@example.com",
"phone": {
"countryCode": "string",
"number": "string"
}
}
},
"isVCC": true,
"virtualCreditCard": {
"activationDate": "2024-07-29T15:51:28.071Z",
"deactivationDate": "2024-07-29T15:51:28.071Z",
"currentBalance": 0,
"currencyCode": "string"
},
"threeDomainSecurity": {
"version": "string",
"DSTransactionID": "string",
"ECI": "string",
"CAVV": "string",
"payerResponse": "string",
"payerResponseStatus": "string",
"cardEnrolledStatus": "string",
"merchantName": "string",
"signatureStatus": "string"
}
},
"search_id": "string",
"quote_id": "string"
}