Scraper · OTA

Cleartrip Flights

Live Indian domestic flight pricing from Cleartrip — the same job-based /scrape/ contract as Google Flights and MakeMyTrip, selected with "source": "cleartrip". Search, fare families and review detail (fare breakup, cancellation windows, coupons) are all available; round trips come back as one priced combination.

POST/api/v1/flight-scraper/scrape/— submit
GET/api/v1/flight-scraper/scrape/{job_id}/— poll

Base URL: https://api.scrapeguys.com · Auth: X-API-Key: fsk_… with the cleartrip scope · See the Overview.

Shared endpoint. Endpoints, headers, auth, quotas and the job lifecycle are exactly those in the Overview; this page covers only what differs for Cleartrip. Omit source on /scrape/ or /batch/ and you get google_flights, as before.
Your key needs the cleartrip scope. Without it every call returns 403 This API key does not have the 'cleartrip' scope. The same scope governs polling those jobs. Existing keys are not granted it automatically — ask your ScrapeGuys contact to add it.

Submit a search

curl -X POST 'https://api.scrapeguys.com/api/v1/flight-scraper/scrape/' \
  -H 'Content-Type: application/json' -H 'X-API-Key: fsk_...' \
  -d '{"origin":"DEL","destination":"BOM","departure_date":"2026-12-25",
       "adults":1,"cabin_class":"economy","currency":"INR",
       "source":"cleartrip"}'
# {"job_id":"7a1c...","status":"pending","poll_url":"/api/v1/flight-scraper/scrape/7a1c.../"}
FieldCleartripNotes
origin, destinationSupported3-letter IATA codes.
departure_date, return_dateSupportedYYYY-MM-DD. Omit return_date for one-way.
adults, childrenSupported
infants_in_seat, infants_on_lapSupported, summedCleartrip carries one infant count. The sum is capped at adults.
cabin_classSupportedeconomy, premium_economy, business, first.
max_stopsSupportedApplied after the search.
currencyINR onlyAny other value is refused. Omitting it defaults to INR.
regionin onlyAny other value is refused; use source=google_flights for other markets.
include_calendar, calendar_days, calendar_days_beforeNot supportedNo calendar endpoint. Refused with a 400 whenever sent, whatever the value.
per_leg_faresNot supportedA round trip is one priced combination — see Round trips.
include_nearby_airportsSupportedBoolean, default false. Cleartrip mixes flights from nearby airports into a search (for example NMI for BOM, GOX for GOI). They are left out by default so a search answers for the airport you asked about; set true to keep them. A city code keeps all of its airports. Refused on other sources.
include_cheapestNot supportedGoogle Flights only.
include_price_lock, platform, price_coupons, include_coupon_breakupsNot supportedMakeMyTrip-only (platform is also accepted on Paytm). Cleartrip has a single client, so the polled job echoes platform as an empty string. price_coupons and include_coupon_breakups are refused with a 400 when true, on /scrape/, /batch/ and their expansions.
Rejected at submit, not silently ignored. Every unsupported option above is refused with a 400 whose message names the remedy — never accepted and quietly dropped.

Poll for results

Poll every 1–2 seconds until status is completed or failed. The envelope is the one every source uses — flights, return_flights, search_context, error, error_category — so an existing parser needs no changes. Cleartrip adds:

{
  "flights": [{
    "airlines": ["SpiceJet"], "carrier_code": "SG", "flight_numbers": ["612"],
    "origin": "DEL", "destination": "BOM",
    "departure_time": "2026-12-25T19:20:00.000+05:30",
    "arrival_time": "2026-12-25T21:40:00.000+05:30",
    "duration": "2h 20m", "stops": 0,
    "price": 7076.0, "total_price": 7076.0, "currency": "INR",
    "bookable": true,
    "segments": [ ... ], "layovers": [ ... ],
    "cleartrip_ids": { "journey": "J1", "travel_option_id": "...", "fare_id": "..." }
  }],
  "return_flights": [],
  "round_trip_combination": null,
  "search_context": {
    "source": "cleartrip", "no_results": false, "trip_type": "one_way",
    "applied_currency": "INR", "stops_filtered_out": 0,
    "include_nearby_airports": false,
    "nearby_airports_hidden": {"onward": {}, "return": {}}
  },
  "error": null, "error_category": ""
}

An empty route is not an error

