Skip to main content

BookRequest

Request payload for booking creation

input objectrequired

Booking input details

optionRefIdstringrequired

Prefer optionQuote.optionRefId after prebooking. When skipping quote (no RATE_TYPE remark containing RECHECK on that connection), pass the search option id.

languagestring

Response language code (ISO 639-1)

Example: en
rooms object[]required

Room booking details

Possible values: >= 1

  • Array [
  • occupancyRefIdinteger<int32>

    Reference to occupancy from search

    paxes object[]

    Guest details for the room

  • Array [
  • ageinteger<int32>

    Guest age

    namestring

    Guest name

    surnamestring

    Guest surname

    titlestring

    Optional title (MR, MRS, MS, etc.) for the guest

  • ]
  • ]
  • holder objectrequired

    Booking holder information

    namestring

    Holder name

    surnamestring

    Holder surname

    titlestring

    Title (MR, MRS, MS, etc.)

    contactInfo object

    Optional contact details (email, phone) for the holder; used by some providers

    emailstring<email>

    Email address

    phone object

    Phone number

    countryCodestring

    Country code

    numberstring

    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.

    property name*string
    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.

  • Array [
  • typestring

    Remark type

    valuestring

    Remark value

  • ]
  • priceDeltanumber<float>

    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 priceDelta percent, 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 0 or omit the field for maximum price control (more confirmation / price-change errors expected).
    • Capped at 999.99 for safety.
    clientReferencestring

    Client booking reference

    paymentCard object

    Payment card information

    typestring

    Card type (VI, MC, etc.)

    numberstring

    Card number

    CVCstring

    Card verification code

    expire object

    Card expiration date

    monthinteger<int32>

    Expiration month (1-12)

    yearinteger<int32>

    Expiration year

    holder object

    Card holder information

    namestring

    Card holder name

    surnamestring

    Card holder surname

    titlestring

    Title

    contactInfo object

    Contact information

    emailstring<email>

    Email address

    phone object

    Phone number

    countryCodestring

    Country code

    numberstring

    Phone number

    isVCCboolean

    Whether it's a virtual credit card

    virtualCreditCard object

    Virtual credit card details

    activationDatestring<date-time>

    Activation date

    deactivationDatestring<date-time>

    Deactivation date

    currentBalancenumber<float>

    Current balance

    currencyCodestring

    Currency code

    threeDomainSecurity object

    3D Secure authentication details

    versionstring

    3DS version

    DSTransactionIDstring

    Directory server transaction ID

    ECIstring

    Electronic commerce indicator

    CAVVstring

    Cardholder authentication verification value

    payerResponsestring

    Payer response

    payerResponseStatusstring

    Payer response status

    cardEnrolledStatusstring

    Card enrolled status

    merchantNamestring

    Merchant name

    signatureStatusstring

    Signature status

    search_idstring

    Funnel Tracking (Optional): Search ID from original availability search operation.

    How it works:

    • Pass the search_id from the original /hotels/v1/availability request.
    • Links this booking to the original search for complete funnel tracking.
    • If not provided, the system will attempt to link using:
      1. Request context (if same request flow)
      2. 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"

    quote_idstring

    Funnel Tracking (Optional): Quote ID from prebooking quote operation.

    How it works:

    • Pass the quote_id from the /hotels/v1/prebooking request (if available).
    • Links this booking to the prebooking quote for funnel tracking.
    • If not provided, the system will attempt to link using:
      1. Request context (if same request flow)
      2. 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)
    settings objectrequired

    Common settings for all requests

    requestIdstring

    Unique request identifier for tracking

    Example: req-123456789
    connectionCodesstring[]required

    List of provider connection codes to query

    Possible values: >= 1

    Example: ["testb-conn-1876","testb-conn-1877"]
    auditTransactionsboolean

    When true, responses may include auditData.transactions with supplier-level traces for debugging. Use sparingly in production; redact sensitive data in logs.

    Default value: false
    timeoutinteger<int32>

    Client timeout hint in milliseconds; platform and supplier minimums may still apply (especially for book). For availability it is also clamped to the server maximum (60000 by default), and the clamped value is the budget forwarded to the connections, so a larger figure is silently reduced rather than honoured. No schema-level default is declared on purpose: this object is shared by every operation and the effective fallback is per-operation (availability uses 10000, book is considerably higher). Omit the field to take the server's fallback for the operation you are calling rather than sending one that would cut a longer operation short.

    testModeboolean

    When true, enables non-production / sandbox-oriented behaviour where supported for the connection.

    Default value: false
    debugData object

    Additional debug data

    property name*any

    Additional debug data

    BookRequest
    {
    "input": {
    "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"
    },
    "settings": {
    "requestId": "req-123456789",
    "connectionCodes": [
    "testb-conn-1876",
    "testb-conn-1877"
    ],
    "auditTransactions": false,
    "timeout": 0,
    "testMode": false,
    "debugData": {}
    }
    }