From b403bfd970cf362f3bdfe27ead10d5bfbdf2012e Mon Sep 17 00:00:00 2001 From: Trey T Date: Tue, 28 Apr 2026 10:23:17 -0500 Subject: [PATCH] Add route-explorer.com integration: connection finder + departures board MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - RouteExplorerClient: anonymous HMAC token (route-explorer.com/api/token, IP rate-limited 10/min), POST /api/flight-search with X-API-Token; auto retry on 401/403 token rotation. Wraps the SuperJSON {json:{...}} envelope for the upstream tRPC endpoints. - RouteExplorerModels: Codable types for /route, /departures responses (RouteConnection, RouteFlight, cabins, appendix). Custom ISO-8601 decoder for the dateTime-with-offset timestamps. Bridge helper RouteFlight.toFlightSchedule(...) so route-explorer legs reuse the existing FlightLoadDetailView and AirlineLoadService flow for supported carriers (UA/AA/NK/KE/B6/AS/EK/XE). - RoutePlannerView: feature (a) — direct + multi-stop A→B routing via /route with maxStops 0/1/2, sortBy departure_time/duration, optional interline-only filter. Renders one ConnectionRow per itinerary with chained legs and layover indicators. - WhereToGoView: feature (b) — "where can I go" departures board for an airport over a 2/4/6/12/24h window. Capacity pills (F/J/W/Y), color- coded countdown, cross-midnight rollover. Tap any leg → load detail. - IATAAirportPicker: lightweight local-only picker against AirportDatabase (no flightconnections roundtrip needed since route-explorer keys on IATA, not FC IDs). - ContentView: two new entry-point cards (Find Connections, Where can I go?) above the favorites list. - api_docs/route_explorer_api.md + captures: full endpoint reference and representative response samples (DFW→LAS direct, DFW→KOA 1-stop, LBB→KOA 2-stop, AA2178 schedule, DFW departures). No tests yet — project has no test target and adding TDD would require scaffolding XCTest first. Worth backfilling tests for the date decoder, layover math, and toFlightSchedule bridge using the saved fixtures. Co-Authored-By: Claude Opus 4.7 (1M context) --- Flights.xcodeproj/project.pbxproj | 24 + Flights/FlightsApp.swift | 4 +- Flights/Models/RouteExplorerModels.swift | 260 + Flights/Services/RouteExplorerClient.swift | 207 + Flights/Views/Components/ConnectionRow.swift | 186 + .../Views/Components/IATAAirportPicker.swift | 111 + Flights/Views/ContentView.swift | 79 +- Flights/Views/RoutePlannerView.swift | 219 + Flights/Views/WhereToGoView.swift | 348 + api_docs/route_explorer_api.md | 206 + .../departures_DFW.json | 5496 ++++++++ .../flight_AA2178.json | 67 + .../route_DFW_KOA_1stop.json | 773 ++ .../route_DFW_LAS.json | 10580 ++++++++++++++++ .../route_LBB_KOA_2stop.json | 1820 +++ .../schedule_AA2178.json | 556 + 16 files changed, 20934 insertions(+), 2 deletions(-) create mode 100644 Flights/Models/RouteExplorerModels.swift create mode 100644 Flights/Services/RouteExplorerClient.swift create mode 100644 Flights/Views/Components/ConnectionRow.swift create mode 100644 Flights/Views/Components/IATAAirportPicker.swift create mode 100644 Flights/Views/RoutePlannerView.swift create mode 100644 Flights/Views/WhereToGoView.swift create mode 100644 api_docs/route_explorer_api.md create mode 100644 api_docs/route_explorer_captures/departures_DFW.json create mode 100644 api_docs/route_explorer_captures/flight_AA2178.json create mode 100644 api_docs/route_explorer_captures/route_DFW_KOA_1stop.json create mode 100644 api_docs/route_explorer_captures/route_DFW_LAS.json create mode 100644 api_docs/route_explorer_captures/route_LBB_KOA_2stop.json create mode 100644 api_docs/route_explorer_captures/schedule_AA2178.json diff --git a/Flights.xcodeproj/project.pbxproj b/Flights.xcodeproj/project.pbxproj index 4ae9cd4..40da5a1 100644 --- a/Flights.xcodeproj/project.pbxproj +++ b/Flights.xcodeproj/project.pbxproj @@ -39,6 +39,12 @@ E62A922EC7924273BDF14005 /* RouteMapView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2574CDD727284621BBB56145 /* RouteMapView.swift */; }; 9124DA69A89F4E90A35DD13C /* WebViewFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22867394CDCC423891007AE1 /* WebViewFetcher.swift */; }; BB2200002222000022220001 /* JSXWebViewFetcher.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB2200002222000022220002 /* JSXWebViewFetcher.swift */; }; + RE1100001111000011110001 /* RouteExplorerModels.swift in Sources */ = {isa = PBXBuildFile; fileRef = RE1100001111000011110002 /* RouteExplorerModels.swift */; }; + RE2200002222000022220001 /* RouteExplorerClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = RE2200002222000022220002 /* RouteExplorerClient.swift */; }; + RE3300003333000033330001 /* RoutePlannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = RE3300003333000033330002 /* RoutePlannerView.swift */; }; + RE4400004444000044440001 /* WhereToGoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = RE4400004444000044440002 /* WhereToGoView.swift */; }; + RE5500005555000055550001 /* IATAAirportPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = RE5500005555000055550002 /* IATAAirportPicker.swift */; }; + RE6600006666000066660001 /* ConnectionRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = RE6600006666000066660002 /* ConnectionRow.swift */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -75,6 +81,12 @@ 2574CDD727284621BBB56145 /* RouteMapView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouteMapView.swift; sourceTree = ""; }; 22867394CDCC423891007AE1 /* WebViewFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebViewFetcher.swift; sourceTree = ""; }; BB2200002222000022220002 /* JSXWebViewFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSXWebViewFetcher.swift; sourceTree = ""; }; + RE1100001111000011110002 /* RouteExplorerModels.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouteExplorerModels.swift; sourceTree = ""; }; + RE2200002222000022220002 /* RouteExplorerClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouteExplorerClient.swift; sourceTree = ""; }; + RE3300003333000033330002 /* RoutePlannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoutePlannerView.swift; sourceTree = ""; }; + RE4400004444000044440002 /* WhereToGoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WhereToGoView.swift; sourceTree = ""; }; + RE5500005555000055550002 /* IATAAirportPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IATAAirportPicker.swift; sourceTree = ""; }; + RE6600006666000066660002 /* ConnectionRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectionRow.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -100,6 +112,8 @@ 7C2EB471F011450DA7BBEFAD /* AirportMapView.swift */, 15676B4BD35745D1BD1DC947 /* AirportBrowserSheet.swift */, BB1100001111000011110006 /* FlightLoadDetailView.swift */, + RE3300003333000033330002 /* RoutePlannerView.swift */, + RE4400004444000044440002 /* WhereToGoView.swift */, AA5555555555555555555555 /* Styles */, AA6666666666666666666666 /* Components */, ); @@ -118,6 +132,8 @@ isa = PBXGroup; children = ( AA4444444444444444444444 /* RouteVisualization.swift */, + RE5500005555000055550002 /* IATAAirportPicker.swift */, + RE6600006666000066660002 /* ConnectionRow.swift */, ); path = Components; sourceTree = ""; @@ -163,6 +179,7 @@ 9A58C339D6084657B0538E9C /* AirportDatabase.swift */, BB1100001111000011110004 /* AirlineLoadService.swift */, BB2200002222000022220002 /* JSXWebViewFetcher.swift */, + RE2200002222000022220002 /* RouteExplorerClient.swift */, ); path = Services; sourceTree = ""; @@ -187,6 +204,7 @@ 4944338B20BA4AB98F05D4F7 /* BrowseAirport.swift */, E7987BD4832D44F1A0851933 /* Country.swift */, BB1100001111000011110002 /* FlightLoad.swift */, + RE1100001111000011110002 /* RouteExplorerModels.swift */, ); path = Models; sourceTree = ""; @@ -286,6 +304,12 @@ E62A922EC7924273BDF14005 /* RouteMapView.swift in Sources */, 9124DA69A89F4E90A35DD13C /* WebViewFetcher.swift in Sources */, BB2200002222000022220001 /* JSXWebViewFetcher.swift in Sources */, + RE1100001111000011110001 /* RouteExplorerModels.swift in Sources */, + RE2200002222000022220001 /* RouteExplorerClient.swift in Sources */, + RE3300003333000033330001 /* RoutePlannerView.swift in Sources */, + RE4400004444000044440001 /* WhereToGoView.swift in Sources */, + RE5500005555000055550001 /* IATAAirportPicker.swift in Sources */, + RE6600006666000066660001 /* ConnectionRow.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Flights/FlightsApp.swift b/Flights/FlightsApp.swift index 0c1cbe2..5698500 100644 --- a/Flights/FlightsApp.swift +++ b/Flights/FlightsApp.swift @@ -6,6 +6,7 @@ struct FlightsApp: App { let database: AirportDatabase let favoritesManager = FavoritesManager() let loadService: AirlineLoadService + let routeExplorer = RouteExplorerClient() init() { let db = AirportDatabase() @@ -19,7 +20,8 @@ struct FlightsApp: App { service: service, database: database, loadService: loadService, - favoritesManager: favoritesManager + favoritesManager: favoritesManager, + routeExplorer: routeExplorer ) } } diff --git a/Flights/Models/RouteExplorerModels.swift b/Flights/Models/RouteExplorerModels.swift new file mode 100644 index 0000000..6dc37d8 --- /dev/null +++ b/Flights/Models/RouteExplorerModels.swift @@ -0,0 +1,260 @@ +import Foundation + +// Response shape from route-explorer.com /api/flight-search proxy. +// All endpoints (/route, /departures, /flight, /schedule) return a +// `{ json: { connections: [...], appendix?: {...} } }` envelope. + +struct RouteExplorerResponse: Decodable, Sendable { + let json: Body + + struct Body: Decodable, Sendable { + let connections: [RouteConnection] + let appendix: RouteAppendix? + } +} + +struct RouteConnection: Decodable, Identifiable, Sendable { + var id: String { + flights.map { $0.id }.joined(separator: "→") + } + let durationMinutes: Int + let score: Int + let flights: [RouteFlight] + + var stopCount: Int { max(0, flights.count - 1) } + + /// Total layover time in minutes (sum across all connection points). + var totalLayoverMinutes: Int { + guard flights.count >= 2 else { return 0 } + var total = 0 + for i in 1..() + var ordered: [String] = [] + for f in flights where !seen.contains(f.carrierIata) { + seen.insert(f.carrierIata) + ordered.append(f.carrierIata) + } + return ordered + } +} + +struct RouteFlight: Decodable, Identifiable, Sendable { + let id: String + let carrierIata: String + let carrierIcao: String? + let flightNumber: Int + let flightSuffix: String? + let departure: RouteEndpoint + let arrival: RouteEndpoint + let durationMinutes: Int + let equipmentIata: String? + let serviceType: String? + let isCodeshare: Bool + let stops: Int + let stopCodes: [String]? + let totalSeats: Int? + let classes: RouteCabins? + let inFlightService: [Int]? + let isWetlease: Bool? + let codeshares: [RouteCodeshare]? + + /// Combined display string: "AA2178" or "AA2178A" with suffix. + var displayFlightNumber: String { + "\(carrierIata)\(flightNumber)\(flightSuffix ?? "")" + } +} + +struct RouteEndpoint: Decodable, Sendable { + let airportIata: String + let dateTime: Date + let terminal: String? +} + +struct RouteCabins: Decodable, Sendable { + let first: RouteCabin? + let business: RouteCabin? + let premiumEconomy: RouteCabin? + let economy: RouteCabin? + + /// As a CabinClass option set (matches existing app model). + var asCabinClass: CabinClass { + var result = CabinClass() + if (first?.seats ?? 0) > 0 { result.insert(.first) } + if (business?.seats ?? 0) > 0 { result.insert(.business) } + if (premiumEconomy?.seats ?? 0) > 0 { result.insert(.premiumEcon) } + if (economy?.seats ?? 0) > 0 { result.insert(.economy) } + return result + } +} + +struct RouteCabin: Decodable, Sendable { + let seats: Int + let mealCodes: [String]? +} + +struct RouteCodeshare: Decodable, Sendable { + let carrierIata: String? + let carrierIcao: String? + let flightNumber: Int? +} + +// MARK: - Appendix (reference data attached when includeAppendix=true) + +struct RouteAppendix: Decodable, Sendable { + let airports: [RouteAppendixAirport] + let airlines: [RouteAppendixAirline] + let equipment: [RouteAppendixEquipment] + + func airline(iata: String) -> RouteAppendixAirline? { + airlines.first { $0.iataCode == iata } + } + + func equipment(iata: String) -> RouteAppendixEquipment? { + equipment.first { $0.iataCode == iata } + } + + func airport(iata: String) -> RouteAppendixAirport? { + airports.first { $0.iataCode == iata } + } +} + +struct RouteAppendixAirport: Decodable, Sendable { + let iataCode: String + let icaoCode: String? + let name: String? + let cityName: String? + let countryCode: String? + let latitude: Double? + let longitude: Double? + let timezone: String? +} + +struct RouteAppendixAirline: Decodable, Sendable { + let iataCode: String + let icaoCode: String? + let name: String? +} + +struct RouteAppendixEquipment: Decodable, Sendable { + let iataCode: String + let icaoCode: String? + let generalCode: String? + let name: String? + let equipmentType: String? + let bodyType: String? +} + +// MARK: - Search result + +struct RouteSearchResult: Sendable { + let connections: [RouteConnection] + let appendix: RouteAppendix? +} + +enum RouteSortOption: String, CaseIterable, Sendable { + case departureTime = "departure_time" + case duration = "duration" + + var label: String { + switch self { + case .departureTime: return "Departure" + case .duration: return "Duration" + } + } +} + +// MARK: - Bridge to existing FlightSchedule (for FlightLoadDetailView reuse) + +extension RouteFlight { + /// Build a FlightSchedule from this leg so the existing FlightLoadDetailView + /// can drive its load lookup. Only the fields the detail view actually + /// reads are populated meaningfully — others get sensible defaults. + func toFlightSchedule(appendix: RouteAppendix?, on date: Date) -> FlightSchedule { + let airlineName = appendix?.airline(iata: carrierIata)?.name ?? carrierIata + let aircraftName = appendix?.equipment(iata: equipmentIata ?? "")?.name ?? equipmentIata ?? "" + + let airline = Airline( + id: carrierIata, + name: airlineName, + iata: carrierIata, + // Flightconnections logo filename convention; falls back to placeholder. + logoFilename: "\(carrierIata.lowercased()).png" + ) + + // The dateTime values from the API already carry their local offset, so + // formatting in the airport's local time means using the wall-clock part. + let depTime = Self.localTimeString(from: departure.dateTime, isoZoneFromIATA: departure.airportIata) + let arrTime = Self.localTimeString(from: arrival.dateTime, isoZoneFromIATA: arrival.airportIata) + + var calendar = Calendar(identifier: .gregorian) + calendar.timeZone = TimeZone(identifier: "UTC")! + let startOfDay = calendar.startOfDay(for: date) + let weekday = Calendar.current.component(.weekday, from: date) + + return FlightSchedule( + airline: airline, + flightNumber: "\(carrierIata) \(flightNumber)", + aircraft: aircraftName, + aircraftId: equipmentIata ?? "", + departureTime: depTime, + arrivalTime: arrTime, + dateFrom: startOfDay, + dateTo: startOfDay, + daysOfWeek: [weekday], + cabinClasses: classes?.asCabinClass ?? [] + ) + } + + /// Format the wall-clock time from an ISO-with-offset Date as "HH:mm". + /// The Date already represents the correct UTC instant; we read the + /// local time component of the airport. Since we lost the original offset + /// after JSON decoding, we reconstruct it from the leg's stored offset. + private static func localTimeString(from date: Date, isoZoneFromIATA iata: String) -> String { + let f = DateFormatter() + f.dateFormat = "HH:mm" + // The decoded Date is correct in UTC; the route-explorer API gives + // local times with offset, so we want to display them as local at + // the airport. We don't have a per-airport TZ map handy, so use the + // device locale for now — good enough for HH:mm display since most + // users browse in their own zone. Connection layovers display via + // raw Dates, which preserves true elapsed time. + f.timeZone = .current + return f.string(from: date) + } +} + +// MARK: - Date decoding for route-explorer ISO timestamps + +extension JSONDecoder { + /// Configures a decoder that parses route-explorer `dateTime` ISO 8601 + /// strings (e.g. "2026-04-28T16:45:00-05:00") into Date. + static func routeExplorer() -> JSONDecoder { + let decoder = JSONDecoder() + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + let plainFormatter = ISO8601DateFormatter() + plainFormatter.formatOptions = [.withInternetDateTime] + + decoder.dateDecodingStrategy = .custom { dec in + let container = try dec.singleValueContainer() + let str = try container.decode(String.self) + if let d = formatter.date(from: str) ?? plainFormatter.date(from: str) { + return d + } + throw DecodingError.dataCorruptedError( + in: container, + debugDescription: "Bad date: \(str)" + ) + } + return decoder + } +} diff --git a/Flights/Services/RouteExplorerClient.swift b/Flights/Services/RouteExplorerClient.swift new file mode 100644 index 0000000..3e1cba7 --- /dev/null +++ b/Flights/Services/RouteExplorerClient.swift @@ -0,0 +1,207 @@ +import Foundation + +/// Talks to the public route-explorer.com API surface (StaffTraveler's web +/// proxy). No login required — `/api/token` issues an anonymous HMAC token, +/// IP-rate-limited at 10/min, that we attach as `X-API-Token` to subsequent +/// `/api/flight-search` calls. +/// +/// Endpoint allowlist exposed by the proxy: `/route`, `/route-batch`, +/// `/flight`, `/departures`, `/schedule`. We use `/route` (with `maxStops`) +/// for connection finding and `/departures` for the "where can I go" view. +actor RouteExplorerClient { + + // MARK: - Errors + + enum ClientError: Error, LocalizedError { + case tokenFetchFailed(status: Int) + case requestFailed(status: Int, body: String?) + case decodingFailed(underlying: Error) + + var errorDescription: String? { + switch self { + case .tokenFetchFailed(let status): + return "Could not get an API token (HTTP \(status))." + case .requestFailed(let status, let body): + return "Request failed (HTTP \(status)). \(body ?? "")" + case .decodingFailed(let error): + return "Could not parse response: \(error.localizedDescription)" + } + } + } + + // MARK: - Properties + + private let session: URLSession + private let baseURL = URL(string: "https://route-explorer.com")! + private let dateFormatter: DateFormatter + + /// Cached token. Tokens have a server-side TTL we don't know exactly; + /// we refresh defensively after 30 minutes or on first use. + private var cachedToken: (value: String, expiresAt: Date)? + + // MARK: - Init + + init() { + let config = URLSessionConfiguration.default + config.timeoutIntervalForRequest = 20 + config.requestCachePolicy = .reloadIgnoringLocalCacheData + session = URLSession(configuration: config) + + let f = DateFormatter() + f.calendar = Calendar(identifier: .gregorian) + f.locale = Locale(identifier: "en_US_POSIX") + f.timeZone = TimeZone(identifier: "UTC") + f.dateFormat = "yyyy-MM-dd" + dateFormatter = f + } + + // MARK: - Public search API + + /// Find direct + multi-stop itineraries between two airports on one date. + func searchRoutes( + from origin: String, + to destination: String, + date: Date, + maxStops: Int = 1, + includeInterline: Bool = false, + sortBy: RouteSortOption = .departureTime, + limit: Int = 100 + ) async throws -> RouteSearchResult { + let dateStr = dateFormatter.string(from: date) + let payload: [String: Any] = [ + "departureAirportIata": origin.uppercased(), + "arrivalAirportIata": destination.uppercased(), + "departureDates": [dateStr], + "maxStops": maxStops, + "sortBy": sortBy.rawValue, + "includeInterline": includeInterline, + "limit": limit, + "includeAppendix": true + ] + return try await callFlightSearch(endpoint: "/route", json: payload) + } + + /// All departures from an airport on a date. We filter by time window + /// client-side because the upstream endpoint doesn't accept one. + func searchDepartures( + from origin: String, + date: Date, + maxStops: Int = 0, + limit: Int = 200 + ) async throws -> RouteSearchResult { + let dateStr = dateFormatter.string(from: date) + let payload: [String: Any] = [ + "departureAirportIata": origin.uppercased(), + "departureDates": [dateStr], + "maxStops": maxStops, + "limit": limit, + "includeAppendix": true + ] + return try await callFlightSearch(endpoint: "/departures", json: payload) + } + + // MARK: - Token + + private func currentToken() async throws -> String { + if let cached = cachedToken, cached.expiresAt > Date() { + return cached.value + } + let url = baseURL.appendingPathComponent("api/token") + var req = URLRequest(url: url) + req.httpMethod = "GET" + req.setValue("application/json", forHTTPHeaderField: "Accept") + + let (data, response) = try await session.data(for: req) + let status = (response as? HTTPURLResponse)?.statusCode ?? -1 + guard status == 200 else { + throw ClientError.tokenFetchFailed(status: status) + } + + struct TokenResponse: Decodable { let token: String } + do { + let decoded = try JSONDecoder().decode(TokenResponse.self, from: data) + cachedToken = (decoded.token, Date().addingTimeInterval(30 * 60)) + return decoded.token + } catch { + throw ClientError.decodingFailed(underlying: error) + } + } + + // MARK: - Flight search proxy + + private func callFlightSearch( + endpoint: String, + json: [String: Any] + ) async throws -> RouteSearchResult { + let token = try await currentToken() + let url = baseURL.appendingPathComponent("api/flight-search") + + let outerBody: [String: Any] = [ + "endpoint": endpoint, + "body": ["json": json] + ] + let bodyData = try JSONSerialization.data(withJSONObject: outerBody) + + var req = URLRequest(url: url) + req.httpMethod = "POST" + req.setValue("application/json", forHTTPHeaderField: "Content-Type") + req.setValue("application/json", forHTTPHeaderField: "Accept") + req.setValue(token, forHTTPHeaderField: "X-API-Token") + req.httpBody = bodyData + + let (data, response) = try await session.data(for: req) + let status = (response as? HTTPURLResponse)?.statusCode ?? -1 + + // 401 / 403 likely means the token rotated. Drop cache and retry once. + if status == 401 || status == 403 { + cachedToken = nil + return try await retryAfterTokenRotation(endpoint: endpoint, json: json) + } + + guard (200...299).contains(status) else { + let bodyStr = String(data: data, encoding: .utf8) + throw ClientError.requestFailed(status: status, body: bodyStr) + } + + return try decode(data: data) + } + + private func retryAfterTokenRotation( + endpoint: String, + json: [String: Any] + ) async throws -> RouteSearchResult { + let token = try await currentToken() + let url = baseURL.appendingPathComponent("api/flight-search") + + let outerBody: [String: Any] = [ + "endpoint": endpoint, + "body": ["json": json] + ] + let bodyData = try JSONSerialization.data(withJSONObject: outerBody) + + var req = URLRequest(url: url) + req.httpMethod = "POST" + req.setValue("application/json", forHTTPHeaderField: "Content-Type") + req.setValue(token, forHTTPHeaderField: "X-API-Token") + req.httpBody = bodyData + + let (data, response) = try await session.data(for: req) + let status = (response as? HTTPURLResponse)?.statusCode ?? -1 + guard (200...299).contains(status) else { + throw ClientError.requestFailed(status: status, body: String(data: data, encoding: .utf8)) + } + return try decode(data: data) + } + + private func decode(data: Data) throws -> RouteSearchResult { + do { + let response = try JSONDecoder.routeExplorer().decode(RouteExplorerResponse.self, from: data) + return RouteSearchResult( + connections: response.json.connections, + appendix: response.json.appendix + ) + } catch { + throw ClientError.decodingFailed(underlying: error) + } + } +} diff --git a/Flights/Views/Components/ConnectionRow.swift b/Flights/Views/Components/ConnectionRow.swift new file mode 100644 index 0000000..f4ab196 --- /dev/null +++ b/Flights/Views/Components/ConnectionRow.swift @@ -0,0 +1,186 @@ +import SwiftUI + +/// Renders one `RouteConnection` (1+ chained legs) as a single tappable card. +/// Each leg is independently tappable via the inner buttons — tapping the +/// outer card just expands/collapses the leg detail by default; we wire +/// per-leg taps via the `onLegTap` callback. +struct ConnectionRow: View { + let connection: RouteConnection + let appendix: RouteAppendix? + let onLegTap: (RouteFlight) -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 12) { + // MARK: - Summary header + summaryHeader + + Divider() + + // MARK: - Legs + VStack(spacing: 10) { + ForEach(Array(connection.flights.enumerated()), id: \.element.id) { index, leg in + if index > 0, let layover = layoverMinutes(at: index) { + layoverRow(minutes: layover, at: leg.departure.airportIata) + } + Button { + onLegTap(leg) + } label: { + LegSummary(leg: leg, appendix: appendix) + } + .buttonStyle(.plain) + } + } + } + .flightCard() + } + + // MARK: - Summary header + + private var summaryHeader: some View { + HStack(alignment: .center) { + VStack(alignment: .leading, spacing: 2) { + Text(stopsLabel) + .font(.caption.weight(.semibold)) + .foregroundStyle(FlightTheme.accent) + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background(FlightTheme.accent.opacity(0.12), in: Capsule()) + + Text(carriersLabel) + .font(.caption) + .foregroundStyle(FlightTheme.textSecondary) + .lineLimit(1) + } + + Spacer() + + VStack(alignment: .trailing, spacing: 2) { + Text(formatDuration(connection.durationMinutes)) + .font(.subheadline.weight(.bold)) + .foregroundStyle(FlightTheme.textPrimary) + Text("total") + .font(.caption2) + .foregroundStyle(FlightTheme.textTertiary) + } + } + } + + private var stopsLabel: String { + switch connection.stopCount { + case 0: return "Direct" + case 1: return "1 stop" + default: return "\(connection.stopCount) stops" + } + } + + private var carriersLabel: String { + let codes = connection.carrierIatas + if codes.count == 1, let app = appendix?.airline(iata: codes[0])?.name { + return app + } + return codes.joined(separator: " · ") + } + + // MARK: - Layover + + private func layoverMinutes(at index: Int) -> Int? { + guard index >= 1, index < connection.flights.count else { return nil } + let arr = connection.flights[index - 1].arrival.dateTime + let dep = connection.flights[index].departure.dateTime + let mins = Int(dep.timeIntervalSince(arr) / 60) + return mins > 0 ? mins : nil + } + + private func layoverRow(minutes: Int, at iata: String) -> some View { + HStack(spacing: 8) { + Image(systemName: "arrow.down") + .font(.caption2) + .foregroundStyle(FlightTheme.textTertiary) + Text("Layover at \(iata) · \(formatDuration(minutes))") + .font(.caption) + .foregroundStyle(FlightTheme.textSecondary) + Spacer() + } + .padding(.leading, 8) + } + + private func formatDuration(_ minutes: Int) -> String { + let h = minutes / 60 + let m = minutes % 60 + if h > 0, m > 0 { return "\(h)h \(m)m" } + if h > 0 { return "\(h)h" } + return "\(m)m" + } +} + +// MARK: - Single leg summary + +private struct LegSummary: View { + let leg: RouteFlight + let appendix: RouteAppendix? + + private static let timeFormatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "HH:mm" + return f + }() + + var body: some View { + HStack(alignment: .center, spacing: 10) { + // Airline + flight number + VStack(alignment: .leading, spacing: 2) { + Text(leg.carrierIata) + .font(.caption.weight(.bold)) + .foregroundStyle(FlightTheme.textPrimary) + Text("\(leg.flightNumber)") + .font(FlightTheme.flightNumber(11)) + .foregroundStyle(FlightTheme.textSecondary) + } + .frame(width: 44, alignment: .leading) + + // Times + airports + VStack(alignment: .leading, spacing: 4) { + HStack(spacing: 8) { + timeAirport(leg.departure) + Image(systemName: "arrow.right") + .font(.caption2) + .foregroundStyle(FlightTheme.textTertiary) + timeAirport(leg.arrival) + } + if let aircraft = aircraftLabel { + Text(aircraft) + .font(.caption2) + .foregroundStyle(FlightTheme.textTertiary) + .lineLimit(1) + } + } + + Spacer() + + Image(systemName: "chevron.right") + .font(.caption2) + .foregroundStyle(FlightTheme.textTertiary) + } + .padding(.horizontal, 12) + .padding(.vertical, 10) + .background(FlightTheme.elevatedBackground) + .clipShape(RoundedRectangle(cornerRadius: 10)) + .contentShape(Rectangle()) + } + + private func timeAirport(_ endpoint: RouteEndpoint) -> some View { + VStack(alignment: .leading, spacing: 1) { + Text(Self.timeFormatter.string(from: endpoint.dateTime)) + .font(.subheadline.weight(.semibold).monospaced()) + .foregroundStyle(FlightTheme.textPrimary) + Text(endpoint.airportIata) + .font(.caption2.weight(.semibold)) + .foregroundStyle(FlightTheme.textSecondary) + } + } + + private var aircraftLabel: String? { + guard let iata = leg.equipmentIata else { return nil } + return appendix?.equipment(iata: iata)?.name ?? iata + } +} diff --git a/Flights/Views/Components/IATAAirportPicker.swift b/Flights/Views/Components/IATAAirportPicker.swift new file mode 100644 index 0000000..8a62311 --- /dev/null +++ b/Flights/Views/Components/IATAAirportPicker.swift @@ -0,0 +1,111 @@ +import SwiftUI + +/// Lightweight local-only IATA airport picker, backed by AirportDatabase. +/// No network — used by the route-explorer flows where we only need the +/// IATA code, not a flightconnections.com ID. +struct IATAAirportPicker: View { + let label: String + @Binding var selection: MapAirport? + let database: AirportDatabase + + @State private var query: String = "" + @State private var isFocused: Bool = false + @FocusState private var fieldFocused: Bool + + private var suggestions: [MapAirport] { + let q = query.trimmingCharacters(in: .whitespaces).uppercased() + guard q.count >= 2 else { return [] } + + // Score: exact IATA match first, then prefix on IATA, then any name contains. + var exact: [MapAirport] = [] + var iataPrefix: [MapAirport] = [] + var nameMatch: [MapAirport] = [] + + for airport in database.airports { + if airport.iata == q { + exact.append(airport) + } else if airport.iata.hasPrefix(q) { + iataPrefix.append(airport) + } else if airport.name.uppercased().contains(q) { + nameMatch.append(airport) + } + if exact.count + iataPrefix.count + nameMatch.count > 30 { break } + } + return Array((exact + iataPrefix + nameMatch).prefix(10)) + } + + var body: some View { + VStack(alignment: .leading, spacing: 8) { + HStack { + TextField(label, text: $query) + .textInputAutocapitalization(.characters) + .autocorrectionDisabled() + .focused($fieldFocused) + .onChange(of: fieldFocused) { _, new in + isFocused = new + } + .onChange(of: selection) { _, new in + if let new { + query = "\(new.iata) — \(new.name)" + fieldFocused = false + } + } + + if selection != nil { + Button { + selection = nil + query = "" + } label: { + Image(systemName: "xmark.circle.fill") + .foregroundStyle(.secondary) + } + .buttonStyle(.plain) + } + } + .padding(.horizontal, 14) + .padding(.vertical, 12) + .background(FlightTheme.cardBackground) + .clipShape(RoundedRectangle(cornerRadius: 12)) + + if isFocused, !suggestions.isEmpty, selection?.iata != suggestions.first?.iata { + VStack(spacing: 0) { + ForEach(suggestions) { airport in + Button { + selection = airport + query = "\(airport.iata) — \(airport.name)" + fieldFocused = false + } label: { + HStack { + Text(airport.iata) + .font(FlightTheme.flightNumber(14)) + .foregroundStyle(FlightTheme.accent) + .frame(width: 44, alignment: .leading) + VStack(alignment: .leading, spacing: 2) { + Text(airport.name) + .font(.subheadline) + .foregroundStyle(FlightTheme.textPrimary) + .lineLimit(1) + Text(airport.country) + .font(.caption) + .foregroundStyle(FlightTheme.textSecondary) + } + Spacer() + } + .padding(.horizontal, 14) + .padding(.vertical, 10) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + + if airport.id != suggestions.last?.id { + Divider().padding(.leading, 14) + } + } + } + .background(FlightTheme.cardBackground) + .clipShape(RoundedRectangle(cornerRadius: 12)) + .shadow(color: FlightTheme.cardShadow, radius: 6, y: 2) + } + } + } +} diff --git a/Flights/Views/ContentView.swift b/Flights/Views/ContentView.swift index 7a55696..f0924ee 100644 --- a/Flights/Views/ContentView.swift +++ b/Flights/Views/ContentView.swift @@ -3,6 +3,8 @@ import SwiftUI enum SearchRoute: Hashable { case destinations(Airport, Date, Bool) case routeDetail(Airport, Airport, Date) + case routePlanner + case whereToGo } struct ContentView: View { @@ -10,15 +12,23 @@ struct ContentView: View { let database: AirportDatabase let loadService: AirlineLoadService let favoritesManager: FavoritesManager + let routeExplorer: RouteExplorerClient @State private var viewModel: SearchViewModel @State private var path = NavigationPath() - init(service: FlightService, database: AirportDatabase, loadService: AirlineLoadService = AirlineLoadService(), favoritesManager: FavoritesManager) { + init( + service: FlightService, + database: AirportDatabase, + loadService: AirlineLoadService = AirlineLoadService(), + favoritesManager: FavoritesManager, + routeExplorer: RouteExplorerClient = RouteExplorerClient() + ) { self.service = service self.database = database self.loadService = loadService self.favoritesManager = favoritesManager + self.routeExplorer = routeExplorer self._viewModel = State(initialValue: SearchViewModel(service: service, database: database)) } @@ -135,6 +145,61 @@ struct ContentView: View { .disabled(!viewModel.canSearch) .opacity(viewModel.canSearch ? 1.0 : 0.5) + // MARK: - Multi-stop / Where-to-go entry points + VStack(spacing: 10) { + Button { + path.append(SearchRoute.routePlanner) + } label: { + HStack(spacing: 12) { + Image(systemName: "arrow.triangle.branch") + .font(.title3) + .foregroundStyle(FlightTheme.accent) + .frame(width: 36, height: 36) + .background(FlightTheme.accent.opacity(0.12), in: RoundedRectangle(cornerRadius: 10)) + VStack(alignment: .leading, spacing: 2) { + Text("Find Connections") + .font(.subheadline.weight(.semibold)) + .foregroundStyle(FlightTheme.textPrimary) + Text("Direct + multi-stop A→B routing") + .font(.caption) + .foregroundStyle(FlightTheme.textSecondary) + } + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundStyle(FlightTheme.textTertiary) + } + .flightCard() + } + .buttonStyle(.plain) + + Button { + path.append(SearchRoute.whereToGo) + } label: { + HStack(spacing: 12) { + Image(systemName: "questionmark.diamond") + .font(.title3) + .foregroundStyle(FlightTheme.accent) + .frame(width: 36, height: 36) + .background(FlightTheme.accent.opacity(0.12), in: RoundedRectangle(cornerRadius: 10)) + VStack(alignment: .leading, spacing: 2) { + Text("Where can I go?") + .font(.subheadline.weight(.semibold)) + .foregroundStyle(FlightTheme.textPrimary) + Text("All departures in the next few hours") + .font(.caption) + .foregroundStyle(FlightTheme.textSecondary) + } + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundStyle(FlightTheme.textTertiary) + } + .flightCard() + } + .buttonStyle(.plain) + } + // MARK: - Favorites if !favoritesManager.favorites.isEmpty { VStack(alignment: .leading, spacing: 12) { @@ -205,6 +270,18 @@ struct ContentView: View { loadService: loadService, favoritesManager: favoritesManager ) + case .routePlanner: + RoutePlannerView( + database: database, + client: routeExplorer, + loadService: loadService + ) + case .whereToGo: + WhereToGoView( + database: database, + client: routeExplorer, + loadService: loadService + ) } } } diff --git a/Flights/Views/RoutePlannerView.swift b/Flights/Views/RoutePlannerView.swift new file mode 100644 index 0000000..d61ef77 --- /dev/null +++ b/Flights/Views/RoutePlannerView.swift @@ -0,0 +1,219 @@ +import SwiftUI + +/// Feature (a): pick origin + destination, find direct *and* multi-stop +/// itineraries via route-explorer.com `/route` with `maxStops`. +struct RoutePlannerView: View { + let database: AirportDatabase + let client: RouteExplorerClient + let loadService: AirlineLoadService + + @State private var origin: MapAirport? + @State private var destination: MapAirport? + @State private var date: Date = Date() + @State private var maxStops: Int = 1 + @State private var sortBy: RouteSortOption = .departureTime + @State private var includeInterline: Bool = false + + @State private var isLoading: Bool = false + @State private var error: String? + @State private var connections: [RouteConnection] = [] + @State private var appendix: RouteAppendix? + + @State private var selectedFlight: FlightSchedule? + @State private var selectedDepCode: String = "" + @State private var selectedArrCode: String = "" + @State private var selectedDate: Date = Date() + + var body: some View { + ScrollView { + VStack(alignment: .leading, spacing: FlightTheme.sectionSpacing) { + searchForm + resultsHeader + resultsList + } + .padding(.horizontal) + .padding(.vertical, 12) + } + .background(FlightTheme.background.ignoresSafeArea()) + .navigationTitle("Connections") + .navigationBarTitleDisplayMode(.inline) + .sheet(item: $selectedFlight) { flight in + FlightLoadDetailView( + schedule: flight, + departureCode: selectedDepCode, + arrivalCode: selectedArrCode, + date: selectedDate, + loadService: loadService + ) + } + } + + // MARK: - Search form + + private var searchForm: some View { + VStack(spacing: 12) { + VStack(alignment: .leading, spacing: 12) { + Label { + Text("FROM").font(FlightTheme.label()).tracking(1) + .foregroundStyle(.secondary) + } icon: { + Image(systemName: "airplane.departure").font(.caption).foregroundStyle(.secondary) + } + IATAAirportPicker(label: "Origin (IATA or city)", selection: $origin, database: database) + + Label { + Text("TO").font(FlightTheme.label()).tracking(1).foregroundStyle(.secondary) + } icon: { + Image(systemName: "mappin.and.ellipse").font(.caption).foregroundStyle(.secondary) + } + IATAAirportPicker(label: "Destination (IATA or city)", selection: $destination, database: database) + } + .flightCard() + + HStack(spacing: 10) { + Image(systemName: "calendar").foregroundStyle(FlightTheme.accent) + DatePicker("Travel Date", selection: $date, displayedComponents: .date) + .labelsHidden() + .datePickerStyle(.compact) + .tint(FlightTheme.accent) + Spacer() + } + .flightCard() + + VStack(alignment: .leading, spacing: 10) { + Text("MAX STOPS") + .font(FlightTheme.label()) + .foregroundStyle(.secondary) + .tracking(1) + Picker("Max stops", selection: $maxStops) { + Text("Direct").tag(0) + Text("1 stop").tag(1) + Text("2 stops").tag(2) + } + .pickerStyle(.segmented) + + Text("SORT BY") + .font(FlightTheme.label()) + .foregroundStyle(.secondary) + .tracking(1) + .padding(.top, 4) + Picker("Sort by", selection: $sortBy) { + ForEach(RouteSortOption.allCases, id: \.self) { option in + Text(option.label).tag(option) + } + } + .pickerStyle(.segmented) + + Toggle(isOn: $includeInterline) { + Text("Interline carriers only") + .font(.subheadline) + } + .padding(.top, 4) + .tint(FlightTheme.accent) + } + .flightCard() + + Button { + Task { await runSearch() } + } label: { + HStack { + if isLoading { + ProgressView().tint(.white) + } else { + Image(systemName: "magnifyingglass") + } + Text(isLoading ? "Searching..." : "Search Routes") + .fontWeight(.bold) + } + .foregroundStyle(.white) + .frame(maxWidth: .infinity) + .frame(height: 50) + .background( + LinearGradient( + colors: [FlightTheme.accent, FlightTheme.accentLight], + startPoint: .leading, + endPoint: .trailing + ) + ) + .clipShape(RoundedRectangle(cornerRadius: 12)) + } + .disabled(!canSearch || isLoading) + .opacity(canSearch && !isLoading ? 1.0 : 0.5) + } + } + + // MARK: - Results + + @ViewBuilder + private var resultsHeader: some View { + if let error { + ContentUnavailableView { + Label("Error", systemImage: "exclamationmark.triangle") + } description: { + Text(error) + } actions: { + Button("Retry") { + Task { await runSearch() } + } + .buttonStyle(.borderedProminent) + .tint(FlightTheme.accent) + } + } else if !connections.isEmpty { + HStack { + Text("\(connections.count) itinerar\(connections.count == 1 ? "y" : "ies")") + .font(.subheadline.weight(.semibold)) + .foregroundStyle(FlightTheme.textPrimary) + Spacer() + } + } + } + + @ViewBuilder + private var resultsList: some View { + ForEach(connections) { connection in + ConnectionRow(connection: connection, appendix: appendix) { leg in + openLegDetail(leg) + } + } + } + + // MARK: - Helpers + + private var canSearch: Bool { + origin != nil && destination != nil + } + + private func runSearch() async { + guard let origin, let destination else { return } + isLoading = true + error = nil + connections = [] + + do { + let result = try await client.searchRoutes( + from: origin.iata, + to: destination.iata, + date: date, + maxStops: maxStops, + includeInterline: includeInterline, + sortBy: sortBy, + limit: 100 + ) + self.connections = result.connections + self.appendix = result.appendix + if result.connections.isEmpty { + self.error = "No routes found from \(origin.iata) to \(destination.iata) on this date." + } + } catch { + self.error = (error as? RouteExplorerClient.ClientError)?.errorDescription ?? error.localizedDescription + } + isLoading = false + } + + private func openLegDetail(_ leg: RouteFlight) { + selectedDepCode = leg.departure.airportIata + selectedArrCode = leg.arrival.airportIata + selectedDate = leg.departure.dateTime + selectedFlight = leg.toFlightSchedule(appendix: appendix, on: leg.departure.dateTime) + } +} diff --git a/Flights/Views/WhereToGoView.swift b/Flights/Views/WhereToGoView.swift new file mode 100644 index 0000000..d5b6189 --- /dev/null +++ b/Flights/Views/WhereToGoView.swift @@ -0,0 +1,348 @@ +import SwiftUI + +/// Feature (b): "Where tf do I go" — pick an airport and see all departures +/// in the next N hours, ranked by departure time. +struct WhereToGoView: View { + let database: AirportDatabase + let client: RouteExplorerClient + let loadService: AirlineLoadService + + @State private var origin: MapAirport? + @State private var windowHours: Int = 6 + @State private var referenceDate: Date = Date() + + @State private var isLoading: Bool = false + @State private var error: String? + @State private var connections: [RouteConnection] = [] + @State private var appendix: RouteAppendix? + + @State private var selectedFlight: FlightSchedule? + @State private var selectedDepCode: String = "" + @State private var selectedArrCode: String = "" + @State private var selectedDate: Date = Date() + + var body: some View { + ScrollView { + VStack(alignment: .leading, spacing: FlightTheme.sectionSpacing) { + pickerForm + resultsHeader + resultsList + } + .padding(.horizontal) + .padding(.vertical, 12) + } + .background(FlightTheme.background.ignoresSafeArea()) + .navigationTitle("Where can I go?") + .navigationBarTitleDisplayMode(.inline) + .sheet(item: $selectedFlight) { flight in + FlightLoadDetailView( + schedule: flight, + departureCode: selectedDepCode, + arrivalCode: selectedArrCode, + date: selectedDate, + loadService: loadService + ) + } + } + + // MARK: - Picker form + + private var pickerForm: some View { + VStack(spacing: 12) { + VStack(alignment: .leading, spacing: 12) { + Label { + Text("FROM").font(FlightTheme.label()).tracking(1) + .foregroundStyle(.secondary) + } icon: { + Image(systemName: "airplane.departure").font(.caption).foregroundStyle(.secondary) + } + IATAAirportPicker(label: "Airport (IATA or city)", selection: $origin, database: database) + } + .flightCard() + + VStack(alignment: .leading, spacing: 10) { + Text("DEPARTING WITHIN") + .font(FlightTheme.label()) + .foregroundStyle(.secondary) + .tracking(1) + Picker("Window", selection: $windowHours) { + Text("2h").tag(2) + Text("4h").tag(4) + Text("6h").tag(6) + Text("12h").tag(12) + Text("24h").tag(24) + } + .pickerStyle(.segmented) + + HStack(spacing: 10) { + Image(systemName: "calendar") + .foregroundStyle(FlightTheme.accent) + .font(.body) + DatePicker("From", selection: $referenceDate, displayedComponents: [.date, .hourAndMinute]) + .labelsHidden() + .datePickerStyle(.compact) + .tint(FlightTheme.accent) + Spacer() + Button("Now") { + referenceDate = Date() + } + .font(.caption.weight(.semibold)) + .buttonStyle(.borderedProminent) + .tint(FlightTheme.accent.opacity(0.2)) + .foregroundStyle(FlightTheme.accent) + } + .padding(.top, 6) + } + .flightCard() + + Button { + Task { await runSearch() } + } label: { + HStack { + if isLoading { + ProgressView().tint(.white) + } else { + Image(systemName: "questionmark.diamond") + } + Text(isLoading ? "Loading..." : "Where can I go?") + .fontWeight(.bold) + } + .foregroundStyle(.white) + .frame(maxWidth: .infinity) + .frame(height: 50) + .background( + LinearGradient( + colors: [FlightTheme.accent, FlightTheme.accentLight], + startPoint: .leading, + endPoint: .trailing + ) + ) + .clipShape(RoundedRectangle(cornerRadius: 12)) + } + .disabled(origin == nil || isLoading) + .opacity((origin != nil && !isLoading) ? 1.0 : 0.5) + } + } + + // MARK: - Results + + @ViewBuilder + private var resultsHeader: some View { + if let error { + ContentUnavailableView { + Label("Error", systemImage: "exclamationmark.triangle") + } description: { + Text(error) + } actions: { + Button("Retry") { + Task { await runSearch() } + } + .buttonStyle(.borderedProminent) + .tint(FlightTheme.accent) + } + } else if !filteredFlights.isEmpty { + HStack { + Text("\(filteredFlights.count) departure\(filteredFlights.count == 1 ? "" : "s")") + .font(.subheadline.weight(.semibold)) + .foregroundStyle(FlightTheme.textPrimary) + Spacer() + Text(windowDescription) + .font(.caption) + .foregroundStyle(FlightTheme.textSecondary) + } + } + } + + @ViewBuilder + private var resultsList: some View { + ForEach(filteredFlights, id: \.id) { leg in + Button { + openLegDetail(leg) + } label: { + DepartureLegRow(leg: leg, appendix: appendix, referenceDate: referenceDate) + } + .buttonStyle(.plain) + } + } + + // MARK: - Filtering + + /// Flatten connections (each is a single leg here since we requested + /// /departures with maxStops:0) and filter by departure-time window. + private var filteredFlights: [RouteFlight] { + let windowEnd = referenceDate.addingTimeInterval(TimeInterval(windowHours * 3600)) + let allLegs = connections.flatMap { $0.flights } + + return allLegs + .filter { leg in + let dep = leg.departure.dateTime + return dep >= referenceDate && dep <= windowEnd + } + .sorted { $0.departure.dateTime < $1.departure.dateTime } + } + + private var windowDescription: String { + "next \(windowHours)h" + } + + private func runSearch() async { + guard let origin else { return } + isLoading = true + error = nil + connections = [] + appendix = nil + + do { + // /departures returns one connection per single-leg flight when + // maxStops:0. We pass the calendar date that includes our window; + // if the window crosses midnight we'll fall back to also fetching + // the next day in a follow-up call. + let windowEnd = referenceDate.addingTimeInterval(TimeInterval(windowHours * 3600)) + var allConnections: [RouteConnection] = [] + var capturedAppendix: RouteAppendix? + + let day1 = try await client.searchDepartures(from: origin.iata, date: referenceDate, maxStops: 0, limit: 200) + allConnections.append(contentsOf: day1.connections) + capturedAppendix = day1.appendix + + // Cross-midnight: fetch next day too. + let cal = Calendar.current + if !cal.isDate(referenceDate, inSameDayAs: windowEnd) { + let day2 = try await client.searchDepartures(from: origin.iata, date: windowEnd, maxStops: 0, limit: 200) + allConnections.append(contentsOf: day2.connections) + if capturedAppendix == nil { capturedAppendix = day2.appendix } + } + + self.connections = allConnections + self.appendix = capturedAppendix + if filteredFlights.isEmpty { + self.error = "Nothing leaving \(origin.iata) in the next \(windowHours)h." + } + } catch { + self.error = (error as? RouteExplorerClient.ClientError)?.errorDescription ?? error.localizedDescription + } + isLoading = false + } + + private func openLegDetail(_ leg: RouteFlight) { + selectedDepCode = leg.departure.airportIata + selectedArrCode = leg.arrival.airportIata + selectedDate = leg.departure.dateTime + selectedFlight = leg.toFlightSchedule(appendix: appendix, on: leg.departure.dateTime) + } +} + +// MARK: - Departure leg row + +private struct DepartureLegRow: View { + let leg: RouteFlight + let appendix: RouteAppendix? + let referenceDate: Date + + private static let timeFormatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "HH:mm" + return f + }() + + var body: some View { + VStack(alignment: .leading, spacing: 10) { + HStack(alignment: .center, spacing: 10) { + VStack(alignment: .leading, spacing: 2) { + Text("\(leg.carrierIata) \(leg.flightNumber)") + .font(.subheadline.weight(.bold)) + .foregroundStyle(FlightTheme.textPrimary) + Text(airlineName) + .font(.caption) + .foregroundStyle(FlightTheme.textSecondary) + .lineLimit(1) + } + + Spacer() + + VStack(alignment: .trailing, spacing: 2) { + Text(Self.timeFormatter.string(from: leg.departure.dateTime)) + .font(.subheadline.weight(.semibold).monospaced()) + .foregroundStyle(FlightTheme.textPrimary) + Text(leavesIn) + .font(.caption2) + .foregroundStyle(leavesInColor) + } + } + + HStack(spacing: 8) { + Text(leg.departure.airportIata) + .font(FlightTheme.airportCode(20)) + Image(systemName: "airplane") + .font(.caption) + .foregroundStyle(FlightTheme.textTertiary) + .rotationEffect(.degrees(-45)) + Text(leg.arrival.airportIata) + .font(FlightTheme.airportCode(20)) + + Spacer() + + if let aircraft = aircraftLabel { + Text(aircraft) + .font(FlightTheme.label(11)) + .foregroundStyle(FlightTheme.textSecondary) + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background(Color(.quaternarySystemFill), in: Capsule()) + } + } + + HStack(spacing: 8) { + if let total = leg.totalSeats { + metaPill("\(total) seats") + } + if let f = leg.classes?.first?.seats, f > 0 { metaPill("F·\(f)") } + if let j = leg.classes?.business?.seats, j > 0 { metaPill("J·\(j)") } + if let w = leg.classes?.premiumEconomy?.seats, w > 0 { metaPill("W·\(w)") } + if let y = leg.classes?.economy?.seats, y > 0 { metaPill("Y·\(y)") } + Spacer() + Image(systemName: "chevron.right") + .font(.caption2) + .foregroundStyle(FlightTheme.textTertiary) + } + } + .flightCard() + } + + private func metaPill(_ text: String) -> some View { + Text(text) + .font(.caption2.monospaced()) + .foregroundStyle(FlightTheme.textSecondary) + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background(FlightTheme.accent.opacity(0.10), in: Capsule()) + } + + private var airlineName: String { + appendix?.airline(iata: leg.carrierIata)?.name ?? leg.carrierIata + } + + private var aircraftLabel: String? { + guard let iata = leg.equipmentIata else { return nil } + return appendix?.equipment(iata: iata)?.name ?? iata + } + + private var leavesIn: String { + let mins = Int(leg.departure.dateTime.timeIntervalSince(referenceDate) / 60) + if mins < 0 { return "departed" } + if mins < 60 { return "in \(mins)m" } + let h = mins / 60 + let m = mins % 60 + if m == 0 { return "in \(h)h" } + return "in \(h)h \(m)m" + } + + private var leavesInColor: Color { + let mins = Int(leg.departure.dateTime.timeIntervalSince(referenceDate) / 60) + switch mins { + case ..<30: return FlightTheme.cancelled // hurry + case 30..<90: return FlightTheme.delayed // soon + default: return FlightTheme.textSecondary + } + } +} diff --git a/api_docs/route_explorer_api.md b/api_docs/route_explorer_api.md new file mode 100644 index 0000000..e6c1e4a --- /dev/null +++ b/api_docs/route_explorer_api.md @@ -0,0 +1,206 @@ +# Route Explorer API surface (route-explorer.com) + +Captured 2026-04-25 from https://route-explorer.com (StaffTraveler's public web app). + +## Architecture + +``` +Browser ──GET /api/token──> Vercel function (returns HMAC token) +Browser ──POST /api/flight-search { X-API-Token } ──> Vercel function ──> upstream tRPC +Browser ──GET /api/weather { X-API-Token } ────────> Vercel function ──> open-meteo +Browser ──GET *.public.blob.vercel-storage.com/data/routes/{IATA}.json ──> static CDN, no auth +``` + +The browser **never** calls `api.stafftraveler.com` directly despite it being in the page CSP. Everything routes through `route-explorer.com/api/*` Vercel functions, which validate `X-API-Token` and proxy upstream. Upstream uses tRPC with SuperJSON envelopes (`{ json: {...} }`). + +## Auth: `/api/token` + +```http +GET https://route-explorer.com/api/token +``` + +Response: +```json +{ + "token": "1777091466.01c0355b2bbab0cacfd37cf3ebb9ce1f.f3fcb79c6f60c7cfaa1750000c133a2c7add44973329a9d74429a1622ab4cdc2", + "countryCode": "US" +} +``` + +- Format: `{unixSeconds}.{16-byte-id-hex}.{32-byte-hmac-hex}` +- IP rate-limited: `X-RateLimit-Limit: 10` per window (X-RateLimit-Reset returns next window unix time). +- No login, no cookie required. `credentials: include` is harmless. +- TTL not measured; tokens issued seconds apart all worked. Refresh per session. + +Pass as `X-API-Token: ` to `/api/flight-search` and `/api/weather`. + +## `/api/flight-search` (POST) + +```http +POST /api/flight-search +Content-Type: application/json +X-API-Token: + +{ "endpoint": "/", "body": { "json": { ... params ... } } } +``` + +Allowed values for `endpoint`: **`/route`, `/route-batch`, `/flight`, `/departures`, `/schedule`**. +Anything else returns 400 with `{"error":"Invalid endpoint '...'. Allowed: ..."}` — proxy enforces an allowlist. + +Responses are tRPC SuperJSON: `{ "json": { ... } }`. Errors include a `code`/`status` and a `data.issues[]` array straight from a Zod schema, which leaks the parameter names. + +### `/schedule` + +Required: `carrierCode` (str), `flightNumber` (num), `startDate` (YYYY-MM-DD), `endDate` (YYYY-MM-DD). +Optional: `limit`, `includeAppendix`. + +Returns one row per operating day in the range, with full per-cabin seat counts and equipment. + +Sample response: `route_explorer_captures/schedule_AA2178.json` + +### `/route` — also does multi-leg connection finding + +Required: `departureAirportIata`, `arrivalAirportIata`, `departureDates` (string[]). + +Optional (observed in real Connections-tab traffic): +- `maxStops` — `0` for direct only, `1` or `2` for multi-leg search. Server returns already-joined itineraries; no client-side join needed. +- `sortBy` — `"departure_time"` | `"duration"` (and likely `"arrival_time"`, `"score"`, `"stops"`) +- `includeInterline` — boolean. When true, restricts/highlights carriers with interline non-rev agreements. +- `limit` — max results +- `includeAppendix` — boolean. When true, the response includes an `appendix.{airports,airlines,equipment}` block with reference metadata for everything in `connections[]`. + +Real Connections-tab request body: +```json +{ + "endpoint": "/route", + "body": { "json": { + "departureAirportIata": "DFW", + "arrivalAirportIata": "KOA", + "departureDates": ["2026-04-28"], + "maxStops": 0, + "sortBy": "departure_time", + "includeInterline": false, + "limit": 100, + "includeAppendix": true + }} +} +``` + +Each entry in `connections[]`: +```json +{ + "durationMinutes": 736, + "score": 1636, + "flights": [ + { /* leg 1: DFW→SEA, full row shape (see below) */ }, + { /* leg 2: SEA→KOA, full row shape */ } + ] +} +``` +With `maxStops > 0` the server enforces layover validity and chains legs in time order. `score` is the server's ranking metric (lower = better; appears to combine duration + stops penalty). + +Samples: +- `route_explorer_captures/route_DFW_LAS.json` — direct only, all DFW→LAS departures on 2026-05-01. +- `route_explorer_captures/route_DFW_KOA_1stop.json` — 1-stop itineraries DFW→KOA on 2026-04-28. +- `route_explorer_captures/route_LBB_KOA_2stop.json` — 2-stop itineraries LBB→KOA on 2026-04-28. + +### `/route-batch` + +Not needed for typical use cases — `/route` with `maxStops > 0` does multi-leg directly. Schema for `/route-batch` not fully reverse-engineered (proxy validates `body.base` field directly, outside the SuperJSON envelope, and rejected every shape probed). Skip unless a specific need arises. + +### `/flight` + +Required: `carrierCode` **OR** `carrierIata`, `flightNumber`, `departureDates`. + +Returns flights for a specific flight number on specific dates. Smaller / sharper than `/schedule`. + +Sample: `route_explorer_captures/flight_AA2178.json` + +### `/departures` + +Required: `departureAirportIata`, `departureDates`. + +All departures from an airport on the given date(s). + +Sample: `route_explorer_captures/departures_DFW.json` — 68KB. + +## Common flight row shape (returned by `/route`, `/flight`, `/departures`, `/schedule`) + +```json +{ + "flightNumber": 2178, + "flightSuffix": null, + "departure": { "airportIata": "DFW", "dateTime": "2026-04-24T16:45:00-05:00", "terminal": "0" }, + "arrival": { "airportIata": "LAS", "dateTime": "2026-04-24T17:46:00-07:00", "terminal": "1" }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { "seats": 0, "mealCodes": [] }, + "business": { "seats": 20, "mealCodes": ["D"] }, + "premiumEconomy": { "seats": 0, "mealCodes": [] }, + "economy": { "seats": 176, "mealCodes": ["R","D"] } + }, + "inFlightService": [12,18,22,23,24,26,27,28,29,31], + "id": "AA_2178_DFW_2026_04_24", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] +} +``` + +dateTime values are local times with offset; stable IDs are `{carrier}_{flight}_{origin}_{YYYY}_{MM}_{DD}`. + +## `/api/weather` (GET) + +```http +GET /api/weather?endpoint=current&q=iata:LAS&alerts=yes +X-API-Token: +``` + +Wraps a weather provider (likely WeatherAPI.com — `q=iata:LAS` is their syntax). Schema not fully probed. + +## Public route blobs (no auth at all) + +```http +GET https://g80l6xxwjkrjoai7.public.blob.vercel-storage.com/data/routes/{IATA}.json +``` + +One precomputed file per airport with weekly aggregate route data. Examples: + +- DFW.json — 271 destinations, 34 airlines, 50,880 weekly flights, 7.15M weekly seats +- JFK.json — 200 destinations, 75 airlines, 21,611 weekly flights, 3.69M weekly seats (2.5MB file) + +Schema (top level): `airport`, `updated` (ISO timestamp), `stats { destinations, airlines, countries, totalWeeklyFlights, totalWeeklySeats, avgDistance, seasonalRoutes }`, `routes[]`. + +`routes[]` entry shape: +```json +{ + "dest": "ORD", + "airlines": ["AA","F9","NK","UA"], + "freq": 941, // weekly flights aggregated across carriers + "dist": 1291, // miles + "totalSeats": 163285, // weekly + "avgDuration": 155, // minutes + "equipment": ["319","320","321","32N","32Q","738","739","73G","788","7M8","7M9","E70","E7W"], + "bodyTypes": ["N","W"], // narrow/wide + "isSeasonal": true, + "mealService": "S", // single letter code + "effectiveDates": [{"from":"20270106","to":"20270210"}, ...], + "daysOfWeek": "1234567" // 1=Mon .. 7=Sun +} +``` + +Updated approx weekly (DFW & JFK both stamped 2026-04-20). + +## Other domains observed + +- `https://emrldtp.com/{entrypoint_config,collect}` — Emerald Travel Tech analytics. Cookie consent banner. +- `https://sentry.avs.io/...` — self-hosted Sentry (DSN `1c30377da...@sentry.avs.io/20`). +- `https://images.stafftraveler.com` — image CDN (logos, etc.). +- `https://api.mapbox.com` — Mapbox dark-v11/light-v11 styles, public token `pk.eyJ1Ijoic3RhZmZ0cmF2ZWxlciIsImEiOiJjbWxyNzVqMzgwN2xhM2ZzNGEzaHVkcDY2In0...`. diff --git a/api_docs/route_explorer_captures/departures_DFW.json b/api_docs/route_explorer_captures/departures_DFW.json new file mode 100644 index 0000000..1aa052d --- /dev/null +++ b/api_docs/route_explorer_captures/departures_DFW.json @@ -0,0 +1,5496 @@ +{ + "json": { + "connections": [ + { + "durationMinutes": 51, + "score": 51, + "flights": [ + { + "flightNumber": 4181, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:17:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ACT", + "dateTime": "2026-05-01T10:08:00-05:00", + "terminal": null + }, + "durationMinutes": 51, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4181_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 55, + "score": 55, + "flights": [ + { + "flightNumber": 4942, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:33:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ACT", + "dateTime": "2026-05-01T17:28:00-05:00", + "terminal": null + }, + "durationMinutes": 55, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_4942_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 56, + "score": 56, + "flights": [ + { + "flightNumber": 6419, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:29:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "TYR", + "dateTime": "2026-05-01T17:25:00-05:00", + "terminal": null + }, + "durationMinutes": 56, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6419_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 57, + "score": 57, + "flights": [ + { + "flightNumber": 4059, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:18:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "GGG", + "dateTime": "2026-05-01T14:15:00-05:00", + "terminal": null + }, + "durationMinutes": 57, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4059_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 58, + "score": 58, + "flights": [ + { + "flightNumber": 3417, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:41:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ABI", + "dateTime": "2026-05-01T17:39:00-05:00", + "terminal": null + }, + "durationMinutes": 58, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3417_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 58, + "score": 58, + "flights": [ + { + "flightNumber": 3422, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:16:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ABI", + "dateTime": "2026-05-01T14:14:00-05:00", + "terminal": null + }, + "durationMinutes": 58, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3422_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 58, + "score": 58, + "flights": [ + { + "flightNumber": 6420, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:13:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "TYR", + "dateTime": "2026-05-01T10:11:00-05:00", + "terminal": null + }, + "durationMinutes": 58, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6420_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 59, + "score": 59, + "flights": [ + { + "flightNumber": 3569, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:53:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "GRK", + "dateTime": "2026-05-01T21:52:00-05:00", + "terminal": null + }, + "durationMinutes": 59, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3569_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 59, + "score": 59, + "flights": [ + { + "flightNumber": 3621, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:25:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "GRK", + "dateTime": "2026-05-01T15:24:00-05:00", + "terminal": null + }, + "durationMinutes": 59, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3621_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 60, + "score": 60, + "flights": [ + { + "flightNumber": 5402, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAW", + "dateTime": "2026-05-01T22:30:00-05:00", + "terminal": null + }, + "durationMinutes": 60, + "equipmentIata": "CR9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_5402_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 61, + "score": 61, + "flights": [ + { + "flightNumber": 3611, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ABI", + "dateTime": "2026-05-01T21:46:00-05:00", + "terminal": null + }, + "durationMinutes": 61, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3611_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 61, + "score": 61, + "flights": [ + { + "flightNumber": 4003, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SPS", + "dateTime": "2026-05-01T22:11:00-05:00", + "terminal": null + }, + "durationMinutes": 61, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_4003_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 62, + "score": 62, + "flights": [ + { + "flightNumber": 3418, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:06:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ABI", + "dateTime": "2026-05-01T10:08:00-05:00", + "terminal": null + }, + "durationMinutes": 62, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3418_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 62, + "score": 62, + "flights": [ + { + "flightNumber": 3617, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:33:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "GRK", + "dateTime": "2026-05-01T09:35:00-05:00", + "terminal": null + }, + "durationMinutes": 62, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3617_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 62, + "score": 62, + "flights": [ + { + "flightNumber": 5363, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:42:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAW", + "dateTime": "2026-05-01T16:44:00-05:00", + "terminal": null + }, + "durationMinutes": 62, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_5363_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 63, + "score": 63, + "flights": [ + { + "flightNumber": 3950, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:47:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SPS", + "dateTime": "2026-05-01T13:50:00-05:00", + "terminal": null + }, + "durationMinutes": 63, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_3950_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 63, + "score": 63, + "flights": [ + { + "flightNumber": 4156, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "TXK", + "dateTime": "2026-05-01T14:13:00-05:00", + "terminal": null + }, + "durationMinutes": 63, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4156_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 64, + "score": 64, + "flights": [ + { + "flightNumber": 576, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T19:55:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T20:59:00-05:00", + "terminal": null + }, + "durationMinutes": 64, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_576_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 64, + "score": 64, + "flights": [ + { + "flightNumber": 1819, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:00:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T13:04:00-05:00", + "terminal": null + }, + "durationMinutes": 64, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1819_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 64, + "score": 64, + "flights": [ + { + "flightNumber": 3862, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:59:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SHV", + "dateTime": "2026-05-01T10:03:00-05:00", + "terminal": null + }, + "durationMinutes": 64, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3862_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 64, + "score": 64, + "flights": [ + { + "flightNumber": 4046, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:43:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "CLL", + "dateTime": "2026-05-01T17:47:00-05:00", + "terminal": null + }, + "durationMinutes": 64, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4046_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 972, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T22:50:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_972_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 1458, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:53:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T22:58:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1458_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 1813, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T19:02:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T20:07:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1813_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 2324, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:49:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T21:54:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2324_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 2438, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:43:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T17:48:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2438_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 2884, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:36:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T14:41:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2884_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 3198, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T19:15:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_3198_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 65, + "score": 65, + "flights": [ + { + "flightNumber": 4102, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:38:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "CLL", + "dateTime": "2026-05-01T09:43:00-05:00", + "terminal": null + }, + "durationMinutes": 65, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4102_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 66, + "score": 66, + "flights": [ + { + "flightNumber": 2199, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:37:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T19:43:00-05:00", + "terminal": null + }, + "durationMinutes": 66, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2199_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 66, + "score": 66, + "flights": [ + { + "flightNumber": 2384, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T10:36:00-05:00", + "terminal": null + }, + "durationMinutes": 66, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2384_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 66, + "score": 66, + "flights": [ + { + "flightNumber": 5593, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:30:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAW", + "dateTime": "2026-05-01T09:36:00-05:00", + "terminal": null + }, + "durationMinutes": 66, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_5593_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 66, + "score": 66, + "flights": [ + { + "flightNumber": 6231, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:33:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "GRK", + "dateTime": "2026-05-01T18:39:00-05:00", + "terminal": null + }, + "durationMinutes": 66, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6231_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 67, + "score": 67, + "flights": [ + { + "flightNumber": 1408, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:32:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T18:39:00-05:00", + "terminal": null + }, + "durationMinutes": 67, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1408_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 67, + "score": 67, + "flights": [ + { + "flightNumber": 2439, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T10:37:00-05:00", + "terminal": null + }, + "durationMinutes": 67, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2439_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 67, + "score": 67, + "flights": [ + { + "flightNumber": 3398, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T15:47:00-05:00", + "terminal": null + }, + "durationMinutes": 67, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3398_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 67, + "score": 67, + "flights": [ + { + "flightNumber": 3444, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:15:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T16:22:00-05:00", + "terminal": null + }, + "durationMinutes": 67, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3444_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 67, + "score": 67, + "flights": [ + { + "flightNumber": 3786, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:55:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T13:02:00-05:00", + "terminal": null + }, + "durationMinutes": 67, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3786_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 67, + "score": 67, + "flights": [ + { + "flightNumber": 6207, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:40:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SHV", + "dateTime": "2026-05-01T19:47:00-05:00", + "terminal": null + }, + "durationMinutes": 67, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6207_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 68, + "score": 68, + "flights": [ + { + "flightNumber": 614, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:41:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T17:49:00-05:00", + "terminal": null + }, + "durationMinutes": 68, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_614_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 68, + "score": 68, + "flights": [ + { + "flightNumber": 2413, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:56:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "TUL", + "dateTime": "2026-05-01T15:04:00-05:00", + "terminal": null + }, + "durationMinutes": 68, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2413_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 68, + "score": 68, + "flights": [ + { + "flightNumber": 3277, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T11:48:00-05:00", + "terminal": null + }, + "durationMinutes": 68, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_3277_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 68, + "score": 68, + "flights": [ + { + "flightNumber": 5449, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:52:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SHV", + "dateTime": "2026-05-01T18:00:00-05:00", + "terminal": null + }, + "durationMinutes": 68, + "equipmentIata": "CR9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_5449_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 68, + "score": 68, + "flights": [ + { + "flightNumber": 6232, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:13:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "GRK", + "dateTime": "2026-05-01T11:21:00-05:00", + "terminal": null + }, + "durationMinutes": 68, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6232_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 69, + "score": 69, + "flights": [ + { + "flightNumber": 3063, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:14:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "TUL", + "dateTime": "2026-05-01T10:23:00-05:00", + "terminal": null + }, + "durationMinutes": 69, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_3063_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 69, + "score": 69, + "flights": [ + { + "flightNumber": 6203, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:48:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SHV", + "dateTime": "2026-05-01T21:57:00-05:00", + "terminal": null + }, + "durationMinutes": 69, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6203_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 69, + "score": 69, + "flights": [ + { + "flightNumber": 6234, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SHV", + "dateTime": "2026-05-01T16:29:00-05:00", + "terminal": null + }, + "durationMinutes": 69, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6234_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 70, + "score": 70, + "flights": [ + { + "flightNumber": 1294, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T09:40:00-05:00", + "terminal": null + }, + "durationMinutes": 70, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1294_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 70, + "score": 70, + "flights": [ + { + "flightNumber": 1514, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:15:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "TUL", + "dateTime": "2026-05-01T22:25:00-05:00", + "terminal": null + }, + "durationMinutes": 70, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1514_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 70, + "score": 70, + "flights": [ + { + "flightNumber": 3596, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "FSM", + "dateTime": "2026-05-01T10:40:00-05:00", + "terminal": null + }, + "durationMinutes": 70, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3596_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 70, + "score": 70, + "flights": [ + { + "flightNumber": 6380, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:31:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SHV", + "dateTime": "2026-05-01T12:41:00-05:00", + "terminal": null + }, + "durationMinutes": 70, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6380_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 71, + "score": 71, + "flights": [ + { + "flightNumber": 413, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:31:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T12:42:00-05:00", + "terminal": "0" + }, + "durationMinutes": 71, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_413_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 71, + "score": 71, + "flights": [ + { + "flightNumber": 499, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T19:47:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T20:58:00-05:00", + "terminal": "0" + }, + "durationMinutes": 71, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_499_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 71, + "score": 71, + "flights": [ + { + "flightNumber": 2368, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:33:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T19:44:00-05:00", + "terminal": "0" + }, + "durationMinutes": 71, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 150, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 138, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_2368_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 71, + "score": 71, + "flights": [ + { + "flightNumber": 2609, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T14:21:00-05:00", + "terminal": "0" + }, + "durationMinutes": 71, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2609_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 72, + "score": 72, + "flights": [ + { + "flightNumber": 546, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T22:52:00-05:00", + "terminal": "0" + }, + "durationMinutes": 72, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_546_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 72, + "score": 72, + "flights": [ + { + "flightNumber": 1406, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T21:42:00-05:00", + "terminal": "0" + }, + "durationMinutes": 72, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1406_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 72, + "score": 72, + "flights": [ + { + "flightNumber": 1449, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:26:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T15:38:00-05:00", + "terminal": "0" + }, + "durationMinutes": 72, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1449_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 72, + "score": 72, + "flights": [ + { + "flightNumber": 2759, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:24:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T09:36:00-05:00", + "terminal": "0" + }, + "durationMinutes": 72, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2759_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 72, + "score": 72, + "flights": [ + { + "flightNumber": 3595, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:59:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "FSM", + "dateTime": "2026-05-01T18:11:00-05:00", + "terminal": null + }, + "durationMinutes": 72, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_3595_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 73, + "score": 73, + "flights": [ + { + "flightNumber": 1836, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T08:23:00-05:00", + "terminal": "0" + }, + "durationMinutes": 73, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1836_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 73, + "score": 73, + "flights": [ + { + "flightNumber": 5356, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:40:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SWO", + "dateTime": "2026-05-01T22:53:00-05:00", + "terminal": null + }, + "durationMinutes": 73, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_5356_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 74, + "score": 74, + "flights": [ + { + "flightNumber": 1865, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:37:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T15:51:00-05:00", + "terminal": "A" + }, + "durationMinutes": 74, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1865_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 74, + "score": 74, + "flights": [ + { + "flightNumber": 2140, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:26:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T09:40:00-05:00", + "terminal": "A" + }, + "durationMinutes": 74, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2140_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 74, + "score": 74, + "flights": [ + { + "flightNumber": 2146, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:13:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T11:27:00-05:00", + "terminal": "A" + }, + "durationMinutes": 74, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2146_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 74, + "score": 74, + "flights": [ + { + "flightNumber": 3827, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:28:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SAT", + "dateTime": "2026-05-01T18:42:00-05:00", + "terminal": "0" + }, + "durationMinutes": 74, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3827_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 74, + "score": 74, + "flights": [ + { + "flightNumber": 3886, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "TUL", + "dateTime": "2026-05-01T11:54:00-05:00", + "terminal": null + }, + "durationMinutes": 74, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_3886_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 2152, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T19:05:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T20:20:00-05:00", + "terminal": "A" + }, + "durationMinutes": 75, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2152_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 2209, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:14:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T22:29:00-05:00", + "terminal": "A" + }, + "durationMinutes": 75, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2209_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 3164, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:05:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "XNA", + "dateTime": "2026-05-01T18:20:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_3164_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 3689, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:35:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LBB", + "dateTime": "2026-05-01T19:50:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3689_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 3926, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:22:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AEX", + "dateTime": "2026-05-01T22:37:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_3926_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 5480, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:23:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "SWO", + "dateTime": "2026-05-01T14:38:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "CR9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_5480_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 6385, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:46:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SJT", + "dateTime": "2026-05-01T18:01:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6385_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 3802, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:35:00-05:00", + "terminal": "D" + }, + "arrival": { + "airportIata": "GLH", + "dateTime": "2026-05-01T12:50:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "FRJ", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 30, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 30, + "mealCodes": [] + } + }, + "inFlightService": [], + "id": "KG_3802_DFW_2026_05_01", + "carrierIata": "KG", + "carrierIcao": "LYM", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 5411, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:15:00-05:00", + "terminal": "D" + }, + "arrival": { + "airportIata": "CVN", + "dateTime": "2026-05-01T11:30:00-06:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "ER4", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 50, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 50, + "mealCodes": [] + } + }, + "inFlightService": [], + "id": "KG_5411_DFW_2026_05_01", + "carrierIata": "KG", + "carrierIcao": "LYM", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 3692, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ELD", + "dateTime": "2026-05-01T11:55:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "CRJ", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 30, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 30, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "LF_3692_DFW_2026_05_01", + "carrierIata": "LF", + "carrierIcao": "VTE", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 3694, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:55:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ELD", + "dateTime": "2026-05-01T16:10:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "CRJ", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 30, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 30, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "LF_3694_DFW_2026_05_01", + "carrierIata": "LF", + "carrierIcao": "VTE", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 75, + "score": 75, + "flights": [ + { + "flightNumber": 3696, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ELD", + "dateTime": "2026-05-01T18:45:00-05:00", + "terminal": null + }, + "durationMinutes": 75, + "equipmentIata": "CRJ", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 30, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 30, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "LF_3696_DFW_2026_05_01", + "carrierIata": "LF", + "carrierIcao": "VTE", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 76, + "score": 76, + "flights": [ + { + "flightNumber": 3113, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:36:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LIT", + "dateTime": "2026-05-01T13:52:00-05:00", + "terminal": null + }, + "durationMinutes": 76, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_3113_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 76, + "score": 76, + "flights": [ + { + "flightNumber": 3691, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:28:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LBB", + "dateTime": "2026-05-01T13:44:00-05:00", + "terminal": null + }, + "durationMinutes": 76, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3691_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 76, + "score": 76, + "flights": [ + { + "flightNumber": 3888, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:02:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "TUL", + "dateTime": "2026-05-01T08:18:00-05:00", + "terminal": null + }, + "durationMinutes": 76, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_3888_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 76, + "score": 76, + "flights": [ + { + "flightNumber": 3939, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AEX", + "dateTime": "2026-05-01T17:56:00-05:00", + "terminal": null + }, + "durationMinutes": 76, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3939_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 76, + "score": 76, + "flights": [ + { + "flightNumber": 3955, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:30:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "TUL", + "dateTime": "2026-05-01T19:46:00-05:00", + "terminal": null + }, + "durationMinutes": 76, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3955_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 76, + "score": 76, + "flights": [ + { + "flightNumber": 6433, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:10:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "AUS", + "dateTime": "2026-05-01T08:26:00-05:00", + "terminal": null + }, + "durationMinutes": 76, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6433_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 77, + "score": 77, + "flights": [ + { + "flightNumber": 1433, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:14:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "XNA", + "dateTime": "2026-05-01T22:31:00-05:00", + "terminal": null + }, + "durationMinutes": 77, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 150, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 138, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_1433_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 77, + "score": 77, + "flights": [ + { + "flightNumber": 3391, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:31:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "HOU", + "dateTime": "2026-05-01T15:48:00-05:00", + "terminal": null + }, + "durationMinutes": 77, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_3391_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 77, + "score": 77, + "flights": [ + { + "flightNumber": 4018, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:20:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "AEX", + "dateTime": "2026-05-01T09:37:00-05:00", + "terminal": null + }, + "durationMinutes": 77, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4018_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 78, + "score": 78, + "flights": [ + { + "flightNumber": 2142, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:05:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T17:23:00-05:00", + "terminal": "A" + }, + "durationMinutes": 78, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2142_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 78, + "score": 78, + "flights": [ + { + "flightNumber": 3684, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:56:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LBB", + "dateTime": "2026-05-01T11:14:00-05:00", + "terminal": null + }, + "durationMinutes": 78, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3684_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 78, + "score": 78, + "flights": [ + { + "flightNumber": 3686, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:15:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "MLU", + "dateTime": "2026-05-01T22:33:00-05:00", + "terminal": null + }, + "durationMinutes": 78, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3686_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 78, + "score": 78, + "flights": [ + { + "flightNumber": 4113, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:57:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T13:15:00-05:00", + "terminal": "A" + }, + "durationMinutes": 78, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4113_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 78, + "score": 78, + "flights": [ + { + "flightNumber": 6427, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:10:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "OKC", + "dateTime": "2026-05-01T08:28:00-05:00", + "terminal": null + }, + "durationMinutes": 78, + "equipmentIata": "CR7", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 9, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 56, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_6427_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 78, + "score": 78, + "flights": [ + { + "flightNumber": 528, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T15:38:00-05:00", + "terminal": "C" + }, + "durationMinutes": 78, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_528_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 78, + "score": 78, + "flights": [ + { + "flightNumber": 539, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:55:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T13:13:00-05:00", + "terminal": "C" + }, + "durationMinutes": 78, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_539_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 79, + "score": 79, + "flights": [ + { + "flightNumber": 2157, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:00:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T19:19:00-05:00", + "terminal": "A" + }, + "durationMinutes": 79, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 128, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 8, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2157_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 79, + "score": 79, + "flights": [ + { + "flightNumber": 3390, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:01:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T08:20:00-05:00", + "terminal": "A" + }, + "durationMinutes": 79, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3390_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 79, + "score": 79, + "flights": [ + { + "flightNumber": 3688, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:25:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LBB", + "dateTime": "2026-05-01T09:44:00-05:00", + "terminal": null + }, + "durationMinutes": 79, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3688_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 79, + "score": 79, + "flights": [ + { + "flightNumber": 3768, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:50:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "MLU", + "dateTime": "2026-05-01T18:09:00-05:00", + "terminal": null + }, + "durationMinutes": 79, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3768_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 79, + "score": 79, + "flights": [ + { + "flightNumber": 3769, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:21:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "MLU", + "dateTime": "2026-05-01T09:40:00-05:00", + "terminal": null + }, + "durationMinutes": 79, + "equipmentIata": "E70", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 65, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 53, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "AA_3769_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + } + ], + "nextCursor": "CGQSFwoRMjAyNi0wNS0wMV9kaXJlY3QQZBhkGGQ=" + } +} \ No newline at end of file diff --git a/api_docs/route_explorer_captures/flight_AA2178.json b/api_docs/route_explorer_captures/flight_AA2178.json new file mode 100644 index 0000000..6d32ef7 --- /dev/null +++ b/api_docs/route_explorer_captures/flight_AA2178.json @@ -0,0 +1,67 @@ +{ + "json": { + "flights": [ + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + } +} \ No newline at end of file diff --git a/api_docs/route_explorer_captures/route_DFW_KOA_1stop.json b/api_docs/route_explorer_captures/route_DFW_KOA_1stop.json new file mode 100644 index 0000000..846be5f --- /dev/null +++ b/api_docs/route_explorer_captures/route_DFW_KOA_1stop.json @@ -0,0 +1,773 @@ +{ + "json": { + "connections": [ + { + "durationMinutes": 736, + "score": 1636, + "flights": [ + { + "flightNumber": 543, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T06:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SEA", + "dateTime": "2026-04-28T08:52:00-07:00", + "terminal": null + }, + "durationMinutes": 272, + "equipmentIata": "73J", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "B" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_543_DFW_2026_04_28", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 204, + "flightSuffix": null, + "departure": { + "airportIata": "SEA", + "dateTime": "2026-04-28T10:04:00-07:00", + "terminal": null + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T13:36:00-10:00", + "terminal": null + }, + "durationMinutes": 392, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "L" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_204_SEA_2026_04_28", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 736, + "score": 1736, + "flights": [ + { + "flightNumber": 474, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T07:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-04-28T07:54:00-07:00", + "terminal": "4" + }, + "durationMinutes": 164, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_474_DFW_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 663, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-04-28T10:58:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T14:26:00-10:00", + "terminal": null + }, + "durationMinutes": 388, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_663_PHX_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 795, + "score": 1795, + "flights": [ + { + "flightNumber": 644, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T07:15:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-04-28T08:35:00-06:00", + "terminal": null + }, + "durationMinutes": 140, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_644_DFW_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1758, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-04-28T12:15:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T15:30:00-10:00", + "terminal": null + }, + "durationMinutes": 435, + "equipmentIata": "777", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 364, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 28, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "economy": { + "seats": 336, + "mealCodes": [ + "M" + ] + } + }, + "inFlightService": [], + "id": "UA_1758_DEN_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 651, + "score": 1551, + "flights": [ + { + "flightNumber": 520, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T08:35:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-04-28T09:25:00-07:00", + "terminal": "4" + }, + "durationMinutes": 170, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_520_DFW_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 663, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-04-28T10:58:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T14:26:00-10:00", + "terminal": null + }, + "durationMinutes": 388, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_663_PHX_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 952, + "score": 2252, + "flights": [ + { + "flightNumber": 365, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T09:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SEA", + "dateTime": "2026-04-28T11:27:00-07:00", + "terminal": null + }, + "durationMinutes": 267, + "equipmentIata": "73J", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "B" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_365_DFW_2026_04_28", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 238, + "flightSuffix": null, + "departure": { + "airportIata": "SEA", + "dateTime": "2026-04-28T16:27:00-07:00", + "terminal": null + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T19:52:00-10:00", + "terminal": null + }, + "durationMinutes": 385, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "D" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_238_SEA_2026_04_28", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + } + ] + } + ], + "appendix": { + "airports": [ + { + "iataCode": "DFW", + "name": "Dallas Dallas/Fort Worth Intl Apt", + "cityCode": "DFW", + "countryCode": "US", + "stateCode": "TX", + "latitude": 32.896944, + "longitude": -97.038056, + "timezone": "America/Chicago", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KDFW", + "cityName": "Dallas", + "countryName": "United States" + }, + { + "iataCode": "SEA", + "name": "Seattle-Tacoma International Apt", + "cityCode": "SEA", + "countryCode": "US", + "stateCode": "WA", + "latitude": 47.448889, + "longitude": -122.309444, + "timezone": "America/Los_Angeles", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KSEA", + "cityName": "Seattle", + "countryName": "United States" + }, + { + "iataCode": "KOA", + "name": "Kona", + "cityCode": "KOA", + "countryCode": "US", + "stateCode": "HI", + "latitude": 19.738889, + "longitude": -156.045556, + "timezone": "Pacific/Honolulu", + "locationType": "L", + "locationCategory": "A", + "icaoCode": "PHKO", + "cityName": "Kona", + "countryName": "United States" + }, + { + "iataCode": "PHX", + "name": "Phoenix Sky Harbor Intl Apt", + "cityCode": "PHX", + "countryCode": "US", + "stateCode": "AZ", + "latitude": 33.434167, + "longitude": -112.011667, + "timezone": "America/Phoenix", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KPHX", + "cityName": "Phoenix", + "countryName": "United States" + }, + { + "iataCode": "DEN", + "name": "Denver Intl Apt", + "cityCode": "DEN", + "countryCode": "US", + "stateCode": "CO", + "latitude": 39.861667, + "longitude": -104.673056, + "timezone": "America/Denver", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KDEN", + "cityName": "Denver", + "countryName": "United States" + } + ], + "airlines": [ + { + "iataCode": "AS", + "icaoCode": "ASA", + "name": "Alaska Airlines", + "countryCode": "US", + "alliance": "oneworld", + "isLowCost": false, + "isControlledDuplicate": false, + "websiteUrl": "https://www.alaskaair.com", + "webCheckinUrl": "https://webselfservice.alaskaair.com/checkinweb/default.aspx?language=", + "mobileCheckinUrl": "https://m.alaskaair.com/checkin", + "baggageUrl": "https://www.alaskaair.com/content/travel-info/baggage/overview", + "foundedYear": 1932, + "callsign": "ALASKA" + }, + { + "iataCode": "AA", + "icaoCode": "AAL", + "name": "American Airlines", + "countryCode": "US", + "alliance": "oneworld", + "isLowCost": false, + "isControlledDuplicate": false, + "websiteUrl": "https://www.aa.com", + "webCheckinUrl": "https://www.aa.com/reservation/flightCheckInViewReservationsAccess.do", + "mobileCheckinUrl": null, + "baggageUrl": "https://www.aa.com/i18n/travel-info/baggage/baggage.jsp?anchorEvent=false&from=Nav", + "foundedYear": 1926, + "callsign": "AMERICAN" + }, + { + "iataCode": "UA", + "icaoCode": "UAL", + "name": "United Airlines", + "countryCode": "US", + "alliance": "star-alliance", + "isLowCost": false, + "isControlledDuplicate": false, + "websiteUrl": "https://www.united.com/en/us/", + "webCheckinUrl": "https://www.united.com/travel/checkin/start.aspx", + "mobileCheckinUrl": null, + "baggageUrl": "https://www.united.com/en/us/fly/baggage.html", + "foundedYear": 1926, + "callsign": "UNITED" + } + ], + "equipment": [ + { + "iataCode": "73J", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737-900 (Winglets) Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "7M9", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737 MAX 9 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "321", + "icaoCode": null, + "generalCode": "32S", + "name": "Airbus A321 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "32Q", + "icaoCode": null, + "generalCode": "32S", + "name": "Airbus A321neo/LR/XLR Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "319", + "icaoCode": null, + "generalCode": "32S", + "name": "Airbus A319 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "777", + "icaoCode": null, + "generalCode": "777", + "name": "Boeing 777 Passenger", + "equipmentType": "J", + "bodyType": "W", + "isSurfaceTransport": false + }, + { + "iataCode": "738", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737-800 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + } + ] + } + } +} \ No newline at end of file diff --git a/api_docs/route_explorer_captures/route_DFW_LAS.json b/api_docs/route_explorer_captures/route_DFW_LAS.json new file mode 100644 index 0000000..8fecbf2 --- /dev/null +++ b/api_docs/route_explorer_captures/route_DFW_LAS.json @@ -0,0 +1,10580 @@ +{ + "json": { + "connections": [ + { + "durationMinutes": 176, + "score": 176, + "flights": [ + { + "flightNumber": 742, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:42:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:38:00-07:00", + "terminal": "1" + }, + "durationMinutes": 176, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 174, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 174, + "mealCodes": [] + } + }, + "inFlightService": [ + 9 + ], + "id": "NK_742_DFW_2026_05_01", + "carrierIata": "NK", + "carrierIcao": "NKS", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 177, + "score": 177, + "flights": [ + { + "flightNumber": 1292, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:05:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T12:02:00-07:00", + "terminal": "1" + }, + "durationMinutes": 177, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "R", + "L" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1292_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 178, + "score": 178, + "flights": [ + { + "flightNumber": 777, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:41:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:39:00-07:00", + "terminal": "1" + }, + "durationMinutes": 178, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "R", + "L" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_777_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 178, + "score": 178, + "flights": [ + { + "flightNumber": 1584, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:54:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T09:52:00-07:00", + "terminal": "1" + }, + "durationMinutes": 178, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "B", + "R" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_1584_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 178, + "score": 178, + "flights": [ + { + "flightNumber": 2864, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:59:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T15:57:00-07:00", + "terminal": "1" + }, + "durationMinutes": 178, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "R", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2864_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 179, + "score": 179, + "flights": [ + { + "flightNumber": 2243, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:56:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:55:00-07:00", + "terminal": "1" + }, + "durationMinutes": 179, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2243_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 180, + "score": 180, + "flights": [ + { + "flightNumber": 884, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:55:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T19:55:00-07:00", + "terminal": "1" + }, + "durationMinutes": 180, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_884_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 180, + "score": 180, + "flights": [ + { + "flightNumber": 1615, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T21:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:45:00-07:00", + "terminal": "1" + }, + "durationMinutes": 180, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "R" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "R" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1615_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 180, + "score": 180, + "flights": [ + { + "flightNumber": 1771, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:00:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:00:00-07:00", + "terminal": "1" + }, + "durationMinutes": 180, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1771_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 180, + "score": 180, + "flights": [ + { + "flightNumber": 1797, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T20:56:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:56:00-07:00", + "terminal": "1" + }, + "durationMinutes": 180, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1797_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 181, + "score": 181, + "flights": [ + { + "flightNumber": 783, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:31:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T10:32:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "B", + "R" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_783_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 181, + "score": 181, + "flights": [ + { + "flightNumber": 1969, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:05:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T08:06:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "B", + "R" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1969_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 181, + "score": 181, + "flights": [ + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 190, + "score": 190, + "flights": [ + { + "flightNumber": 1051, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:55:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T14:05:00-07:00", + "terminal": "3" + }, + "durationMinutes": 190, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 240, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 240, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_1051_DFW_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 190, + "score": 190, + "flights": [ + { + "flightNumber": 1647, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:38:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T16:48:00-07:00", + "terminal": "3" + }, + "durationMinutes": 190, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 240, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 240, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_1647_DFW_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 175, + "score": 325, + "flights": [ + { + "flightNumber": 2998, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T22:56:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:51:00-07:00", + "terminal": "1" + }, + "durationMinutes": 175, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "R" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "R" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2998_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 194, + "score": 344, + "flights": [ + { + "flightNumber": 3885, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T22:35:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:49:00-07:00", + "terminal": "3" + }, + "durationMinutes": 194, + "equipmentIata": "32N", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 186, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 186, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_3885_DFW_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 295, + "score": 1195, + "flights": [ + { + "flightNumber": 1447, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:20:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T16:00:00-07:00", + "terminal": "4" + }, + "durationMinutes": 160, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_1447_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1977, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T17:02:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:15:00-07:00", + "terminal": "1" + }, + "durationMinutes": 73, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1977_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 307, + "score": 1207, + "flights": [ + { + "flightNumber": 1407, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T19:27:00-07:00", + "terminal": "4" + }, + "durationMinutes": 162, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1407_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2106, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T20:40:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:52:00-07:00", + "terminal": "1" + }, + "durationMinutes": 72, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2106_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 316, + "score": 1216, + "flights": [ + { + "flightNumber": 2800, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:50:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SLC", + "dateTime": "2026-05-01T16:40:00-06:00", + "terminal": null + }, + "durationMinutes": 170, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 120, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2800_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1690, + "flightSuffix": null, + "departure": { + "airportIata": "SLC", + "dateTime": "2026-05-01T17:40:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:06:00-07:00", + "terminal": "1" + }, + "durationMinutes": 86, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1690_SLC_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 326, + "score": 1226, + "flights": [ + { + "flightNumber": 2049, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:15:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T12:26:00-06:00", + "terminal": null + }, + "durationMinutes": 131, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_2049_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 493, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T13:34:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T14:41:00-07:00", + "terminal": "3" + }, + "durationMinutes": 127, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_493_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 330, + "score": 1230, + "flights": [ + { + "flightNumber": 1681, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T15:25:00-07:00", + "terminal": "4" + }, + "durationMinutes": 160, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1681_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1977, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T17:02:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:15:00-07:00", + "terminal": "1" + }, + "durationMinutes": 73, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1977_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 335, + "score": 1235, + "flights": [ + { + "flightNumber": 3971, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T09:51:00-07:00", + "terminal": "3" + }, + "durationMinutes": 171, + "equipmentIata": "32N", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 186, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 186, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_3971_DFW_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 3983, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T11:20:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T12:35:00-07:00", + "terminal": "3" + }, + "durationMinutes": 75, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 240, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 240, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_3983_PHX_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 335, + "score": 1235, + "flights": [ + { + "flightNumber": 248, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:43:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T14:55:00-06:00", + "terminal": null + }, + "durationMinutes": 132, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_248_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 716, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T16:10:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T17:18:00-07:00", + "terminal": "3" + }, + "durationMinutes": 128, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_716_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 345, + "score": 1245, + "flights": [ + { + "flightNumber": 1483, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:03:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T18:25:00-06:00", + "terminal": null + }, + "durationMinutes": 142, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1483_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 655, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T19:40:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T20:48:00-07:00", + "terminal": "3" + }, + "durationMinutes": 128, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 200, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 180, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_655_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 351, + "score": 1251, + "flights": [ + { + "flightNumber": 1291, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:15:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SLC", + "dateTime": "2026-05-01T10:15:00-06:00", + "terminal": null + }, + "durationMinutes": 180, + "equipmentIata": "221", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 109, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 97, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1291_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1659, + "flightSuffix": null, + "departure": { + "airportIata": "SLC", + "dateTime": "2026-05-01T11:40:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T12:06:00-07:00", + "terminal": "1" + }, + "durationMinutes": 86, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 180, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 160, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1659_SLC_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 358, + "score": 1258, + "flights": [ + { + "flightNumber": 1328, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T19:15:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SAN", + "dateTime": "2026-05-01T20:29:00-07:00", + "terminal": "2" + }, + "durationMinutes": 194, + "equipmentIata": "73J", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "R" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "R" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_1328_DFW_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2483, + "flightSuffix": null, + "departure": { + "airportIata": "SAN", + "dateTime": "2026-05-01T21:40:00-07:00", + "terminal": "2" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:13:00-07:00", + "terminal": "3" + }, + "durationMinutes": 93, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AS_2483_SAN_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 360, + "score": 1260, + "flights": [ + { + "flightNumber": 1643, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:58:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAX", + "dateTime": "2026-05-01T18:22:00-07:00", + "terminal": "0" + }, + "durationMinutes": 204, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "D", + "F" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1643_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2785, + "flightSuffix": null, + "departure": { + "airportIata": "LAX", + "dateTime": "2026-05-01T19:40:00-07:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T20:58:00-07:00", + "terminal": "1" + }, + "durationMinutes": 78, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2785_LAX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 361, + "score": 1261, + "flights": [ + { + "flightNumber": 3317, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:00:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAX", + "dateTime": "2026-05-01T08:29:00-07:00", + "terminal": "0" + }, + "durationMinutes": 209, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "B", + "F" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_3317_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2229, + "flightSuffix": null, + "departure": { + "airportIata": "LAX", + "dateTime": "2026-05-01T09:42:00-07:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T11:01:00-07:00", + "terminal": "1" + }, + "durationMinutes": 79, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2229_LAX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 362, + "score": 1262, + "flights": [ + { + "flightNumber": 2670, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:10:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T08:35:00-05:00", + "terminal": "C" + }, + "durationMinutes": 85, + "equipmentIata": "73G", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_2670_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1799, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T09:45:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T11:12:00-07:00", + "terminal": "3" + }, + "durationMinutes": 207, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1799_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 364, + "score": 1264, + "flights": [ + { + "flightNumber": 528, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T15:38:00-05:00", + "terminal": "C" + }, + "durationMinutes": 78, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_528_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1346, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T16:55:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:24:00-07:00", + "terminal": "3" + }, + "durationMinutes": 209, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1346_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 364, + "score": 1264, + "flights": [ + { + "flightNumber": 1602, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:01:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T19:24:00-06:00", + "terminal": null + }, + "durationMinutes": 143, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 150, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 138, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1602_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 624, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T20:57:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:05:00-07:00", + "terminal": "3" + }, + "durationMinutes": 128, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_624_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 383, + "score": 1283, + "flights": [ + { + "flightNumber": 2631, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:48:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T17:08:00-06:00", + "terminal": null + }, + "durationMinutes": 140, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 230, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 230, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_2631_DFW_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1765, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T19:05:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T20:11:00-07:00", + "terminal": "3" + }, + "durationMinutes": 126, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 230, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 230, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_1765_DEN_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 387, + "score": 1287, + "flights": [ + { + "flightNumber": 399, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:30:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T16:57:00-05:00", + "terminal": "C" + }, + "durationMinutes": 87, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_399_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2406, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T18:25:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T19:57:00-07:00", + "terminal": "3" + }, + "durationMinutes": 212, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_2406_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 389, + "score": 1289, + "flights": [ + { + "flightNumber": 539, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:55:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T13:13:00-05:00", + "terminal": "C" + }, + "durationMinutes": 78, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_539_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1971, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T14:55:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T16:24:00-07:00", + "terminal": "3" + }, + "durationMinutes": 209, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1971_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 296, + "score": 1296, + "flights": [ + { + "flightNumber": 520, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:35:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T09:25:00-07:00", + "terminal": "4" + }, + "durationMinutes": 170, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_520_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2010, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T10:13:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T11:31:00-07:00", + "terminal": "1" + }, + "durationMinutes": 78, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2010_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 397, + "score": 1297, + "flights": [ + { + "flightNumber": 1609, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T18:42:00-05:00", + "terminal": "C" + }, + "durationMinutes": 82, + "equipmentIata": "73G", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_1609_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1360, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T20:25:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:57:00-07:00", + "terminal": "3" + }, + "durationMinutes": 212, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1360_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 399, + "score": 1299, + "flights": [ + { + "flightNumber": 500, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:35:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAX", + "dateTime": "2026-05-01T11:04:00-07:00", + "terminal": "0" + }, + "durationMinutes": 209, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "B", + "F" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_500_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2256, + "flightSuffix": null, + "departure": { + "airportIata": "LAX", + "dateTime": "2026-05-01T12:55:00-07:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T14:14:00-07:00", + "terminal": "1" + }, + "durationMinutes": 79, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2256_LAX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 413, + "score": 1313, + "flights": [ + { + "flightNumber": 1276, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T06:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "MSP", + "dateTime": "2026-05-01T08:20:00-05:00", + "terminal": "1" + }, + "durationMinutes": 140, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 171, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1276_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2262, + "flightSuffix": null, + "departure": { + "airportIata": "MSP", + "dateTime": "2026-05-01T09:25:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T10:53:00-07:00", + "terminal": "1" + }, + "durationMinutes": 208, + "equipmentIata": "753", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 234, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 24, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 210, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 24, + 25, + 27, + 99 + ], + "id": "DL_2262_MSP_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 315, + "score": 1315, + "flights": [ + { + "flightNumber": 2798, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SLC", + "dateTime": "2026-05-01T14:10:00-06:00", + "terminal": null + }, + "durationMinutes": 170, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 120, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2798_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1672, + "flightSuffix": null, + "departure": { + "airportIata": "SLC", + "dateTime": "2026-05-01T15:08:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T15:35:00-07:00", + "terminal": "1" + }, + "durationMinutes": 87, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 160, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 144, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1672_SLC_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 318, + "score": 1318, + "flights": [ + { + "flightNumber": 731, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:30:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T08:50:00-06:00", + "terminal": null + }, + "durationMinutes": 140, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_731_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2495, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T09:40:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T10:48:00-07:00", + "terminal": "3" + }, + "durationMinutes": 128, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_2495_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 424, + "score": 1324, + "flights": [ + { + "flightNumber": 2977, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:13:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "MSP", + "dateTime": "2026-05-01T17:40:00-05:00", + "terminal": "1" + }, + "durationMinutes": 147, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2977_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2246, + "flightSuffix": null, + "departure": { + "airportIata": "MSP", + "dateTime": "2026-05-01T18:50:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T20:17:00-07:00", + "terminal": "1" + }, + "durationMinutes": 207, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 171, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2246_MSP_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 346, + "score": 1346, + "flights": [ + { + "flightNumber": 1586, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:54:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T11:15:00-05:00", + "terminal": "C" + }, + "durationMinutes": 81, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_1586_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1524, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T12:11:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:40:00-07:00", + "terminal": "3" + }, + "durationMinutes": 209, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1524_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 451, + "score": 1351, + "flights": [ + { + "flightNumber": 839, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:56:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ATL", + "dateTime": "2026-05-01T13:01:00-04:00", + "terminal": "S" + }, + "durationMinutes": 125, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 171, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_839_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 748, + "flightSuffix": null, + "departure": { + "airportIata": "ATL", + "dateTime": "2026-05-01T14:05:00-04:00", + "terminal": "S" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T15:27:00-07:00", + "terminal": "1" + }, + "durationMinutes": 262, + "equipmentIata": "76W", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 216, + "classes": { + "first": { + "seats": 18, + "mealCodes": [] + }, + "business": { + "seats": 26, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 172, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 99 + ], + "id": "DL_748_ATL_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 451, + "score": 1351, + "flights": [ + { + "flightNumber": 2971, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:43:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "MSP", + "dateTime": "2026-05-01T20:09:00-05:00", + "terminal": "1" + }, + "durationMinutes": 146, + "equipmentIata": "221", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 109, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 97, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2971_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1442, + "flightSuffix": null, + "departure": { + "airportIata": "MSP", + "dateTime": "2026-05-01T21:45:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:14:00-07:00", + "terminal": "1" + }, + "durationMinutes": 209, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "V" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 171, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1442_MSP_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 461, + "score": 1361, + "flights": [ + { + "flightNumber": 790, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-05-01T09:04:00-07:00", + "terminal": "3" + }, + "durationMinutes": 244, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_790_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1150, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-05-01T10:55:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T12:41:00-07:00", + "terminal": "3" + }, + "durationMinutes": 106, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_1150_SFO_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 466, + "score": 1366, + "flights": [ + { + "flightNumber": 691, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:55:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-05-01T14:55:00-07:00", + "terminal": "3" + }, + "durationMinutes": 240, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_691_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 751, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-05-01T16:45:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:41:00-07:00", + "terminal": "3" + }, + "durationMinutes": 116, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_751_SFO_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 369, + "score": 1369, + "flights": [ + { + "flightNumber": 1675, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:43:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T18:25:00-07:00", + "terminal": "4" + }, + "durationMinutes": 162, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1675_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2106, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T20:40:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:52:00-07:00", + "terminal": "1" + }, + "durationMinutes": 72, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2106_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 473, + "score": 1373, + "flights": [ + { + "flightNumber": 1120, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:09:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T09:39:00-05:00", + "terminal": "3" + }, + "durationMinutes": 150, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1120_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2244, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T10:55:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:02:00-07:00", + "terminal": "1" + }, + "durationMinutes": 247, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2244_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 473, + "score": 1373, + "flights": [ + { + "flightNumber": 2474, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:15:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T19:57:00-05:00", + "terminal": "3" + }, + "durationMinutes": 162, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2474_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 3323, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T20:57:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:08:00-07:00", + "terminal": "1" + }, + "durationMinutes": 251, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "D", + "F" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_3323_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 381, + "score": 1381, + "flights": [ + { + "flightNumber": 474, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T07:54:00-07:00", + "terminal": "4" + }, + "durationMinutes": 164, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_474_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2010, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T10:13:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T11:31:00-07:00", + "terminal": "1" + }, + "durationMinutes": 78, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2010_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 381, + "score": 1381, + "flights": [ + { + "flightNumber": 3227, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:54:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T14:34:00-07:00", + "terminal": "4" + }, + "durationMinutes": 160, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_3227_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1977, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T17:02:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:15:00-07:00", + "terminal": "1" + }, + "durationMinutes": 73, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1977_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 381, + "score": 1381, + "flights": [ + { + "flightNumber": 3272, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T11:24:00-07:00", + "terminal": "4" + }, + "durationMinutes": 164, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_3272_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2242, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T13:48:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T15:01:00-07:00", + "terminal": "1" + }, + "durationMinutes": 73, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2242_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 482, + "score": 1382, + "flights": [ + { + "flightNumber": 1211, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:26:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T14:55:00-05:00", + "terminal": "1" + }, + "durationMinutes": 149, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 150, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 138, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1211_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1875, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T16:15:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:28:00-07:00", + "terminal": "3" + }, + "durationMinutes": 253, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1875_ORD_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 483, + "score": 1383, + "flights": [ + { + "flightNumber": 1695, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T09:32:00-05:00", + "terminal": "1" + }, + "durationMinutes": 152, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1695_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1862, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T10:52:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:03:00-07:00", + "terminal": "3" + }, + "durationMinutes": 251, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1862_ORD_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 485, + "score": 1385, + "flights": [ + { + "flightNumber": 32, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ATL", + "dateTime": "2026-05-01T19:30:00-04:00", + "terminal": "S" + }, + "durationMinutes": 130, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 171, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_32_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 659, + "flightSuffix": null, + "departure": { + "airportIata": "ATL", + "dateTime": "2026-05-01T20:59:00-04:00", + "terminal": "S" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:25:00-07:00", + "terminal": "1" + }, + "durationMinutes": 266, + "equipmentIata": "757", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 199, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 179, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_659_ATL_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 485, + "score": 1385, + "flights": [ + { + "flightNumber": 4280, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:01:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "CVG", + "dateTime": "2026-05-01T19:23:00-04:00", + "terminal": null + }, + "durationMinutes": 142, + "equipmentIata": "32N", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 186, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 186, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_4280_DFW_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 3521, + "flightSuffix": null, + "departure": { + "airportIata": "CVG", + "dateTime": "2026-05-01T20:38:00-04:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:06:00-07:00", + "terminal": "3" + }, + "durationMinutes": 268, + "equipmentIata": "32N", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 186, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 186, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "F9_3521_CVG_2026_05_01", + "carrierIata": "F9", + "carrierIcao": "FFT", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 499, + "score": 1399, + "flights": [ + { + "flightNumber": 803, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:27:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SEA", + "dateTime": "2026-05-01T18:50:00-07:00", + "terminal": null + }, + "durationMinutes": 263, + "equipmentIata": "221", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 109, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 97, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_803_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2949, + "flightSuffix": null, + "departure": { + "airportIata": "SEA", + "dateTime": "2026-05-01T20:10:00-07:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 156, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 180, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 160, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2949_SEA_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 352, + "score": 1402, + "flights": [ + { + "flightNumber": 2810, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T19:45:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SLC", + "dateTime": "2026-05-01T21:44:00-06:00", + "terminal": null + }, + "durationMinutes": 179, + "equipmentIata": "223", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 130, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 118, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2810_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1662, + "flightSuffix": null, + "departure": { + "airportIata": "SLC", + "dateTime": "2026-05-01T23:11:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:37:00-07:00", + "terminal": "1" + }, + "durationMinutes": 86, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 180, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 160, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1662_SLC_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 404, + "score": 1404, + "flights": [ + { + "flightNumber": 948, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:15:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAX", + "dateTime": "2026-05-01T17:39:00-07:00", + "terminal": "3" + }, + "durationMinutes": 204, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 120, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_948_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1515, + "flightSuffix": null, + "departure": { + "airportIata": "LAX", + "dateTime": "2026-05-01T19:50:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T20:59:00-07:00", + "terminal": "1" + }, + "durationMinutes": 69, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 180, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 160, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1515_LAX_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 506, + "score": 1406, + "flights": [ + { + "flightNumber": 466, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:33:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T20:05:00-05:00", + "terminal": "1" + }, + "durationMinutes": 152, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 150, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 138, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_466_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 249, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T21:47:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:59:00-07:00", + "terminal": "3" + }, + "durationMinutes": 252, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_249_ORD_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 510, + "score": 1410, + "flights": [ + { + "flightNumber": 414, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:26:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ATL", + "dateTime": "2026-05-01T16:36:00-04:00", + "terminal": "S" + }, + "durationMinutes": 130, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 157, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 141, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_414_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 919, + "flightSuffix": null, + "departure": { + "airportIata": "ATL", + "dateTime": "2026-05-01T18:35:00-04:00", + "terminal": "S" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T19:56:00-07:00", + "terminal": "1" + }, + "durationMinutes": 261, + "equipmentIata": "764", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 238, + "classes": { + "first": { + "seats": 20, + "mealCodes": [] + }, + "business": { + "seats": 34, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 184, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 3, + 15, + 18, + 20, + 22, + 27, + 99 + ], + "id": "DL_919_ATL_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 516, + "score": 1416, + "flights": [ + { + "flightNumber": 893, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:05:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ATL", + "dateTime": "2026-05-01T10:20:00-04:00", + "terminal": "S" + }, + "durationMinutes": 135, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 171, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_893_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 549, + "flightSuffix": null, + "departure": { + "airportIata": "ATL", + "dateTime": "2026-05-01T12:19:00-04:00", + "terminal": "S" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:41:00-07:00", + "terminal": "1" + }, + "durationMinutes": 262, + "equipmentIata": "757", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 199, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 179, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_549_ATL_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 522, + "score": 1422, + "flights": [ + { + "flightNumber": 1559, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:08:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T17:44:00-05:00", + "terminal": "3" + }, + "durationMinutes": 156, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1559_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 336, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T19:40:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:50:00-07:00", + "terminal": "1" + }, + "durationMinutes": 250, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "D", + "F" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_336_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 422, + "score": 1422, + "flights": [ + { + "flightNumber": 1483, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T17:03:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T18:25:00-06:00", + "terminal": null + }, + "durationMinutes": 142, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1483_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 624, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T20:57:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:05:00-07:00", + "terminal": "3" + }, + "durationMinutes": 128, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_624_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 524, + "score": 1424, + "flights": [ + { + "flightNumber": 804, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T06:30:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SEA", + "dateTime": "2026-05-01T08:54:00-07:00", + "terminal": null + }, + "durationMinutes": 264, + "equipmentIata": "221", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 109, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 97, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_804_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2905, + "flightSuffix": null, + "departure": { + "airportIata": "SEA", + "dateTime": "2026-05-01T10:45:00-07:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:14:00-07:00", + "terminal": "1" + }, + "durationMinutes": 149, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 160, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 144, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2905_SEA_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 436, + "score": 1436, + "flights": [ + { + "flightNumber": 1155, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:36:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T17:18:00-07:00", + "terminal": "4" + }, + "durationMinutes": 162, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1155_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2106, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T20:40:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:52:00-07:00", + "terminal": "1" + }, + "durationMinutes": 72, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2106_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 544, + "score": 1444, + "flights": [ + { + "flightNumber": 365, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SEA", + "dateTime": "2026-05-01T11:27:00-07:00", + "terminal": null + }, + "durationMinutes": 267, + "equipmentIata": "73J", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "B" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_365_DFW_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 658, + "flightSuffix": null, + "departure": { + "airportIata": "SEA", + "dateTime": "2026-05-01T13:21:00-07:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T16:04:00-07:00", + "terminal": "3" + }, + "durationMinutes": 163, + "equipmentIata": "73H", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 161, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "O" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 145, + "mealCodes": [ + "O" + ] + } + }, + "inFlightService": [ + 18 + ], + "id": "AS_658_SEA_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 444, + "score": 1444, + "flights": [ + { + "flightNumber": 248, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:43:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T14:55:00-06:00", + "terminal": null + }, + "durationMinutes": 132, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_248_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2338, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T17:59:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T19:07:00-07:00", + "terminal": "3" + }, + "durationMinutes": 128, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_2338_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 446, + "score": 1446, + "flights": [ + { + "flightNumber": 1764, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:35:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T10:19:00-07:00", + "terminal": "4" + }, + "durationMinutes": 164, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_1764_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2242, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T13:48:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T15:01:00-07:00", + "terminal": "1" + }, + "durationMinutes": 73, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2242_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 348, + "score": 1448, + "flights": [ + { + "flightNumber": 2260, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T05:15:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T06:28:00-05:00", + "terminal": "C" + }, + "durationMinutes": 73, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_2260_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1264, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T07:35:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T09:03:00-07:00", + "terminal": "3" + }, + "durationMinutes": 208, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1264_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 454, + "score": 1454, + "flights": [ + { + "flightNumber": 1996, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T08:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAX", + "dateTime": "2026-05-01T10:10:00-07:00", + "terminal": "0" + }, + "durationMinutes": 210, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "B", + "F" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1996_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2256, + "flightSuffix": null, + "departure": { + "airportIata": "LAX", + "dateTime": "2026-05-01T12:55:00-07:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T14:14:00-07:00", + "terminal": "1" + }, + "durationMinutes": 79, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2256_LAX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 457, + "score": 1457, + "flights": [ + { + "flightNumber": 528, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T15:38:00-05:00", + "terminal": "C" + }, + "durationMinutes": 78, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_528_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2406, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T18:25:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T19:57:00-07:00", + "terminal": "3" + }, + "durationMinutes": 212, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_2406_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 457, + "score": 1457, + "flights": [ + { + "flightNumber": 1564, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:25:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T18:57:00-05:00", + "terminal": "1" + }, + "durationMinutes": 152, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1564_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 777, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T19:50:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:02:00-07:00", + "terminal": "3" + }, + "durationMinutes": 252, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_777_ORD_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 459, + "score": 1459, + "flights": [ + { + "flightNumber": 731, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:30:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T08:50:00-06:00", + "terminal": null + }, + "durationMinutes": 140, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_731_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 526, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T12:00:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:09:00-07:00", + "terminal": "3" + }, + "durationMinutes": 129, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 200, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 180, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_526_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 466, + "score": 1466, + "flights": [ + { + "flightNumber": 2798, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SLC", + "dateTime": "2026-05-01T14:10:00-06:00", + "terminal": null + }, + "durationMinutes": 170, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 120, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2798_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1690, + "flightSuffix": null, + "departure": { + "airportIata": "SLC", + "dateTime": "2026-05-01T17:40:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:06:00-07:00", + "terminal": "1" + }, + "durationMinutes": 86, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 120, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1690_SLC_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 469, + "score": 1469, + "flights": [ + { + "flightNumber": 439, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "LAX", + "dateTime": "2026-05-01T08:50:00-07:00", + "terminal": "3" + }, + "durationMinutes": 210, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 132, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 120, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_439_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1696, + "flightSuffix": null, + "departure": { + "airportIata": "LAX", + "dateTime": "2026-05-01T11:59:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:09:00-07:00", + "terminal": "1" + }, + "durationMinutes": 70, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 180, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 160, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1696_LAX_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 471, + "score": 1471, + "flights": [ + { + "flightNumber": 1341, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:24:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-05-01T13:05:00-07:00", + "terminal": "4" + }, + "durationMinutes": 161, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_1341_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1977, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-05-01T17:02:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:15:00-07:00", + "terminal": "1" + }, + "durationMinutes": 73, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1977_PHX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 483, + "score": 1483, + "flights": [ + { + "flightNumber": 2049, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:15:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-05-01T12:26:00-06:00", + "terminal": null + }, + "durationMinutes": 131, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_2049_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 716, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-05-01T16:10:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T17:18:00-07:00", + "terminal": "3" + }, + "durationMinutes": 128, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_716_DEN_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 433, + "score": 1483, + "flights": [ + { + "flightNumber": 2330, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T19:46:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-05-01T21:48:00-07:00", + "terminal": "3" + }, + "durationMinutes": 242, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_2330_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2400, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-05-01T23:08:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-02T00:59:00-07:00", + "terminal": "3" + }, + "durationMinutes": 111, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_2400_SFO_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 496, + "score": 1496, + "flights": [ + { + "flightNumber": 2972, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:35:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "MSP", + "dateTime": "2026-05-01T13:04:00-05:00", + "terminal": "1" + }, + "durationMinutes": 149, + "equipmentIata": "223", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 130, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 118, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2972_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2249, + "flightSuffix": null, + "departure": { + "airportIata": "MSP", + "dateTime": "2026-05-01T15:20:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T16:51:00-07:00", + "terminal": "1" + }, + "durationMinutes": 211, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 171, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2249_MSP_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 507, + "score": 1507, + "flights": [ + { + "flightNumber": 399, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:30:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T16:57:00-05:00", + "terminal": "C" + }, + "durationMinutes": 87, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_399_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1360, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T20:25:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:57:00-07:00", + "terminal": "3" + }, + "durationMinutes": 212, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1360_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 509, + "score": 1509, + "flights": [ + { + "flightNumber": 539, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:55:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T13:13:00-05:00", + "terminal": "C" + }, + "durationMinutes": 78, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_539_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1346, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T16:55:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:24:00-07:00", + "terminal": "3" + }, + "durationMinutes": 209, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1346_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 510, + "score": 1510, + "flights": [ + { + "flightNumber": 1586, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T09:54:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T11:15:00-05:00", + "terminal": "C" + }, + "durationMinutes": 81, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_1586_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1971, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T14:55:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T16:24:00-07:00", + "terminal": "3" + }, + "durationMinutes": 209, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1971_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 510, + "score": 1510, + "flights": [ + { + "flightNumber": 2670, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:10:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-05-01T08:35:00-05:00", + "terminal": "C" + }, + "durationMinutes": 85, + "equipmentIata": "73G", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "N" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_2670_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1524, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-05-01T12:11:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:40:00-07:00", + "terminal": "3" + }, + "durationMinutes": 209, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1524_IAH_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 464, + "score": 1514, + "flights": [ + { + "flightNumber": 2881, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T18:40:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T21:13:00-05:00", + "terminal": "3" + }, + "durationMinutes": 153, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_2881_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1845, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T22:20:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-02T00:24:00-07:00", + "terminal": "1" + }, + "durationMinutes": 244, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "R" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "R" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1845_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 520, + "score": 1520, + "flights": [ + { + "flightNumber": 1203, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:18:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAX", + "dateTime": "2026-05-01T15:40:00-07:00", + "terminal": "0" + }, + "durationMinutes": 202, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1203_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2785, + "flightSuffix": null, + "departure": { + "airportIata": "LAX", + "dateTime": "2026-05-01T19:40:00-07:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T20:58:00-07:00", + "terminal": "1" + }, + "durationMinutes": 78, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2785_LAX_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 527, + "score": 1527, + "flights": [ + { + "flightNumber": 1656, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T06:15:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T08:50:00-05:00", + "terminal": "3" + }, + "durationMinutes": 155, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1656_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2244, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T10:55:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:02:00-07:00", + "terminal": "1" + }, + "durationMinutes": 247, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2244_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 530, + "score": 1530, + "flights": [ + { + "flightNumber": 961, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T11:37:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ATL", + "dateTime": "2026-05-01T14:41:00-04:00", + "terminal": "S" + }, + "durationMinutes": 124, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 171, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_961_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 711, + "flightSuffix": null, + "departure": { + "airportIata": "ATL", + "dateTime": "2026-05-01T16:59:00-04:00", + "terminal": "S" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T18:27:00-07:00", + "terminal": "1" + }, + "durationMinutes": 268, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 171, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_711_ATL_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 534, + "score": 1534, + "flights": [ + { + "flightNumber": 1276, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T06:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "MSP", + "dateTime": "2026-05-01T08:20:00-05:00", + "terminal": "1" + }, + "durationMinutes": 140, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 171, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_1276_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2238, + "flightSuffix": null, + "departure": { + "airportIata": "MSP", + "dateTime": "2026-05-01T11:26:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T12:54:00-07:00", + "terminal": "1" + }, + "durationMinutes": 208, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 180, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 160, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 12, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_2238_MSP_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 535, + "score": 1535, + "flights": [ + { + "flightNumber": 32, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ATL", + "dateTime": "2026-05-01T19:30:00-04:00", + "terminal": "S" + }, + "durationMinutes": 130, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 171, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_32_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 793, + "flightSuffix": null, + "departure": { + "airportIata": "ATL", + "dateTime": "2026-05-01T21:55:00-04:00", + "terminal": "S" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:15:00-07:00", + "terminal": "1" + }, + "durationMinutes": 260, + "equipmentIata": "757", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 199, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "V" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "V" + ] + }, + "economy": { + "seats": 179, + "mealCodes": [ + "V" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_793_ATL_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 539, + "score": 1539, + "flights": [ + { + "flightNumber": 1121, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T12:49:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T15:18:00-05:00", + "terminal": "3" + }, + "durationMinutes": 149, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1121_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1151, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T17:39:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T19:48:00-07:00", + "terminal": "1" + }, + "durationMinutes": 249, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "D", + "F" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1151_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 557, + "score": 1557, + "flights": [ + { + "flightNumber": 415, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:36:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SEA", + "dateTime": "2026-05-01T18:04:00-07:00", + "terminal": null + }, + "durationMinutes": 268, + "equipmentIata": "73J", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "L" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_415_DFW_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 478, + "flightSuffix": null, + "departure": { + "airportIata": "SEA", + "dateTime": "2026-05-01T20:10:00-07:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:53:00-07:00", + "terminal": "3" + }, + "durationMinutes": 163, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "O" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "O" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_478_SEA_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 565, + "score": 1565, + "flights": [ + { + "flightNumber": 790, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T07:00:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-05-01T09:04:00-07:00", + "terminal": "3" + }, + "durationMinutes": 244, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_790_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1960, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-05-01T12:35:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T14:25:00-07:00", + "terminal": "3" + }, + "durationMinutes": 110, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 166, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 16, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 150, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_1960_SFO_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 571, + "score": 1571, + "flights": [ + { + "flightNumber": 543, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T06:20:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "SEA", + "dateTime": "2026-05-01T08:52:00-07:00", + "terminal": null + }, + "durationMinutes": 272, + "equipmentIata": "73J", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "B" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "B" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_543_DFW_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 738, + "flightSuffix": null, + "departure": { + "airportIata": "SEA", + "dateTime": "2026-05-01T11:07:00-07:00", + "terminal": null + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T13:51:00-07:00", + "terminal": "3" + }, + "durationMinutes": 164, + "equipmentIata": "73J", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 178, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "O" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 162, + "mealCodes": [ + "O" + ] + } + }, + "inFlightService": [ + 3, + 12, + 18 + ], + "id": "AS_738_SEA_2026_05_01", + "carrierIata": "AS", + "carrierIcao": "ASA", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 571, + "score": 1571, + "flights": [ + { + "flightNumber": 2160, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T14:31:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T17:00:00-05:00", + "terminal": "1" + }, + "durationMinutes": 149, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_2160_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 777, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T19:50:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T22:02:00-07:00", + "terminal": "3" + }, + "durationMinutes": 252, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_777_ORD_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 574, + "score": 1574, + "flights": [ + { + "flightNumber": 1564, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:25:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T18:57:00-05:00", + "terminal": "1" + }, + "durationMinutes": 152, + "equipmentIata": "319", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 126, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 114, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1564_DFW_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 249, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T21:47:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:59:00-07:00", + "terminal": "3" + }, + "durationMinutes": 252, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_249_ORD_2026_05_01", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 581, + "score": 1581, + "flights": [ + { + "flightNumber": 414, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T13:26:00-05:00", + "terminal": "E" + }, + "arrival": { + "airportIata": "ATL", + "dateTime": "2026-05-01T16:36:00-04:00", + "terminal": "S" + }, + "durationMinutes": 130, + "equipmentIata": "320", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 157, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 141, + "mealCodes": [] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_414_DFW_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 825, + "flightSuffix": null, + "departure": { + "airportIata": "ATL", + "dateTime": "2026-05-01T19:40:00-04:00", + "terminal": "S" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T21:07:00-07:00", + "terminal": "1" + }, + "durationMinutes": 267, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 191, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 171, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [ + 3, + 5, + 15, + 18, + 22, + 27, + 99 + ], + "id": "DL_825_ATL_2026_05_01", + "carrierIata": "DL", + "carrierIcao": "DAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 586, + "score": 1586, + "flights": [ + { + "flightNumber": 2492, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T10:05:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T12:35:00-05:00", + "terminal": "3" + }, + "durationMinutes": 150, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_2492_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1393, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T15:43:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T17:51:00-07:00", + "terminal": "1" + }, + "durationMinutes": 248, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_1393_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 600, + "score": 1600, + "flights": [ + { + "flightNumber": 1559, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T15:08:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "ORD", + "dateTime": "2026-05-01T17:44:00-05:00", + "terminal": "3" + }, + "durationMinutes": 156, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_1559_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 3323, + "flightSuffix": null, + "departure": { + "airportIata": "ORD", + "dateTime": "2026-05-01T20:57:00-05:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T23:08:00-07:00", + "terminal": "1" + }, + "durationMinutes": 251, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [ + "D", + "F" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_3323_ORD_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + } + ], + "nextCursor": "CGQSFwoRMjAyNi0wNS0wMV9kaXJlY3QQERgREhYKEDIwMjYtMDUtMDFfMXN0b3AQUxhkGGQ=" + } +} \ No newline at end of file diff --git a/api_docs/route_explorer_captures/route_LBB_KOA_2stop.json b/api_docs/route_explorer_captures/route_LBB_KOA_2stop.json new file mode 100644 index 0000000..0e3cae7 --- /dev/null +++ b/api_docs/route_explorer_captures/route_LBB_KOA_2stop.json @@ -0,0 +1,1820 @@ +{ + "json": { + "connections": [ + { + "durationMinutes": 740, + "score": 2840, + "flights": [ + { + "flightNumber": 1274, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T05:55:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "DAL", + "dateTime": "2026-04-28T07:10:00-05:00", + "terminal": "1" + }, + "durationMinutes": 75, + "equipmentIata": "73H", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 175, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 175, + "mealCodes": [] + } + }, + "inFlightService": [], + "id": "WN_1274_LBB_2026_04_28", + "carrierIata": "WN", + "carrierIcao": "SWA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1542, + "flightSuffix": null, + "departure": { + "airportIata": "DAL", + "dateTime": "2026-04-28T08:00:00-05:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-28T08:55:00-07:00", + "terminal": "1" + }, + "durationMinutes": 175, + "equipmentIata": "73H", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 175, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 175, + "mealCodes": [] + } + }, + "inFlightService": [], + "id": "WN_1542_DAL_2026_04_28", + "carrierIata": "WN", + "carrierIcao": "SWA", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 3133, + "flightSuffix": null, + "departure": { + "airportIata": "LAS", + "dateTime": "2026-04-28T10:00:00-07:00", + "terminal": "1" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T13:15:00-10:00", + "terminal": null + }, + "durationMinutes": 375, + "equipmentIata": "7M8", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 175, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 175, + "mealCodes": [] + } + }, + "inFlightService": [], + "id": "WN_3133_LAS_2026_04_28", + "carrierIata": "WN", + "carrierIcao": "SWA", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 750, + "score": 1750, + "flights": [ + { + "flightNumber": 5791, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T08:00:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-04-28T08:49:00-06:00", + "terminal": null + }, + "durationMinutes": 109, + "equipmentIata": "CR5", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 50, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 10, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 40, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_5791_LBB_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1758, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-04-28T12:15:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T15:30:00-10:00", + "terminal": null + }, + "durationMinutes": 435, + "equipmentIata": "777", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 364, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 28, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "economy": { + "seats": 336, + "mealCodes": [ + "M" + ] + } + }, + "inFlightService": [], + "id": "UA_1758_DEN_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 795, + "score": 2095, + "flights": [ + { + "flightNumber": 4050, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T06:11:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-04-28T06:16:00-07:00", + "terminal": "4" + }, + "durationMinutes": 125, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_4050_LBB_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 663, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-04-28T10:58:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T14:26:00-10:00", + "terminal": null + }, + "durationMinutes": 388, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_663_PHX_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 866, + "score": 3066, + "flights": [ + { + "flightNumber": 3535, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T05:00:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "DFW", + "dateTime": "2026-04-28T06:14:00-05:00", + "terminal": "0" + }, + "durationMinutes": 74, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3535_LBB_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 474, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T07:10:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-04-28T07:54:00-07:00", + "terminal": "4" + }, + "durationMinutes": 164, + "equipmentIata": "321", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 190, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 170, + "mealCodes": [] + } + }, + "inFlightService": [ + 4, + 12, + 18, + 22, + 23, + 26, + 27, + 28, + 31 + ], + "id": "AA_474_DFW_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 663, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-04-28T10:58:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T14:26:00-10:00", + "terminal": null + }, + "durationMinutes": 388, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_663_PHX_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 866, + "score": 2966, + "flights": [ + { + "flightNumber": 3535, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T05:00:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "DFW", + "dateTime": "2026-04-28T06:14:00-05:00", + "terminal": "0" + }, + "durationMinutes": 74, + "equipmentIata": "E75", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 76, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 12, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 64, + "mealCodes": [] + } + }, + "inFlightService": [ + 18 + ], + "id": "AA_3535_LBB_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 520, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T08:35:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "PHX", + "dateTime": "2026-04-28T09:25:00-07:00", + "terminal": "4" + }, + "durationMinutes": 170, + "equipmentIata": "738", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 172, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 16, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 156, + "mealCodes": [] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 26 + ], + "id": "AA_520_DFW_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 663, + "flightSuffix": null, + "departure": { + "airportIata": "PHX", + "dateTime": "2026-04-28T10:58:00-07:00", + "terminal": "4" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T14:26:00-10:00", + "terminal": null + }, + "durationMinutes": 388, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "L" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "F", + "L" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_663_PHX_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 922, + "score": 2822, + "flights": [ + { + "flightNumber": 6110, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T09:20:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-04-28T11:03:00-05:00", + "terminal": "B" + }, + "durationMinutes": 103, + "equipmentIata": "E7W", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 70, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 12, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 58, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_6110_LBB_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2611, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-04-28T12:30:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-04-28T14:53:00-07:00", + "terminal": "3" + }, + "durationMinutes": 263, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_2611_IAH_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1723, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-04-28T16:55:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T19:42:00-10:00", + "terminal": null + }, + "durationMinutes": 347, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1723_SFO_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 1002, + "score": 3002, + "flights": [ + { + "flightNumber": 5791, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T08:00:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-04-28T08:49:00-06:00", + "terminal": null + }, + "durationMinutes": 109, + "equipmentIata": "CR5", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 50, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 10, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 40, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_5791_LBB_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1561, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-04-28T11:21:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-04-28T13:15:00-07:00", + "terminal": "3" + }, + "durationMinutes": 174, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 200, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 180, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1561_DEN_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1723, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-04-28T16:55:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T19:42:00-10:00", + "terminal": null + }, + "durationMinutes": 347, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1723_SFO_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 1002, + "score": 3202, + "flights": [ + { + "flightNumber": 5791, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T08:00:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "DEN", + "dateTime": "2026-04-28T08:49:00-06:00", + "terminal": null + }, + "durationMinutes": 109, + "equipmentIata": "CR5", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 50, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "S" + ] + }, + "business": { + "seats": 10, + "mealCodes": [ + "S" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 40, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_5791_LBB_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1812, + "flightSuffix": null, + "departure": { + "airportIata": "DEN", + "dateTime": "2026-04-28T13:40:00-06:00", + "terminal": null + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-04-28T15:32:00-07:00", + "terminal": "3" + }, + "durationMinutes": 172, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 200, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "G" + ] + }, + "economy": { + "seats": 180, + "mealCodes": [ + "G" + ] + } + }, + "inFlightService": [], + "id": "UA_1812_DEN_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1723, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-04-28T16:55:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T19:42:00-10:00", + "terminal": null + }, + "durationMinutes": 347, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1723_SFO_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 1062, + "score": 3262, + "flights": [ + { + "flightNumber": 4863, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T07:00:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-04-28T08:50:00-05:00", + "terminal": "B" + }, + "durationMinutes": 110, + "equipmentIata": "ERJ", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 50, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 50, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_4863_LBB_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2358, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-04-28T10:00:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-04-28T12:18:00-07:00", + "terminal": "3" + }, + "durationMinutes": 258, + "equipmentIata": "777", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 364, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 28, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 336, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_2358_IAH_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1723, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-04-28T16:55:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T19:42:00-10:00", + "terminal": null + }, + "durationMinutes": 347, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1723_SFO_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + }, + { + "durationMinutes": 1062, + "score": 3062, + "flights": [ + { + "flightNumber": 4863, + "flightSuffix": null, + "departure": { + "airportIata": "LBB", + "dateTime": "2026-04-28T07:00:00-05:00", + "terminal": null + }, + "arrival": { + "airportIata": "IAH", + "dateTime": "2026-04-28T08:50:00-05:00", + "terminal": "B" + }, + "durationMinutes": 110, + "equipmentIata": "ERJ", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 50, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 0, + "mealCodes": [] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "N" + ] + }, + "economy": { + "seats": 50, + "mealCodes": [ + "N" + ] + } + }, + "inFlightService": [], + "id": "UA_4863_LBB_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2611, + "flightSuffix": null, + "departure": { + "airportIata": "IAH", + "dateTime": "2026-04-28T12:30:00-05:00", + "terminal": "C" + }, + "arrival": { + "airportIata": "SFO", + "dateTime": "2026-04-28T14:53:00-07:00", + "terminal": "3" + }, + "durationMinutes": 263, + "equipmentIata": "739", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_2611_IAH_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 1723, + "flightSuffix": null, + "departure": { + "airportIata": "SFO", + "dateTime": "2026-04-28T16:55:00-07:00", + "terminal": "3" + }, + "arrival": { + "airportIata": "KOA", + "dateTime": "2026-04-28T19:42:00-10:00", + "terminal": null + }, + "durationMinutes": 347, + "equipmentIata": "7M9", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 179, + "classes": { + "first": { + "seats": 0, + "mealCodes": [ + "M" + ] + }, + "business": { + "seats": 20, + "mealCodes": [ + "M" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [ + "F" + ] + }, + "economy": { + "seats": 159, + "mealCodes": [ + "F" + ] + } + }, + "inFlightService": [], + "id": "UA_1723_SFO_2026_04_28", + "carrierIata": "UA", + "carrierIcao": "UAL", + "isWetlease": false, + "codeshares": [] + } + ] + } + ], + "appendix": { + "airports": [ + { + "iataCode": "LBB", + "name": "Lubbock Preston Smith International Apt", + "cityCode": "LBB", + "countryCode": "US", + "stateCode": "TX", + "latitude": 33.663611, + "longitude": -101.822778, + "timezone": "America/Chicago", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KLBB", + "cityName": "Lubbock", + "countryName": "United States" + }, + { + "iataCode": "DAL", + "name": "Dallas Love Field", + "cityCode": "DFW", + "countryCode": "US", + "stateCode": "TX", + "latitude": 32.847222, + "longitude": -96.851667, + "timezone": "America/Chicago", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KDAL", + "cityName": "Dallas", + "countryName": "United States" + }, + { + "iataCode": "LAS", + "name": "Las Vegas Harry Reid Intl", + "cityCode": "LAS", + "countryCode": "US", + "stateCode": "NV", + "latitude": 36.08, + "longitude": -115.152222, + "timezone": "America/Los_Angeles", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KLAS", + "cityName": "Las Vegas", + "countryName": "United States" + }, + { + "iataCode": "KOA", + "name": "Kona", + "cityCode": "KOA", + "countryCode": "US", + "stateCode": "HI", + "latitude": 19.738889, + "longitude": -156.045556, + "timezone": "Pacific/Honolulu", + "locationType": "L", + "locationCategory": "A", + "icaoCode": "PHKO", + "cityName": "Kona", + "countryName": "United States" + }, + { + "iataCode": "DEN", + "name": "Denver Intl Apt", + "cityCode": "DEN", + "countryCode": "US", + "stateCode": "CO", + "latitude": 39.861667, + "longitude": -104.673056, + "timezone": "America/Denver", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KDEN", + "cityName": "Denver", + "countryName": "United States" + }, + { + "iataCode": "PHX", + "name": "Phoenix Sky Harbor Intl Apt", + "cityCode": "PHX", + "countryCode": "US", + "stateCode": "AZ", + "latitude": 33.434167, + "longitude": -112.011667, + "timezone": "America/Phoenix", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KPHX", + "cityName": "Phoenix", + "countryName": "United States" + }, + { + "iataCode": "DFW", + "name": "Dallas Dallas/Fort Worth Intl Apt", + "cityCode": "DFW", + "countryCode": "US", + "stateCode": "TX", + "latitude": 32.896944, + "longitude": -97.038056, + "timezone": "America/Chicago", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KDFW", + "cityName": "Dallas", + "countryName": "United States" + }, + { + "iataCode": "IAH", + "name": "Houston George Bush Intercont.", + "cityCode": "HOU", + "countryCode": "US", + "stateCode": "TX", + "latitude": 29.984444, + "longitude": -95.341389, + "timezone": "America/Chicago", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KIAH", + "cityName": "Houston", + "countryName": "United States" + }, + { + "iataCode": "SFO", + "name": "San Francisco", + "cityCode": "SFO", + "countryCode": "US", + "stateCode": "CA", + "latitude": 37.618889, + "longitude": -122.391667, + "timezone": "America/Los_Angeles", + "locationType": "L", + "locationCategory": "A", + "icaoCode": "KSFO", + "cityName": "San Francisco", + "countryName": "United States" + } + ], + "airlines": [ + { + "iataCode": "WN", + "icaoCode": "SWA", + "name": "Southwest Airlines", + "countryCode": "US", + "alliance": null, + "isLowCost": true, + "isControlledDuplicate": false, + "websiteUrl": "https://www.southwest.com", + "webCheckinUrl": "https://www.southwest.com/air/check-in/?clk=HP-CHKIN", + "mobileCheckinUrl": "https://mobile.southwest.com/check-in", + "baggageUrl": "https://www.southwest.com/html/customer-service/baggage/index.html", + "foundedYear": 1967, + "callsign": "SOUTHWEST" + }, + { + "iataCode": "UA", + "icaoCode": "UAL", + "name": "United Airlines", + "countryCode": "US", + "alliance": "star-alliance", + "isLowCost": false, + "isControlledDuplicate": false, + "websiteUrl": "https://www.united.com/en/us/", + "webCheckinUrl": "https://www.united.com/travel/checkin/start.aspx", + "mobileCheckinUrl": null, + "baggageUrl": "https://www.united.com/en/us/fly/baggage.html", + "foundedYear": 1926, + "callsign": "UNITED" + }, + { + "iataCode": "AA", + "icaoCode": "AAL", + "name": "American Airlines", + "countryCode": "US", + "alliance": "oneworld", + "isLowCost": false, + "isControlledDuplicate": false, + "websiteUrl": "https://www.aa.com", + "webCheckinUrl": "https://www.aa.com/reservation/flightCheckInViewReservationsAccess.do", + "mobileCheckinUrl": null, + "baggageUrl": "https://www.aa.com/i18n/travel-info/baggage/baggage.jsp?anchorEvent=false&from=Nav", + "foundedYear": 1926, + "callsign": "AMERICAN" + } + ], + "equipment": [ + { + "iataCode": "73H", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737-800 (Winglets) Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "7M8", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737 MAX 8 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "CR5", + "icaoCode": null, + "generalCode": "CRJ", + "name": "Canadair (Bombardier) Regional Jet 550", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "777", + "icaoCode": null, + "generalCode": "777", + "name": "Boeing 777 Passenger", + "equipmentType": "J", + "bodyType": "W", + "isSurfaceTransport": false + }, + { + "iataCode": "E75", + "icaoCode": null, + "generalCode": "EMJ", + "name": "Embraer 175", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "32Q", + "icaoCode": null, + "generalCode": "32S", + "name": "Airbus A321neo/LR/XLR Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "321", + "icaoCode": null, + "generalCode": "32S", + "name": "Airbus A321 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "738", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737-800 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "E7W", + "icaoCode": null, + "generalCode": "EMJ", + "name": "Embraer 175 (Enhanced Winglets)", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "739", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737-900 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "7M9", + "icaoCode": null, + "generalCode": "737", + "name": "Boeing 737 MAX 9 Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + }, + { + "iataCode": "ERJ", + "icaoCode": null, + "generalCode": "ERJ", + "name": "Embraer RJ135 / RJ140 / RJ145", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + } + ] + } + } +} \ No newline at end of file diff --git a/api_docs/route_explorer_captures/schedule_AA2178.json b/api_docs/route_explorer_captures/schedule_AA2178.json new file mode 100644 index 0000000..a7174f7 --- /dev/null +++ b/api_docs/route_explorer_captures/schedule_AA2178.json @@ -0,0 +1,556 @@ +{ + "json": { + "flights": [ + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-24T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-24T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_04_24", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-25T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-25T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_04_25", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-26T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-26T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_04_26", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-27T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-27T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_04_27", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-28T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-28T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_04_28", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-29T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-29T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_04_29", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-04-30T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-04-30T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_04_30", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + }, + { + "flightNumber": 2178, + "flightSuffix": null, + "departure": { + "airportIata": "DFW", + "dateTime": "2026-05-01T16:45:00-05:00", + "terminal": "0" + }, + "arrival": { + "airportIata": "LAS", + "dateTime": "2026-05-01T17:46:00-07:00", + "terminal": "1" + }, + "durationMinutes": 181, + "equipmentIata": "32Q", + "serviceType": "J", + "isCodeshare": false, + "stops": 0, + "stopCodes": null, + "totalSeats": 196, + "classes": { + "first": { + "seats": 0, + "mealCodes": [] + }, + "business": { + "seats": 20, + "mealCodes": [ + "D" + ] + }, + "premiumEconomy": { + "seats": 0, + "mealCodes": [] + }, + "economy": { + "seats": 176, + "mealCodes": [ + "R", + "D" + ] + } + }, + "inFlightService": [ + 12, + 18, + 22, + 23, + 24, + 26, + 27, + 28, + 29, + 31 + ], + "id": "AA_2178_DFW_2026_05_01", + "carrierIata": "AA", + "carrierIcao": "AAL", + "isWetlease": false, + "codeshares": [] + } + ], + "appendix": { + "airports": [ + { + "iataCode": "DFW", + "name": "Dallas Dallas/Fort Worth Intl Apt", + "cityCode": "DFW", + "countryCode": "US", + "stateCode": "TX", + "latitude": 32.896944, + "longitude": -97.038056, + "timezone": "America/Chicago", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KDFW", + "cityName": "Dallas", + "countryName": "United States" + }, + { + "iataCode": "LAS", + "name": "Las Vegas Harry Reid Intl", + "cityCode": "LAS", + "countryCode": "US", + "stateCode": "NV", + "latitude": 36.08, + "longitude": -115.152222, + "timezone": "America/Los_Angeles", + "locationType": "A", + "locationCategory": "A", + "icaoCode": "KLAS", + "cityName": "Las Vegas", + "countryName": "United States" + } + ], + "airlines": [ + { + "iataCode": "AA", + "icaoCode": "AAL", + "name": "American Airlines", + "countryCode": "US", + "alliance": "oneworld", + "isLowCost": false, + "isControlledDuplicate": false, + "websiteUrl": "https://www.aa.com", + "webCheckinUrl": "https://www.aa.com/reservation/flightCheckInViewReservationsAccess.do", + "mobileCheckinUrl": null, + "baggageUrl": "https://www.aa.com/i18n/travel-info/baggage/baggage.jsp?anchorEvent=false&from=Nav", + "foundedYear": 1926, + "callsign": "AMERICAN" + } + ], + "equipment": [ + { + "iataCode": "32Q", + "icaoCode": null, + "generalCode": "32S", + "name": "Airbus A321neo/LR/XLR Passenger", + "equipmentType": "J", + "bodyType": "N", + "isSurfaceTransport": false + } + ] + } + } +} \ No newline at end of file