Etihad Airways (LUA) Routes API
You need to map and monitor Etihad Airways routes for planning, analytics, and live status views—and you want to ship a production-grade integration quickly. By the end of this guide, you’ll query routes and schedules for Etihad Airways (IATA: LUA), read the fields that matter for building flight pages and dashboards, and apply practical patterns for time zones, polling, and failure handling using the FlightLabs API.
Etihad Airways at a glance
Etihad Airways (IATA: LUA) is the national airline of the United Arab Emirates. Its primary hub is Abu Dhabi International Airport. In this article, we’ll focus on extracting Etihad’s routes and schedules with FlightLabs so you can power route maps, status boards, and operational analytics.
Which FlightLabs endpoints to use for Etihad routes and schedules
FlightLabs provides multiple endpoints relevant to airline routes and their operational context. For Etihad, developers typically combine:
- Flight Schedules: filter by airline to enumerate operated routes and flight times.
- Real-time Flight Tracking: enrich schedules with actual status, positions, and delay context.
- Routes: source-oriented listing to confirm city/airport pairs served by the airline.
Official references:
- API website: https://www.goflightlabs.com
- Schedules overview: Flight Schedules
- Real-time tracking: Real-time Flight Tracking
- Routes: Routes
- Developer docs: Documentation
Quick start: pull Etihad (LUA) schedules
Schedules are the most direct way to materialize actual city/airport pairs for Etihad’s operation on a given period. FlightLabs exposes a schedules endpoint you can filter by airline IATA code.
cURL request
The following example requests schedules filtered by Etihad’s IATA code LUA. Replace YOUR_API_KEY with your key. If you’re not registered yet, sign up to obtain an API key.
curl -G "https://api.goflightlabs.com/flights-schedules" \
--data-urlencode "iataCode=LUA" \
--data-urlencode "type=airline" \
--data-urlencode "api_key=YOUR_API_KEY"
What to expect in the response:
- Each schedule includes flight_number, departure and arrival blocks, and an airline object with iata and name.
- Times are provided in ISO 8601 with Z (UTC). Convert for local displays when needed.
- Use departure.airport and arrival.airport as the core pair for a “route leg.”
JavaScript example
async function fetchEtihadSchedules() {
const params = new URLSearchParams({
iataCode: "LUA",
type: "airline",
api_key: "YOUR_API_KEY"
});
const url = `https://api.goflightlabs.com/flights-schedules?${params.toString()}`;
const res = await fetch(url, { method: "GET" });
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
const json = await res.json();
// Expect json.success and json.data.schedules per the official sample structure.
const schedules = json?.data?.schedules || [];
// Normalize core route fields
const routes = schedules.map(s => ({
airlineIata: s?.airline?.iata,
flightNumber: s?.flight_number,
depAirport: s?.departure?.airport,
depScheduledUtc: s?.departure?.scheduled, // ISO 8601, UTC
depTerminal: s?.departure?.terminal || null,
arrAirport: s?.arrival?.airport,
arrScheduledUtc: s?.arrival?.scheduled, // ISO 8601, UTC
arrTerminal: s?.arrival?.terminal || null,
aircraftType: s?.aircraft?.type || null,
registration: s?.aircraft?.registration || null
}));
// Group by airport pair to deduplicate multiple daily frequencies into one route
const byPair = new Map();
for (const r of routes) {
const key = `${r.depAirport}-${r.arrAirport}`;
if (!byPair.has(key)) {
byPair.set(key, { pair: key, examples: [] });
}
byPair.get(key).examples.push(r);
}
return {
totalSchedules: schedules.length,
uniqueRoutes: Array.from(byPair.values()).length,
exampleRoute: routes[0] || null
};
}
// Example usage:
fetchEtihadSchedules()
.then(summary => console.log(summary))
.catch(err => console.error(err));
Official sample response structure
FlightLabs schedules share the following structure (official sample shown):
{
"success": true,
"data": {
"schedules": [
{
"flight_number": "UA456",
"departure": {
"airport": "SFO",
"scheduled": "2024-03-20T08:00:00Z",
"terminal": "3"
},
"arrival": {
"airport": "ORD",
"scheduled": "2024-03-20T14:15:00Z",
"terminal": "1"
},
"aircraft": {
"type": "Boeing 787-9",
"registration": "N123UA"
},
"airline": {
"name": "United Airlines",
"iata": "UA"
}
}
]
}
}
Fields you’ll use most:
- success: request outcome flag.
- data.schedules[]: array of schedule items.
- flight_number: human-readable number for display and cross-referencing with status.
- departure.airport and arrival.airport: airport IATA codes for route legs.
- departure.scheduled and arrival.scheduled: UTC timestamps (ISO 8601) for time grids and availability checks.
- departure.terminal and arrival.terminal: useful for airport displays and MCT planning.
- aircraft.type and aircraft.registration: add context where available; not all schedules include registration.
- airline.iata: filter or validate airline code (use LUA for Etihad in this article).
Comparing endpoints for Etihad route-building
Below is an objective look at three FlightLabs capabilities you’ll often combine for Etihad route applications.
| Capability | Endpoint/Reference | Primary purpose | Key fields | Refresh pattern | Best used for |
|---|---|---|---|---|---|
| Flight Schedules | /flights-schedules?iataCode=LUA&type=airline | Enumerate flights by airline to infer operated city/airport pairs. | flight_number, departure.airport, departure.scheduled, arrival.airport, arrival.scheduled, aircraft.type, airline.iata | Pull per planning window; cache daily/hourly depending on need. | Route maps, date-specific availability, airport boards, timetable views. |
| Real-time Tracking | Real-time Flight Tracking | Operational status and in-flight telemetry for active or imminent flights. | flight.status, departure.actual, arrival.estimated, terminal, gate, position.latitude/longitude/altitude | Poll frequently during ops windows (see notes below). | Live status pages, alerts, diversion/cancellation handling. |
| Routes | Routes | High-level list of served pairs (complements date-bound schedules). | Airline code, origin/destination IATA | Update periodically; less frequent than real-time. | Static route catalogs, discovery, initial coverage checks. |
Enrich with real-time status and positions
Once you have the schedule-derived route list for Etihad (LUA), overlay the real-time endpoint to make your app operationally relevant. The official sample shows the field structure you’ll see when tracking a flight:
{
"success": true,
"data": {
"flight": {
"iata": "AA123",
"icao": "AAL123",
"number": "123",
"status": "en-route",
"departure": {
"airport": "JFK",
"scheduled": "2024-03-20T10:00:00Z",
"actual": "2024-03-20T10:05:00Z",
"terminal": "8",
"gate": "B12"
},
"arrival": {
"airport": "LAX",
"scheduled": "2024-03-20T13:15:00Z",
"estimated": "2024-03-20T13:20:00Z",
"terminal": "4",
"gate": "45A"
},
"position": {
"latitude": 39.8729,
"longitude": -98.7372,
"altitude": 35000,
"speed": 495,
"heading": 270
}
}
}
}
What to use:
- flight.status: display “scheduled,” “en-route,” “landed,” or handle exceptional values like “cancelled” or “diverted” if present.
- departure.actual vs departure.scheduled: compute departure delay.
- arrival.estimated vs arrival.scheduled: ETAs for arrival boards and alerts.
- terminal and gate: essential for airport signage and wayfinding.
- position fields: map overlays and telemetry widgets.
Practical use cases tied to Etihad (LUA)
1) Etihad flight status pages
Use schedules to list upcoming Etihad flights by route, then hydrate each row with real-time status. Render a “D+M” delay badge when departure.actual differs from departure.scheduled. If arrival.estimated drifts beyond a threshold, trigger customer alerts.
- Fields: flight_number, departure.scheduled, departure.actual, arrival.estimated, flight.status, terminal, gate, position.*
- Polling: during departure/arrival windows, 30–60s polling is typical; outside those windows, back off to 5–15 minutes.
- Caching: cache immutable schedule rows by date; only invalidate around operational changes (e.g., status transitions, gate updates).
2) Delay monitoring and SLA dashboards
Join schedule times to real-time actuals to compute delay metrics by route pair for Etihad. For example, departureDelay = (departure.actual - departure.scheduled), arrivalDrift = (arrival.estimated - arrival.scheduled). Aggregate at the route level to identify pressure points by airport.
- Fields: departure.scheduled, departure.actual, arrival.scheduled, arrival.estimated, flight.status.
- Handling cancellations/diversions: treat missing actual times with a special state; for diverted/cancelled statuses, set delay metrics to null and increment an exception counter.
3) Route analysis and planning
Build a LUA route catalog from schedules: group by departure.airport + arrival.airport. Persist the unique pairs, then incrementally refresh. Use aircraft.type to infer widebody vs narrowbody tendencies per route to guide content or operational context.
- Fields: departure.airport, arrival.airport, airline.iata, aircraft.type.
- Scheduling windows: request multiple date windows and union the pairs to avoid missing low-frequency flights.
Time zones, UTC, and display logic
FlightLabs timestamps in the samples are UTC (“Z”). For user-facing pages, convert to the departure or arrival local time zone as appropriate. Keep UTC in storage and compute delays in UTC to avoid DST edge cases. When presenting “duration to go,” use arrival.estimated when available; fall back to arrival.scheduled.
Polling frequency and caching strategies
- Schedules (planning): cache for hours or a day; refresh when the user changes the date or airline.
- Pre-departure window: poll real-time every 60 seconds for gate, terminal, or status changes.
- En-route: 30–60 seconds if you show a map; 2–5 minutes if you only surface ETA.
- Post-arrival: reduce to 5–15 minutes for a short tail period, then cease polling.
- Backoff: on transient HTTP errors, use exponential backoff and don’t drop the flight row—keep last known status with a “stale” flag.
Handling cancelled and diverted flights
Use flight.status as the source of truth for exceptional states. If cancelled:
- Suppress position and clear ETAs; display a prominent “Cancelled” badge.
- Retain the original schedule for audit and customer messaging.
If diverted:
- Retain the scheduled arrival.airport in the canonical route, but display the diversion destination in the live panel.
- Stop showing the original gate and terminal once diversion is confirmed.
Pagination, filtering, and query scope
When retrieving schedules for Etihad (LUA), request only the windows you need (for example, per day). If pagination parameters are available in your plan, apply them to scan larger date ranges in multiple calls. Store normalized results by (airline.iata, departure.airport, arrival.airport, flight_number, date) to avoid duplicate processing when paginating.
Airport and terminal context
To render better airport-specific experiences for Etihad flights, combine schedules with airport metadata. The airport response structure (official sample shown below) highlights fields you can use to supply names, local time zones, and weather context where applicable.
{
"success": true,
"data": {
"airport": {
"iata": "JFK",
"icao": "KJFK",
"name": "John F. Kennedy International Airport",
"location": {
"lat": 40.6413,
"lon": -73.7781,
"city": "New York",
"country": "United States"
},
"timezone": "America\/New_York",
"terminals": [
"1",
"2",
"4",
"5",
"7",
"8"
],
"runways": [
{
"length_ft": 14511,
"width_ft": 150,
"surface": "concrete",
"designator": "13L\/31R"
}
],
"weather": {
"temp_c": 22,
"visibility_km": 10,
"wind": {
"speed_kts": 8,
"direction_deg": 180
}
}
}
}
}
Useful details:
- airport.name and timezone: use for localization and headers.
- location.lat/lon: anchor your map view.
- terminals: cross-check schedule terminals for wayfinding UIs.
Putting it together: a lightweight pipeline for LUA routes
- Seed with schedules: call /flights-schedules?iataCode=LUA&type=airline for your target date(s). Cache the result and extract unique (departure.airport, arrival.airport) pairs.
- Optional routes confirmation: consult the Routes capability to verify persistent routes independent of day-level availability.
- Enrich on demand: when a user expands a route or selects a flight_number, fetch real-time status to populate gates, ETAs, and position.
- Persist normalized data: store UTC timestamps, airline.iata, and airport codes. Add a lastUpdated field to handle staleness when polling.
- UI resilience: gracefully handle missing aircraft.registration or terminal fields; not all records include every detail.
Working environment, pricing, and access
Work interactively with the FlightLabs MCP console to prototype queries and review responses. Production access requires an API key—there’s a trial (7 days or 50 requests) and a Starter plan at $24.99/month. For the latest plan details and to request your key, see the site.
Get started at https://www.goflightlabs.com and review the Documentation for filtering, pagination, and error handling patterns.
Error handling and reliability tips
- Transport errors: retry with exponential backoff; cap retries to protect your quota.
- Partial data: if position is missing in real-time, keep status/ETA visible and label the map “position unavailable.”
- Schema drift: code against optional fields defensively (e.g., terminal, gate, registration may be absent).
- Data freshness: stamp each record with fetchedAt (UTC) so your UI can indicate when last updated.
FAQ
How do I filter schedules to only Etihad Airways?
Use the airline IATA filter on the schedules endpoint: set iataCode=LUA and type=airline, then parse data.schedules[].
Are schedule timestamps local or UTC?
Samples show ISO 8601 with Z (UTC). Convert to local time zones for displays; keep UTC internally for calculations.
How often should I poll the real-time endpoint?
During active operations, 30–60 seconds is common; otherwise back off to several minutes. Cache stable data and only refresh fields that change (status, ETA, gate, position).
How can I detect cancellations or diversions?
Watch flight.status. If cancelled or diverted, adjust your UI accordingly and avoid showing stale gates or ETAs.
Can I page through many days of schedules?
Yes—use pagination and date-range parameters as documented. Persist normalized keys to prevent duplicates when scanning multiple pages.
Ready to build Etihad (LUA) route maps, timetables, and live status boards? Get your API key and start prototyping today: Register. For endpoint details and field definitions, keep the Documentation open as you code.