Booking API endpoint
Returns Booking.com flight offers between two locations given as `from` and `to` (such as `SGN.AIRPORT`), for a `depart` date. `type` is `ROUNDTRIP` (default, needs `return`) or `ONEWAY`. Also takes `adults` (1 to 9), `children`, `cabin_class` and `sort`. Offers carry `price`, `currency` and segments with legs; the response adds `total_count` and `min_price`.
/booking-flights/searchtype: trip type. Allowed values: ROUNDTRIP, ONEWAY. Defaults to ROUNDTRIP.from (required): origin location id, {code}.{TYPE} composite format from a prior booking-flights-autocomplete result, for example SGN.AIRPORT.to (required): destination location id, same composite format as from, for example CTU.CITY.from_country: origin country code.to_country: destination country code.depart (required): departure date, YYYY-MM-DD.return: return date, YYYY-MM-DD. Required when type is ROUNDTRIP.adults: number of adults, 1-9. Defaults to 1.children: number of children, 0-9.cabin_class: cabin class, for example ECONOMY or PREMIUM_ECONOMY. Defaults to ECONOMY.sort: result sort order, for example BEST. Defaults to BEST.cabin_class/sort are passed through to Booking.com without a fixed enum check — only ECONOMY/PREMIUM_ECONOMY and BEST are confirmed values; upstream rejects other invalid values directly. data.offers[].token is kept for reference but not otherwise resolvable through this API.
| Field | Filled in, of 15 checked | Values in the sample |
|---|---|---|
| token | 15 | |
| price | 15 | 228.18 to 462.38, median 311.95 |
| currency | 15 | USD in all 15 |
| segments | 15 | median 2 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| type | string | No | Trip type, default ROUNDTRIP Allowed values: ROUNDTRIP, ONEWAY. | ||
| from | string | Yes | Origin location id, e.g. SGN.AIRPORT, from a prior autocomplete result | SGN.AIRPORT | |
| to | string | Yes | Destination location id, same composite format as from | CTU.CITY | |
| from_country | string | No | Origin country code | VN | |
| to_country | string | No | Destination country code | CN | |
| depart | string | Yes | Departure date, YYYY-MM-DD | 2026-09-05 | |
| return | string | No | Return date, YYYY-MM-DD, required when type is ROUNDTRIP | 2026-09-12 | |
| adults | integer | No | Number of adults, 1-9, default 1 | 1 | |
| children | integer | No | Number of children, 0-9 | 0 | |
| cabin_class | string | No | Cabin class, default ECONOMY | ECONOMY | |
| sort | string | No | Result sort order, default BEST | BEST | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/booking-flights/search?type=ROUNDTRIP&from=SGN.AIRPORT&to=CTU.CITY&depart=2026-09-05" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"type": "ROUNDTRIP",
"from": "SGN.AIRPORT",
"to": "CTU.CITY",
"depart": "2026-09-05",
"return": "2026-09-12",
"total_count": 42,
"min_price": 274,
"currency": "USD",
"offers": [
{
"token": "tok1",
"price": 274,
"currency": "USD",
"segments": [
{
"departure_airport": "SGN",
"arrival_airport": "CTU",
"departure_time": "2026-09-05T08:00:00",
"arrival_time": "2026-09-05T13:00:00",
"legs": [
{
"departure_airport": "SGN",
"arrival_airport": "CTU",
"carrier": "VietJet Air",
"flight_number": 123,
"stops": 0
}
]
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/booking.bookingFlightSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | booking.FlightSearchResponse | No | ||||
| data.currency | string | No | ||||
| data.depart | string | No | ||||
| data.from | string | No | ||||
| data.min_price | number | No | ||||
| data.offers | array | No | ||||
| data.offers[].currency | string | No | ||||
| data.offers[].price | number | No | ||||
| data.offers[].segments | array | No | ||||
| data.offers[].segments[].arrival_airport | string | No | ||||
| data.offers[].segments[].arrival_city | string | No | ||||
| data.offers[].segments[].arrival_time | string | No | ||||
| data.offers[].segments[].departure_airport | string | No | ||||
| data.offers[].segments[].departure_city | string | No | ||||
| data.offers[].segments[].departure_time | string | No | ||||
| data.offers[].segments[].legs | array | No | ||||
| data.offers[].segments[].legs[].arrival_airport | string | No | ||||
| data.offers[].segments[].legs[].arrival_time | string | No | ||||
| data.offers[].segments[].legs[].cabin_class | string | No | ||||
| data.offers[].segments[].legs[].carrier | string | No | ||||
| data.offers[].segments[].legs[].carrier_code | string | No | ||||
| data.offers[].segments[].legs[].departure_airport | string | No | ||||
| data.offers[].segments[].legs[].departure_time | string | No | ||||
| data.offers[].segments[].legs[].duration_seconds | integer | No | ||||
| data.offers[].segments[].legs[].flight_number | integer | No | ||||
| data.offers[].segments[].legs[].stops | integer | No | ||||
| data.offers[].token | string | No | ||||
| data.return | string | No | ||||
| data.to | string | No | ||||
| data.total_count | integer | No | ||||
| data.type | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/booking-flights/search?type=ROUNDTRIP&from=SGN.AIRPORT&to=CTU.CITY&depart=2026-09-05" \
-H "x-api-key: $CRAWLORA_API_KEY"