Paytm Flights
Live flight pricing from Paytm (INR, India region) — the same job-based /scrape/ contract as Google Flights, MakeMyTrip and Cleartrip, selected with "source": "paytm". Search, fare families and review detail (fare breakup including Paytm's convenience fee, refundability, cancellation windows, add-ons) are all available, and every call is read-only.
/api/v1/flight-scraper/scrape/— submit/api/v1/flight-scraper/scrape/{job_id}/— pollBase URL: https://api.scrapeguys.com · Auth: X-API-Key: fsk_… with the paytm scope · See the Overview.
source on /scrape/ or /batch/ and you get google_flights, as before.paytm scope. Without it every call returns 403 This API key does not have the 'paytm' scope. The same scope governs polling those jobs. There is no wildcard and existing keys are not granted it automatically — ask your ScrapeGuys contact to add it.The three stages
Paytm uses the same L1 / L2 / L3 vocabulary as the other flight sources. Each stage is an ordinary job — submit, get a job_id, poll — and each later stage takes a flight_index from the search it came from.
| Stage | Endpoint | Answers |
|---|---|---|
| L1 search | POST /scrape/ · /batch/ | What flies DEL→BOM on the date, and the cheapest fare per flight. |
| L2 fare families | POST /scrape/fares/ | The fare options sold on one flight (for example SME, regular, corporate), and the convenience-fee-inclusive total for the selected one. |
| L3 review | POST /scrape/review/ | Fare split and convenience fee, refundability and cancellation windows, and optionally baggage, meals, seats and promo codes. |
Paytm's convenience fee — the amount that turns a listed fare into what a traveller actually pays — is available at review with no extra steps on your side. grand_total is the fee-inclusive figure.
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-11-18",
"adults":1,"cabin_class":"economy","currency":"INR",
"source":"paytm"}'
# {"job_id":"9f2b...","status":"pending","poll_url":"/api/v1/flight-scraper/scrape/9f2b.../"}
| Field | Paytm | Notes |
|---|---|---|
origin, destination | Supported | 3-letter IATA codes. |
departure_date | Supported | YYYY-MM-DD. |
return_date | desktop only | Send "platform": "desktop" to price a round trip. The default app client is one-way and refuses a return_date at submit — see Round trips. |
adults, children | Supported | |
infants_in_seat, infants_on_lap | Supported, summed | Paytm carries one infant count. The sum is capped at adults. |
cabin_class | Supported | economy, premium_economy, business, first. |
max_stops | Supported | Applied after the search. |
currency | INR only | Any other value is refused, not relabelled. Omitting it defaults to INR. |
region | in only | Any other value is refused; use source=google_flights for other markets. |
include_calendar, calendar_days, calendar_days_before | Not supported | Refused with a 400 whenever sent, whatever the value. |
per_leg_fares | Not supported | Refused with a 400. |
include_cheapest | Not supported | Google Flights only. |
platform | Optional | Paytm has two clients: app (default, one-way) or desktop (Paytm's web funnel, the only one that prices a round trip) — which one prices the job. Echoed on the polled job. Rejected with a 400 on sources that have only one client. |
include_price_lock, price_coupons, include_coupon_breakups | Not supported | MakeMyTrip options. Refused with a 400 on /scrape/, /batch/ and their expansions. |
include_nearby_airports | Not supported | Cleartrip-only. Paytm needs no switch: substituted airports are always reported separately — see Substituted airports. |
400 whose message names the remedy — never accepted and quietly dropped.Round trips — send platform=desktop
On platform=desktop a return_date prices a round trip, domestic or international, as sellable combinations (an onward + return pair) rather than two leg fares added together:
{"source": "paytm", "platform": "desktop", "origin": "DEL", "destination": "BOM",
"departure_date": "2026-11-18", "return_date": "2026-11-22"}
On the default app client a return_date is refused at submit rather than run as a one-way, which would drop the leg you asked to price and return a result that looks complete. An omitted platform is app, so an unqualified round trip is refused too:
{"return_date": ["Paytm's app client prices one-way only. Send platform=desktop to price a round trip on Paytm's web funnel, or use source=google_flights."]}
A round trip returns both directions and the sellable pairs from the original search, so /scrape/return/ does not apply to Paytm. per_leg_fares is refused on both clients: a round trip is quoted as one combination, and the pair price is the pair's.
platform=desktop is enabled per deployment. Where it is not enabled, a new desktop search is refused at submit and no job is created; a fare-families or review call on a desktop search fails as a job instead. A desktop job is never silently run on the app client.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. flights is sorted cheapest first. Paytm adds:
{
"flights": [{
"airlines": ["IndiGo"], "carrier_code": "6E", "flight_numbers": ["2134"],
"origin": "DEL", "destination": "BOM",
"departure_time": "06:10", "arrival_time": "08:25",
"departure_date": "2026-11-18",
"duration": "2h 15m", "stops": 0, "layover_airports": [],
"price": 5421, "total_price": 5421, "currency": "INR",
"refundable": "Refundable", "bookable": true,
"segments": [ ... ], "layovers": [ ... ],
"paytm_ids": { "provider": "...", "flightid": "...", "solution_id": "...", "fare_options": [ ... ] }
}],
"return_flights": [],
"nearby_airport_options": [ ... ],
"search_context": {
"source": "paytm", "platform": "app", "no_results": false,
"trip_type": "one_way", "applied_currency": "INR",
"requestid": "...", "stops_filtered_out": 0
},
"search_metadata": {
"source": "paytm", "retrieved_at": "2026-11-10T09:30:12+00:00",
"total_options": 60, "nearby_airport_count": 12
},
"error": null, "error_category": ""
}
priceis per adult;total_priceis the whole party. Neither includes Paytm's convenience fee — that arrives with fare families and review.stops_filtered_outis a count, not a flag: how many bookable optionsmax_stopsexcluded.0withno_results: truemeans the route genuinely has nothing. Same name and meaning as on MakeMyTrip and Cleartrip.bookable: falsemarks an option listed without a sellable fare. Skip it if you pick your own option rather than using the expansions.paytm_idsis what the expansions need, including every fare option the flight was listed with. You never send it — they take an index.
An empty route is not an error
A route Paytm does not sell comes back status: "completed", error: null and search_context.no_results: true. Check no_results, not error.
Substituted airports — nearby_airport_options
Paytm answers some route searches with flights that do not fly the route you asked for. A DEL → BOM search comes back with HDO → BOM and DXN → BOM rows (Hindon and Noida standing in for Delhi) and DEL → NMI rows (Navi Mumbai standing in for Mumbai). Paytm flags each of these itself.
flights[]answers the route you asked for. Substituted-airport itineraries are published inresult.nearby_airport_options[]instead, in the same row shape, andsearch_metadata.nearby_airport_countgives how many there are.- Nothing is discarded. They are real, priced, bookable fares — just not the journey you searched. This matters because they can be cheap: left in
flights, one could read as the cheapest fare for a trip that flies neither of your airports. - This is the same key with the same meaning as on MakeMyTrip. (Cleartrip reaches a similar place differently: it drops them unless you send
include_nearby_airports.)
search_context.nearby_airports. That is a suggestion list shown only when a search finds zero flights. nearby_airport_options holds real priced itineraries removed from an otherwise successful listing.Batch scraping
POST /api/v1/flight-scraper/batch/ and /batch/results/ accept "source": "paytm" with the same rules as /scrape/. GET /usage/ is unchanged.
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 Paytm parent and you get 400 Fare families was asked for MakeMyTrip but job <id> is Paytm.| Endpoint | Paytm |
|---|---|
POST /scrape/fares/ | Supported — fare families, convenience fee on the selected one |
POST /scrape/review/ | Supported, read-only — fare breakup, refundability, add-ons |
POST /scrape/return/ | Not applicable — Google Flights only |
POST /scrape/checkout/, /farelock/, /booking/ | Not available for Paytm |
The search context and its TTL
Expansions resume the search 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". 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":"9f2b...","flight_index":0,"source":"paytm"}'
# 202, then poll the returned job
Paytm lists a flight's fare options with the search itself, so result.fare_families[] is built from the stored search — no new search is run. Each family carries name, per_adult, total and refundable.
- The selected family (the one the search ranked cheapest) is repriced once, which fills
conv_feeandgrand_total— the convenience-fee-inclusive total the listing omits. - The other families carry
conv_fee: nullandgrand_total: null. Their fee is not computed in this release; do not compare a family's listed price against the selected family'sgrand_total.
Review
POST /scrape/review/ returns the fare breakdown, the cancellation and modification rules, and (by default) the add-on catalogue for one itinerary. Same request shape as fares: job_id, flight_index, "source": "paytm".
What a review returns
result.review—totalfare,base_fare,total_tax,conv_fee_per_adult,order_conv_feeandgrand_total, wheregrand_total = totalfare + order_conv_fee.grand_totalis the figure a traveller pays.result.minirules—refundableplus per-sectorcancellationandmodificationrules.result.ancillaries—addons(insurance and partner add-ons with a per-traveller premium),seats(seat-map summary per sector),ancillary(meal and extra-baggage availability) andpromos(applicable promo codes, often empty). Promo codes are listed but not priced.
result.review and result.minirules are published, result.ancillaries is {}, and result.warnings carries one line naming Paytm's code for what was withheld. An empty ancillaries alongside that warning means "not available right now", not "none offered". Re-request the review later if you need the catalogue.totalfare with a fee-inclusive total from another source. totalfare excludes Paytm's convenience fee; grand_total includes it.Errors on this source
The same vocabulary as every other source, so existing dashboards and retry logic work unchanged.
error_category | Meaning on Paytm | What to do |
|---|---|---|
"" | Success. An empty route is here too — check search_context.no_results. | — |
blocked | The request was refused at the edge after retries. | Resubmit later. |
transient | A 429, 5xx, or a network/timeout failure, or Paytm's own internal error. Resubmitting is the remedy. | Retry. |
invalid_search | Paytm read the request and refused it, or the chosen flight has no sellable fare. | Change the request. Retrying returns the same answer. |
invalid_input | A stale or missing search context (including Paytm reporting the search session as invalid or expired), or a bad parameter. | Re-run the search, or fix the input. |
rotation | A response arrived that the parser does not understand. | Nothing to do on your side; contact us. |
error | Configuration or an unexpected failure. The message names it. | Contact us. |
Not supported on this source
- Round trips on
platform=app— one-way only there; useplatform=desktop. - Checkout and payment — not part of this API.
- Calendar / price-per-day — no endpoint exists.
- Promo-code pricing — codes are listed on review but not applied or compared.
- Currencies and regions other than INR /
in.
Next: Google Flights · MakeMyTrip Flights · Cleartrip Flights