Skip to main content

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_boards
  • get_categories
  • get_hotels
  • get_rooms
  • get_destinations
  • get_metadata
  • search_destinations

See the REST API reference for request/response fields.