> ## Documentation Index
> Fetch the complete documentation index at: https://developers.ttool.travel/llms.txt
> Use this file to discover all available pages before exploring further.

# The offer object

> The compact offer model returned by search, details and change-options.

Search, details and change-options all return the same offer model, whichever airline or GDS it came from. Offers carry IATA codes only; names come once per response in the [`dictionaries`](#dictionaries) block.

Fields with no value are **omitted** from the JSON rather than sent as `null`: `appliedFareBrand`, `leavingOfferId`, `returningOfferId`, `terminal`, `layoverMinutes` and `aircraft`.

## Offer

**offerId** `string (uuid)`

Pass this as `proposalId` or `flightProposalId` in later calls.

**tripType** `string`

`OneWay` or `RoundTrip`.

**cabinClass** `string`

`Economy`, `PremiumEconomy`, `Business` or `First`.

**isCharter** `boolean`

**seatsRemaining** `integer`

Seats left at this fare, as the provider reports it. `9` means 9 or more.

**hasFareBrands** `boolean`

Call [fare-brands](https://developers.ttool.travel/api-reference/fare-brands.md) only when `true`.

**supportsOnHold** `boolean`

`true` when the offer can be booked with `holdOnly`. See [On-hold bookings](https://developers.ttool.travel/guides/on-hold-bookings.md).

**appliedFareBrand** `string`

Present after change-options: the brand code now stored on this offer.

**price** `object`

**properties**

**currency** `string`

Currency of every amount in this block.

**total** `number`

Total for **all passengers**, rounded to 2 decimals. Show this one.

**baseFare** `number`

Base fare total.

**taxes** `number`

Tax total.

**commission** `number`

Your agency commission, included in `total`. For your accounting.

**breakdown** `object[]`

One entry per passenger type you searched for: `passengerType`, `count`, `baseFare` and `taxes` (per passenger), `total` (per passenger × `count`), `fareType`.

**journeys** `Journey[]`

One journey for `OneWay`. Two for `RoundTrip`: outbound first, then inbound.

**leavingOfferId** `string (uuid)`

Outbound half of a packed round trip. Present after details.

**returningOfferId** `string (uuid)`

Return half of a packed round trip. Present after details.

## Journey

**origin** `object`

`iataCode`.

**destination** `object`

`iataCode`.

**departure** `string`

Local airport time, `yyyy-MM-ddTHH:mm:ss`, no UTC offset.

**arrival** `string`

Local airport time, no UTC offset.

**durationMinutes** `integer`

**stops** `integer`

**segments** `Segment[]`

The flights that make up this journey.

## Segment

**marketingCarrier** `string`

IATA airline code.

**operatingCarrier** `string`

IATA airline code.

**flightNumber** `string`

**origin** `object`

`iataCode`, plus `terminal` when known.

**destination** `object`

`iataCode`, plus `terminal` when known.

**departure** `string`

Local airport time, no UTC offset.

**arrival** `string`

Local airport time, no UTC offset.

**durationMinutes** `integer`

**layoverMinutes** `integer`

Connection time before the next segment. Omitted on the last segment of a journey.

**aircraft** `string`

Aircraft code, for example `738`.

**cabinClass** `string`

**bookingClass** `string`

Reservation booking designator (RBD), for example `Y`.

**seatsAvailable** `integer`

**baggage** `object`

Keyed by passenger type (`adult`, `child`, `infant`), only the types you searched for. Each has `checked` and `cabin` allowances. See [Baggage](#baggage).

## Baggage

Allowances follow the Amadeus and IATA NDC convention for included bags.

| Case | Shape | Show |
| - | - | - |
| Piece concept | `{ "quantity": 2, "weight": 23, "weightUnit": "KG" }` or `{ "quantity": 1 }` | 2 × 23 kg, or 1 bag |
| Weight concept | `{ "weight": 30, "weightUnit": "KG" }` | 30 kg total |
| Nothing included | `{ "quantity": 0 }` | No bags included |
| Not reported | `checked` or `cabin` key omitted | "Contact the airline", never "no baggage" |

`weightUnit` is `KG` or `LB`.

## Dictionaries

Every response that carries offers (search, details, change-options) carries one `dictionaries` block. It holds English names for every carrier and airport code used in those offers, so you can render a results page without your own IATA reference data.

```json theme={null}
{
  "carriers": { "FZ": "flydubai", "IA": "Iraqi Airways" },
  "airports": {
    "BGW": { "name": "Baghdad International", "city": "Baghdad", "country": "IQ" },
    "DXB": { "name": "Dubai International", "city": "Dubai", "country": "AE" }
  }
}
```

* `airports[].country` is ISO 3166-1 alpha-2, such as `IQ`. It's omitted for an airport that isn't in our catalogue, when the name comes from the airline instead.
* A code can occasionally be missing when no source reported a name. Always fall back to showing the code.

## Full example

```json theme={null}
{
  "offerId": "8d0e3b6a-2f41-4b8e-b1c9-5d6e7f8a9b0c",
  "tripType": "RoundTrip",
  "cabinClass": "Economy",
  "isCharter": false,
  "seatsRemaining": 5,
  "hasFareBrands": true,
  "supportsOnHold": false,
  "price": {
    "currency": "USD",
    "total": 436.00,
    "baseFare": 360.00,
    "taxes": 76.00,
    "commission": 12.00,
    "breakdown": [
      { "passengerType": "Adult", "count": 1, "baseFare": 360.00, "taxes": 76.00, "total": 436.00, "fareType": "Published" }
    ]
  },
  "journeys": [
    {
      "origin": { "iataCode": "BGW" },
      "destination": { "iataCode": "DXB" },
      "departure": "2026-12-07T03:00:00",
      "arrival": "2026-12-07T05:00:00",
      "durationMinutes": 120,
      "stops": 0,
      "segments": [
        {
          "marketingCarrier": "IA",
          "operatingCarrier": "IA",
          "flightNumber": "4313",
          "origin": { "iataCode": "BGW", "terminal": "A" },
          "destination": { "iataCode": "DXB", "terminal": "1" },
          "departure": "2026-12-07T03:00:00",
          "arrival": "2026-12-07T05:00:00",
          "durationMinutes": 120,
          "aircraft": "738",
          "cabinClass": "Economy",
          "bookingClass": "Y",
          "seatsAvailable": 5,
          "baggage": {
            "adult": {
              "checked": { "quantity": 1, "weight": 23, "weightUnit": "KG" },
              "cabin": { "quantity": 1, "weight": 7, "weightUnit": "KG" }
            }
          }
        }
      ]
    },
    { "...": "inbound journey, same shape" }
  ]
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.