Skip to main content

Quickstart

Bundleport’s GraphQL endpoint mirrors the Travelgate Hotel-X Pull Buyers API. Use this guide to run the familiar search → quote → book flow with minimal change.

Prerequisites

  • Endpoint

    https://api.bundleport.com/graphql
  • Headers

    Accept-Encoding: gzip
    Connection: keep-alive
    Authorization: ApiKey <your-bundleport-key>
  • Access & credentials

    • Bundleport API key enabled for the suppliers you plan to call.
    • Supplier access IDs already configured in Bundleport (same IDs you send to Hotel-X).
    • Optional: enable auditTransactions / debugData while testing to compare downstream payloads.

1. Search for availability

query HotelSearch($criteria: SearchInput!, $settings: SettingsInput!) {
hotelx {
search(criteria: $criteria, settings: $settings) {
options {
optionRefId
hotel { code name location { city country } }
rooms {
description
boardCode
price { currency net suggested }
cancelPolicy { cancelPenalties { penaltyType value deadline } }
}
}
tracing {
status
accessSpans { access status hotelsRequested hotelsReturned }
}
warnings { code description }
}
}
}

Variables:

{
"criteria": {
"stay": { "checkIn": "2025-02-14", "checkOut": "2025-02-17" },
"destination": { "code": "BCN" },
"occupancies": [{ "adults": 2 }],
"filters": { "currency": "EUR" }
},
"settings": {
"accessIds": ["ACCESS_1"],
"requestId": "qs-001",
"auditTransactions": true
}
}

2. Quote the selected option

mutation QuoteOption($optionRefId: ID!, $settings: SettingsInput!) {
hotelx {
quote(criteria: { optionRefId: $optionRefId }, settings: $settings) {
optionQuote {
optionRefId
price { currency net suggested binding }
cancelPolicy { cancelPenalties { penaltyType value deadline } }
warnings { code description }
}
errors { code description }
}
}
}

Variables:

{
"optionRefId": "OPT-123456789",
"settings": {
"accessIds": ["ACCESS_1"],
"requestId": "qs-002"
}
}

3. Book the confirmed option

mutation BookOption($input: BookInput!, $settings: SettingsInput!) {
hotelx {
book(input: $input, settings: $settings) {
booking {
status
reference { bookingID clientReference providerReference }
rooms { description confirmationReference }
price { currency net suggested }
}
warnings { code description }
errors { code description }
}
}
}

Sample variables (trimmed for brevity):

{
"input": {
"optionRefId": "OPT-123456789",
"holder": { "name": "Alice", "surname": "Doe", "email": "alice@example.com" },
"rooms": [
{
"occupancyRefId": 1,
"paxes": [
{ "name": "Alice", "surname": "Doe", "age": 34 },
{ "name": "Bob", "surname": "Smith", "age": 35 }
]
}
],
"paymentCard": {
"type": "VI",
"number": "4111111111111111",
"expire": { "month": 12, "year": 2027 },
"holder": { "name": "Alice", "surname": "Doe" }
}
},
"settings": {
"accessIds": ["ACCESS_1"],
"requestId": "qs-003"
}
}

Development & testing tips

  • Use Bundleport’s sandbox access IDs or mirror the Travelgate sample suppliers to cross-check results.1
  • Compare warnings and tracing fields with your Hotel-X baseline to confirm provider parity before production cutover.
  • Toggle auditTransactions when onboarding new suppliers so you can inspect raw downstream payloads.

Once you verify the flow end to end, you can gradually enable Bundleport-only features (business rules, catalog extensions) while keeping your existing GraphQL schema and tooling unchanged.

Footnotes

  1. Travelgate Hotel-X Pull Buyers API - Quickstart. https://docs.travelgate.com/docs/apis/for-buyers/hotel-x-pull-buyers-api/quickstart