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
- Errors
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",
"fare": 25.01,
"serviceFee": 5,
"total": 34.08,
"tax": {
"total": 4.07
}
},
"rules": {
"refundable": true,
"nonRefundable": false
},
"services": {
"baggageIncluded": true
},
"passengerPrices": [
0: {
"type": "ADULT",
"fareBasis": "XBAG",
"pricing": {
"currency": "EUR",
"fare": 25.01,
"serviceFee": 5,
"total": 34.08,
"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",
"fare": 73.5,
"serviceFee": 5,
"total": 84.29,
"tax": {
"total": 5.79
}
},
"rules": {
"refundable": true,
"nonRefundable": false
},
"services": {
"baggageIncluded": true
},
"passengerPrices": [
0: {
"type": "ADULT",
"fareBasis": "XBAG",
"pricing": {
"currency": "EUR",
"fare": 73.5,
"serviceFee": 5,
"total": 84.29,
"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, serviceFee (service fee expressed in the 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. |
Errors specific to Flight Detail (12 codes). Common gateway and authentication errors apply to all endpoints and are listed once in the central reference.
🔎
Validation— fix the request and retry
| Group | Code | Message | Description |
|---|---|---|---|
| Validation | 904128 | Inventory validation error. | Returned when the request payload fails schema validation or required fields are missing. Correct the request parameters and send the request again. |
| Validation | 904200 | Flight service validation error: {0} | Returned during flight operations when validation on the remote flight provider side fails. Correct the request parameters and send the request again. |
| Validation | 904219 | Flight price has changed since your search. Please perform a new search to get the latest prices. | Returned when airline fares or availability change between search and flight detail or booking steps. Perform a new flight search to get updated rates. |
| Validation | 904223 | Flight price validation failed. Unable to verify the flight price. Please try again. | Returned when price validation is unable to verify details for the selected flight fare. Re-fetch flight details and retry. |
| Validation | 904226 | Flight price validation failed. Unable to verify the flight price. Please perform a new search. | Returned when pricing enrichment data is absent for the flight selection. Perform a new search to refresh session state. |
| Validation | 904227 | Sales channel currency is not defined. Please contact your administrator. | Returned when the sales channel configuration lacks a base currency setting. Contact your administrator to configure channel currency. |
Not found— verify the identifier
| Group | Code | Message | Description |
|---|---|---|---|
| Not found | 904218 | No flight provider found for the sales channel. Email: {0} | Returned when no active flight provider is configured or matched for the given sales channel account. Contact your administrator. |
Timeout— restart the flow or session
| Group | Code | Message | Description |
|---|---|---|---|
| Timeout | 904225 | Flight price validation failed. Your search session has expired. Please perform a new search to get the latest prices. | Returned when cached flight search data has expired before flight detail verification. Start a new search session. |
Rate limit— slow down and retry later
| Group | Code | Message | Description |
|---|---|---|---|
| Rate limit | 901010 | You have exceeded the limit of requests sent per unit time. You can send {1} requests in {0} seconds. | Returned when the rate limit configured for your sales channel / IP is exceeded. Slow down your request rate and retry after the specified window. |
System— retry with backoff; contact support if persistent
| Group | Code | Message | Description |
|---|---|---|---|
| System | 904003 | Unexpected error occured. | Returned when an unexpected system error occurs while processing the flight request. Retry after a short wait; if the issue persists, contact Etscore support. |
| System | 904201 | Flight service system error: {0} | Returned when an internal system error occurs within the remote flight provider service. Retry with backoff; contact support if persistent. |
| System | 904229 | Provider currency is missing in the flight response. Please try again or contact support. | Returned when upstream flight provider response lacks the required currency field. Retry or contact support. |
Common errors not shown here. Gateway, authentication and header errors apply to every endpoint. → See the central Error Codes reference.