Travel.Flights.Orders (travel v0.2.0)

Copy Markdown View Source

Create, retrieve, list, and manage flight orders.

Endpoints

  • POST /air/orders - Create an order
  • GET /air/orders/{id} - Get an order
  • GET /air/orders - List orders
  • PATCH /air/orders/{id} - Update an order
  • GET /air/orders/{id}/available_services - Get available services
  • POST /air/orders/{id}/services - Add services to an order

Examples

# Create an order
{:ok, response} = Travel.Flights.Orders.create(%{
  selected_offers: ["off_123"],
  passengers: [%{
    given_name: "John",
    family_name: "Smith",
    born_on: "1990-01-01",
    gender: "m",
    title: "mr",
    email: "john@example.com",
    phone_number: "+442080160509"
  }],
  type: "instant"
})

# Get an order
{:ok, response} = Travel.Flights.Orders.get("ord_123")

# Update order metadata
{:ok, response} = Travel.Flights.Orders.update("ord_123", %{
  metadata: %{"payment_intent_id" => "pit_123"}
})

@link https://duffel.com/docs/api/orders

Summary

Functions

Add services to an order.

Create an order from an offer.

Get an order by ID.

Get available services for an order.

List orders with optional filtering and pagination.

Stream all orders with automatic pagination.

Update an order's metadata.

Functions

add_services(order_id, params)

@spec add_services(String.t(), map()) ::
  {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}

Add services to an order.

Parameters

  • order_id - The order ID
  • params - Service parameters:
    • :payment - Payment details
    • :add_services - List of services to add (with id and quantity)

Returns

  • {:ok, %Travel.Types.DuffelResponse{data: %Types.Order{}}} on success
  • {:error, %Travel.Error{}} on failure

create(params)

@spec create(map()) ::
  {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}

Create an order from an offer.

Parameters

  • params - Order parameters:
    • :selected_offers - (required) List of selected offer IDs (e.g., ["off_123"])
    • :passengers - (required) List of passenger details
    • :type - (required) "instant" or "pay_later"
    • :services - (optional) Additional services to add
    • :payments - (optional) Payment details for pay-later orders
    • :metadata - (optional) Custom metadata
    • :users - (optional) User IDs for order management

Returns

  • {:ok, %Travel.Types.DuffelResponse{data: %Types.Order{}}} on success
  • {:error, %Travel.Error{}} on failure

get(order_id)

@spec get(String.t()) ::
  {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}

Get an order by ID.

Parameters

  • order_id - The order ID

Returns

  • {:ok, %Travel.Types.DuffelResponse{data: %Types.Order{}}} on success
  • {:error, %Travel.Error{}} on failure

get_available_services(order_id)

@spec get_available_services(String.t()) ::
  {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}

Get available services for an order.

Parameters

  • order_id - The order ID

Returns

  • {:ok, %Travel.Types.DuffelResponse{data: [%Types.OfferAvailableService{}]}} on success
  • {:error, %Travel.Error{}} on failure

list(opts \\ nil)

@spec list(map() | nil) ::
  {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}

List orders with optional filtering and pagination.

Parameters

  • opts - Optional parameters:
    • :limit - Results per page
    • :before / :after - Pagination cursors
    • :awaiting_payment - Filter by payment state
    • :booking_reference - Filter by booking reference
    • :passenger_name - Filter by passenger name
    • :user_id - Filter by user ID

Returns

  • {:ok, %Travel.Types.DuffelResponse{data: [%Types.Order{}]}} on success
  • {:error, %Travel.Error{}} on failure

stream(opts \\ nil)

@spec stream(map() | nil) :: Enumerable.t()

Stream all orders with automatic pagination.

Returns

A Stream that yields %Travel.Types.DuffelResponse{} for each page.

update(order_id, params)

@spec update(String.t(), map()) ::
  {:ok, Travel.Types.DuffelResponse.t()} | {:error, Travel.Error.t() | term()}

Update an order's metadata.

Parameters

  • order_id - The order ID
  • params - Update parameters (typically metadata)

Returns

  • {:ok, %Travel.Types.DuffelResponse{data: %Types.Order{}}} on success
  • {:error, %Travel.Error{}} on failure