Create, retrieve, list, and cancel bookings.
Endpoints
POST /stays/bookings- Create a bookingGET /stays/bookings/{id}- Get a bookingGET /stays/bookings- List bookingsPATCH /stays/bookings/{id}- Update a bookingPOST /stays/bookings/{id}/actions/cancel- Cancel a booking
Examples
# Create a booking
{:ok, response} = Travel.Stays.Bookings.create(%{
quote_id: "quo_123",
guests: [%{given_name: "John", family_name: "Smith"}],
email: "john@example.com",
phone_number: "+447700900000"
})
# Get a booking
{:ok, response} = Travel.Stays.Bookings.get("bok_123")
# List bookings
{:ok, response} = Travel.Stays.Bookings.list(%{limit: 20})
# Cancel a booking
{:ok, response} = Travel.Stays.Bookings.cancel("bok_123")
Summary
Functions
Cancel a booking.
Create a booking.
Get a booking by ID.
List bookings with optional filtering and pagination.
List all bookings as a stream, handling pagination automatically.
Update a booking.
Functions
@spec cancel(String.t()) :: {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}
Cancel a booking.
Parameters
booking_id- The booking ID to cancel
Returns
{:ok, %Travel.Types.DuffelResponse{data: %Types.StaysBooking{}}}on success{:error, %Travel.Error{}}on failure
@spec create(map()) :: {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}
Create a booking.
Parameters
params- Booking parameters::quote_id- (required) The quote ID to book:guests- (required) List of guests withgiven_nameandfamily_name:email- (required) Lead guest email:phone_number- (required) Lead guest phone number:loyalty_programme_account_number- (optional) Loyalty account number:accommodation_special_requests- (optional) Special requests:payment- (optional) Payment info:metadata- (optional) Custom metadata map:users- (optional) List of user IDs allowed to manage the booking
Returns
{:ok, %Travel.Types.DuffelResponse{data: %Types.StaysBooking{}}}on success{:error, %Travel.Error{}}on failure
@spec get(String.t()) :: {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}
Get a booking by ID.
Parameters
booking_id- The booking ID
Returns
{:ok, %Travel.Types.DuffelResponse{data: %Types.StaysBooking{}}}on success{:error, %Travel.Error{}}on failure
@spec list(map() | nil) :: {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}
List bookings with optional filtering and pagination.
Parameters
opts- Optional query parameters::limit- Results per page (max 200):before- Cursor for previous page:after- Cursor for next page:user_id- Filter by customer user ID
Returns
{:ok, %Travel.Types.DuffelResponse{data: [%Types.StaysBooking{}]}}on success{:error, %Travel.Error{}}on failure
@spec stream(map() | nil) :: Enumerable.t()
List all bookings as a stream, handling pagination automatically.
Parameters
opts- Optional query parameters (e.g.,user_id)
Returns
A Stream that yields %Travel.Types.DuffelResponse{} for each page.
@spec update(String.t(), map()) :: {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}
Update a booking.
Parameters
booking_id- The booking IDparams- Update parameters::users- (required) List of user IDs allowed to manage the booking
Returns
{:ok, %Travel.Types.DuffelResponse{data: %Types.StaysBooking{}}}on success{:error, %Travel.Error{}}on failure