Python SDK
Install
pip install bundleport-connect-hotels-client
The package provides a Python client for the Bundleport Connect Hotels service. You'll also need the protobuf schema package for type definitions.
Initialize the client
from bundleport_aggregator_client import ClientOptions, IntegrationClient
options = ClientOptions(
timeout_ms=5000,
debug=False, # Set to True to send/receive JSON instead of protobuf
headers={"Authorization": "ApiKey <your-bundleport-key>"},
)
client = IntegrationClient("https://api.connect.bundleport.com", options)
Close the client once finished to release the underlying session:
client.close()
Service calls
# Import protobuf message types (adjust import path based on your protobuf package structure)
from hotels.domain.request.search_request_hotels_pb2 import SearchRequest, SearchRequest_Stay, SearchRequest_Occupancy
from hotels.domain.response.search_response_hotels_pb2 import SearchResponse
from hotels.domain.request.quote_request_hotels_pb2 import QuoteRequest
from hotels.domain.response.quote_response_hotels_pb2 import QuoteResponse
from hotels.domain.request.book_request_hotels_pb2 import BookRequest
from hotels.domain.response.book_response_hotels_pb2 import BookResponse
from hotels.domain.request.cancel_request_hotels_pb2 import CancelRequest
from hotels.domain.response.cancel_response_hotels_pb2 import CancelResponse
from hotels.domain.request.booking_detail_request_hotels_pb2 import BookingDetailRequest
from hotels.domain.response.booking_detail_response_hotels_pb2 import BookingDetailResponse
from hotels.domain.request.booking_list_request_hotels_pb2 import BookingListRequest
from hotels.domain.response.booking_list_response_hotels_pb2 import BookingListResponse
# Search for hotels
search_request = SearchRequest()
search_request.stay.check_in = "2025-02-10"
search_request.stay.check_out = "2025-02-12"
occupancy = search_request.occupancies.add()
occupancy.paxes.add().age = 30
search_request.settings.access_ids.append("YOUR_ACCESS_ID")
search_response = client.search(search_request, SearchResponse())
# Get a quote
quote_request = QuoteRequest()
quote_request.option_ref_id = search_response.options[0].option_ref_id
quote_request.settings.access_ids.append("YOUR_ACCESS_ID")
quote_response = client.quote(quote_request, QuoteResponse())
# Book the hotel
book_request = BookRequest()
book_request.option_ref_id = quote_response.option_quote.option_ref_id
book_request.holder.name = "Alice"
book_request.holder.surname = "Doe"
book_request.settings.access_ids.append("YOUR_ACCESS_ID")
book_response = client.book(book_request, BookResponse())
# Cancel a booking
cancel_request = CancelRequest()
cancel_request.booking_reference = book_response.booking.reference.bookingID
cancel_request.settings.access_ids.append("YOUR_ACCESS_ID")
cancel_response = client.cancel(cancel_request, CancelResponse())
# Get booking details
detail_request = BookingDetailRequest()
detail_request.booking_reference = book_response.booking.reference.bookingID
detail_request.settings.access_ids.append("YOUR_ACCESS_ID")
detail_response = client.booking_detail(detail_request, BookingDetailResponse())
# List bookings
list_request = BookingListRequest()
list_request.filters.page_size = 50
list_request.settings.access_ids.append("YOUR_ACCESS_ID")
list_response = client.booking_list(list_request, BookingListResponse())
Other helper methods are available on the client:
get_boardsget_categoriesget_hotelsget_roomsget_destinationsget_metadatasearch_destinations
See the REST API reference for request/response fields.