---
title: "Select ancillaries (baggage, seats, meals) for a trip item"
method: POST
path: "/v1/select_ancillaries"
tags: ["Pricing & booking"]
---

# Select ancillaries (baggage, seats, meals) for a trip item

`POST /v1/select_ancillaries`

## Request

- Base URL: `https://api.gojinko.com`
- URL: `https://api.gojinko.com/v1/select_ancillaries`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

## Request body

- AncillaryRequest
  - `trip_id` string, required
  - `item_id` string, required
  - `selections` object[], required
    - `offer_id` string, required: The `offer_id` of an offer in the item’s `available_ancillaries`, exactly as received.
    - `category` string: The server resolves the category from the offer.
    - `traveler_ref` string: Use the traveler's `traveler_ref` from GET /v1/trip.
    - `segment_ref_ids` string[]: For a seat, pass the offer's one `segment_ref_id`.
    - `seat_number` string: The seat to assign, required when the offer is a seat offer. Pick one from the offer's `seat_map.seats` with `available` true. One seat per passenger per segment, and each seat to at most one passenger.
    - `journey_ref_id` string
    - `quantity` number
  - `intent` IntentInput
    - `user_intent` string, nullable: The user's natural-language intent: the Alpic PII-stripped paraphrase when available, else a best-effort fallback to the client-provided NL query.

## Response `200`

Updated ancillary selection

- AncillaryResponse
  - `trip_id` string
  - `item_id` string: The trip item the selection applied to — `items[].item_id` on the trip.
  - `quoted_item_id` number: Deprecated: use `item_id` instead. An internal number for the priced item.
  - `selected_ancillaries` SelectedAncillary[]
    - `offer_id` string, required: Opaque identifier of this ancillary offer. Pass it back exactly as received in `selections[].offer_id`; do not parse or build it.
    - `traveler_ref` string: The traveler the selection applies to; absent on a booking-level ancillary.
    - `pax_ref_id` string: Deprecated: use `traveler_ref` instead. Same value.
    - `quantity` integer
    - `type` string: Ancillary family on a booked outcome, e.g. "seat" or "bag" (lowercase, open set). May be absent before booking.
    - `seat_number` string
    - `segment_ref_ids` string[]
    - `price` object: Deprecated: use `price_money` instead. The unit price of the chosen seat, set by the server: major units in the trip currency. Absent for a free seat or a selection without its own unit price.
      - `amount` number: Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).
      - `value` integer: Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.
      - `currency` string: ISO 4217 currency code.
      - `decimal_places` integer: Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.
      - `display` string: The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. "USD 159.77". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is "JPY 15615.00"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.
    - `price_money` object: The exact unit price of the chosen seat, set by the server. Absent for a free seat or a selection without its own unit price, e.g. a bag.
      - `value` integer, required: Integer amount in MINOR units at the ISO 4217 digits of `currency`: divide by 10 ** decimal_places to get the amount. Signed where the field says so (a price change delta).
      - `currency` string, required: ISO 4217 currency code.
      - `decimal_places` integer, required: The ISO 4217 digits of `currency` (2 for USD/EUR, 0 for JPY/KRW, 3 for BHD/KWD), and the scale of `value`.
      - `display` string, required: The same figure as a string ready to show: the ISO 4217 code, a space, then the amount at `decimal_places`, e.g. "USD 412.50". Show this; compute with `value`.
    - `status` 'pending' | 'confirmed' | 'failed': Absent before booking. For seats, `pending` means the airline has not confirmed the seat yet. `confirmed` means booked with the airline. `failed` means not booked.
    - `not_charged` boolean: true when this seat is not charged to the traveler.
    - `failure_reason` string: Why an ancillary failed, or why a pending airline outcome needs reconciliation.
  - `total_with_ancillaries` object: The item total including the selected ancillaries, in minor units: `amount` is an integer to divide by 10 ** `decimal_places` (e.g. `{amount: 23959, currency: "EUR", decimal_places: 2}` is EUR 239.59). `display` is the same figure to show.
    - `amount` number: Deprecated: use `value` instead (the same integer) where this object carries decimal_places. Where it does not, the figure is in MAJOR units and the field holding this object is itself deprecated: read its `*_money` sibling. The two-scale rule applies only to deprecated fields. Alternative to `value` on some endpoints (the two never appear together); its scale depends on decimal_places. When this object carries decimal_places, amount is an INTEGER in minor units — divide by 10 ** decimal_places (e.g. select_ancillaries total_with_ancillaries). When there is no decimal_places field, amount is a decimal in MAJOR units, safe to display as-is (e.g. trip and checkout totals).
    - `value` integer: Integer amount in MINOR units, always paired with decimal_places — divide by 10 ** decimal_places to display. Example: value 15977 with decimal_places 2 is 159.77 USD. Rendering this field directly shows prices 100x too high for 2-decimal currencies.
    - `currency` string: ISO 4217 currency code.
    - `decimal_places` integer: Scale of the integer value/amount: display = integer / 10 ** decimal_places. Always sent alongside minor-unit amounts. Usually the ISO 4217 digits of the currency (2 for USD/EUR/GBP, 0 for JPY/KRW, 3 for BHD/JOD/KWD) but currency-converted prices can carry a different scale — ALWAYS use the decimal_places sent with the amount, never a hardcoded 2. Only if the field is genuinely absent on a value-shaped object, fall back to the ISO digits for the currency.
    - `display` string: The same figure as a string ready to show: the ISO 4217 code, a space, then the amount, e.g. "USD 159.77". With decimal_places it is written at exactly that scale (value 1561500, JPY, decimal_places 2 is "JPY 15615.00"); without, at the ISO digits of the currency. Show this; compute with the number. Absent when the figure is not money (a cancellation step expressed as a percent or a number of nights) or could not be read unambiguously.

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `402`: Payment required — organization balance exhausted
- `404`: Resource not found
- `409`: The operation conflicts with the current state of the resource
- `410`: The resource this request names no longer exists
- `422`: Validation error
- `429`: Rate limit or quota exceeded
- `502`: The travel provider rejected the request, or an upstream call failed
- `503`: No travel provider can serve the request right now
- `504`: The travel provider did not answer in time

---

[API](https://skmtc.dev/gojinko/apis/jinko-public-api.md) - [All operations](https://skmtc.dev/gojinko/apis/jinko-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/gojinko/apis/jinko-public-api/revisions/ac5046767e4c?raw)
