Flight Detail
POST
/api/v1/generic-api-service/flight/detail
The detail endpoint returns the detailed, re-priced information for the flight offer(s) selected from the Flight Search results. It confirms the current price, segments, fare brands and the booking restrictions that apply before proceeding to reservation. It supports both one-way and round-trip. For round-trip, flights[0].departure is the departure leg and flights[1].return is the return leg.
- cURL
- Request
- Response
- Request Details
- Response Details
curl --location 'https://test-api.etscore.com/api/v1/generic-api-service/flight/detail' \
--header 'Accept-Language: en-US' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <token>' \
--data '{
"searchId": "5029md2matl3schcom2vbsvk4g7j4vc6",
"offers": {
"departure": {
"flightId": "pz-f3b3640e-6059-4267-bc81-114de4aa238c",
"offerId": "XBAG-a86713d6a71445a285ca7267732f1608"
},
"return": {
"flightId": "pz-f51fb2fb-bb16-40c1-8286-7aeddff29f08",
"offerId": "XBAG-d990183ea2b1476a9c1122bbdcf70189"
}
}
}'
{
"searchId": "5029md2matl3schcom2vbsvk4g7j4vc6",
"offers": {
"departure": {
"flightId": "pz-f3b3640e-6059-4267-bc81-114de4aa238c",
"offerId": "XBAG-a86713d6a71445a285ca7267732f1608"
},
"return": {
"flightId": "pz-f51fb2fb-bb16-40c1-8286-7aeddff29f08",
"offerId": "XBAG-d990183ea2b1476a9c1122bbdcf70189"
}
}
}
{
"success": true,
"flights": [
0: {
"departure": {
"id": "pz-f3b3640e-6059-4267-bc81-114de4aa238c",
"validatingCarrierCode": "VF",
"validatingCarrier": "Ajet",
"stopCount": 0,
"totalFlyTimeMinutes": 85,
"totalStopDurationMinutes": 0,
"segments": [
0: {
"flight": {
"number": "3039",
"flyTimeMinutes": 85,
"layoverDurationMinutes": 0,
"numberOfStops": 0,
"stopCount": 0,
"technicalStop": false,
"fareBasis": "WW26"
},
"airline": {
"marketing": {
"code": "VF",
"name": "Ajet"
},
"operating": {
"code": "VF",
"name": "Ajet"
}
},
"availability": {
"numberOfBookableSeats": 2
},
"departure": {
"dateTime": "2026-10-10T05:15:00",
"nextDay": false,
"airport": {
"iataCode": "AYT",
"code": "AYT",
"name": "Antalya Airport",
"city": "Antalya",
"country": "Turkey",
"countryCode": "TR"
}
},
"arrival": {
"dateTime": "2026-10-10T06:40:00",
"nextDay": false,
"airport": {
"iataCode": "SAW",
"code": "SAW",
"name": "Sabiha Gokcen International Airport",
"city": "Istanbul",
"country": "Turkey",
"countryCode": "TR"
}
},
"equipment": {
}
}
],
"offers": [
0: {
"id": "XBAG-a86713d6a71445a285ca7267732f1608",
"class": {
"code": "XBAG",
"type": "XBAG",
"key": "XBAG",
"matchCode": "XBAG"
},
"cabin": {
"classCode": "W",
"type": "ECONOMY"
},
"pricing": {
"currency": "EUR",
"total": 31.26,
"tax": {
"total": 4.07
}
},
"rules": {
"refundable": true,
"nonRefundable": false
},
"services": {
"baggageIncluded": true
},
"passengerPrices": [
0: {
"type": "ADULT",
"fareBasis": "XBAG",
"pricing": {
"currency": "EUR",
"fare": 25.01,
"total": 31.26,
"tax": {
"total": 4.07,
"VQ": 4.07,
"YR": 0,
"other": 0
}
},
"baggage": {
"pieces": 0,
"checkedKg": 15,
"cabinKg": 8
}
}
],
"metadata": {
"fareCode": "5029md2...;;XBAG-a86713d6...;;935::5029md2...;;XBAG-d990183e...;;935"
}
}
],
"brands": [
0: {
"code": "XBAG",
"name": "XBAG",
"priceDifference": 0,
"currency": "EUR",
"features": {
"mealAvailable": false,
"seatSelectionFree": false,
"refundAllowed": false,
"exchangeAllowed": true
},
"baggage": [
0: {
"paxType": "ADULT",
"pieces": false,
"cabinKg": 8,
"cabinText": "1 X 8 KG El bagajı",
"checkedKg": 15,
"checkedText": "1 X 15 KG"
}
],
"rules": [
],
"metadata": {
}
}
]
}
},
1: {
"return": {
"id": "pz-f51fb2fb-bb16-40c1-8286-7aeddff29f08",
"validatingCarrierCode": "VF",
"validatingCarrier": "Ajet",
"stopCount": 0,
"totalFlyTimeMinutes": 240,
"totalStopDurationMinutes": 0,
"segments": [
0: {
"flight": {
"number": "3008",
"flyTimeMinutes": 65,
"layoverDurationMinutes": 105,
"numberOfStops": 0,
"stopCount": 0,
"technicalStop": false,
"fareBasis": "JAJETVIP"
},
"airline": {
"marketing": {
"code": "VF",
"name": "Ajet"
},
"operating": {
"code": "TK",
"name": "Türk Hava Yolları"
}
},
"availability": {
"numberOfBookableSeats": 2
},
"departure": {
"dateTime": "2026-10-30T21:15:00",
"nextDay": false,
"airport": {
"iataCode": "SAW",
"code": "SAW",
"name": "Sabiha Gokcen International Airport",
"city": "Istanbul",
"country": "Turkey",
"countryCode": "TR"
}
},
"arrival": {
"dateTime": "2026-10-30T22:20:00",
"nextDay": false,
"airport": {
"iataCode": "ESB",
"code": "ESB",
"name": "Esenboga International Airport",
"city": "Ankara",
"country": "Turkey",
"countryCode": "TR"
}
},
"equipment": {
}
},
1: {
"flight": {
"number": "4010",
"flyTimeMinutes": 70,
"layoverDurationMinutes": 0,
"numberOfStops": 0,
"stopCount": 0,
"technicalStop": false,
"fareBasis": "WADDW26"
},
"airline": {
"marketing": {
"code": "VF",
"name": "Ajet"
},
"operating": {
"code": "TK",
"name": "Türk Hava Yolları"
}
},
"availability": {
"numberOfBookableSeats": 2
},
"departure": {
"dateTime": "2026-10-31T00:05:00",
"nextDay": false,
"airport": {
"iataCode": "ESB",
"code": "ESB",
"name": "Esenboga International Airport",
"city": "Ankara",
"country": "Turkey",
"countryCode": "TR"
}
},
"arrival": {
"dateTime": "2026-10-31T01:15:00",
"nextDay": false,
"airport": {
"iataCode": "AYT",
"code": "AYT",
"name": "Antalya Airport",
"city": "Antalya",
"country": "Turkey",
"countryCode": "TR"
}
},
"equipment": {
}
}
],
"offers": [
0: {
"id": "XBAG-d990183ea2b1476a9c1122bbdcf70189",
"class": {
"code": "XBAG",
"type": "XBAG",
"key": "XBAG",
"matchCode": "XBAG"
},
"cabin": {
"classCode": "W",
"type": "ECONOMY"
},
"pricing": {
"currency": "EUR",
"total": 85.24,
"tax": {
"total": 5.79
}
},
"rules": {
"refundable": true,
"nonRefundable": false
},
"services": {
"baggageIncluded": true
},
"passengerPrices": [
0: {
"type": "ADULT",
"fareBasis": "XBAG",
"pricing": {
"currency": "EUR",
"fare": 73.5,
"total": 85.24,
"tax": {
"total": 5.79,
"VQ": 5.79,
"YR": 0,
"other": 0
}
},
"baggage": {
"pieces": 0,
"checkedKg": 15,
"cabinKg": 8
}
}
],
"metadata": {
"fareCode": "5029md2...;;XBAG-d990183e...;;935"
}
}
],
"brands": [
0: {
"code": "XBAG",
"name": "XBAG",
"priceDifference": 0,
"currency": "EUR",
"features": {
"mealAvailable": false,
"seatSelectionFree": false,
"refundAllowed": false,
"exchangeAllowed": true
},
"baggage": [
0: {
"paxType": "ADULT",
"pieces": false,
"cabinKg": 8,
"cabinText": "1 X 8 KG El bagajı",
"checkedKg": 15,
"checkedText": "1 X 15 KG"
}
],
"rules": [
],
"metadata": {
}
}
]
}
}
],
"restrictions": {
"canBeReserved": false,
"docsRequired": false,
"foidRequired": false,
"nationIdRequired": false,
"needAdultDOB": false,
"needContactAddress": false,
"passDueDateRequired": false
}
}
| Name | Type | Required | Description |
|---|---|---|---|
| searchId | string | Yes | The search.id returned by the Flight Search service. |
| offers | object | Yes | The selected offer(s) grouped by leg: departure (outbound) and, for round-trip, return. |
| offers/departure | object | Yes | Selected outbound leg offer. |
| offers/departure/flightId | string | Yes | The flights/id of the chosen outbound flight from search results. |
| offers/departure/offerId | string | Yes | The offers/id of the chosen outbound fare from search results. |
| offers/return | object | No | Selected return leg offer. Provide for round-trip bookings. |
| offers/return/flightId | string | No | The flights/id of the chosen return flight from search results. |
| offers/return/offerId | string | No | The offers/id of the chosen return fare from search results. |
| Name | Type | Required | Description |
|---|---|---|---|
| success | boolean | Yes | Indicates whether the request was processed successfully. |
| flights | object-array | Yes | One detailed object per leg. Index 0 holds the departure leg (flights[0].departure); index 1 holds the return leg (flights[1].return), present only for round-trip. |
| flights/departure | object | Yes | Detailed outbound leg object (index 0). |
| flights/return | object | No | Detailed return leg object (index 1, round-trip only). Same structure as departure. |
| flights/{leg}/id | string | Yes | Flight option identifier (matches the requested flightId). {leg} is departure or return. |
| flights/{leg}/validatingCarrierCode | string | Yes | Validating carrier code. |
| flights/{leg}/validatingCarrier | string | Yes | Validating carrier name. |
| flights/{leg}/stopCount | int | Yes | Number of stops. |
| flights/{leg}/totalFlyTimeMinutes | int | Yes | Total flying time in minutes. |
| flights/{leg}/totalStopDurationMinutes | int | Yes | Total stop/layover duration in minutes. |
| flights/{leg}/segments | object-array | Yes | Segment list of the leg. |
| flights/{leg}/segments/flight | object | Yes | Segment flight info: number, flyTimeMinutes, layoverDurationMinutes, numberOfStops, technicalStop, fareBasis. |
| flights/{leg}/segments/airline | object | Yes | Marketing and operating airline (code, name). |
| flights/{leg}/segments/availability/numberOfBookableSeats | int | Yes | Number of bookable seats at this price. |
| flights/{leg}/segments/departure | object | Yes | Departure dateTime, nextDay and airport. |
| flights/{leg}/segments/arrival | object | Yes | Arrival dateTime, nextDay and airport. |
| flights/{leg}/offers | object-array | Yes | Priced offer detail for the leg. |
| flights/{leg}/offers/id | string | Yes | Offer identifier (matches the requested offerId). |
| flights/{leg}/offers/class | object | Yes | Fare/brand class identifiers: code, type, key, matchCode. |
| flights/{leg}/offers/cabin | object | Yes | Cabin booking classCode (e.g. W) and type (e.g. ECONOMY). |
| flights/{leg}/offers/pricing | object | Yes | Offer pricing: currency, total, tax. |
| flights/{leg}/offers/rules | object | Yes | Refund rules: refundable, nonRefundable. |
| flights/{leg}/offers/services/baggageIncluded | boolean | Yes | Whether checked baggage is included. |
| flights/{leg}/offers/passengerPrices | object-array | Yes | Per passenger-type pricing: type, fareBasis, pricing, baggage. |
| flights/{leg}/offers/metadata/fareCode | string | Yes | Opaque fare token to carry into reservation. One-way format: searchId;;offerId;;providerId. For round-trip, the departure offer's token joins both legs with ::. |
| flights/{leg}/brands | object-array | Yes | Available fare brands for the leg. Baggage here uses per-passenger cabinText/checkedText strings. |
| flights/{leg}/brands/code | string | Yes | Brand code (e.g. XBAG, FLEX, PREMIUM). |
| flights/{leg}/brands/name | string | Yes | Brand name. |
| flights/{leg}/brands/priceDifference | decimal | Yes | Price difference relative to the base brand. |
| flights/{leg}/brands/currency | string | Yes | Currency of the price difference. |
| flights/{leg}/brands/features | object | Yes | Brand features: mealAvailable, seatSelectionFree, refundAllowed, exchangeAllowed. |
| flights/{leg}/brands/baggage | object-array | Yes | Per-passenger baggage: paxType, pieces, cabinKg, cabinText, checkedKg, checkedText. |
| restrictions | object | Yes | Booking rules that apply to the offer(s). |
| restrictions/canBeReserved | boolean | Yes | Whether the offer can currently be reserved. |
| restrictions/docsRequired | boolean | Yes | Whether travel document (APIS) details are required. |
| restrictions/foidRequired | boolean | Yes | Whether a Form of Identification is required. |
| restrictions/nationIdRequired | boolean | Yes | Whether a national ID is required. |
| restrictions/needAdultDOB | boolean | Yes | Whether the adult passenger's date of birth is required. |
| restrictions/needContactAddress | boolean | Yes | Whether a contact address is required. |
| restrictions/passDueDateRequired | boolean | Yes | Whether the passport expiry date is required. |