A route Cleartrip does not sell comes back status: "completed", error: null and search_context.no_results: true. Check no_results, not error. This includes an origin or destination airport code Cleartrip does not recognise: the job completes with no_results: true, stops_filtered_out: 0 and search_context.unknown_airports listing the offending code(s), rather than failing or being retried.

Batch scraping

POST /api/v1/flight-scraper/batch/ and /batch/results/ accept "source": "cleartrip" with the same rules as /scrape/.

Round trips — one combination, not two legs

One search returns both directions: flights is outbound, return_flights is inbound, and round_trip_combination names the pair Cleartrip itself priced:

"round_trip_combination": {
  "onward_index": 0, "return_index": 2,
  "onward_fare_id": "...", "return_fare_id": "...",
  "price": 11480.0, "currency": "INR",
  "priced_as_pair": true
}

Do not add the two legs' price values and expect the combination price, and do not split the combination price back across the legs — which is why per_leg_fares is refused. Round-trip responses are also considerably larger than one-way ones.

Expansion endpoints

source is required on the expansion endpoints. It defaults to makemytrip there, so every pre-existing caller keeps working. Omit it on a Cleartrip parent and you get 400 Fare families was asked for MakeMyTrip but job <id> is Cleartrip.
EndpointCleartrip
POST /scrape/fares/Supported — fare families per cabin
POST /scrape/review/Supported — fare breakup, cancellation windows, coupon list
POST /scrape/return/Not applicable — Cleartrip returns both directions from one search
POST /scrape/farelock/, /booking/No Cleartrip equivalent

The search context and its TTL

Expansions resume the search funnel using values stored on the job, so you never pass them — but they expire (30 minutes by default). Past that the expansion is refused before any request is made, with error_category: "invalid_input":

{"error": "the Cleartrip search context for this job is 90 minutes old and the limit is 30; re-run the search and expand a row from the new result",
 "error_category": "invalid_input"}

Retrying cannot help; re-run the search and expand a row from the new result.

Fare families

curl -X POST 'https://api.scrapeguys.com/api/v1/flight-scraper/scrape/fares/' \
  -H 'Content-Type: application/json' -H 'X-API-Key: fsk_...' \
  -d '{"job_id":"7a1c...","flight_index":0,"source":"cleartrip"}'
# 202, then poll the returned job

Fare families list the searched cabin first, so an economy search leads with economy fares.

Review

POST /scrape/review/ returns the fare breakup, cancellation windows and the list of applicable coupons for one itinerary. Same request shape as fares: job_id, flight_index, "source": "cleartrip".

Review creates a booking draft on Cleartrip. It is not a pure quote: each call leaves a draft on Cleartrip's side. Nothing is charged and nothing is held for payment, but call it for itineraries you actually need priced rather than for every row of a result set. Search and fare families are read-only and answer most questions. Drafts are capped per hour per client; past the cap the job fails with error_category: "error" — retrying only keeps asking until the hour passes.
review.price_breakup.total excludes Cleartrip's convenience fee. It covers the airline side only — base fare, taxes, any coupon, and add-ons such as Trip Protect. Do not present it as the price payable, and do not compare it against a fee-inclusive total from another source.

What a review returns

The job's result.review carries:

The window lists are empty, never missing, when Cleartrip quotes no rules for the fare or the read failed.

Coupons are listed on the review but not priced: price_coupons is refused on this source.

Errors on this source

The same vocabulary as every other source, so existing dashboards and retry logic work unchanged.

error_categoryMeaning on CleartripWhat to do
""Success. An empty route is here too — check search_context.no_results.—
blockedThe request was refused at the edge after retries.Resubmit later.
transientA 429, 5xx, or a network/timeout failure.Retry.
invalid_searchCleartrip read the request and refused it: a 400/404, no fare family for that option, or a cabin mismatch.Change the request. Retrying returns the same answer.
invalid_inputA stale or missing search context, or a bad parameter.Re-run the search, or fix the input.
rotationA response arrived that the parser does not understand.Nothing to do on your side; contact us.
errorConfiguration or a cap. The message names it.Contact us.

A cabin mismatch is the clearest invalid_search case, and its message names the cabin to search instead:

{"error": "searched ECONOMY but Cleartrip priced only BUSINESS fares for this option. ... search in that cabin instead: cabin_class=business",
 "error_category": "invalid_search"}

Not supported on this source

Next: Google Flights · MakeMyTrip Flights