All notable changes to this project are documented here.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning. From the next release onward, entries below are generated automatically by release-please from Conventional Commits.

0.1.0 (2026-08-29)

Features

  • aic: add AirlineInitiatedChanges resource (22c2db0)
  • cancellations: add OrderCancellations resource (53b4935)
  • cars: add Search, Quotes and Bookings resources (29c2136)
  • cars: build a search driver from age and residence (42cb130)
  • client: add PUT and per-request host override (187438d)
  • client: emit telemetry span for requests (9798978)
  • client: encode a map parameter as Duffel's key[sub] filter (cb36b40)
  • client: report the rate limit a response carried (2fb240d)
  • client: set a receive timeout that fits a flight search (aa771d4)
  • credits: add AirlineCredits resource (1ca9c2f)
  • flights: add offer request and order param builders (397c375)
  • identity: add customer users, groups and component keys (b46afc1)
  • offer-requests: accept query options when fetching a request (cf1155b)
  • offers: add Offers resource (94617ab)
  • offers: add upsells/2 for the upsell offers endpoint (37ae0d4)
  • offers: send a body when pricing an offer or order (48027c6)
  • order-changes: add order change flow resources (6c1ae8e)
  • orders: add Orders resource (e82ff5f)
  • page: add has_more?/1 and next_params/2 (4330787)
  • payments: add Cards and ThreeDSecureSessions (6a5a834)
  • payments: add Payments resource (f154330)
  • pricing: add price actions to Offers and Orders (54de889)
  • scaffold Duffel API client (6065855)
  • schema: add ItineraryView for the itineraries search shape (c40ff09)
  • schema: add opt-in typed response structs (e717a5d)
  • schema: add the flight fields the API returns but the structs dropped (a69c13d)
  • schema: add the stays fields the API returns but the structs dropped (d7a015c)
  • schema: add typed schemas for stays and cars (#14) (49c5d2a)
  • search: add Partial and Batch offer requests (d0d6211)
  • seat-maps: add SeatMaps resource (dc4a5db)
  • stays,cars: add search param builders (06c11cd)
  • stays: add NegotiatedRates and reference data (f33917f)
  • stays: add Quotes and Bookings resources (4b31aae)
  • stays: add Search and Accommodation resources (3ba580a)
  • stays: build the optional stays search filters (60d5e9b)
  • supporting-data: add Airlines, Airports, Aircraft (94c6585)
  • supporting-data: add Cities, LoyaltyProgrammes, Places (7ad53ea)
  • webhooks: add WebhookEvents and WebhookDeliveries (bb44267)
  • webhooks: add Webhooks resource with signature verification (c8fc1cb)

Bug Fixes

  • align client with OpenAPI spec (2f6373f)
  • client: error when a list response has no data list (e1515e5)
  • client: error when a response has no data envelope (67ef2e5)
  • client: hide the access token from inspect (4169834)
  • client: raise the default receive timeout to 130s (7f1330f)
  • client: send array query parameters as repeated keys (0528d60)
  • client: send idempotency key on every POST (e8c4b5a)
  • client: stop retrying the statuses Duffel says not to retry (bef7ce5)
  • client: stop streaming when the cursor stops advancing (27c5b49)
  • deps: bump req from 0.5.18 to 0.6.1 (#5) (ff91ceb)
  • deps: bump req from 0.6.1 to 0.6.2 (#7) (be8f605)
  • deps: bump req from 0.6.2 to 0.7.2 (#13) (2cf420e)
  • deps: bump req from 0.7.2 to 0.7.3 (#15) (3f19c77)
  • error: fall back to the x-request-id header for the request id (ae725bc)
  • error: return a Duffel.Error for transport failures (feba426)
  • partial-offer-requests: keep repeated selected_partial_offer[] (41bf1c4)
  • schema: let from_map/1 accept an already-decoded struct (2d70300)
  • stays: require the search area when listing accommodation (d21d297)

0.1.0 - 2026-06-09

Initial release: an Elixir client for the Duffel API v2, built on Req.

Added

  • HTTP client with bearer auth, the Duffel-Version header, gzip and automatic retries for rate-limited and transient errors.
  • Explicit client struct (Duffel.new/0 and Duffel.new/1) so multiple Duffel accounts can be used from one application.
  • Cursor pagination via Duffel.Page, with a lazy stream/2 on each list endpoint.
  • Structured errors (Duffel.Error) with the API error type exposed as an atom for pattern matching.
  • Flights: offer requests (standard, partial and batch), offers, seat maps, orders, payments, order cancellations, order change requests/offers/changes, airline-initiated changes and airline credits.
  • Stays: search, accommodation, quotes, bookings, negotiated rates, brands, chains and loyalty programmes.
  • Cars: search, quotes and bookings.
  • Payments: card tokenisation on the PCI-scoped api.duffel.cards host and 3D Secure sessions.
  • Identity: customer users, customer user groups and component client keys.
  • Supporting data: airlines, airports, aircraft, cities, loyalty programmes and place suggestions.
  • Webhooks: subscription management, event and delivery inspection, and signature verification with replay protection.