Virgin Australia APIvirginaustralia.com ↗
Search Virgin Australia flights, fare calendars, destinations, and current specials via 4 structured endpoints. Get pricing by fare family, IATA codes, and availability.
What is the Virgin Australia API?
The Virgin Australia API provides 4 endpoints for querying live flight availability, fare calendars, destination lists, and current sale fares. The search_flights endpoint returns pricing across Lite, Choice, and Flex fare families with segment-level detail, while get_fare_calendar returns the cheapest available fare for each of approximately 30 dates around a target departure date — useful for building flexible date pickers or alerting workflows.
curl -X GET 'https://api.parse.bot/scraper/9eb50a88-02ea-40bc-a23c-18a1b06e0af8/search_flights?adults=1&origin=SYD&infants=0&children=0&cabin_class=ECONOMY&destination=MEL&award_booking=false&departure_date=2026-08-06' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace virginaustralia-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.virgin_australia_flight_search_api import VirginAustralia, CabinClass
client = VirginAustralia()
# Search flights from Sydney to Melbourne in Business class
result = client.flights.search(
origin="SYD",
destination="MEL",
departure_date="2026-07-15",
cabin_class=CabinClass.BUSINESS,
)
print(result.currency, result.promocode_valid)
# Check the fare calendar for cheapest dates
calendar = client.calendars.search(
origin="SYD",
destination="MEL",
departure_date="2026-07-15",
cabin_class=CabinClass.ECONOMY,
)
print(calendar.currency, calendar.negotiate_fare_present)
# Get available destinations grouped by region
dest = client.destinations.fetch()
for region in dest.origins.geographical_regions:
print(region.region_name, region.region_code)
# Get current flight specials
specials = client.specialmaps.fetch()
for code, port in specials.items():
for item in port.sale_items:
print(item.title, item.from_price, item.origin, item.destination)
Search for available flights between two airports on a specific date. Returns detailed flight offers including pricing by fare family (Lite, Choice, Flex), segment details, and alternate date pricing. Each offer group in unbundledOffers contains variants for each fare brand. The brandedResults section groups the same data by itinerary part for brand comparison.
| Param | Type | Description |
|---|---|---|
| adults | integer | Number of adult passengers |
| originrequired | string | Origin airport IATA code (e.g. SYD, MEL, BNE) |
| infants | integer | Number of infant passengers |
| children | integer | Number of child passengers |
| cabin_class | string | Cabin class |
| destinationrequired | string | Destination airport IATA code (e.g. MEL, SYD, BNE) |
| award_booking | boolean | Whether to search for award (points) bookings |
| departure_daterequired | string | Departure date in YYYY-MM-DD format |
{
"type": "object",
"fields": {
"currency": "string, currency code (e.g. AUD)",
"fareFamilies": "array of fare family definitions with brand IDs and marketing text",
"brandedResults": "object containing itinerary parts with brand-specific offers",
"unbundledOffers": "array of flight offer groups, each containing offers for different fare families",
"unbundledAlternateDateOffers": "array of lowest-fare offers for nearby dates"
},
"sample": {
"data": {
"currency": "AUD",
"fareFamilies": [
{
"brandId": "LT",
"brandLabel": [
{
"marketingText": "Lite"
}
]
}
],
"brandedResults": {
"itineraryPartBrands": []
},
"promocodeValid": false,
"unbundledOffers": [
[
{
"total": {
"alternatives": [
[
{
"amount": 129,
"currency": "AUD"
}
]
]
},
"brandId": "LT",
"soldout": false,
"cabinClass": "Economy",
"itineraryPart": [
{
"segments": [
{
"flight": {
"airlineCode": "VA",
"flightNumber": 800
},
"origin": "SYD",
"arrival": "2026-07-15T07:35:00",
"duration": 95,
"departure": "2026-07-15T06:00:00",
"destination": "MEL"
}
]
}
]
}
]
],
"negotiateFarePresent": true,
"unbundledAlternateDateOffers": [
[
{
"total": {
"alternatives": [
[
{
"amount": 148.02,
"currency": "AUD"
}
]
]
},
"status": "AVAILABLE",
"brandId": "LT",
"departureDates": [
"2026-07-12"
]
}
]
]
},
"status": "success"
}
}About the Virgin Australia API
Flight Search and Fare Families
The search_flights endpoint accepts an origin and destination as IATA codes (e.g. SYD, MEL, BNE), a departure_date in YYYY-MM-DD format, and optional passenger counts for adults, children, and infants. The response includes a brandedResults object with itinerary parts, a fareFamilies array defining each brand's marketing attributes, and an unbundledOffers array where each offer group contains per-fare-family pricing variants. The unbundledAlternateDateOffers field provides lowest-fare snapshots for nearby dates directly within the same response, reducing the need for separate calendar calls. Set award_booking: true to switch the search to Velocity points pricing.
Fare Calendar
The get_fare_calendar endpoint takes the same origin, destination, and a center departure_date, then returns unbundledAlternateDateOffers spanning roughly 30 surrounding days. Each entry includes a departure date, availability status, and the lowest fare amount in the response currency (typically AUD). This is suited for rendering a low-fare calendar grid without issuing a full flight search for every date.
Destinations and Specials
get_available_destinations returns no required inputs and gives back two objects — origins and destinations — each containing a geographicalRegions array. Regions include Australia, Asia Pacific, North America, and UK & Europe. Each airport entry carries its IATA code, name, country, timezone, and geographic coordinates. The get_flight_specials endpoint returns current sale fares keyed by lowercase origin IATA code. Each origin entry includes a port_name and a sale_items array with route details, fare pricing, fare types, and applicable travel periods — useful for surfacing promotional fares without a full search.
The Virgin Australia API is a managed, monitored endpoint for virginaustralia.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when virginaustralia.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official virginaustralia.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a low-fare calendar UI showing cheapest Virgin Australia fares for each day across a month using
get_fare_calendar - Populate an origin/destination airport selector with IATA codes, coordinates, and regional groupings from
get_available_destinations - Compare Lite, Choice, and Flex fare family pricing side-by-side for a given route and date via
search_flights - Display current flight sale banners or deal alerts by polling
get_flight_specialsfor route-level promotional fares and travel periods - Build a Velocity points flight search by passing
award_booking: truetosearch_flightsorget_fare_calendar - Identify the cheapest travel date for a route by scanning
unbundledAlternateDateOffersreturned bysearch_flights - Verify whether Virgin Australia serves a given city pair before querying fares, using airport data from
get_available_destinations
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Virgin Australia have an official public developer API?+
What does `search_flights` return beyond a basic fare price?+
fareFamilies array describing each brand (Lite, Choice, Flex), a brandedResults object with itinerary segment details, and an unbundledOffers array grouping fare variants per offer. It also includes unbundledAlternateDateOffers for nearby dates and the response-level currency code, typically AUD.Does the fare calendar cover more than one month at a time?+
get_fare_calendar call returns approximately 30 days centred on the supplied departure_date. It does not return an extended multi-month view in a single call. You can fork the API on Parse and revise it to chain multiple calendar requests across different centre dates to cover a longer planning window.Does the API support return or multi-city itinerary searches?+
search_flights endpoint is structured for one-way searches between a single origin and destination pair. Return or multi-city itinerary queries are not currently covered. You can fork the API on Parse and revise it to add a return-flight endpoint combining two directional searches.Are seat maps, baggage allowance details, or ancillary fees included in the responses?+
fareFamilies array in search_flights and get_fare_calendar contains fare brand marketing text that may reference inclusions at a high level, but itemised baggage or seat fees are not exposed as discrete fields. You can fork the API on Parse and revise it to add an endpoint targeting that detail.