Skyscanner APIskyscanner.co.in ↗
Search flights, autocomplete airports and cities, and retrieve cheapest daily prices via the Skyscanner India API. Returns IATA codes, entity IDs, and INR pricing.
What is the Skyscanner API?
This API exposes 3 endpoints covering Skyscanner India flight data: airport/city autocomplete, live flight search, and a daily price calendar. The autocomplete endpoint resolves place names to entity IDs and IATA codes required by the other endpoints. The search_flights endpoint returns up to 20 itineraries with pricing, and get_price_calendar delivers per-day cheapest fares with low/medium/high price groupings across a given month.
curl -X GET 'https://api.parse.bot/scraper/e1554788-7256-4021-ab94-1e1a90a66ee7/autocomplete?query=London&is_destination=False' \ -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 skyscanner-co-in-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.
"""Walkthrough: Skyscanner SDK — search airports, check prices, find flights."""
from parse_apis.skyscanner_flights_api import (
Skyscanner, IsDestination, CabinClass, NotFoundError
)
client = Skyscanner()
# Search for destination airports matching "London"
for airport in client.airports.search(query="London", is_destination=IsDestination.TRUE, limit=5):
print(airport.place_name, airport.iata_code, airport.entity_id)
# Get the price calendar for Delhi → London Heathrow in July
calendar = client.pricecalendars.get(
origin_id="95673498",
dest_id="95565050",
year="2026",
month="7",
origin_sky_id="DEL",
dest_sky_id="LHR",
)
print(calendar.currency)
for day in calendar.prices[:3]:
print(day.date, day.price, day.group)
# Search business class flights
result = client.flightsearches.search(
origin_id="95673498",
dest_id="95565050",
departure_date="2026-07-12",
cabin_class=CabinClass.BUSINESS,
)
print(result.status, result.total_results)
for flight in result.flights[:3]:
leg = flight.legs[0]
print(flight.itinerary_id, flight.price_raw, leg.origin, leg.destination, leg.carriers)
# Typed error handling
try:
client.airports.search(query="NonexistentXYZ123", limit=1).first()
except NotFoundError as exc:
print(f"Not found: {exc}")
print("exercised: airports.search / pricecalendars.get / flightsearches.search")
Autocomplete airport/city name search to get GeoIds (entityIds) and IATA codes for use in other endpoints. Returns matching airports and cities based on the query string. Results include place_id, place_name, city_name, country_name, iata_code, entity_id, and resulting_phrase for each match.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search query for airport or city name (e.g. 'London', 'New York', 'Tokyo') |
| is_destination | boolean | Whether the search is for a destination airport/city |
{
"type": "object",
"fields": {
"items": "array of matching airports/cities with place_id, place_name, city_name, country_name, iata_code, entity_id, and resulting_phrase"
},
"sample": {
"data": {
"items": [
{
"place_id": "LOND",
"city_name": "London",
"entity_id": "27544008",
"iata_code": "LON",
"place_name": "London",
"country_name": "United Kingdom",
"resulting_phrase": "London|England|United Kingdom"
},
{
"place_id": "LHR",
"city_name": "London",
"entity_id": "95565050",
"iata_code": "LHR",
"place_name": "London Heathrow",
"country_name": "United Kingdom",
"resulting_phrase": "London Heathrow (LHR), London|England|United Kingdom"
}
]
},
"status": "success"
}
}About the Skyscanner API
Autocomplete and Entity Resolution
Before querying flight prices, you need entity IDs and IATA codes for your origin and destination. The autocomplete endpoint accepts a query string (e.g. 'Mumbai', 'Tokyo') and returns an array of matching airports and cities. Each result includes place_id, place_name, city_name, country_name, iata_code, entity_id, and resulting_phrase. The entity_id values feed directly into search_flights and get_price_calendar. The optional is_destination boolean can bias results toward destination airports.
Flight Search
The search_flights endpoint accepts origin_id and dest_id (entity IDs from autocomplete), a required departure_date in YYYY-MM-DD format, and an optional return_date for round-trip searches. You can also specify adults count and cabin_class (ECONOMY, PREMIUM_ECONOMY, BUSINESS, or FIRST). The response contains a session_id, a status field indicating whether results are complete or incomplete, a total_results count, and a flights array of up to 20 itineraries each identified by itinerary_id and total_price.
Price Calendar
The get_price_calendar endpoint takes origin_id, dest_id, origin_sky_id (IATA code), dest_sky_id, year, and month and returns a prices array. Each entry contains a date (YYYY-MM-DD), a price value, and a group label (low, medium, or high) useful for identifying cheap travel windows. The currency field in the response indicates the denomination — typically INR for Skyscanner India queries. Note that prices are returned starting from the current date regardless of the month parameter supplied.
Scope and Coverage
All three endpoints are designed around Skyscanner India (skyscanner.co.in) and return prices denominated in INR by default. Entity IDs are Skyscanner-specific identifiers; IATA codes (origin_sky_id, dest_sky_id) follow standard aviation codes like DEL for Delhi or JFK for New York JFK. Both fields are required together for the price calendar endpoint.
The Skyscanner API is a managed, monitored endpoint for skyscanner.co.in — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when skyscanner.co.in 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 skyscanner.co.in 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 fare-alert tool that tracks daily
pricechanges fromget_price_calendarfor a given route - Populate a flight search form with live airport suggestions using
autocompletebefore submitting a search - Identify the cheapest travel dates in a month using the
groupfield (low/medium/high) from the price calendar - Compare round-trip vs. one-way fares by toggling
return_dateinsearch_flights - Resolve city or airport names to
entity_idvalues programmatically for downstream flight queries - Build a cabin-class price comparison tool using the
cabin_classparameter across ECONOMY, BUSINESS, and FIRST - Aggregate multi-route price calendars to surface the cheapest origin-destination pair for a given month
| 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 Skyscanner have an official developer API?+
What does the `get_price_calendar` endpoint actually return, and does the `month` parameter control the date range precisely?+
prices array where each item has a date, price, and group (low/medium/high). There is a known quirk: prices are returned starting from the current date regardless of which month value you supply, so you may receive fewer days of data than expected for the current or near-future month.Does `search_flights` return full itinerary details like layovers, airline names, and departure times?+
flights array includes itinerary_id and total_price per result. Detailed leg-level data such as layover airports, airline names, and departure/arrival times are not exposed in the current response shape. You can fork this API on Parse and revise it to add an endpoint that retrieves per-itinerary leg details.Does the autocomplete endpoint return only airports, or cities too?+
place_name, city_name, country_name, iata_code, and the Skyscanner-specific entity_id. The optional is_destination parameter can be passed to filter or bias results toward destination-type places.