---
title: "List a fare's options"
method: GET
path: "/v1/flights/fares/{fareId}/options"
tags: ["Flights"]
---

# List a fare's options

`GET /v1/flights/fares/{fareId}/options`

Returns a Book-on-Wego fare's bookable options (price, baggage, refundability, penalties, and the carrier's terms links when it publishes any), ordered by leg then price. A multi-leg trip needs ONE option per leg - read the top-level price, never min(options). Non-wego fareId 400; stale 404.

## Path parameters

- `fareId` string, required

## Query parameters

- `currency` string
- `locale` string

## Response `200`

The fare options, ordered by leg then cheapest-first within a leg.

- object — The fare options for one Book-on-Wego fare, and what this read resolved currency and locale to.
  - `fareId` string, required — The fare id these options are for.
  - `currencyCode` string, required — The currency the prices are quoted in – the same value as metadata.currencyCode, which carries currencyCodeSource beside it. Unlike the results read, this route quotes in the currency it asked for, so the two cannot disagree.
  - `price` object — The whole-trip price for this fare, so no caller has to add per-leg options together. Absent when the upstream did not state one.
    - `total` number, required — Whole-trip, whole-party total for the cheapest combination of options, as the upstream states it. Not computed here.
    - `totalUsd` number — The same figure in USD.
    - `currency` string, required — ISO 4217 currency of total.
    - `scope` 'party', required — total covers the whole party (adults + children + infants), not per-person.
  - `legs` object[] — The legs the options are attributed to, in upstream leg order. Present only when every option carries a legId that matches one of them.
    - `legId` number, required — The leg this group of options prices, as the upstream numbers it (1 = the first leg).
    - `from` string — Departure airport code of the leg.
    - `to` string — Arrival airport code of the leg.
    - `departsAt` string — Local departure date-time of the leg.
    - `airlines` string[] — Marketing airline codes on the leg.
  - `options` object[], required — The full fare option list – no filter, no pagination. Ordered by legId, then cheapest-first inside each leg, so the two legs of a split fare never interleave.
    - `fareOptionId` string, required — The fare option id (a UUID); sent to wego.com as the booking link's branded_fare param.
    - `name` string, required — The marketing name, e.g. Economy Lite.
    - `price` object, required — The price of one fare option (pass-through display values). Always whole-party for passengers; read covers for how much of the trip it pays for.
      - `total` number, required — Whole-party total for this fare option in the requested currency, including payment + booking fees. Unlike search-time fares, the fare options read carries a tax figure upstream, surfaced as the sibling totalTaxAmount when present.
      - `totalUsd` number, required — Whole-party total in USD. The price key options are sorted on WITHIN a leg; the list itself is ordered by leg first.
      - `currency` string, required — ISO 4217 currency of total.
      - `totalTaxAmount` number — Whole-party tax for this option, in the same currency as total. Taxes are set by the cabin, not by the fare option, so every fare option in the same cabin carries the same figure while their totals differ. Forwarded when the upstream provides it; absent otherwise.
      - `passengers` object[] — Per-passenger-type split of this option's total: one entry per type present in the party, each with its own head count. The party totals sum to total. Absent when the upstream priced the option without a passenger breakdown.
        - `type` 'adult' | 'child' | 'infant', required — The passenger type this entry prices.
        - `count` number, required — How many passengers of this type the party carries.
        - `perPerson` object, required — What a single passenger of this type pays.
          - `fare` number, required — Base fare for one passenger of this type.
          - `tax` number, required — Tax for one passenger of this type.
          - `total` number, required — What one passenger of this type pays, fare + tax.
        - `party` object, required — perPerson times count, taken from the upstream's own party-level figure when it states one, so it can differ from the exact product in the last decimal place.
          - `fare` number, required — Base fare for every passenger of this type.
          - `tax` number, required — Tax for every passenger of this type.
          - `total` number, required — What every passenger of this type pays together.
      - `covers` 'leg' | 'trip' — How much of the TRIP this total covers: leg = this option's own leg only, so a multi-leg trip needs one option per leg and their sum is the trip price; trip = the whole journey. Always whole-party either way. A positive witness – absent means the upstream did not let us attribute it, never that the total is the whole trip.
    - `refundable` boolean, required — Whether this option is refundable.
    - `exchangeable` boolean, required — Whether this option allows a date or flight change.
    - `baggage` object, required — Baggage allowance display strings for one fare option.
      - `cabin` string — Cabin baggage allowance display string.
      - `checked` string — Checked baggage allowance display string.
    - `penalties` object[], required — Always both change and cancel, in that order.
      - `type` 'change' | 'cancel', required — The action the penalty governs.
      - `policy` 'free' | 'fee' | 'not_permitted', required — free (allowed, no charge), fee (allowed, priced), or not_permitted.
      - `amount` number — Fee amount, present only when policy is fee.
      - `currency` string — ISO 4217 currency for amount, present only when policy is fee.
    - `termsUrls` string[] — The airline's terms and conditions links for this option, in the order the carrier lists them. Absent when the carrier publishes its rules as text rather than links, or when the terms read was unavailable - never an empty array. These are the carrier's own pages, not a machine-readable rulebook: refundability, exchangeability, baggage and the change/cancel penalties are the fields on this option, and are what an agent should reason over.
    - `legId` number — The leg this option prices, matching a legs[] entry. Present when the upstream attributes it; absent when it does not.
  - `metadata` object, required — What this read resolved currency and locale to, and how each was decided.
    - `currencyCode` string, required — The currency this read ASKED upstream for, and the one every price on it is meant to be in. Read it beside currencyCodeSource before you show a number: a price computed in the wrong currency renders as a perfectly normal price, with no error and no odd shape to notice, so the response states which one rather than leaving it to be inferred. Where the operation also publishes a top-level currencyCode, that field reports the currency the prices actually came back in; the two agree unless upstream declined to reprice.
    - `currencyCodeSource` 'explicit' | 'default', required — How the API resolved currencyCode: explicit (the caller sent currency – including a value equal to the default) or default (USD, no currency sent). A default here is the one signal that the request never carried the currency you meant.
    - `locale` string, required — The language tag this read asked upstream for – what any localized text on it was resolved in (room and board names, airline and airport names, review prose).
    - `localeSource` 'explicit' | 'default', required — How the API resolved locale: explicit (the caller sent locale – including a value equal to the default) or default (en, no locale sent). A default here explains text that came back in a language the caller did not ask for.

## Other responses

- `400` — Invalid request query/path parameters, or the fares service rejected the fareId or currency (`validation_failed`; the `detail` names the recovery).
- `401` — Missing or invalid bearer token.
- `404` — The fare was not found or its search has expired.
- `429` — Rate limit exceeded; retry after the `Retry-After` seconds.
- `502` — The upstream flights service returned an invalid response.
- `503` — The flights service is temporarily unavailable (`upstream_unavailable`) or rate-limited upstream (`upstream_rate_limited`); retry after the `Retry-After` seconds.

---

[API](https://skmtc.net/wego/apis/wego-api.md) · [All operations](https://skmtc.net/wego/apis/wego-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/wego/wego-api/revisions/e5d7af502419/schema)
