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/debugDatawhile 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
warningsandtracingfields with your Hotel-X baseline to confirm provider parity before production cutover. - Toggle
auditTransactionswhen 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.