Qantas (GIB) Flights API
You need reliable, developer-friendly flight data to power Qantas flight status pages, internal logistics dashboards, or analytics. By the end of this guide, you will be able to query Qantas schedules and real-time status from FlightLabs, parse the fields that matter (status, times, terminals, gates), and design polling and caching that keep your app fast and accurate.
Qantas at a glance for developers
Qantas Airways (IATA: QF) is the flag carrier of Australia. Its primary operations are centered in Australia, and it serves domestic and international routes. For engineers, the key is that you can filter FlightLabs endpoints by airline code “QF” to focus your queries on Qantas flights and schedules.
Choosing the right FlightLabs endpoints for Qantas use cases
FlightLabs exposes multiple REST endpoints that you can combine to support live tracking, schedule displays, and planning workflows for Qantas. Below is a technical comparison of the most relevant endpoints when your scope is QF flights only.
| Endpoint | Best for | Key data you’ll read | Freshness | Notes |
|---|---|---|---|---|
| /flights-schedules | Building Qantas timetables and near-term operations boards | departure.scheduled, arrival.scheduled, terminals, gates, airline.iata | Schedule-level (updated periodically) | Filter with iataCode=QF to scope to Qantas; supports a type parameter |
| Real-time flight tracking | Live status, gates, in-flight position for a specific QF service | flight.status, departure.actual, arrival.estimated, position.lat/lon/altitude | Live (poll as needed) | Use for status pages and en‑route maps; combine with caching |
| Airline flights | Listing active Qantas flights when you don’t know the number upfront | airline.iata, flight.iata/icao/number, departure/arrival airports | Near real-time | Use to discover current/active QF flights, then hydrate with real-time details |
| Flight info by flight number | Direct lookups when you have “QFxxx” | flight.status, times, terminals/gates | Near real-time | Great for user-entered flight lookups |
| Future flights | Forward planning for Qantas route availability | Upcoming schedules and planned operations | Forward-looking | Pair with schedules to show future options and planned timings |
| Retrieve routes | Network analysis and coverage for Qantas | Origins, destinations, airline identifiers | Reference | Use to map QF’s network; tie to schedule and status for depth |
For endpoint references and authentication basics, see the FlightLabs Documentation. If you need a key, create one via Register. You can also explore responses interactively in the MCP.
Query Qantas schedules with a single request
The schedules endpoint is the quickest way to populate a Qantas timetable or operations board. The schedules path accepts an IATA code filter and a type selector. When you scope iataCode=QF, you’ll target Qantas specifically.
cURL example: Qantas schedules
curl -G "https://api.goflightlabs.com/flights-schedules" \
--data-urlencode "iataCode=QF" \
--data-urlencode "type=airline" \
--data-urlencode "api_key=YOUR_API_KEY"
This returns schedule entries with departure and arrival timings, terminals, gates (when published), aircraft details, and the airline object. Always treat times as UTC unless you normalize to local time zones on the client.
Python example: rendering upcoming Qantas flights
import os
import requests
from datetime import datetime, timezone
API_KEY = os.getenv("FLIGHTLABS_API_KEY", "YOUR_API_KEY")
BASE_URL = "https://api.goflightlabs.com/flights-schedules"
params = {
"iataCode": "QF", # Qantas IATA
"type": "airline",
"api_key": API_KEY
}
r = requests.get(BASE_URL, params=params, timeout=20)
r.raise_for_status()
payload = r.json()
# Expect a structure similar to the example schedules payload under "data.schedules"
schedules = (payload.get("data") or {}).get("schedules", [])
def utc_to_local_str(iso_utc):
if not iso_utc:
return ""
# Parse ISO 8601 assumed UTC and print in local time for display
dt = datetime.fromisoformat(iso_utc.replace("Z", "+00:00"))
return dt.astimezone().strftime("%Y-%m-%d %H:%M %Z")
for s in schedules:
flight_no = s.get("flight_number")
dep = s.get("departure", {})
arr = s.get("arrival", {})
airline = s.get("airline", {})
dep_airport = dep.get("airport")
dep_sched = dep.get("scheduled")
dep_term = dep.get("terminal")
arr_airport = arr.get("airport")
arr_sched = arr.get("scheduled")
arr_term = arr.get("terminal")
print(f"{airline.get('iata','QF')}{flight_no}: {dep_airport} -> {arr_airport}")
print(f" Departs (UTC): {dep_sched} | Local: {utc_to_local_str(dep_sched)} | Terminal: {dep_term}")
print(f" Arrives (UTC): {arr_sched} | Local: {utc_to_local_str(arr_sched)} | Terminal: {arr_term}")
print("-" * 60)
Key fields to render:
- flight_number: the numeric portion commonly combined with “QF”.
- departure.scheduled and arrival.scheduled: ISO 8601 in UTC.
- departure.terminal and arrival.terminal: useful for airport display boards.
- airline.iata: confirm the flight is QF in downstream processing.
Real-time status and in-flight data (official sample)
For live tracking, status boards, and customer notifications, combine your Qantas schedule list with real-time lookups by flight number or via the real-time tracking endpoint. Below is the official sample response structure you’ll work with. It includes the fields you’ll use to show current status, gates, and live map positions.
{
"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
}
}
}
}
How to read this for Qantas flights:
- flight.iata and flight.number: compose the display number (e.g., QF123).
- status: show the operational state such as “en-route”, “scheduled”, “landed”, etc.
- departure.scheduled vs departure.actual: compute pushback delay in minutes.
- arrival.scheduled vs arrival.estimated: compute estimated arrival delay.
- departure.terminal/gate and arrival.terminal/gate: present current gate info.
- position: draw the aircraft on a map and calculate distance-to-destination if needed.
Polling guidance for live apps:
- On the day of flight: poll every 30–60 seconds when status is “en-route” or within ±60 minutes of scheduled times; cache for 10–20 seconds to absorb burst traffic.
- Outside day-of operations: reduce to 5–15 minute intervals to cut API load.
- On cancelled or diverted: detect a terminal state in status and stop polling or back off to hourly.
Scheduling vs. real-time for Qantas: when to use each
Use schedules for pre-publish timetables and availability. Use real-time for operational truth once the flight is within day-of operations. A common pattern is:
- Fetch upcoming QF schedules once per hour; cache results server-side for your UI.
- When a user opens a specific Qantas flight, hydrate it with a real-time lookup and merge fields like status, gates, and position.
- Persist the merged document for the session; refresh selectively based on status changes.
Airport context (official sample structure)
When rendering terminals, weather, or time zones for an airport in a Qantas itinerary, the Airport Information structure below shows how the data is typically organized.
{
"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
}
}
}
}
}
Key fields to integrate:
- airport.iata and timezone: map UTC timestamps into user-local or airport-local time.
- terminals: cross-check terminal data from schedules and real-time responses.
- weather: show contextual conditions on arrival or departure boards.
Handling time zones, UTC, and delays correctly
- All examples use ISO 8601 timestamps with Z suffix interpreted as UTC. Store and compare in UTC internally; format in local time zones for end users.
- Departure delay (mins) = difference between departure.actual and departure.scheduled. Arrival delay (mins) = difference between arrival.estimated (or actual when available) and arrival.scheduled.
- For airports spanning daylight saving time changes, always re-derive local time from UTC per request to avoid drift.
Cancelled, diverted, and codeshare-aware logic
FlightLabs returns a status field for the current operational state. Treat cancelled and diverted states as terminal or special handling:
- cancelled: cease frequent polling, annotate the board with a clear state.
- diverted: continue polling until the new arrival airport and time stabilize; highlight the change prominently.
- codeshares: display the Qantas flight number prominently; if you surface operating carrier details, clearly label them using airline identifiers from the response.
Because the exact set of status strings may vary by endpoint, implement a safe mapping layer that recognizes and normalizes common states (scheduled, delayed, en-route, landed, cancelled, diverted) and gracefully passes through unfamiliar values for logging and review.
Pagination and filtering strategies for Qantas schedules
Schedules endpoints typically paginate responses when you query broad date ranges or entire airline catalogs. While the exact pagination parameters are documented in the API reference, the general pattern is:
- Request the first page filtered by iataCode=QF and your desired scope (e.g., type=airline).
- Check for pagination cursors or next-page indicators in the response and iterate.
- Persist a cursor and last-updated timestamp to support incremental syncs.
For data stores, pre-index by airline (QF), departure date (UTC date bucket), and route (origin-destination pair) to accelerate queries in your UI.
Use cases built on Qantas data
1) Flight status pages for Qantas
Combine schedules with real-time status to present a single panel per flight. The critical fields are:
- flight.status to drive the state badge and polling cadence.
- departure.actual vs departure.scheduled to show “Departed X min late/early.”
- arrival.estimated vs arrival.scheduled to show “Est. arrival in Y min.”
- departure.gate and arrival.gate to keep passengers oriented.
2) Delay monitoring and alerts
For operations and customer messaging, compute deltas on every refresh:
- Departure delay threshold: trigger push/email when departure.actual − departure.scheduled exceeds N minutes.
- Arrival delay threshold: monitor arrival.estimated − arrival.scheduled changes and notify when it crosses N minutes.
- Escalate on state changes (e.g., scheduled → cancelled or diverted).
3) Qantas route analysis
Use Retrieve routes and Flight Schedules to map active and planned city pairs. Aggregate by origin-destination and compare schedule frequency across weeks. Enrich with real-time completion counts to understand operational cadence (without storing any unavailable proprietary statistics).
Official schedule payload structure (for field mapping)
This schedule response illustrates how schedules are structured; your Qantas responses will follow the same pattern with “QF” as the airline.iata.
{
"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 to rely on in your Qantas integration:
- flight_number: your UI will render QF + flight_number (e.g., QF7).
- departure/arrival.airport: use IATA codes for routing and grouping.
- departure/arrival.scheduled: UTC timestamps; convert to display time zone.
- terminals: surface where available; otherwise, hide the field gracefully.
- aircraft.type and registration: helpful for ops dashboards and enthusiast apps.
Reliability, caching, and cost planning
- Cache schedules server-side for 30–60 minutes; warm by route or date for popular searches.
- Cache real-time responses for 10–20 seconds during en-route phases; widen to 30–60 seconds on gate holds or long taxi periods.
- Back off exponentially on errors; keep a soft-degraded state in your UI (last known status and timestamp).
- Plan usage with a 7-day trial or up to 50 requests to validate your Qantas integration. The Starter plan begins at $24.99/month, which typically covers prototypes and light production usage.
Use the hosted console at the MCP to test queries and inspect live payloads before wiring your backend.
Security and operational tips
- Store your API key server-side and proxy client requests; never expose keys in mobile or browser apps.
- Normalize all timestamps to UTC internally; convert only at the presentation layer.
- Log raw payloads for problematic flights (e.g., diversions) to improve your status normalization map over time.
- Use feature flags to switch between schedule-only and real-time-enhanced workflows during incidents.
FAQ
How do I filter FlightLabs results to only Qantas flights?
Use the airline IATA code “QF” in your queries. For schedules, include iataCode=QF (and the appropriate type). For real-time or flight-by-number, pass the Qantas flight number you’re tracking.
What time zone are the timestamps in?
Examples are ISO 8601 with “Z” (UTC). Convert to the airport’s time zone for display using the airport.timezone field or your own time zone library.
How often should I poll for live Qantas flights?
30–60 seconds while en-route or within ±60 minutes of scheduled times. Outside that window, poll less frequently (5–15 minutes) and cache to control load.
How do I detect delays and cancellations?
Compare actual vs scheduled for departure and estimated vs scheduled for arrival. Check the flight.status string for terminal states like cancelled or diverted and adjust UI/polling accordingly.
Can I test before paying?
Yes. You can start with a 7-day trial or up to 50 requests, then move to the Starter plan at $24.99/month as you roll to production.
Ready to ship your Qantas integration? Get your API key in minutes via Register, explore the Documentation, and verify responses in the MCP before plugging into your app.