Skip to content

Trip Details ​

Returns the full detail of one trip in a single call: live seat availability (segments[].seats_map, segments[].free_seats_count), the passenger fields the provider requires to book (required_passenger_fields), ancillary services (baggage), per-fare cancellation rules (fares[].cancellation_info), and applicable discounts.

INFO

This is a POST (not a cacheable GET) because the response carries live seat availability that must not be cached, and to stay uniform with Search and Recalculate. The passengers party composition is required because required fields and per-passenger pricing/availability depend on it.

Endpoint ​

Method: POST

URL: /v1/trip

Request Headers ​

ParameterTypeRequiredDescription
AuthorizationStringYesBearer <token> from Login

Request Parameters ​

ParameterTypeRequiredDescription
└ trip_idStringYesTrip id from a Search result
└ localeStringNoLanguage, refer to Locale List
└ currencyStringNoRequested pricing currency
└ passengersObjectYesPassenger party composition
  └ adultsIntegerYesNumber of adults (≥ 1)
  └ childrenIntegerNoNumber of children (≥ 0)

Request Example ​

json
{
  "trip_id": "trip_8f21",
  "locale": "en",
  "currency": "UAH",
  "passengers": {
    "adults": 2,
    "children": 1
  }
}

Response Parameters ​

The response wraps a single trip object. It contains every field from the Search trip, plus the detail fields below.

ParameterTypeRequiredDescription
└ tripObjectYesFull trip detail
  └ idStringYesTrip identifier
  └ currencyStringYesPricing currency
  └ priceNumberYesPrice per adult
  └ departurePlaceYesDeparture point (see Place)
  └ arrivalPlaceYesArrival point (see Place)
  └ fares[Fare]YesAvailable fare options (see Fare)
  └ segments[Segment]NoTrip segments / legs with seat maps (see Segment)
  └ stops[Stop]NoIntermediate stops (see Stop)
  └ discounts[Discount]NoAvailable discounts (see Discount)
  └ baggage[Baggage]NoAncillary baggage options (see Baggage)
  └ required_passenger_fieldsRequiredPassengerFieldsNoFields needed to book (see Required Passenger Fields)

Shared Schemas ​

Segment ​

ParameterTypeRequiredDescription
idStringNoSegment identifier
indexIntegerNoSequence position in the trip
departure_nameStringNoDeparture stop name
arrival_nameStringNoArrival stop name
departurePlaceNoDeparture point (see Place)
arrivalPlaceNoArrival point (see Place)
priceNumberNoSegment price
currencyStringNoCurrency
free_seatingBooleanYestrue = open/unassigned seating (board anywhere); false = passengers must choose a seat from seats_map. Providers MUST set this explicitly.
free_seats_countIntegerNoAvailable seats
seats_map[SeatMap]NoSeat grid (when not free_seating)

SeatMap ​

ParameterTypeDescription
idStringSeat identifier (used as seat_id in Create Order)
numberStringSeat number (e.g. 12A)
typeIntegerCell type, refer to Seat Type Legend
coor_xIntegerX coordinate on the coach plan
coor_yIntegerY coordinate on the coach plan
coor_zIntegerZ coordinate / deck (default 0)

Stop ​

ParameterTypeDescription
indexIntegerSequence position
idStringStop identifier
nameStringStop name
addressStringStop address
departureStringDeparture datetime (ISO-8601)
arrivalStringArrival datetime (ISO-8601)
is_technical_stopBooleanWhether this is a technical (non-boarding) stop
latitudeNumberLatitude
longitudeNumberLongitude
timezoneStringIANA timezone

Discount ​

ParameterTypeDescription
discount_idStringDiscount identifier (used by Recalculate)
discount_codeStringDiscount code (e.g. child)
discount_nameStringDisplay name
descriptionStringWhat the discount applies to
discount_percentNumberDiscount percentage (e.g. 50)
age_startIntegerMinimum age (inclusive)
age_endIntegerMaximum age (inclusive)

Baggage ​

ParameterTypeDescription
idStringBaggage option identifier
typeStringOne of small, medium, large
titleStringDisplay name
lengthIntegerLength in cm
widthIntegerWidth in cm
heightIntegerHeight in cm
weightIntegerMax weight in kg
max_per_personIntegerMax items per passenger
priceNumberPrice per item
provision_percentNumberProvider commission percentage
currencyStringCurrency

CancellationRule ​

Returned inside each fares[].cancellation_info.

ParameterTypeDescription
idStringRule identifier
descriptionStringHuman-readable rule text
hours_before_departureNumberHours before departure this rule applies from (e.g. 24)
refund_rateNumberRefund fraction (e.g. 0.75 = 75% refunded)
ticket_priceNumberTicket price the rule is computed against
refund_amountNumberResulting refund amount

Required Passenger Fields ​

A boolean map of the passenger fields the provider requires to book this trip. Recognised keys: need_birth, need_doc, need_doc_type, need_doc_expiry, need_doc_issue_date, need_doc_issue_country, need_nationality, need_residency, need_patronymic, need_gender, need_phone, need_latin_names, need_email, need_city, need_street_name, need_building_apartment_number, need_zip_code, need_seat, need_visa_permit_type. Unknown keys are ignored.

Response Example ​

json
{
  "trip": {
    "id": "trip_8f21",
    "currency": "UAH",
    "price": 650.0,
    "departure": { "code": "2200001", "name": "Kyiv Central Bus Station", "datetime": "2026-07-01T08:00:00+03:00" },
    "arrival": { "code": "2218000", "name": "Lviv Bus Station", "datetime": "2026-07-01T16:00:00+03:00" },
    "fares": [
      {
        "code": "adult",
        "name": "Standard",
        "price": 650.0,
        "currency": "UAH",
        "is_default": true,
        "cancellation_info": [
          { "id": "r1", "description": "More than 24h before departure", "hours_before_departure": 24, "refund_rate": 0.9 }
        ]
      }
    ],
    "segments": [
      {
        "id": "seg_1",
        "index": 0,
        "free_seating": false,
        "free_seats_count": 30,
        "seats_map": [
          { "id": "s12a", "number": "12A", "type": 1, "coor_x": 1, "coor_y": 6, "coor_z": 0 }
        ]
      }
    ],
    "discounts": [
      { "discount_id": "d_child", "discount_code": "child", "discount_name": "Child", "discount_percent": 50, "age_start": 0, "age_end": 11 }
    ],
    "required_passenger_fields": { "need_birth": true, "need_doc": true, "need_phone": true }
  }
}

Error Code List ​

codemessageDescription
UNAUTHORIZEDInvalid tokenThe bearer token is missing, invalid, or expired (401).
NOT_FOUNDTrip not foundThe trip_id is unknown or has expired.

TTN Octo API documentation