Flights, stays, cars, payment resources, notifications and customer identity through the Duffel v2 API. Select only the operations this application needs. Read-only connections allow GET operations. Read-write connections require an interactive console decision for every invocation, including searches. Account and production access depend on Duffel.
What you can do (105)
What you can do
Available commands: 105 (57 read, 48 write). Enable only the commands your application needs.
| Command | Effect |
|---|---|
Search flight offers — duffel.offers.search |
Read |
Stays: List loyalty programmes — duffel.api.stays.loyalty-programmes.list |
Read |
Stays: Get accommodation reviews — duffel.api.stays.accommodation.reviews.list |
Read |
Stays: Search for accommodation suggestions — duffel.api.stays.accommodation.suggestions.create |
Write |
Stays: Get accommodation — duffel.api.stays.accommodation.get |
Read |
Stays: List accommodation — duffel.api.stays.accommodation.list |
Read |
Supporting Resources: List aircraft — duffel.api.air.aircraft.list |
Read |
Supporting Resources: Get a single aircraft — duffel.api.air.aircraft.get |
Read |
Flights: List airline credits — duffel.api.air.airline-credits.list |
Read |
Flights: Create an airline credit — duffel.api.air.airline-credits.create |
Write |
Flights: Get a single airline credit — duffel.api.air.airline-credits.get |
Read |
Flights: Update an airline-initiated change — duffel.api.air.airline-initiated-changes.update |
Write |
Flights: List airline-initiated changes — duffel.api.air.airline-initiated-changes.list |
Read |
Flights: Accept the airline-initiated change — duffel.api.air.airline-initiated-changes.accept |
Write |
Supporting Resources: Get a single airline — duffel.api.air.airlines.get |
Read |
Supporting Resources: List airlines — duffel.api.air.airlines.list |
Read |
Supporting Resources: List airports — duffel.api.air.airports.list |
Read |
Supporting Resources: Get a single airport — duffel.api.air.airports.get |
Read |
Flights: Create a batch offer request — duffel.api.air.batch-offer-requests.create |
Write |
Flights: Get a single batch offer request — duffel.api.air.batch-offer-requests.get |
Read |
Stays: Creating a booking payment instruction — duffel.api.stays.bookings.payment-instructions.create |
Write |
Stays: List bookings — duffel.api.stays.bookings.list |
Read |
Stays: Creating a booking — duffel.api.stays.bookings.create |
Write |
Stays: Cancel booking — duffel.api.stays.bookings.cancel |
Write |
Stays: Get booking — duffel.api.stays.bookings.get |
Read |
Stays: Update booking — duffel.api.stays.bookings.update |
Write |
Stays: Get hotel brand — duffel.api.stays.brands.get |
Read |
Stays: List hotel brands — duffel.api.stays.brands.list |
Read |
Payments: Create a Card — duffel.api.payments.cards.create |
Write |
Payments: Delete a Card — duffel.api.payments.cards.delete |
Write |
Cars: Get a Booking — duffel.api.cars.bookings.get |
Read |
Cars: Cancel a Booking — duffel.api.cars.bookings.cancel |
Write |
Cars: Create a Booking — duffel.api.cars.bookings.create |
Write |
Cars: Create a Quote — duffel.api.cars.quotes.create |
Write |
Cars: Search for Cars — duffel.api.cars.search.create |
Write |
Stays: Get hotel chain — duffel.api.stays.chains.get |
Read |
Stays: List hotel chains — duffel.api.stays.chains.list |
Read |
Supporting Resources: List cities — duffel.api.air.cities.list |
Read |
Supporting Resources: Get a single city — duffel.api.air.cities.get |
Read |
Identity: Create a component client key — duffel.api.identity.component-client-keys.create |
Write |
Identity: List Customer User Groups — duffel.api.identity.customer.user-groups.list |
Read |
Identity: Create a Customer User Group — duffel.api.identity.customer.user-groups.create |
Write |
Identity: Delete a single customer user group — duffel.api.identity.customer.user-groups.delete |
Write |
Identity: Get a single customer user group — duffel.api.identity.customer.user-groups.get |
Read |
Identity: Update a single customer user group — duffel.api.identity.customer.user-groups.update |
Write |
Identity: Get a single customer user — duffel.api.identity.customer.users.get |
Read |
Identity: Update a single customer user — duffel.api.identity.customer.users.update |
Write |
Identity: List customer users — duffel.api.identity.customer.users.list |
Read |
Identity: Create a Customer User — duffel.api.identity.customer.users.create |
Write |
Supporting Resources: Get a single loyalty programme — duffel.api.air.loyalty-programmes.get |
Read |
Supporting Resources: List loyalty programmes — duffel.api.air.loyalty-programmes.list |
Read |
Stays: Delete a negotiated rate — duffel.api.stays.negotiated-rates.delete |
Write |
Stays: Get a negotiated rate — duffel.api.stays.negotiated-rates.get |
Read |
Stays: Update a negotiated rate — duffel.api.stays.negotiated-rates.update |
Write |
Stays: List negotiated rates — duffel.api.stays.negotiated-rates.list |
Read |
Stays: Creating a negotiated rate — duffel.api.stays.negotiated-rates.create |
Write |
Flights: Get a single offer request — duffel.api.air.offer-requests.get |
Read |
Flights: List offer requests — duffel.api.air.offer-requests.list |
Read |
Flights: Create an offer request — duffel.api.air.offer-requests.create |
Write |
Flights: Get a single offer — duffel.api.air.offers.get |
Read |
Flights: Update a single offer passenger — duffel.api.air.offers.passengers.update |
Write |
Flights: Price an offer with intended payment methods — duffel.api.air.offers.price |
Write |
Flights: Get upsell offers for an offer — duffel.api.air.offers.upsell-offers.create |
Write |
Flights: List offers — duffel.api.air.offers.list |
Read |
Flights: List order cancellations — duffel.api.air.order-cancellations.list |
Read |
Flights: Create a pending order cancellation — duffel.api.air.order-cancellations.create |
Write |
Flights: Get a single order cancellation — duffel.api.air.order-cancellations.get |
Read |
Flights: Confirm an order cancellation — duffel.api.air.order-cancellations.confirm |
Write |
Flights: List order change offers — duffel.api.air.order-change-offers.list |
Read |
Flights: Get a single order change offer — duffel.api.air.order-change-offers.get |
Read |
Flights: Get a single order change request — duffel.api.air.order-change-requests.get |
Read |
Flights: Create an order change request — duffel.api.air.order-change-requests.create |
Write |
Flights: Get a single order change — duffel.api.air.order-changes.get |
Read |
Flights: Confirm an order change — duffel.api.air.order-changes.confirm |
Write |
Flights: Create a pending order change — duffel.api.air.order-changes.create |
Write |
Flights: Get a single order — duffel.api.air.orders.get |
Read |
Flights: Update a single order — duffel.api.air.orders.update |
Write |
Flights: List orders — duffel.api.air.orders.list |
Read |
Flights: Create an order — duffel.api.air.orders.create |
Write |
Flights: Add a service to an order — duffel.api.air.orders.services.create |
Write |
Flights: Price an order with an intended payment method — duffel.api.air.orders.price |
Write |
Flights: List available services for an order — duffel.api.air.orders.available-services.list |
Read |
Flights: Get full offer fares for selected partial offers — duffel.api.air.partial-offer-requests.fares.list |
Read |
Flights: Create a partial offer request — duffel.api.air.partial-offer-requests.create |
Write |
Flights: Get a single partial offer request — duffel.api.air.partial-offer-requests.get |
Read |
Flights: List payments — duffel.api.air.payments.list |
Read |
Flights: Create a payment — duffel.api.air.payments.create |
Write |
Flights: Get a single payment — duffel.api.air.payments.get |
Read |
Supporting Resources: List Place suggestions — duffel.api.places.suggestions.list |
Read |
Stays: Create a quote for a rate — duffel.api.stays.quotes.create |
Write |
Stays: Get quote — duffel.api.stays.quotes.get |
Read |
Stays: Fetch rates for a search result — duffel.api.stays.search-results.fetch-all-rates |
Write |
Stays: Search for accommodation — duffel.api.stays.search.create |
Write |
Flights: Get seat maps — duffel.api.air.seat-maps.list |
Read |
Payments: Create a 3DS Session — duffel.api.payments.three-d-secure-sessions.create |
Write |
Notifications: List webhook deliveries — duffel.api.air.webhooks.deliveries.list |
Read |
Notifications: Get a single webhook delivery — duffel.api.air.webhooks.deliveries.get |
Read |
Notifications: Retry delivering a webhook event — duffel.api.air.webhooks.events.redeliver |
Write |
Notifications: Get a single webhook event — duffel.api.air.webhooks.events.get |
Read |
Notifications: List webhook events — duffel.api.air.webhooks.events.list |
Read |
Notifications: List webhooks — duffel.api.air.webhooks.list |
Read |
Notifications: Create a webhook — duffel.api.air.webhooks.create |
Write |
Notifications: Ping a webhook — duffel.api.air.webhooks.ping |
Write |
Notifications: Delete a webhook — duffel.api.air.webhooks.delete |
Write |
Notifications: Update a webhook — duffel.api.air.webhooks.update |
Write |
Connect and use
Open the integration's connection form to check the available credential source. The source has not been resolved for this documentation export. The instructions below apply when using your own provider account.
Get your provider credentials
Follow these steps for Duffel, then enter the issued values in the connection form below.
- Create a Duffel organization and generate a test token in its dashboard. Enter Access token and select sandbox for initial tests. Use live tokens with production only after approval. Choose read-write only for commands that change resources; live orders can incur charges.
Where to enter credentials
In the integration page, sign in, choose your workspace and open Connect. If a Credentials choice is shown, select Use my credentials. Fill the following connection fields and save. Provider credentials belong in this form, never in an MCP configuration or tool input.
| Connection field | Requirement |
|---|---|
| Duffel access token | Required |
| Duffel environment | Optional |
| Token scope | Optional |
Open API keys and create a Tooluse.net key for the enabled commands.
Set TOOLUSE_API_KEY in your client and use the shared MCP configuration.
Configure Claude Code, Codex or Cursor once
Permissions and results
If you have more than one workspace, check the selected workspace in the connection or API-key dialog before saving. Roles, enabled commands, expiry and revocation use Tooluse.net's existing permissions. Disabling a connection or revoking a key immediately prevents new calls.
Send one Claude tool_use block per request. Keep the same Idempotency-Key when retrying the same request; use a new key for a new call. The response includes the shared Tooluse.net receipt and Claude tool_result. Check both HTTP status and the returned tool result before treating a call as successful.
Your connection's daily allowance and key permissions also apply. Adding a connection does not make a provider request.
Calls return the shared execution receipt and a Claude tool_result. Provider output varies by operation; consult the provider documentation for its response fields. Unconfirmed calls should be checked before retrying.
Call from your client
Use the shared MCP configuration. Refresh your client's tool list after saving the connection or changing key permissions, then call the returned tool name with the example input below.
Configure Claude Code, Codex or Cursor once
Discover your enabled tools
List permitted tools in Claude format. Read every page using page and size (maximum 100) until all results have been received. Use the returned name, not a catalog capability identifier, in the tool_use block.
curl 'https://api.tooluse.net/v1/tools' \
-H "Authorization: Bearer $TOOLUSE_API_KEY"
Find this command in the tool list permitted by your key. Replace svc_FROM_YOUR_TOOL_LIST with its returned name. Use a new Idempotency-Key for each new call and retain it when retrying that same call.
HTTP call
curl 'https://api.tooluse.net/v1/tool-calls' \
-H "Authorization: Bearer $TOOLUSE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: replace-with-a-new-call-id' \
--data '{
"type": "tool_use",
"id": "toolu_example",
"name": "svc_FROM_YOUR_TOOL_LIST",
"input": {
"slices": [
{
"origin": "SFO",
"destination": "JFK",
"departureDate": "2027-02-10"
}
],
"adults": 1,
"limit": 10
}
}'
Send one Claude tool_use block per request. Keep the same Idempotency-Key when retrying the same request; use a new key for a new call. The response includes the shared Tooluse.net receipt and Claude tool_result. Check both HTTP status and the returned tool result before treating a call as successful.
Commands
Search flight offers — duffel.offers.search
Run Search flight offers with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
slices |
array | Required | Flight legs | minItems: 1; maxItems: 2 |
slices[] |
object | Optional | additionalProperties: false |
|
slices[].origin |
string | Required | Origin IATA code | minLength: 1; maxLength: 3; pattern: "^[A-Z]{3}$" |
slices[].destination |
string | Required | Destination IATA code | minLength: 1; maxLength: 3; pattern: "^[A-Z]{3}$" |
slices[].departureDate |
string | Required | Departure date | minLength: 1; maxLength: 10; pattern: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$" |
slices[].departureTime |
object | Optional | Inclusive airport-local departure window | additionalProperties: false |
slices[].departureTime.from |
string | Required | maxLength: 5; pattern: "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$" |
|
slices[].departureTime.to |
string | Required | maxLength: 5; pattern: "^(?:[01][0-9]|2[0-3]):[0-5][0-9]$" |
|
adults |
integer | Optional | Adult passengers | minimum: 1; maximum: 9 |
cabinClass |
string | Optional | Cabin class | enum: ["economy","premium_economy","business","first"]; minLength: 1; maxLength: 30 |
limit |
integer | Optional | Maximum returned offers | minimum: 1; maximum: 20 |
childAges |
array | Optional | Children ages on final travel date | minItems: 0; maxItems: 8 |
childAges[] |
integer | Optional | minimum: 2; maximum: 17 |
|
lapInfants |
integer | Optional | Lap infants, each with a different adult | minimum: 0; maximum: 4 |
maxConnections |
integer | Optional | Maximum connections per slice; zero requires one segment, not verified absence of technical stops | minimum: 0; maximum: 2 |
Full JSON Schema
Example input
{
"slices": [
{
"origin": "SFO",
"destination": "JFK",
"departureDate": "2027-02-10"
}
],
"adults": 1,
"limit": 10
}
At most 2 provider requests per invocation; timeout: 30 seconds.
Stays: List loyalty programmes — duffel.api.stays.loyalty-programmes.list
Run Stays: List loyalty programmes with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
This tool has no input parameters.
Full JSON Schema
Example input
{}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Get accommodation reviews — duffel.api.stays.accommodation.reviews.list
Run Stays: Get accommodation reviews with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Search for accommodation suggestions — duffel.api.stays.accommodation.suggestions.create
Run Stays: Search for accommodation suggestions with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.location |
— | Optional | ||
data.location |
object | Optional | This optional parameter can limit results to a given radius centered on the given coordinates | anyOf[1]; maxProperties: 100 |
data.location.geographic_coordinates |
object | Required | The center of the search criteria's radius. Represented by an object containing latitude and longitude. | anyOf[1]; maxProperties: 100 |
data.location.geographic_coordinates.latitude |
number | Required | The latitude position of the search's center, represented in Decimal degrees with 6 decimal points with a range between -90° and 90° | anyOf[1] |
data.location.geographic_coordinates.longitude |
number | Required | The longitude position of the search's center, represented in Decimal degrees with 6 decimal points with a range between -180° and 180° | anyOf[1] |
data.location.radius |
integer | Optional | The search area's extent from the provided coordinates in kilometers. Can only be between 1 and 100. Default of 5km is subject to change. | anyOf[1] |
data.location |
null | Optional | anyOf[2] |
|
data.query |
string | Required | The search query for getting accommodation suggestions. Requires a minimum of three characters. | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"query": "rits",
"location": {
"radius": 5,
"geographic_coordinates": {
"longitude": -0.1416,
"latitude": 51.5071
}
}
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Get accommodation — duffel.api.stays.accommodation.get
Run Stays: Get accommodation with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: List accommodation — duffel.api.stays.accommodation.list
Run Stays: List accommodation with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Required | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.latitude |
number | Required | The latitude position of the search's center, represented in Decimal degrees with 6 decimal points with a range between -90° and 90° | |
query.longitude |
number | Required | The longitude position of the search's center, represented in Decimal degrees with 6 decimal points with a range between -180° and 180° | |
query.radius |
integer | Required | The search area's extent from the provided coordinates in kilometers. Can only be between 1 and 100. Default of 5km is subject to change. |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"latitude": 51.5071,
"longitude": -0.1416,
"radius": 5
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: List aircraft — duffel.api.air.aircraft.list
Run Supporting Resources: List aircraft with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.after |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: Get a single aircraft — duffel.api.air.aircraft.get
Run Supporting Resources: Get a single aircraft with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List airline credits — duffel.api.air.airline-credits.list
Run Flights: List airline credits with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.user_id |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"user_id": "icu_00009hj8USM7Ncg31cBCLL"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create an airline credit — duffel.api.air.airline-credits.create
Run Flights: Create an airline credit with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.airline_iata_code |
string | Required | The two-character IATA code for the airline that issued this credit | maxLength: 16000 |
data.amount |
string | Required | The monetary value of this airline credit | maxLength: 16000 |
data.amount_currency |
string | Required | The currency of the amount, as an ISO 4217 currency code. |
maxLength: 16000 |
data.code |
string | Required | The code which identifies the airline credit to the airline and will be used to redeem the airline credit | maxLength: 16000 |
data.expires_at |
string | Required | The datetime at which the airline credit expires and will no longer be eligible for payment | maxLength: 16000 |
data.family_name |
string | Optional | The family name of the customer this credit is for. Required if user_id is not provided. |
maxLength: 16000 |
data.given_name |
string | Optional | The given name of the customer this credit is for. Required if user_id is not provided. |
maxLength: 16000 |
data.issued_on |
string | Required | The date the airline credit was issued by the airline | maxLength: 16000; format: "date" |
data.type |
string | Required | Type of the airline credit | enum: ["eticket","mco","emd"]; maxLength: 16000 |
data.user_id |
string | Optional | Duffel's unique identifier for the customer user that the credit should be associated with. Either provide user_id or both given_name and family_name. |
maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"user_id": "icu_00009hj8USM7Ncg31cBCLL",
"type": "eticket",
"issued_on": "2020-04-11",
"given_name": "John",
"family_name": "Smith",
"expires_at": "2024-04-11T15:48:11.642Z",
"code": "1234567890123",
"amount_currency": "GBP",
"amount": "90.80",
"airline_iata_code": "AA"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single airline credit — duffel.api.air.airline-credits.get
Run Flights: Get a single airline credit with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Update an airline-initiated change — duffel.api.air.airline-initiated-changes.update
Run Flights: Update an airline-initiated change with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.action_taken |
— | Required | ||
data.action_taken |
string | Required | The action taken in response to this airline-initiated change. Accepted, cancelled and changed reflect your action in accepting the change, cancelling the order or changing the order respectively. | anyOf[1]; enum: ["accepted","cancelled","changed"]; maxLength: 16000 |
data.action_taken |
null | Required | anyOf[2] |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"action_taken": "accepted"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List airline-initiated changes — duffel.api.air.airline-initiated-changes.list
Run Flights: List airline-initiated changes with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.order_id |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"order_id": "ord_00009hthhsUZ8W4LxQgkjo"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Accept the airline-initiated change — duffel.api.air.airline-initiated-changes.accept
Run Flights: Accept the airline-initiated change with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: Get a single airline — duffel.api.air.airlines.get
Run Supporting Resources: Get a single airline with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: List airlines — duffel.api.air.airlines.list
Run Supporting Resources: List airlines with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
Full JSON Schema
Example input
{
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: List airports — duffel.api.air.airports.list
Run Supporting Resources: List airports with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.iata_country_code |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"iata_country_code": "GB"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: Get a single airport — duffel.api.air.airports.get
Run Supporting Resources: Get a single airport with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create a batch offer request — duffel.api.air.batch-offer-requests.create
Run Flights: Create a batch offer request with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.supplier_timeout |
integer | Optional | ||
data |
object | Required | maxProperties: 100 |
|
data.airline_credit_ids |
array | Optional | The list of airline credit IDs that Duffel received as input. | maxItems: 100 |
data.airline_credit_ids[] |
string | Optional | maxLength: 16000 |
|
data.cabin_class |
— | Optional | ||
data.cabin_class |
string | Optional | The cabin that the passengers want to travel in | anyOf[1]; enum: ["first","business","premium_economy","economy"]; maxLength: 16000 |
data.cabin_class |
null | Optional | anyOf[2] |
|
data.include_split_ticket |
boolean | Optional | When set to true and the search has more than one slice, additional one-way searches will be fired per slice to find split-ticket candidates. These results are only included in the response when view is set to itineraries. Please get in touch with the Duffel support team at <[email protected]> to access this feature. |
|
data.max_connections |
integer | Optional | The maximum number of connections within any slice of the offer. For example 0 means a direct flight which will have a single segment within each slice and 1 means a maximum of two segments within each slice of the offer. | minimum: 0; maximum: 2 |
data.passengers |
array | Required | The passengers who want to travel. If you specify an age for a passenger, the type may differ for the same passenger in different offers due to airline's different rules. e.g. one airline may treat a 14 year old as an adult, and another as a young adult. You may only specify an age or a type – not both. |
maxItems: 100 |
data.passengers[] |
— | Optional | ||
data.passengers[] |
object | Optional | A passenger specified by their type | anyOf[1]; maxProperties: 100 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[1]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[1]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[1]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[1]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[1]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[1]; maxLength: 16000 |
data.passengers[].type |
string | Required | The type of the passenger. If the passenger is aged 18 or over, you should specify a type of adult. If a passenger is aged under 18, you should specify their age instead of a type. A passenger can have only a type or an age, but not both. |
anyOf[1]; enum: ["adult","child","infant_without_seat"]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[1]; maxLength: 16000 |
data.passengers[] |
object | Optional | A passenger specified by their age | anyOf[2]; maxProperties: 100 |
data.passengers[].age |
integer | Required | The age of the passenger on the departure_date of the final slice. e.g. if you are searching for a round trip and the passenger is 15 years old at the time of the outbound flight, but they then have their birthday and are 16 years old for the inbound flight, you must set the age to 16. You should specify an age for passengers who are under 18 years old. A passenger can have only a type or an age, but not both. You can optionally pass age with fare_type though. |
anyOf[2]; minimum: 0; maximum: 130 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[2]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[2]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[2]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[2]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[2]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[2]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[2]; maxLength: 16000 |
data.passengers[] |
object | Optional | A passenger specified by their fare type. This is used for leisure private fares. | anyOf[3]; maxProperties: 100 |
data.passengers[].age |
integer | Optional | The age of the passenger on the departure_date of the final slice. e.g. if you are searching for a round trip and the passenger is 15 years old at the time of the outbound flight, but they then have their birthday and are 16 years old for the inbound flight, you must set the age to 16. You should specify an age for passengers who are under 18 years old. A passenger can have only a type or an age, but not both. You can optionally pass age with fare_type though. |
anyOf[3]; minimum: 0; maximum: 130 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[3]; maxLength: 16000 |
data.passengers[].fare_type |
string | Required | The fare type of the passenger. If the passenger is aged less than 18, you should pass in age as well. | anyOf[3]; enum: ["accompanying_adult","contract_bulk","contract_bulk_child","contract_bulk_infant_with_seat","contract_bulk_infant_without_seat","frequent_flyer","group_inclusive_tour","group_inclusive_tour_child","humanitarian","individual_inclusive_tour_child","marine","seat_only","student","teacher","tour_operator_inclusive","tour_operator_inclusive_infant","unaccompanied_child","visiting_friends_and_family"]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[3]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[3]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[3]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[3]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[3]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[3]; maxLength: 16000 |
data.private_fares |
object | Optional | The private fare codes for this offer request. You can pass in multiple airlines with their specific private fare codes. The key is the airline's IATA code that provided the private fare code. The corporate_code and tour_code are provided to you by the airline and the tracking_reference is to identify your business by the airlines. |
maxProperties: 100; additionalProperties: true |
data.slices |
array | Required | The slices that make up this offer request. One-way journeys can be expressed using one slice, whereas return trips will need two. | maxItems: 100 |
data.slices[] |
object | Optional | maxProperties: 100 |
|
data.slices[].arrival_time |
— | Optional | ||
data.slices[].arrival_time |
object | Optional | The inclusive time range for the arrival of the slice | anyOf[1]; maxProperties: 100 |
data.slices[].arrival_time.from |
— | Optional | anyOf[1] |
|
data.slices[].arrival_time.from |
string | Optional | The local time in the format hh:mm of the destination airport at or after which the slice should arrive. Defaults to 00:00 when only to is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].arrival_time.from |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].arrival_time.to |
— | Optional | anyOf[1] |
|
data.slices[].arrival_time.to |
string | Optional | The local time in the format hh:mm of the destination airport at or before which the slice should arrive. Defaults to 23:59 when only from is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].arrival_time.to |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].arrival_time |
null | Optional | anyOf[2] |
|
data.slices[].departure_date |
string | Required | The ISO 8601 date on which the passengers want to depart | maxLength: 16000; format: "date" |
data.slices[].departure_time |
— | Optional | ||
data.slices[].departure_time |
object | Optional | The inclusive time range for the departure of the slice | anyOf[1]; maxProperties: 100 |
data.slices[].departure_time.from |
— | Optional | anyOf[1] |
|
data.slices[].departure_time.from |
string | Optional | The local time in the format hh:mm of the origin airport at or after which the slice should depart. Defaults to current time at airport when only to is provided or from value is in the past |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].departure_time.from |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].departure_time.to |
— | Optional | anyOf[1] |
|
data.slices[].departure_time.to |
string | Optional | The local time in the format hh:mm of the origin airport at or before which the slice should depart. Defaults to 23:59 when only from is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].departure_time.to |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].departure_time |
null | Optional | anyOf[2] |
|
data.slices[].destination |
string | Required | The 3-letter IATA code for the city or airport where this slice ends | maxLength: 16000 |
data.slices[].origin |
string | Required | The 3-letter IATA code for the city or airport where this slice starts | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"query": {
"supplier_timeout": 10000
},
"data": {
"slices": [
{
"origin": "LHR",
"destination": "JFK",
"departure_time": {
"to": "17:00",
"from": "09:45"
},
"departure_date": "2020-04-24",
"arrival_time": {
"to": "17:00",
"from": "09:45"
}
}
],
"private_fares": {
"QF": [
{
"corporate_code": "FLX53",
"tracking_reference": "ABN:2345678"
}
],
"UA": [
{
"corporate_code": "1234",
"tour_code": "578DFL"
}
]
},
"passengers": [
{
"family_name": "Earhart",
"given_name": "Amelia",
"loyalty_programme_accounts": [
{
"account_number": "12901014",
"airline_iata_code": "BA"
}
],
"type": "adult"
},
{
"age": 14
},
{
"fare_type": "student"
},
{
"age": 5,
"fare_type": "contract_bulk_child"
}
],
"max_connections": 0,
"include_split_ticket": true,
"cabin_class": "economy",
"airline_credit_ids": [
"acd_00009hthhsUZ8W4LxQgkjo",
"acd_0000thhsUZ8W4LxQgkjo00"
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single batch offer request — duffel.api.air.batch-offer-requests.get
Run Flights: Get a single batch offer request with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.view |
string | Optional | enum: ["offers","itineraries"]; maxLength: 16000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Creating a booking payment instruction — duffel.api.stays.bookings.payment-instructions.create
Run Stays: Creating a booking payment instruction with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.booking_id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.approved_charges |
object | Required | Describes what kinds of charges are approved for this payment instruction. The accommodation should charge the provided card for all approved charges, and charge the guest for the rest. | maxProperties: 100 |
data.approved_charges.base |
boolean | Required | Whether the accommodation should charge the provided card for the base price of the booking. | |
data.approved_charges.fees |
boolean | Required | Whether the accommodation should charge the provided card for the fees of the booking. | |
data.approved_charges.other |
— | Optional | ||
data.approved_charges.other |
string | Optional | Any other approved charges, as free text items. | anyOf[1]; maxLength: 16000 |
data.approved_charges.other |
null | Optional | anyOf[2] |
|
data.approved_charges.taxes |
boolean | Required | Whether the accommodation should charge the provided card for the taxes of the booking. | |
data.card_id |
string | Required | The id of the payment card to use for payment. The card must be a lodged card (created with multi_use set to true). |
maxLength: 16000 |
data.invoice |
object | Required | Describes where to send the invoice for this charge. | maxProperties: 100 |
data.invoice.address_city |
string | Required | maxLength: 16000 |
|
data.invoice.address_country_code |
string | Required | maxLength: 16000 |
|
data.invoice.address_line_1 |
string | Required | maxLength: 16000 |
|
data.invoice.address_line_2 |
string | Optional | maxLength: 16000 |
|
data.invoice.address_postal_code |
string | Required | maxLength: 16000 |
|
data.invoice.address_region |
string | Required | maxLength: 16000 |
|
data.invoice.company_name |
string | Required | maxLength: 16000 |
|
data.invoice.send_to |
string | Required | maxLength: 16000 |
|
data.limit_amount |
string | Required | The limit of the approved amount. The accommodation should not charge the provided card more than this amount. | maxLength: 16000 |
data.limit_currency |
string | Required | The currency of the limit_amount, as an ISO 4217 currency code. |
maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"booking_id": "resource_fixture"
},
"data": {
"limit_currency": "USD",
"limit_amount": "1437.55",
"invoice": {
"send_to": "[email protected]",
"company_name": "Merchant",
"address_region": "London",
"address_postal_code": "SW1A 2AA",
"address_line_2": "Westminster",
"address_line_1": "10 Downing St",
"address_country_code": "GB",
"address_city": "London"
},
"card_id": "tcd_0000AS0NZdKjjnnHZmSUbI",
"approved_charges": {
"taxes": true,
"other": "Parking up to $50. Food up to $20",
"fees": true,
"base": true
}
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: List bookings — duffel.api.stays.bookings.list
Run Stays: List bookings with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.user_id |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"user_id": "icu_00009htyDGjIfajdNBZRlw"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Creating a booking — duffel.api.stays.bookings.create
Run Stays: Creating a booking with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.accommodation_special_requests |
— | Optional | ||
data.accommodation_special_requests |
string | Optional | Guest's specific requests about this booking to be forwarded to the accommodation. This field should not be used to provide medical or otherwise sensitive information. | anyOf[1]; maxLength: 1000 |
data.accommodation_special_requests |
null | Optional | anyOf[2] |
|
data.email |
string | Required | Lead guest's email address | maxLength: 16000; format: "email" |
data.guests |
array | Required | List of guests that will stay on this booking. A minimum of one guest must be provided. For bookings of more than one room, the reservation will be made under the name of the first guest provided. We recommend (though optional) that you pass an additional guest name per additional room. | maxItems: 100 |
data.guests[] |
object | Optional | maxProperties: 100 |
|
data.guests[].family_name |
string | Required | Guest's family name | maxLength: 16000 |
data.guests[].given_name |
string | Required | Guest's given name | maxLength: 16000 |
data.guests[].user_id |
— | Optional | ||
data.guests[].user_id |
string | Optional | Creates an association between the guest and a previously created user. This is intended to allow guests the ability to manage their own bookings. | anyOf[1]; maxLength: 16000 |
data.guests[].user_id |
null | Optional | anyOf[2] |
|
data.loyalty_programme_account_number |
— | Optional | ||
data.loyalty_programme_account_number |
string | Optional | Loyalty programme account number to associate with this booking. Use this only when the quote has a supported_loyalty_programme indicated. Otherwise, this will result in an error. Account number is relayed to the hotel on a best-effort basis, it is at the hotel's discretion to honour the loyalty programme. | anyOf[1]; maxLength: 16000 |
data.loyalty_programme_account_number |
null | Optional | anyOf[2] |
|
data.metadata |
— | Optional | ||
data.metadata |
object | Optional | Metadata contains a set of key-value pairs that you can attach to an object. It can be useful for storing additional information about the object, in a structured format. Duffel does not use this information. You should not store sensitive information in this field. The metadata is a collection of key-value pairs, both of which are strings. You can store a maximum of 50 key-value pairs, where each key has a maximum length of 40 characters and each value has a maximum length of 500 characters. Keys must only contain numbers, letters, dashes, or underscores. | anyOf[1]; maxProperties: 100 |
data.metadata |
null | Optional | anyOf[2] |
|
data.payment |
— | Optional | ||
data.payment |
object | Optional | The payment details to use to pay for the booking. When you want to pay using the "balance" payment method, this must be omitted. When you want to pay using the "card" payment method, this object is required. | anyOf[1]; maxProperties: 100 |
data.payment.three_d_secure_session_id |
string | Optional | The ID of the ThreeDSecureSession | anyOf[1]; maxLength: 16000 |
data.payment |
null | Optional | anyOf[2] |
|
data.phone_number |
string | Required | Lead guest's phone number in E.164 (international) format. | maxLength: 16000 |
data.quote_id |
string | Required | The id of the stay quote you want to book. |
maxLength: 16000 |
data.users |
array | Optional | The ids of customer users that would be allowed to manage the booking. |
maxItems: 100 |
data.users[] |
string | Optional | maxLength: 16000 |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"users": [
"icu_00009htyDGjIfajdNBZRlw"
],
"quote_id": "quo_0000AS0NZdKjjnnHZmSUbI",
"phone_number": "+442080160509",
"payment": {
"three_d_secure_session_id": "3ds_0000AWr2XsTRIF1Vp34gh5"
},
"metadata": {
"customer_reference_number": "DLXYYZ5"
},
"loyalty_programme_account_number": "201154908",
"guests": [
{
"user_id": "icu_00009htyDGjIfajdNBZRlw",
"given_name": "Amelia",
"family_name": "Earheart"
}
],
"email": "[email protected]",
"accommodation_special_requests": "2:00 PM early check-in required"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Cancel booking — duffel.api.stays.bookings.cancel
Run Stays: Cancel booking with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.booking_id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"booking_id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Get booking — duffel.api.stays.bookings.get
Run Stays: Get booking with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Update booking — duffel.api.stays.bookings.update
Run Stays: Update booking with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.users |
array | Required | The ids of customer users that would be allowed to manage the booking. |
maxItems: 100 |
data.users[] |
string | Optional | maxLength: 16000 |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"users": [
"icu_00009htyDGjIfajdNBZRlw"
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Get hotel brand — duffel.api.stays.brands.get
Run Stays: Get hotel brand with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: List hotel brands — duffel.api.stays.brands.list
Run Stays: List hotel brands with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
This tool has no input parameters.
Full JSON Schema
Example input
{}
At most 1 provider requests per invocation; timeout: 30 seconds.
Payments: Create a Card — duffel.api.payments.cards.create
Run Payments: Create a Card with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.address_city |
string | Required | The city of the billing address associated with the card. | maxLength: 16000 |
data.address_country_code |
string | Required | The ISO 3166-1 alpha-2 code for the country of the billing address associated with the card. | maxLength: 16000 |
data.address_line_1 |
string | Required | The first line of the billing address associated with the card. | maxLength: 16000 |
data.address_line_2 |
string | Optional | The second line of the billing address associated with the card. | maxLength: 16000 |
data.address_postal_code |
string | Required | The postal code of the billing address associated with the card. | maxLength: 16000 |
data.address_region |
string | Required | The region of the billing address associated with the card. | maxLength: 16000 |
data.card_id |
string | Optional | Duffel's unique identifier for the multi-use card that should be used to create a single-use card record. | maxLength: 16000 |
data.cvc |
string | Required | The Card Verification Code (CVC). Value not accepted when creating multi-use cards. | maxLength: 16000 |
data.expiry_month |
string | Required | The card expiry month as an integer with two digits, e.g. for February use 02. |
maxLength: 16000 |
data.expiry_year |
string | Required | The card expiry year as an integer with two digits, e.g. for 2023 use 23. |
maxLength: 16000 |
data.multi_use |
boolean | Optional | Set to true to indicate that this card can be used multiple times. Should not be provided when creating a card from a multi-use card record. |
|
data.name |
string | Required | The name on the card. The name must match the cardholder's name as it appears on the issued card. This information may be verified during payment authorisation, and any discrepancies could result in the payment being declined. | maxLength: 16000 |
data.number |
string | Required | The card number. | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"number": "4242424242424242",
"name": "Neil Armstrong",
"multi_use": false,
"expiry_year": "23",
"expiry_month": "02",
"cvc": "123",
"card_id": "tcd_00009hthhsUZ8W4LxQgkjb",
"address_region": "London",
"address_postal_code": "SW1A 2AA",
"address_line_2": "Westminster",
"address_line_1": "10 Downing St",
"address_country_code": "GB",
"address_city": "London"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Payments: Delete a Card — duffel.api.payments.cards.delete
Run Payments: Delete a Card with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Cars: Get a Booking — duffel.api.cars.bookings.get
Run Cars: Get a Booking with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Cars: Cancel a Booking — duffel.api.cars.bookings.cancel
Run Cars: Cancel a Booking with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Cars: Create a Booking — duffel.api.cars.bookings.create
Run Cars: Create a Booking with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100; additionalProperties: false |
|
data.driver |
object | Required | maxProperties: 100; additionalProperties: false |
|
data.driver.date_of_birth |
string | Required | The driver date of birth. | maxLength: 16000; format: "date" |
data.driver.email |
string | Required | The driver email address. | maxLength: 16000; pattern: ".+@.+"; format: "email" |
data.driver.family_name |
string | Required | The driver family name. | minLength: 2; maxLength: 16000 |
data.driver.given_name |
string | Required | The driver given name. | minLength: 2; maxLength: 16000 |
data.driver.phone_number |
string | Required | The driver phone number in E.164 format. | maxLength: 16000 |
data.driver.user_id |
— | Optional | ||
data.driver.user_id |
string | Optional | The customer user id that is associated with the driver. This will allow the driver to manage their booking. |
anyOf[1]; maxLength: 16000 |
data.driver.user_id |
null | Optional | anyOf[2] |
|
data.inbound_flight_number |
— | Optional | ||
data.inbound_flight_number |
string | Optional | The inbound flight number, if applicable. | anyOf[1]; maxLength: 16000 |
data.inbound_flight_number |
null | Optional | anyOf[2] |
|
data.metadata |
— | Optional | ||
data.metadata |
object | Optional | Metadata contains a set of key-value pairs that you can attach to an object. It can be useful for storing additional information about the object, in a structured format. Duffel does not use this information. You should not store sensitive information in this field. The metadata is a collection of key-value pairs, both of which are strings. You can store a maximum of 50 key-value pairs, where each key has a maximum length of 40 characters and each value has a maximum length of 500 characters. Keys must only contain numbers, letters, dashes, or underscores. | anyOf[1]; maxProperties: 100 |
data.metadata |
null | Optional | anyOf[2] |
|
data.payment |
— | Optional | ||
data.payment |
object | Optional | Payment information for the booking. | anyOf[1]; maxProperties: 100; additionalProperties: false |
data.payment.method |
string | Required | The payment method. | anyOf[1]; enum: ["card"]; maxLength: 16000 |
data.payment.three_d_secure_session_id |
string | Required | The identifier of the 3DS session to use for payment. | anyOf[1]; maxLength: 16000 |
data.payment |
null | Optional | anyOf[2] |
|
data.quote_id |
string | Required | The identifier of the quote to book. | maxLength: 16000 |
data.supplier_loyalty_programme_account_number |
— | Optional | ||
data.supplier_loyalty_programme_account_number |
string | Optional | The supplier loyalty programme account number, if applicable. | anyOf[1]; maxLength: 16000 |
data.supplier_loyalty_programme_account_number |
null | Optional | anyOf[2] |
|
data.users |
array | Optional | The ids of customer users that would be allowed to manage the booking. |
maxItems: 100 |
data.users[] |
string | Optional | maxLength: 16000 |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"users": [
"icu_0000B0nwceAOyWuOFJ23NJ"
],
"quote_id": "qut_0000Bx4Af0b5l45AT50eqO",
"payment": {
"three_d_secure_session_id": "3ds_0000A3t2sL46m5eDF45kWW",
"method": "card"
},
"metadata": {
"custom_field": "custom_value_123"
},
"driver": {
"user_id": "icu_0000B0nwceAOyWuOF3pz1M",
"phone_number": "+442080160509",
"given_name": "Amelia",
"family_name": "Earheart",
"email": "[email protected]",
"date_of_birth": "1990-01-01"
}
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Cars: Create a Quote — duffel.api.cars.quotes.create
Run Cars: Create a Quote with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100; additionalProperties: false |
|
data.rate_id |
string | Required | The identifier of the rate to create a quote from. | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"rate_id": "rae_0000Bx4Af0b5l45AT50eqO"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Cars: Search for Cars — duffel.api.cars.search.create
Run Cars: Search for Cars with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100; additionalProperties: false |
|
data.driver |
— | Required | ||
data.driver |
object | Required | Information about the driver such as the age and country of residence. | allOf[1]; maxProperties: 100; additionalProperties: false |
data.driver.age |
integer | Required | The age of the driver. | allOf[1]; minimum: 18 |
data.driver.residence_country_code |
string | Required | The ISO 3166-1 alpha-2 country code of the driver's country of residence. | allOf[1]; maxLength: 16000; pattern: "^[A-Z]{2}$" |
data.driver |
— | Required | The driver this search is for. | allOf[2] |
data.dropoff_date |
string | Required | The date when the car will be dropped off. | maxLength: 16000; format: "date" |
data.dropoff_location |
— | Required | ||
data.dropoff_location |
object | Required | A search location with geographic coordinates and search radius. | allOf[1]; maxProperties: 100; additionalProperties: false |
data.dropoff_location.geographic_coordinates |
object | Required | The geographic coordinates of the location. | allOf[1]; maxProperties: 100; additionalProperties: false |
data.dropoff_location.geographic_coordinates.latitude |
number | Required | The latitude coordinate. | allOf[1]; minimum: -90; maximum: 90 |
data.dropoff_location.geographic_coordinates.longitude |
number | Required | The longitude coordinate. | allOf[1]; minimum: -180; maximum: 180 |
data.dropoff_location.radius |
integer | Optional | Search radius in kilometres around the coordinates. | allOf[1]; minimum: 1; maximum: 10 |
data.dropoff_location |
— | Required | The location where the car will be dropped off. | allOf[2] |
data.dropoff_time |
string | Required | The time the car will be dropped off, in HH:MM format. | maxLength: 16000; pattern: "^\\d{2}:\\d{2}$" |
data.pickup_date |
string | Required | The date the car will be picked up. | maxLength: 16000; format: "date" |
data.pickup_location |
— | Required | ||
data.pickup_location |
object | Required | A search location with geographic coordinates and search radius. | allOf[1]; maxProperties: 100; additionalProperties: false |
data.pickup_location.geographic_coordinates |
object | Required | The geographic coordinates of the location. | allOf[1]; maxProperties: 100; additionalProperties: false |
data.pickup_location.geographic_coordinates.latitude |
number | Required | The latitude coordinate. | allOf[1]; minimum: -90; maximum: 90 |
data.pickup_location.geographic_coordinates.longitude |
number | Required | The longitude coordinate. | allOf[1]; minimum: -180; maximum: 180 |
data.pickup_location.radius |
integer | Optional | Search radius in kilometres around the coordinates. | allOf[1]; minimum: 1; maximum: 10 |
data.pickup_location |
— | Required | The location where the car will be picked up. | allOf[2] |
data.pickup_time |
string | Required | The time the car will be picked up, in HH:MM format. | maxLength: 16000; pattern: "^\\d{2}:\\d{2}$" |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"pickup_time": "10:30",
"pickup_location": {
"radius": 5,
"geographic_coordinates": {
"longitude": -0.1278,
"latitude": 51.5074
}
},
"pickup_date": "2024-01-15",
"dropoff_time": "15:00",
"dropoff_location": {
"radius": 5,
"geographic_coordinates": {
"longitude": -0.1278,
"latitude": 51.5074
}
},
"dropoff_date": "2024-01-20",
"driver": {
"residence_country_code": "US",
"age": 30
}
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Get hotel chain — duffel.api.stays.chains.get
Run Stays: Get hotel chain with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: List hotel chains — duffel.api.stays.chains.list
Run Stays: List hotel chains with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
This tool has no input parameters.
Full JSON Schema
Example input
{}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: List cities — duffel.api.air.cities.list
Run Supporting Resources: List cities with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
Full JSON Schema
Example input
{
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: Get a single city — duffel.api.air.cities.get
Run Supporting Resources: Get a single city with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Create a component client key — duffel.api.identity.component-client-keys.create
Run Identity: Create a component client key with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
— | Required | Claims to sign into the client key. You may provide a user_id, a user_id and order_id, or a user_id and booking_id. You can also omit the request body to create a key with no extra claims. This endpoint does not check that the claims are valid, complete, or appropriate for a later request. Downstream endpoints that accept the key decide whether the claims make sense; if they are missing or incorrect, creating the key will still succeed and the failure happens when the key is used. |
|
data |
object | Required | Use this payload to create a client key scoped to a customer user | anyOf[1]; maxProperties: 100; additionalProperties: false |
data.user_id |
string | Optional | The ID of the user for whom the client key will be created. | anyOf[1]; maxLength: 16000 |
data |
object | Required | Use this payload to create a client key scoped to a customer user and order. | anyOf[2]; maxProperties: 100; additionalProperties: false |
data.order_id |
string | Optional | The ID of the order for which the client key will be created. | anyOf[2]; maxLength: 16000 |
data.user_id |
string | Optional | The ID of the user for whom the client key will be created. | anyOf[2]; maxLength: 16000 |
data |
object | Required | Use this payload to create a client key scoped to a customer user and booking. | anyOf[3]; maxProperties: 100; additionalProperties: false |
data.booking_id |
string | Optional | The ID of the booking for which the client key will be created. | anyOf[3]; maxLength: 16000 |
data.user_id |
string | Optional | The ID of the user for whom the client key will be created. | anyOf[3]; maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"user_id": "icu_0000AgZitpOnQtd3NQxjwO"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: List Customer User Groups — duffel.api.identity.customer.user-groups.list
Run Identity: List Customer User Groups with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
This tool has no input parameters.
Full JSON Schema
Example input
{}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Create a Customer User Group — duffel.api.identity.customer.user-groups.create
Run Identity: Create a Customer User Group with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.name |
string | Required | The customer user group's name | maxLength: 16000 |
data.user_ids |
array | Optional | The list of customer users that belong to this group | maxItems: 100 |
data.user_ids[] |
string | Optional | maxLength: 16000 |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"user_ids": [
"icu_0000AgZitpOnQtd3NQxjwX"
],
"name": "Northwind Solutions"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Delete a single customer user group — duffel.api.identity.customer.user-groups.delete
Run Identity: Delete a single customer user group with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Get a single customer user group — duffel.api.identity.customer.user-groups.get
Run Identity: Get a single customer user group with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Update a single customer user group — duffel.api.identity.customer.user-groups.update
Run Identity: Update a single customer user group with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.name |
string | Optional | The customer user group's name | maxLength: 16000 |
data.user_ids |
array | Optional | The list of customer users that belong to this group | maxItems: 100 |
data.user_ids[] |
string | Optional | maxLength: 16000 |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"user_ids": [
"icu_00009zg3q4J9z4z3"
],
"name": "Northwind Solutions"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Get a single customer user — duffel.api.identity.customer.users.get
Run Identity: Get a single customer user with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Update a single customer user — duffel.api.identity.customer.users.update
Run Identity: Update a single customer user with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.email |
string | Required | The customer user's email address | maxLength: 16000 |
data.family_name |
string | Required | The customer user's family name used for display purposes only. This can be the user's preferred name and does not need to match their legal name. Must be between 1 and 255 characters. | minLength: 1; maxLength: 255 |
data.given_name |
string | Required | The customer user's given name used for display purposes only. This can be the user's preferred name and does not need to match their legal name. Must be between 1 and 255 characters. | minLength: 1; maxLength: 255 |
data.group_id |
string | Optional | The group you'd like to associate the customer user to | maxLength: 16000 |
data.phone_number |
string | Optional | The customer user's phone number in E.164 (international) format. | maxLength: 16000 |
data.preferred_language |
string | Optional | The customer's preferred language. Provide an ISO 639-1 language code (e.g. "en", "fr"). | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"preferred_language": "en",
"phone_number": "+442080160509",
"group_id": "usg_0000AgZitpOnQtd3NQxjwO",
"given_name": "Amelia",
"family_name": "Earhart",
"email": "[email protected]"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: List customer users — duffel.api.identity.customer.users.list
Run Identity: List customer users with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.email |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"email": "[email protected]"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Identity: Create a Customer User — duffel.api.identity.customer.users.create
Run Identity: Create a Customer User with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.email |
string | Required | The customer user's email address | maxLength: 16000 |
data.family_name |
string | Required | The customer user's family name used for display purposes only. This can be the user's preferred name and does not need to match their legal name. Must be between 1 and 255 characters. | minLength: 1; maxLength: 255 |
data.given_name |
string | Required | The customer user's given name used for display purposes only. This can be the user's preferred name and does not need to match their legal name. Must be between 1 and 255 characters. | minLength: 1; maxLength: 255 |
data.group_id |
string | Optional | The group you'd like to associate the customer user to | maxLength: 16000 |
data.phone_number |
string | Optional | The customer user's phone number in E.164 (international) format. | maxLength: 16000 |
data.preferred_language |
string | Optional | The customer's preferred language. Provide an ISO 639-1 language code (e.g. "en", "fr"). | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"preferred_language": "en",
"phone_number": "+442080160509",
"group_id": "usg_0000AgZitpOnQtd3NQxjwO",
"given_name": "Amelia",
"family_name": "Earhart",
"email": "[email protected]"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: Get a single loyalty programme — duffel.api.air.loyalty-programmes.get
Run Supporting Resources: Get a single loyalty programme with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: List loyalty programmes — duffel.api.air.loyalty-programmes.list
Run Supporting Resources: List loyalty programmes with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
Full JSON Schema
Example input
{
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Delete a negotiated rate — duffel.api.stays.negotiated-rates.delete
Run Stays: Delete a negotiated rate with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Get a negotiated rate — duffel.api.stays.negotiated-rates.get
Run Stays: Get a negotiated rate with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Update a negotiated rate — duffel.api.stays.negotiated-rates.update
Run Stays: Update a negotiated rate with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.accommodation_ids |
— | Required | ||
data.accommodation_ids |
array | Required | The hotel accommodation IDs this negotiated rate is valid for. Mutually exclusive with chain_id' |
anyOf[1]; maxItems: 100 |
data.accommodation_ids[] |
string | Optional | anyOf[1]; maxLength: 16000 |
|
data.accommodation_ids |
null | Required | anyOf[2] |
|
data.chain_id |
— | Required | ||
data.chain_id |
string | Required | The ID of the hotel chain this negotiated rate is valid for. Mutually exclusive with accommodation_ids |
anyOf[1]; maxLength: 16000 |
data.chain_id |
null | Required | anyOf[2] |
|
data.display_name |
string | Required | The display name of the negotiated rate | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"display_name": "2025 Negotiated Rate",
"chain_id": "chn_0000B6QFxO9EOY5cqw5kYK",
"accommodation_ids": [
"acc_0000AWr2VsUNIF1Vl91xg0"
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: List negotiated rates — duffel.api.stays.negotiated-rates.list
Run Stays: List negotiated rates with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
Full JSON Schema
Example input
{
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Creating a negotiated rate — duffel.api.stays.negotiated-rates.create
Run Stays: Creating a negotiated rate with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.accommodation_ids |
— | Required | ||
data.accommodation_ids |
array | Required | The hotel accommodation IDs this negotiated rate is valid for. Mutually exclusive with chain_id |
anyOf[1]; maxItems: 100 |
data.accommodation_ids[] |
string | Optional | anyOf[1]; maxLength: 16000 |
|
data.accommodation_ids |
null | Required | anyOf[2] |
|
data.chain_id |
— | Required | ||
data.chain_id |
string | Required | The ID of the hotel chain this negotiated rate is valid for. Mutually exclusive with accommodation_ids |
anyOf[1]; maxLength: 16000 |
data.chain_id |
null | Required | anyOf[2] |
|
data.display_name |
string | Required | The display name of the negotiated rate | maxLength: 16000 |
data.rate_access_code |
string | Required | The rate access code to be utilised when using this negotiated rate | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"rate_access_code": "DUFFEL",
"display_name": "2025 Negotiated Rate",
"chain_id": "chn_0000B6QFxO9EOY5cqw5kYK",
"accommodation_ids": [
"acc_0000AWr2VsUNIF1Vl91xg0"
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single offer request — duffel.api.air.offer-requests.get
Run Flights: Get a single offer request with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.view |
string | Optional | enum: ["offers","itineraries"]; maxLength: 16000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List offer requests — duffel.api.air.offer-requests.list
Run Flights: List offer requests with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
Full JSON Schema
Example input
{
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create an offer request — duffel.api.air.offer-requests.create
Run Flights: Create an offer request with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.return_offers |
boolean | Optional | ||
query.supplier_timeout |
integer | Optional | ||
query.view |
string | Optional | enum: ["offers","itineraries"]; maxLength: 16000 |
|
data |
object | Required | maxProperties: 100 |
|
data.airline_credit_ids |
array | Optional | The list of airline credit IDs that Duffel received as input. | maxItems: 100 |
data.airline_credit_ids[] |
string | Optional | maxLength: 16000 |
|
data.cabin_class |
— | Optional | ||
data.cabin_class |
string | Optional | The cabin that the passengers want to travel in | anyOf[1]; enum: ["first","business","premium_economy","economy"]; maxLength: 16000 |
data.cabin_class |
null | Optional | anyOf[2] |
|
data.include_split_ticket |
boolean | Optional | When set to true and the search has more than one slice, additional one-way searches will be fired per slice to find split-ticket candidates. These results are only included in the response when view is set to itineraries. Please get in touch with the Duffel support team at <[email protected]> to access this feature. |
|
data.max_connections |
integer | Optional | The maximum number of connections within any slice of the offer. For example 0 means a direct flight which will have a single segment within each slice and 1 means a maximum of two segments within each slice of the offer. | minimum: 0; maximum: 2 |
data.passengers |
array | Required | The passengers who want to travel. If you specify an age for a passenger, the type may differ for the same passenger in different offers due to airline's different rules. e.g. one airline may treat a 14 year old as an adult, and another as a young adult. You may only specify an age or a type – not both. |
maxItems: 100 |
data.passengers[] |
— | Optional | ||
data.passengers[] |
object | Optional | A passenger specified by their type | anyOf[1]; maxProperties: 100 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[1]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[1]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[1]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[1]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[1]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[1]; maxLength: 16000 |
data.passengers[].type |
string | Required | The type of the passenger. If the passenger is aged 18 or over, you should specify a type of adult. If a passenger is aged under 18, you should specify their age instead of a type. A passenger can have only a type or an age, but not both. |
anyOf[1]; enum: ["adult","child","infant_without_seat"]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[1]; maxLength: 16000 |
data.passengers[] |
object | Optional | A passenger specified by their age | anyOf[2]; maxProperties: 100 |
data.passengers[].age |
integer | Required | The age of the passenger on the departure_date of the final slice. e.g. if you are searching for a round trip and the passenger is 15 years old at the time of the outbound flight, but they then have their birthday and are 16 years old for the inbound flight, you must set the age to 16. You should specify an age for passengers who are under 18 years old. A passenger can have only a type or an age, but not both. You can optionally pass age with fare_type though. |
anyOf[2]; minimum: 0; maximum: 130 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[2]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[2]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[2]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[2]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[2]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[2]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[2]; maxLength: 16000 |
data.passengers[] |
object | Optional | A passenger specified by their fare type. This is used for leisure private fares. | anyOf[3]; maxProperties: 100 |
data.passengers[].age |
integer | Optional | The age of the passenger on the departure_date of the final slice. e.g. if you are searching for a round trip and the passenger is 15 years old at the time of the outbound flight, but they then have their birthday and are 16 years old for the inbound flight, you must set the age to 16. You should specify an age for passengers who are under 18 years old. A passenger can have only a type or an age, but not both. You can optionally pass age with fare_type though. |
anyOf[3]; minimum: 0; maximum: 130 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[3]; maxLength: 16000 |
data.passengers[].fare_type |
string | Required | The fare type of the passenger. If the passenger is aged less than 18, you should pass in age as well. | anyOf[3]; enum: ["accompanying_adult","contract_bulk","contract_bulk_child","contract_bulk_infant_with_seat","contract_bulk_infant_without_seat","frequent_flyer","group_inclusive_tour","group_inclusive_tour_child","humanitarian","individual_inclusive_tour_child","marine","seat_only","student","teacher","tour_operator_inclusive","tour_operator_inclusive_infant","unaccompanied_child","visiting_friends_and_family"]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[3]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[3]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[3]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[3]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[3]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[3]; maxLength: 16000 |
data.private_fares |
object | Optional | The private fare codes for this offer request. You can pass in multiple airlines with their specific private fare codes. The key is the airline's IATA code that provided the private fare code. The corporate_code and tour_code are provided to you by the airline and the tracking_reference is to identify your business by the airlines. |
maxProperties: 100; additionalProperties: true |
data.slices |
array | Required | The slices that make up this offer request. One-way journeys can be expressed using one slice, whereas return trips will need two. | maxItems: 100 |
data.slices[] |
object | Optional | maxProperties: 100 |
|
data.slices[].arrival_time |
— | Optional | ||
data.slices[].arrival_time |
object | Optional | The inclusive time range for the arrival of the slice | anyOf[1]; maxProperties: 100 |
data.slices[].arrival_time.from |
— | Optional | anyOf[1] |
|
data.slices[].arrival_time.from |
string | Optional | The local time in the format hh:mm of the destination airport at or after which the slice should arrive. Defaults to 00:00 when only to is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].arrival_time.from |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].arrival_time.to |
— | Optional | anyOf[1] |
|
data.slices[].arrival_time.to |
string | Optional | The local time in the format hh:mm of the destination airport at or before which the slice should arrive. Defaults to 23:59 when only from is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].arrival_time.to |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].arrival_time |
null | Optional | anyOf[2] |
|
data.slices[].departure_date |
string | Required | The ISO 8601 date on which the passengers want to depart | maxLength: 16000; format: "date" |
data.slices[].departure_time |
— | Optional | ||
data.slices[].departure_time |
object | Optional | The inclusive time range for the departure of the slice | anyOf[1]; maxProperties: 100 |
data.slices[].departure_time.from |
— | Optional | anyOf[1] |
|
data.slices[].departure_time.from |
string | Optional | The local time in the format hh:mm of the origin airport at or after which the slice should depart. Defaults to current time at airport when only to is provided or from value is in the past |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].departure_time.from |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].departure_time.to |
— | Optional | anyOf[1] |
|
data.slices[].departure_time.to |
string | Optional | The local time in the format hh:mm of the origin airport at or before which the slice should depart. Defaults to 23:59 when only from is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].departure_time.to |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].departure_time |
null | Optional | anyOf[2] |
|
data.slices[].destination |
string | Required | The 3-letter IATA code for the city or airport where this slice ends | maxLength: 16000 |
data.slices[].origin |
string | Required | The 3-letter IATA code for the city or airport where this slice starts | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"query": {
"return_offers": false,
"supplier_timeout": 10000
},
"data": {
"slices": [
{
"origin": "LHR",
"destination": "JFK",
"departure_time": {
"to": "17:00",
"from": "09:45"
},
"departure_date": "2020-04-24",
"arrival_time": {
"to": "17:00",
"from": "09:45"
}
}
],
"private_fares": {
"QF": [
{
"corporate_code": "FLX53",
"tracking_reference": "ABN:2345678"
}
],
"UA": [
{
"corporate_code": "1234",
"tour_code": "578DFL"
}
]
},
"passengers": [
{
"family_name": "Earhart",
"given_name": "Amelia",
"loyalty_programme_accounts": [
{
"account_number": "12901014",
"airline_iata_code": "BA"
}
],
"type": "adult"
},
{
"age": 14
},
{
"fare_type": "student"
},
{
"age": 5,
"fare_type": "contract_bulk_child"
}
],
"max_connections": 0,
"include_split_ticket": true,
"cabin_class": "economy",
"airline_credit_ids": [
"acd_00009hthhsUZ8W4LxQgkjo",
"acd_0000thhsUZ8W4LxQgkjo00"
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single offer — duffel.api.air.offers.get
Run Flights: Get a single offer with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.return_available_services |
boolean | Optional |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"query": {
"return_available_services": true
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Update a single offer passenger — duffel.api.air.offers.passengers.update
Run Flights: Update a single offer passenger with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.offer_id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
path.offer_passenger_id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.family_name |
string | Required | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. |
maxLength: 16000 |
data.given_name |
string | Required | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. |
maxLength: 16000 |
data.loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | maxItems: 100 |
data.loyalty_programme_accounts[] |
object | Optional | maxProperties: 100 |
|
data.loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | maxLength: 16000 |
data.loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"offer_id": "resource_fixture",
"offer_passenger_id": "resource_fixture"
},
"data": {
"loyalty_programme_accounts": [
{
"airline_iata_code": "BA",
"account_number": "12901014"
}
],
"given_name": "Amelia",
"family_name": "Earhart"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Price an offer with intended payment methods — duffel.api.air.offers.price
Run Flights: Price an offer with intended payment methods with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.intended_payment_methods |
array | Required | The payment methods you intend to use to pay for the offer. | maxItems: 100 |
data.intended_payment_methods[] |
— | Optional | ||
data.intended_payment_methods[] |
object | Optional | oneOf[1]; maxProperties: 100; additionalProperties: false |
|
data.intended_payment_methods[].card_id |
string | Required | The ID of the card you intend to pay with | oneOf[1]; maxLength: 16000 |
data.intended_payment_methods[].type |
string | Required | The type of payment method you intend to use | oneOf[1]; enum: ["card"]; maxLength: 16000 |
data.intended_payment_methods[] |
object | Optional | oneOf[2]; maxProperties: 100; additionalProperties: false |
|
data.intended_payment_methods[].airline_credit_id |
string | Required | The ID of the airilne credit you intend to pay with | oneOf[2]; maxLength: 16000 |
data.intended_payment_methods[].type |
string | Required | The type of payment method you intend to use | oneOf[2]; enum: ["airline_credit"]; maxLength: 16000 |
data.intended_services |
array | Required | The services you intend to book along with the offer. | maxItems: 100 |
data.intended_services[] |
object | Optional | maxProperties: 100; additionalProperties: false |
|
data.intended_services[].id |
string | Required | Duffel's unique identifier for the resource | maxLength: 16000 |
data.intended_services[].quantity |
integer | Required | The quantity of the service you intend to book. This will always be 1 for seat services. |
minimum: 1 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"intended_services": [
{
"quantity": 1,
"id": "ase_00009UhD4ongolulWd9123"
}
],
"intended_payment_methods": [
{
"type": "card",
"card_id": "tcd_0000A3t2sL46m5eDF45kWW"
},
{
"type": "airline_credit",
"airline_credit_id": "acd_0000A3t2sL46m5eDF45kWW"
}
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get upsell offers for an offer — duffel.api.air.offers.upsell-offers.create
Run Flights: Get upsell offers for an offer with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List offers — duffel.api.air.offers.list
Run Flights: List offers with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Required | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.offer_request_id |
string | Required | maxLength: 16000 |
|
query.sort |
string | Optional | enum: ["total_amount","total_duration"]; maxLength: 16000 |
|
query.max_connections |
integer | Optional | minimum: 0; maximum: 2 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"offer_request_id": "orq_00009htyDGjIfajdNBZRlw",
"sort": "total_amount",
"max_connections": 0
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List order cancellations — duffel.api.air.order-cancellations.list
Run Flights: List order cancellations with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.order_id |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"order_id": "ord_00009hthhsUZ8W4LxQgkjo"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create a pending order cancellation — duffel.api.air.order-cancellations.create
Run Flights: Create a pending order cancellation with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.order_id |
string | Required | Duffel's unique identifier for the order | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"order_id": "ord_001"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single order cancellation — duffel.api.air.order-cancellations.get
Run Flights: Get a single order cancellation with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Confirm an order cancellation — duffel.api.air.order-cancellations.confirm
Run Flights: Confirm an order cancellation with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List order change offers — duffel.api.air.order-change-offers.list
Run Flights: List order change offers with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Required | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.order_change_request_id |
string | Required | The ID of your order change request | maxLength: 16000 |
query.sort |
string | Optional | enum: ["change_total_amount","total_duration"]; maxLength: 16000 |
|
query.max_connections |
integer | Optional | minimum: 0; maximum: 2 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"order_change_request_id": "ocr_0000A3bQP9RLVfNUcdpLpw",
"sort": "change_total_amount",
"max_connections": 0
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single order change offer — duffel.api.air.order-change-offers.get
Run Flights: Get a single order change offer with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single order change request — duffel.api.air.order-change-requests.get
Run Flights: Get a single order change request with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create an order change request — duffel.api.air.order-change-requests.create
Run Flights: Create an order change request with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.order_id |
string | Required | The order ID you wish to change | maxLength: 16000 |
data.private_fares |
object | Optional | The private fare codes for this order change request. The key is the airline's IATA code that provided the private fare code. The corporate_code and tour_code are provided to you by the airline and the tracking_reference is to identify your business by the airlines. The private fares for Order Change Requests work in much the same way as they do when searching for an offer request |
maxProperties: 100; additionalProperties: true |
data.slices |
object | Optional | The slices that make up this offer request. One-way journeys can be expressed using one slice, whereas return trips will need two. | maxProperties: 100 |
data.slices.add |
array | Optional | The search criteria for slices which you wish to add to your order | maxItems: 100 |
data.slices.add[] |
object | Optional | The search criteria for a slice to be added | maxProperties: 100 |
data.slices.add[].cabin_class |
— | Optional | ||
data.slices.add[].cabin_class |
string | Optional | The cabin that the passengers want to travel in | anyOf[1]; enum: ["first","business","premium_economy","economy"]; maxLength: 16000 |
data.slices.add[].cabin_class |
null | Optional | anyOf[2] |
|
data.slices.add[].departure_date |
string | Optional | The ISO 8601 date on which the passengers want to depart | maxLength: 16000; format: "date" |
data.slices.add[].destination |
string | Optional | The 3-letter IATA code for the city or airport where this slice ends | maxLength: 16000 |
data.slices.add[].origin |
string | Optional | The 3-letter IATA code for the city or airport where this slice starts | maxLength: 16000 |
data.slices.remove |
array | Optional | The slices that you wish to remove from your order | maxItems: 100 |
data.slices.remove[] |
object | Optional | The slice ID for the slice to be removed | maxProperties: 100 |
data.slices.remove[].slice_id |
string | Optional | Duffel's unique identifier for the resource | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"slices": {
"remove": [
{
"slice_id": "xxx_00009hthhsUZ8W4LxQgkjo"
}
],
"add": [
{
"origin": "LHR",
"destination": "JFK",
"departure_date": "2020-04-24",
"cabin_class": "economy"
}
]
},
"private_fares": {
"UA": [
{
"corporate_code": "1234",
"tour_code": "578DFL"
}
]
},
"order_id": "ord_0000A3bQ8FJIQoEfuC07n6"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single order change — duffel.api.air.order-changes.get
Run Flights: Get a single order change with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Confirm an order change — duffel.api.air.order-changes.confirm
Run Flights: Confirm an order change with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.payment |
object | Optional | The payment details to use to pay for the order change, if there is an amount to be paid. Some order changes may not need this. If the change_total_amount is zero or negative, there is no need to pass a payment object. |
maxProperties: 100 |
data.payment.amount |
string | Required | The amount of the payment. This should be the same as the change_total_amount of the order change. |
maxLength: 16000 |
data.payment.currency |
string | Required | The currency of the change_total_amount, as an ISO 4217 currency code. |
maxLength: 16000 |
data.payment.three_d_secure_session_id |
string | Optional | The id of the 3DSecure Session ID. This is the authentication when paying by card. |
maxLength: 16000 |
data.payment.type |
string | Required | The type of payment you want to use for the order change. If you are an IATA agent with your own agreements with airlines, in some cases, you can pay using ARC/BSP cash by specifying arc_bsp_cash. You can pay using your Duffel account's balance by specifying balance. In test mode, your balance is unlimited. Otherwise, you can pay by card. If you're not sure which of these options applies to you, get in touch with the Duffel support team at <[email protected]>. |
enum: ["arc_bsp_cash","balance","card"]; maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"payment": {
"type": "balance",
"three_d_secure_session_id": "3ds_0000AWr2XsTRIF1Vp34gh5",
"currency": "GBP",
"amount": "30.20"
}
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create a pending order change — duffel.api.air.order-changes.create
Run Flights: Create a pending order change with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.selected_order_change_offer |
string | Required | Duffel's unique identifier for the order change offer | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"selected_order_change_offer": "oco_0000A4QasEUIjJ6jHKfhHU"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single order — duffel.api.air.orders.get
Run Flights: Get a single order with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Update a single order — duffel.api.air.orders.update
Run Flights: Update a single order with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.metadata |
object | Optional | Metadata contains a set of key-value pairs that you can attach to an object. It can be useful for storing additional information about the object, in a structured format. Duffel does not use this information. You should not store sensitive information in this field. The metadata is a collection of key-value pairs, both of which are strings. You can store a maximum of 50 key-value pairs, where each key has a maximum length of 40 characters and each value has a maximum length of 500 characters. Keys must only contain numbers, letters, dashes, or underscores. To clear this field, set it to an | maxProperties: 100 |
data.users |
array | Optional | The ids of customer users that would be allowed to manage the booking. |
maxItems: 100 |
data.users[] |
string | Optional | maxLength: 16000 |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"users": [
"icu_00009htyDGjIfajdNBZRlw"
],
"metadata": {
"customer_prefs": "window seat",
"payment_intent_id": "pit_00009htYpSCXrwaB9DnUm2"
}
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List orders — duffel.api.air.orders.list
Run Flights: List orders with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.booking_reference |
string | Optional | maxLength: 16000 |
|
query.offer_id |
string | Optional | maxLength: 16000 |
|
query.awaiting_payment |
boolean | Optional | ||
query.sort |
string | Optional | enum: ["payment_required_by","total_amount","created_at","next_departure"]; maxLength: 16000 |
|
query.owner_id[] |
array | Optional | maxItems: 20 |
|
query.owner_id[][] |
string | Optional | maxLength: 16000 |
|
query.origin_id[] |
array | Optional | maxItems: 20 |
|
query.origin_id[][] |
string | Optional | maxLength: 16000 |
|
query.destination_id[] |
array | Optional | maxItems: 20 |
|
query.destination_id[][] |
string | Optional | maxLength: 16000 |
|
query.departing_at |
object | Optional | maxProperties: 2; additionalProperties: false |
|
query.departing_at.after |
string | Optional | The ISO 8601 datetime at which a segment departs after. This should be the local time of the place of departure and must not contain timezone information. | maxLength: 16000 |
query.departing_at.before |
string | Optional | The ISO 8601 datetime at which a segment departs before. This should be the local time of the place of departure and must not contain timezone information. | maxLength: 16000 |
query.arriving_at |
object | Optional | maxProperties: 2; additionalProperties: false |
|
query.arriving_at.after |
string | Optional | The ISO 8601 datetime at which a segment arrives after. This should be the local time of the place of arrival and must not contain timezone information. | maxLength: 16000 |
query.arriving_at.before |
string | Optional | The ISO 8601 datetime at which a segment arrives before. This should be the local time of the place of arrival and must not contain timezone information. | maxLength: 16000 |
query.created_at |
object | Optional | maxProperties: 2; additionalProperties: false |
|
query.created_at.after |
string | Optional | The ISO 8601 datetime after which orders created will be returned. This is UTC and must not contain timezone information. | maxLength: 16000 |
query.created_at.before |
string | Optional | The ISO 8601 datetime before which orders created will be returned. This is UTC and must not contain timezone information. | maxLength: 16000 |
query.passenger_name[] |
array | Optional | maxItems: 20 |
|
query.passenger_name[][] |
string | Optional | maxLength: 16000 |
|
query.requires_action |
boolean | Optional | ||
query.user_id |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"booking_reference": "RZPNX8",
"offer_id": "off_00009htYpSCXrwaB9DnUm0",
"awaiting_payment": false,
"sort": "payment_required_by",
"owner_id[]": [
"arl_00009VME7DBKeMags5CliQ",
"arl_00009VME7DCOaPRQvNhcMu"
],
"origin_id[]": [
"arp_lhr_gb",
"arp_jfk_us"
],
"destination_id[]": [
"arp_lhr_gb",
"arp_jfk_us"
],
"passenger_name[]": [
"Earhart",
"Smith"
],
"requires_action": true,
"user_id": "icu_00009htyDGjIfajdNBZRlw"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create an order — duffel.api.air.orders.create
Run Flights: Create an order with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.metadata |
object | Optional | Metadata contains a set of key-value pairs that you can attach to an object. It can be useful for storing additional information about the object, in a structured format. Duffel does not use this information. You should not store sensitive information in this field. The metadata is a collection of key-value pairs, both of which are strings. You can store a maximum of 50 key-value pairs, where each key has a maximum length of 40 characters and each value has a maximum length of 500 characters. Keys must only contain numbers, letters, dashes, or underscores. | maxProperties: 100 |
data.passengers |
array | Required | The personal details of the passengers, expanding on the information initially provided when creating the offer request | maxItems: 100 |
data.passengers[] |
object | Optional | maxProperties: 100 |
|
data.passengers[].born_on |
string | Required | The passenger's date of birth | maxLength: 16000; format: "date" |
data.passengers[].email |
string | Required | The passenger's email address | maxLength: 16000 |
data.passengers[].family_name |
string | Required | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 or 2 characters, and the maximum, combined with given_name, is 40 characters. The requirements vary by airline. We recommend using a minimum length of |
maxLength: 16000 |
data.passengers[].gender |
string | Required | The passenger's gender | enum: ["m","f"]; maxLength: 16000 |
data.passengers[].given_name |
string | Required | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 or 2 characters, and the maximum, combined with family_name, is 40 characters. The requirements vary by airline. We recommend using a minimum length of |
maxLength: 16000 |
data.passengers[].id |
string | Required | The id of the passenger, returned when the offer request was created |
maxLength: 16000 |
data.passengers[].identity_documents |
— | Optional | ||
data.passengers[].identity_documents |
array | Optional | The passenger's identity documents. You may only provide one identity document per type per passenger. The identity document's type supported by the airline can be found in the offer's supported_passenger_identity_document_types. If the offer's passenger_identity_documents_required is set to true, then a passport document must be provided. |
anyOf[1]; maxItems: 100 |
data.passengers[].identity_documents[] |
object | Optional | anyOf[1]; maxProperties: 100 |
|
data.passengers[].identity_documents[].expires_on |
string | Required | Must only be provided for passport type. The date on which the identity document expires |
anyOf[1]; maxLength: 16000; format: "date" |
data.passengers[].identity_documents[].issuing_country_code |
string | Required | Must only be provided for passport, known_traveler_number, and passenger_redress_number types. The ISO 3166-1 alpha-2 code of the country that issued this identity document |
anyOf[1]; maxLength: 16000 |
data.passengers[].identity_documents[].type |
string | Required | The type of the identity document. Currently, the only supported types are passport, tax_id, known_traveler_number, and passenger_redress_number. The identity document's type supported by the airline can be found in the offer's supported_passenger_identity_document_types. |
anyOf[1]; enum: ["passport","tax_id","known_traveler_number","passenger_redress_number"]; maxLength: 16000 |
data.passengers[].identity_documents[].unique_identifier |
string | Required | The unique identifier of the identity document. e.g. the passport number. For known_traveler_number, spaces and hyphens are removed and the rest must be letters and digits only. |
anyOf[1]; maxLength: 16000 |
data.passengers[].identity_documents |
null | Optional | anyOf[2] |
|
data.passengers[].infant_passenger_id |
string | Optional | Infant passengers, with an age of 0 or 1, must be associated with an adult passenger. This field should be used to make this association. It should contain the id of the infant passenger as returned in the offer request. |
maxLength: 16000 |
data.passengers[].phone_number |
string | Required | The passenger's phone number in E.164 (international) format | maxLength: 16000 |
data.passengers[].title |
string | Required | The passenger's title (the dr title is not supported by certain airlines, where a ValidationError will be returned instead if used) |
enum: ["mr","ms","mrs","miss","dr"]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | Creates an association between the passenger and a previously created user. This is intended to allow passengers the ability to manage their own orders. | maxLength: 16000 |
data.payments |
array | Optional | The payment details to use to pay for the order. This key should be omitted when the order’s type is hold. |
maxItems: 100 |
data.payments[] |
object | Optional | maxProperties: 100 |
|
data.payments[].amount |
string | Required | The amount of the payment. This should be the same as the total_amount of the offer specified in selected_offers, plus the total_amount of all the services specified in services. |
maxLength: 16000 |
data.payments[].currency |
string | Required | The currency of the amount, as an ISO 4217 currency code. This should be the same as the total_currency of the offer specified in selected_offers. |
maxLength: 16000 |
data.payments[].three_d_secure_session_id |
string | Optional | The id of the 3DSecure Session ID. This is the authentication when paying by card. |
maxLength: 16000 |
data.payments[].type |
string | Required | The type of payment you want to apply to the order. If you are an IATA agent with your own agreements with airlines, in some cases, you can pay using ARC/BSP cash by specifying arc_bsp_cash. You can pay using your Duffel account's balance by specifying balance. Otherwise, you can pay by card. In test mode, your balance is unlimited. If you're not sure which of these options applies to you, get in touch with the Duffel support team at <[email protected]>. |
enum: ["arc_bsp_cash","balance","card"]; maxLength: 16000 |
data.selected_offers |
array | Required | The ids of the offers you want to book. You must specify an array containing exactly one selected offer. Note that you can only book one offer per offer request. |
maxItems: 100 |
data.selected_offers[] |
string | Optional | maxLength: 16000 |
|
data.services |
array | Optional | The services you want to book along with the first selected offer. If the offer was priced with intended_services, you must either send those same services here or omit this key entirely. Any other set of services is rejected. |
maxItems: 100 |
data.services[] |
object | Optional | maxProperties: 100 |
|
data.services[].id |
string | Required | The id of the service from the offer's available_services that you want to book |
maxLength: 16000 |
data.services[].quantity |
integer | Required | The quantity of the service to book. This will always be 1 for seat services. |
minimum: 1 |
data.type |
string | Optional | The type of order. You can only use hold with offers where payment_requirements.requires_instant_payment is false. When booking an offer with type hold, do not specify payments key. |
enum: ["instant","hold"]; maxLength: 16000 |
data.users |
array | Optional | The ids of users that would be allowed to manage the order. |
maxItems: 100 |
data.users[] |
string | Optional | maxLength: 16000 |
|
data |
— | Required | allOf[1] |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"users": [
"icu_00009htyDGjIfajdNBZRlw"
],
"type": "instant",
"services": [
{
"quantity": 1,
"id": "ase_00009hj8USM7Ncg31cB123"
}
],
"selected_offers": [
"off_00009htyDGjIfajdNBZRlw"
],
"payments": [
{
"type": "balance",
"three_d_secure_session_id": "3ds_0000AWr2XsTRIF1Vp34gh5",
"currency": "GBP",
"amount": "30.20"
}
],
"passengers": [
{
"user_id": "icu_00009htyDGjIfajdNBZRlw",
"title": "mrs",
"phone_number": "+442080160509",
"infant_passenger_id": "pas_00009hj8USM8Ncg32aTGHL",
"identity_documents": [
{
"unique_identifier": "19KL56147",
"type": "passport",
"issuing_country_code": "GB",
"expires_on": "2025-04-25"
}
],
"id": "pas_00009hj8USM7Ncg31cBCLL",
"given_name": "Amelia",
"gender": "f",
"family_name": "Earhart",
"email": "[email protected]",
"born_on": "1987-07-24"
}
],
"metadata": {
"payment_intent_id": "pit_00009htYpSCXrwaB9DnUm2"
}
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Add a service to an order — duffel.api.air.orders.services.create
Run Flights: Add a service to an order with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.add_services |
array | Required | The services you want to add to the order. | maxItems: 100 |
data.add_services[] |
object | Optional | maxProperties: 100 |
|
data.add_services[].id |
string | Required | The id of the service from the offer's available_services that you want to book |
maxLength: 16000 |
data.add_services[].quantity |
integer | Required | The quantity of the service to book. This will always be 1 for seat services. |
minimum: 1 |
data.payment |
object | Required | The payment details to pay for the services. | maxProperties: 100 |
data.payment.amount |
string | Required | The amount of the payment. This should be the same as the total_amount of all the services specified in add_services. |
maxLength: 16000 |
data.payment.currency |
string | Required | The currency of the amount, as an ISO 4217 currency code. |
maxLength: 16000 |
data.payment.type |
string | Required | The type of payment you want to apply to the services. You must pay using your Duffel account's balance by specifying balance. In test mode, your balance is unlimited. |
enum: ["balance"]; maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"payment": {
"type": "balance",
"currency": "GBP",
"amount": "30.20"
},
"add_services": [
{
"quantity": 1,
"id": "ase_00009hj8USM7Ncg31cB123"
}
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Price an order with an intended payment method — duffel.api.air.orders.price
Run Flights: Price an order with an intended payment method with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.intended_payment_methods |
array | Required | The payment methods you intend to use to pay for the order. | maxItems: 100 |
data.intended_payment_methods[] |
— | Optional | ||
data.intended_payment_methods[] |
object | Optional | oneOf[1]; maxProperties: 100; additionalProperties: false |
|
data.intended_payment_methods[].card_id |
string | Required | The ID of the card you intend to pay with | oneOf[1]; maxLength: 16000 |
data.intended_payment_methods[].type |
string | Required | The type of payment method you intend to use | oneOf[1]; enum: ["card"]; maxLength: 16000 |
data.intended_payment_methods[] |
object | Optional | oneOf[2]; maxProperties: 100; additionalProperties: false |
|
data.intended_payment_methods[].airline_credit_id |
string | Required | The ID of the airilne credit you intend to pay with | oneOf[2]; maxLength: 16000 |
data.intended_payment_methods[].type |
string | Required | The type of payment method you intend to use | oneOf[2]; enum: ["airline_credit"]; maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"intended_payment_methods": [
{
"type": "card",
"card_id": "tcd_0000A3t2sL46m5eDF45kWW"
},
{
"type": "airline_credit",
"airline_credit_id": "acd_0000A3t2sL46m5eDF45kWW"
}
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List available services for an order — duffel.api.air.orders.available-services.list
Run Flights: List available services for an order with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get full offer fares for selected partial offers — duffel.api.air.partial-offer-requests.fares.list
Run Flights: Get full offer fares for selected partial offers with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
query |
object | Required | maxProperties: 30; additionalProperties: false |
|
query.selected_partial_offer[] |
string | Required | maxLength: 16000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"query": {
"selected_partial_offer[]": "?selected_partial_offer[]=off_0000AJyeTUCEoY5PhVPN8k_0&selected_partial_offer[]=off_0000AJyeTUCEoY5PhVPN8k_1"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create a partial offer request — duffel.api.air.partial-offer-requests.create
Run Flights: Create a partial offer request with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.supplier_timeout |
integer | Optional | ||
data |
object | Required | maxProperties: 100 |
|
data.airline_credit_ids |
array | Optional | The list of airline credit IDs that Duffel received as input. | maxItems: 100 |
data.airline_credit_ids[] |
string | Optional | maxLength: 16000 |
|
data.cabin_class |
— | Optional | ||
data.cabin_class |
string | Optional | The cabin that the passengers want to travel in | anyOf[1]; enum: ["first","business","premium_economy","economy"]; maxLength: 16000 |
data.cabin_class |
null | Optional | anyOf[2] |
|
data.include_split_ticket |
boolean | Optional | When set to true and the search has more than one slice, additional one-way searches will be fired per slice to find split-ticket candidates. These results are only included in the response when view is set to itineraries. Please get in touch with the Duffel support team at <[email protected]> to access this feature. |
|
data.max_connections |
integer | Optional | The maximum number of connections within any slice of the offer. For example 0 means a direct flight which will have a single segment within each slice and 1 means a maximum of two segments within each slice of the offer. | minimum: 0; maximum: 2 |
data.passengers |
array | Required | The passengers who want to travel. If you specify an age for a passenger, the type may differ for the same passenger in different offers due to airline's different rules. e.g. one airline may treat a 14 year old as an adult, and another as a young adult. You may only specify an age or a type – not both. |
maxItems: 100 |
data.passengers[] |
— | Optional | ||
data.passengers[] |
object | Optional | A passenger specified by their type | anyOf[1]; maxProperties: 100 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[1]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[1]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[1]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[1]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[1]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[1]; maxLength: 16000 |
data.passengers[].type |
string | Required | The type of the passenger. If the passenger is aged 18 or over, you should specify a type of adult. If a passenger is aged under 18, you should specify their age instead of a type. A passenger can have only a type or an age, but not both. |
anyOf[1]; enum: ["adult","child","infant_without_seat"]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[1]; maxLength: 16000 |
data.passengers[] |
object | Optional | A passenger specified by their age | anyOf[2]; maxProperties: 100 |
data.passengers[].age |
integer | Required | The age of the passenger on the departure_date of the final slice. e.g. if you are searching for a round trip and the passenger is 15 years old at the time of the outbound flight, but they then have their birthday and are 16 years old for the inbound flight, you must set the age to 16. You should specify an age for passengers who are under 18 years old. A passenger can have only a type or an age, but not both. You can optionally pass age with fare_type though. |
anyOf[2]; minimum: 0; maximum: 130 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[2]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[2]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[2]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[2]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[2]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[2]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[2]; maxLength: 16000 |
data.passengers[] |
object | Optional | A passenger specified by their fare type. This is used for leisure private fares. | anyOf[3]; maxProperties: 100 |
data.passengers[].age |
integer | Optional | The age of the passenger on the departure_date of the final slice. e.g. if you are searching for a round trip and the passenger is 15 years old at the time of the outbound flight, but they then have their birthday and are 16 years old for the inbound flight, you must set the age to 16. You should specify an age for passengers who are under 18 years old. A passenger can have only a type or an age, but not both. You can optionally pass age with fare_type though. |
anyOf[3]; minimum: 0; maximum: 130 |
data.passengers[].family_name |
string | Optional | The passenger's family name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[3]; maxLength: 16000 |
data.passengers[].fare_type |
string | Required | The fare type of the passenger. If the passenger is aged less than 18, you should pass in age as well. | anyOf[3]; enum: ["accompanying_adult","contract_bulk","contract_bulk_child","contract_bulk_infant_with_seat","contract_bulk_infant_without_seat","frequent_flyer","group_inclusive_tour","group_inclusive_tour_child","humanitarian","individual_inclusive_tour_child","marine","seat_only","student","teacher","tour_operator_inclusive","tour_operator_inclusive_infant","unaccompanied_child","visiting_friends_and_family"]; maxLength: 16000 |
data.passengers[].given_name |
string | Optional | The passenger's given name. Only space, -, ', and letters from the ASCII, Latin-1 Supplement and Latin Extended-A (with the exceptions of Æ, æ, IJ, ij, Œ, œ, Þ, and ð) Unicode charts are accepted. All other characters will result in a validation error. The minimum length is 1 character, and the maximum is 20 characters. This is only required if you're also including loyalty programme accounts. |
anyOf[3]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts |
array | Optional | The loyalty programme accounts for this passenger | anyOf[3]; maxItems: 100 |
data.passengers[].loyalty_programme_accounts[] |
object | Optional | anyOf[3]; maxProperties: 100 |
|
data.passengers[].loyalty_programme_accounts[].account_number |
string | Optional | The passenger's account number for this loyalty programme account | anyOf[3]; maxLength: 16000 |
data.passengers[].loyalty_programme_accounts[].airline_iata_code |
string | Optional | The IATA code for the airline that this loyalty programme account belongs to | anyOf[3]; maxLength: 16000 |
data.passengers[].user_id |
string | Optional | The ID of the customer user that associates with this passenger. | anyOf[3]; maxLength: 16000 |
data.private_fares |
object | Optional | The private fare codes for this offer request. You can pass in multiple airlines with their specific private fare codes. The key is the airline's IATA code that provided the private fare code. The corporate_code and tour_code are provided to you by the airline and the tracking_reference is to identify your business by the airlines. |
maxProperties: 100; additionalProperties: true |
data.slices |
array | Required | The slices that make up this offer request. One-way journeys can be expressed using one slice, whereas return trips will need two. | maxItems: 100 |
data.slices[] |
object | Optional | maxProperties: 100 |
|
data.slices[].arrival_time |
— | Optional | ||
data.slices[].arrival_time |
object | Optional | The inclusive time range for the arrival of the slice | anyOf[1]; maxProperties: 100 |
data.slices[].arrival_time.from |
— | Optional | anyOf[1] |
|
data.slices[].arrival_time.from |
string | Optional | The local time in the format hh:mm of the destination airport at or after which the slice should arrive. Defaults to 00:00 when only to is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].arrival_time.from |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].arrival_time.to |
— | Optional | anyOf[1] |
|
data.slices[].arrival_time.to |
string | Optional | The local time in the format hh:mm of the destination airport at or before which the slice should arrive. Defaults to 23:59 when only from is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].arrival_time.to |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].arrival_time |
null | Optional | anyOf[2] |
|
data.slices[].departure_date |
string | Required | The ISO 8601 date on which the passengers want to depart | maxLength: 16000; format: "date" |
data.slices[].departure_time |
— | Optional | ||
data.slices[].departure_time |
object | Optional | The inclusive time range for the departure of the slice | anyOf[1]; maxProperties: 100 |
data.slices[].departure_time.from |
— | Optional | anyOf[1] |
|
data.slices[].departure_time.from |
string | Optional | The local time in the format hh:mm of the origin airport at or after which the slice should depart. Defaults to current time at airport when only to is provided or from value is in the past |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].departure_time.from |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].departure_time.to |
— | Optional | anyOf[1] |
|
data.slices[].departure_time.to |
string | Optional | The local time in the format hh:mm of the origin airport at or before which the slice should depart. Defaults to 23:59 when only from is provided |
anyOf[1]; anyOf[1]; maxLength: 16000 |
data.slices[].departure_time.to |
null | Optional | anyOf[1]; anyOf[2] |
|
data.slices[].departure_time |
null | Optional | anyOf[2] |
|
data.slices[].destination |
string | Required | The 3-letter IATA code for the city or airport where this slice ends | maxLength: 16000 |
data.slices[].origin |
string | Required | The 3-letter IATA code for the city or airport where this slice starts | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"query": {
"supplier_timeout": 10000
},
"data": {
"slices": [
{
"origin": "LHR",
"destination": "JFK",
"departure_time": {
"to": "17:00",
"from": "09:45"
},
"departure_date": "2020-04-24",
"arrival_time": {
"to": "17:00",
"from": "09:45"
}
}
],
"private_fares": {
"QF": [
{
"corporate_code": "FLX53",
"tracking_reference": "ABN:2345678"
}
],
"UA": [
{
"corporate_code": "1234",
"tour_code": "578DFL"
}
]
},
"passengers": [
{
"family_name": "Earhart",
"given_name": "Amelia",
"loyalty_programme_accounts": [
{
"account_number": "12901014",
"airline_iata_code": "BA"
}
],
"type": "adult"
},
{
"age": 14
},
{
"fare_type": "student"
},
{
"age": 5,
"fare_type": "contract_bulk_child"
}
],
"max_connections": 0,
"include_split_ticket": true,
"cabin_class": "economy",
"airline_credit_ids": [
"acd_00009hthhsUZ8W4LxQgkjo",
"acd_0000thhsUZ8W4LxQgkjo00"
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single partial offer request — duffel.api.air.partial-offer-requests.get
Run Flights: Get a single partial offer request with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.selected_partial_offer[] |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"query": {
"selected_partial_offer[]": "?selected_partial_offer[]=off_0000AJyeTUCEoY5PhVPN8k_0&selected_partial_offer[]=off_0000AJyeTUCEoY5PhVPN8k_1"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: List payments — duffel.api.air.payments.list
Run Flights: List payments with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Required | maxProperties: 30; additionalProperties: false |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.order_id |
string | Required | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"order_id": "ord_00009hthhsUZ8W4LxQgkjo"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Create a payment — duffel.api.air.payments.create
Run Flights: Create a payment with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.order_id |
string | Required | The id of the order you want to pay for. |
maxLength: 16000 |
data.payment |
object | Required | The payment details to use to pay for the order | maxProperties: 100 |
data.payment.amount |
string | Required | The amount of the payment for the order, plus selected services. This should be the total_amount of the order you're paying for plus the total_amounts of all of the services specified under the services of the order. |
maxLength: 16000 |
data.payment.currency |
string | Required | The currency of the amount, as an ISO 4217 currency code. This should be the total_currency of the order. |
maxLength: 16000 |
data.payment.three_d_secure_session_id |
string | Optional | The id of the 3DSecure Session ID. This is the authentication when paying by card. |
maxLength: 16000 |
data.payment.type |
string | Required | The payment method you want to use for this order. If you are an IATA agent with your own agreements with airlines, in some cases, you can pay using ARC/BSP cash by specifying arc_bsp_cash. You must pay using your Duffel account's balance by specifying balance. In test mode, your balance is unlimited. Otherwise, you can pay by card. If you're not sure which of these options applies to you, get in touch with the Duffel support team at <[email protected]>. |
enum: ["arc_bsp_cash","balance","card"]; maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"payment": {
"type": "balance",
"three_d_secure_session_id": "3ds_0000AWr2XsTRIF1Vp34gh5",
"currency": "GBP",
"amount": "30.20"
},
"order_id": "ord_00003x8pVDGcS8y2AWCoWv"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get a single payment — duffel.api.air.payments.get
Run Flights: Get a single payment with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Supporting Resources: List Place suggestions — duffel.api.places.suggestions.list
Run Supporting Resources: List Place suggestions with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.query |
string | Optional | maxLength: 16000 |
|
query.rad |
string | Optional | maxLength: 16000 |
|
query.lat |
string | Optional | maxLength: 16000 |
|
query.lng |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"query": "heathr",
"rad": "10",
"lat": "40.735",
"lng": "-73.973717"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Create a quote for a rate — duffel.api.stays.quotes.create
Run Stays: Create a quote for a rate with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.rate_id |
string | Required | The id of the rate you want to book. |
maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"rate_id": "rat_0000ARxBI85qTkbVapZDD2"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Get quote — duffel.api.stays.quotes.get
Run Stays: Get quote with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Fetch rates for a search result — duffel.api.stays.search-results.fetch-all-rates
Run Stays: Fetch rates for a search result with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.search_result_id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"search_result_id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Stays: Search for accommodation — duffel.api.stays.search.create
Run Stays: Search for accommodation with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.accommodation |
— | Optional | ||
data.accommodation |
object | Optional | The accommodation to search for. You must use either this object or the location object in your request |
anyOf[1]; maxProperties: 100 |
data.accommodation.fetch_rates |
boolean | Optional | Indicates if the accommodation search should return rooms and rates for each search result | anyOf[1] |
data.accommodation.ids |
array | Required | The unique identifiers of the accommodation to search for. The maximum number of IDs is 10 when fetching room and rates, otherwise the maximum number of IDs is 200. | anyOf[1]; maxItems: 100 |
data.accommodation.ids[] |
string | Optional | anyOf[1]; maxLength: 16000 |
|
data.accommodation |
null | Optional | anyOf[2] |
|
data.check_in_date |
string | Required | The ISO 8601 date on which the guest wants to check in. Check-in date can be no more than 330 days in the future. | maxLength: 16000; format: "date" |
data.check_out_date |
string | Required | The ISO 8601 date on which the guest wants to check out. A stay can be up to 99 nights. | maxLength: 16000; format: "date" |
data.free_cancellation_only |
boolean | Optional | Whether this search is only for rates with free cancellation available. This can affect the rates and accommodation which are returned. If this is false, or omitted, all rates will be searched for. | |
data.guests |
array | Required | The list of guests travelling. | maxItems: 100 |
data.guests[] |
object | Optional | maxProperties: 100; additionalProperties: false |
|
data.guests[].age |
— | Optional | ||
data.guests[].age |
number | Optional | The age of the guest at the time of booking. Required for guests of type child. Child age must be between 0 and 17. Do not supply an age for guests of type adult. |
anyOf[1] |
data.guests[].age |
null | Optional | anyOf[2] |
|
data.guests[].type |
string | Optional | The type of guest. An age is required for guests with a type child. |
enum: ["child","adult"]; maxLength: 16000 |
data.instant_payment |
boolean | Optional | When true, only accommodation and rates are returned where payment is collected at the time of booking by Duffel or the source. When false, only rates where payment is collected by the accommodation are returned. When omitted, all rates are returned. |
|
data.location |
— | Optional | ||
data.location |
object | Optional | Descriptor for an area to search for a stay. Accepts latitude-longitude paired with radius. You must use either this object or the accommodation object in your request |
anyOf[1]; maxProperties: 100 |
data.location.geographic_coordinates |
object | Required | The center of the search criteria's radius. Represented by an object containing latitude and longitude. | anyOf[1]; maxProperties: 100 |
data.location.geographic_coordinates.latitude |
number | Required | The latitude position of the search's center, represented in Decimal degrees with 6 decimal points with a range between -90° and 90° | anyOf[1] |
data.location.geographic_coordinates.longitude |
number | Required | The longitude position of the search's center, represented in Decimal degrees with 6 decimal points with a range between -180° and 180° | anyOf[1] |
data.location.radius |
integer | Optional | The search area's extent from the provided coordinates in kilometers. Can only be between 1 and 100. Default of 5km is subject to change. | anyOf[1] |
data.location |
null | Optional | anyOf[2] |
|
data.mobile |
boolean | Optional | Whether this search has come from a mobile device. This can affect rates and content returned for this search. | |
data.negotiated_rate_ids |
array | Optional | A list of negotiated rate ids to perform the search with. Will return negotiated alongside public rates on a best effort basis for matching accommodation ids on the negotiated rate. | maxItems: 100 |
data.negotiated_rate_ids[] |
string | Optional | maxLength: 16000 |
|
data.rooms |
integer | Required | The number of rooms required | |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"rooms": 1,
"negotiated_rate_ids": [
"nre_0000ATOwpuYnZohiSmlmym"
],
"mobile": false,
"location": {
"radius": 5,
"geographic_coordinates": {
"longitude": -0.1416,
"latitude": 51.5071
}
},
"instant_payment": false,
"guests": [
{
"type": "adult"
},
{
"age": 7,
"type": "child"
}
],
"free_cancellation_only": false,
"check_out_date": "2023-06-07",
"check_in_date": "2023-06-04"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Flights: Get seat maps — duffel.api.air.seat-maps.list
Run Flights: Get seat maps with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Required | maxProperties: 30; additionalProperties: false |
|
query.offer_id |
string | Required | Duffel's unique identifier for the resource | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"offer_id": "xxx_00009hthhsUZ8W4LxQgkjo"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Payments: Create a 3DS Session — duffel.api.payments.three-d-secure-sessions.create
Run Payments: Create a 3DS Session with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.card_id |
string | Required | The card ID. This should be the card ID that's going to be submitted for payment. | maxLength: 16000 |
data.exception |
string | Optional | The name of the exception to opt out of authenticating the payment with the card issuer. | enum: ["secure_corporate_payment"]; maxLength: 16000 |
data.resource_id |
string | Required | The resource that is going to be submitted for payment after a 3DS session status is ready for payment. This is used together with services to calculate the payment amount in the currency to be paid. |
maxLength: 16000 |
data.services |
array | Optional | maxItems: 100 |
|
data.services[] |
object | Optional | maxProperties: 100 |
|
data.services[].id |
string | Optional | The service ID to be paid together with the resource_id |
maxLength: 16000 |
data.services[].quantity |
number | Optional | The number of services intended to pay for. Quantity must be greater than 0. | |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"services": [
{
"quantity": 1,
"id": "ser_00009UhD4ongolulWd9123"
}
],
"resource_id": "off_0000AKTurT99qsmGTujhis",
"exception": "secure_corporate_payment",
"card_id": "tcd_00009hthhsUZ8W4LxQgkjb"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: List webhook deliveries — duffel.api.air.webhooks.deliveries.list
Run Notifications: List webhook deliveries with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.created_at |
object | Optional | maxProperties: 2; additionalProperties: false |
|
query.created_at.after |
string | Optional | The ISO 8601 datetime after which webhook deliveries created will be returned. This is UTC and must not contain timezone information. | maxLength: 16000 |
query.created_at.before |
string | Optional | The ISO 8601 datetime before which webhook deliveries created will be returned. This is UTC and must not contain timezone information. | maxLength: 16000 |
query.type |
string | Optional | maxLength: 16000 |
|
query.delivery_success |
boolean | Optional | ||
query.endpoint_id |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"type": "order.created",
"delivery_success": true,
"endpoint_id": "end_0000A3tQSmKyqOrcySrGbo"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: Get a single webhook delivery — duffel.api.air.webhooks.deliveries.get
Run Notifications: Get a single webhook delivery with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: Retry delivering a webhook event — duffel.api.air.webhooks.events.redeliver
Run Notifications: Retry delivering a webhook event with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: Get a single webhook event — duffel.api.air.webhooks.events.get
Run Notifications: Get a single webhook event with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: List webhook events — duffel.api.air.webhooks.events.list
Run Notifications: List webhook events with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.after |
string | Optional | maxLength: 16000 |
|
query.created_at |
object | Optional | maxProperties: 2; additionalProperties: false |
|
query.created_at.after |
string | Optional | The ISO 8601 datetime after which webhook events created will be returned. This is UTC and must not contain timezone information. | maxLength: 16000 |
query.created_at.before |
string | Optional | The ISO 8601 datetime before which webhook events created will be returned. This is UTC and must not contain timezone information. | maxLength: 16000 |
query.type |
string | Optional | maxLength: 16000 |
|
query.delivery_success |
boolean | Optional |
Full JSON Schema
Example input
{
"query": {
"limit": 10,
"type": "order.created",
"delivery_success": true
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: List webhooks — duffel.api.air.webhooks.list
Run Notifications: List webhooks with Duffel. This is a read command; it does not grant access beyond the connected account's permissions.
This is a read operation. Provider rate limits and data access rules still apply.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
query |
object | Optional | maxProperties: 30; additionalProperties: false |
|
query.limit |
— | Optional | ||
query.limit |
integer | Optional | anyOf[1]; minimum: 1; maximum: 50 |
|
query.limit |
string | Optional | anyOf[2]; pattern: "^(?:[1-9]|[1-4][0-9]|50)$" |
|
query.before |
string | Optional | maxLength: 16000 |
|
query.after |
string | Optional | maxLength: 16000 |
Full JSON Schema
Example input
{
"query": {
"limit": 10
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: Create a webhook — duffel.api.air.webhooks.create
Run Notifications: Create a webhook with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
data |
object | Required | maxProperties: 100 |
|
data.events |
array | Required | The events that this webhook will be subscribed to | maxItems: 100 |
data.events[] |
string | Optional | maxLength: 16000 |
|
data.url |
string | Required | The URL where your webhook will be received | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"data": {
"url": "https://www.example.com/webhooks",
"events": [
"order.created",
"order.airline_initiated_change_detected"
]
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: Ping a webhook — duffel.api.air.webhooks.ping
Run Notifications: Ping a webhook with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: Delete a webhook — duffel.api.air.webhooks.delete
Run Notifications: Delete a webhook with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Notifications: Update a webhook — duffel.api.air.webhooks.update
Run Notifications: Update a webhook with Duffel. This command can change provider data. Review the target and input before invoking it.
This operation can change provider data. Review the input before allowing an agent to call it.
Parameters
Requiredness is local to the containing object. A required child is required only when its parent object or array item is provided. Alternative schemas are identified in the Constraints column; the linked full JSON Schema is authoritative.
| Parameter | Type | Required in parent | Description | Constraints |
|---|---|---|---|---|
path |
object | Required | additionalProperties: false |
|
path.id |
string | Required | minLength: 2; maxLength: 100; pattern: "^[A-Za-z][A-Za-z0-9_-]+$" |
|
data |
object | Required | maxProperties: 100 |
|
data.active |
boolean | Optional | The desired active status of the webhook | |
data.events |
array | Optional | The desired events that the webhook should subscribe to | maxItems: 100 |
data.events[] |
string | Optional | maxLength: 16000 |
|
data.url |
string | Optional | The desired url of the webhook | maxLength: 16000 |
deviceIp |
string | Optional | maxLength: 45 |
|
deviceUserAgent |
string | Optional | maxLength: 1000 |
Full JSON Schema
Example input
{
"path": {
"id": "resource_fixture"
},
"data": {
"url": "https://example.com/duffel/webhook",
"events": [
"order.created",
"order.airline_initiated_change_detected"
],
"active": true
}
}
At most 1 provider requests per invocation; timeout: 30 seconds.
Errors
Check the key's expiry, revocation, workspace and allowed operations.
Reuse the same idempotency key only for the same request.
The connection or provider limit has been reached. Check the receipt before retrying.
Test the connection
Open the integration's commands below to inspect parameters and examples. Start with a read command for an account or resource you can access. Refresh your client's tool list, use the returned tool name, and check the execution result and usage. Provider charges and permissions still apply. Never test a write against production data without reviewing it.