Quickstart
Five minutes to your first live price
Five steps, all of them a paste. No SDK, no account on this site, nothing to install. The free tier is 10 requests a month on flights and 10 on hotels, so the steps below are ordered to spend as few of them as possible.
Get a key
Both APIs are listed on RapidAPI, and one key works for both the marketplace hosts and api.flightpowers.com. Subscribe to the free tier. It takes about a minute and asks for no card, then copy the key from RapidAPI's Apps page.
Put it in your shell so nothing below contains a real key: export RAPIDAPI_KEY="…"
Check the key works, before you spend a search on finding out
curl -sS "https://api.flightpowers.com/v1/verify" \
-H "x-api-key: $RAPIDAPI_KEY"A 200 means the key authenticates. Anything else is worth fixing before step 3: 401 is a key the gateway does not recognise, 403 is a real key that is not subscribed to that listing.
Honest note: /v1/verify performs a real upstream check, so it costs one request against the hotels plan. On a 10-request free tier that is worth knowing before you run it in a loop.
Run your first search
curl -sS -X POST "https://api.flightpowers.com/v1/flights/oneway" \
-H "Content-Type: application/json" \
-H "x-api-key: $RAPIDAPI_KEY" \
-d '{
"from_airport": "JFK",
"to_airport": "CUN",
"departure_date": "2027-01-01",
"limit": 5,
"currency": "usd"
}'Three fields are required: from_airport, to_airport, departure_date. Airports are IATA codes, the date is YYYY-MM-DD. A round trip is its own endpoint, /v1/flights/roundtrip, which takes a return_date and prices the legs as one itinerary. It is not two one-ways stapled together, and calling it that way gives you a different, usually worse answer.
Read the answer
// the cheapest row of that captured response, trimmed
{
"price": "$177",
"price_as_number": 177,
"price_range_in_relation_to_other_periods": "typical",
"price_insights_low": 140,
"price_insights_high": 180,
"airline": "American",
"duration": "4 hr 25 min"
}price_range_in_relation_to_other_periods is Google's own verdict on this fare: low, typical or high. And price_insights_low/high are the band it judged against. That is the field most competitors do not return, and it is what lets you say “book now” instead of just showing a number.
Check the x-search-status response header too. It is one of ok, empty, partial or degraded. empty means the route genuinely has no fares; degraded means the search did not complete, so an empty array from it says nothing about availability. Branch on the header, not on the array length.
Search hotels, from any market you like
curl -sS -X POST "https://api.flightpowers.com/v1/hotels/search" \
-H "Content-Type: application/json" \
-H "x-api-key: $RAPIDAPI_KEY" \
-d '{
"destination": "Lisbon",
"checkin_date": "2026-10-09",
"checkout_date": "2026-10-12",
"adults": 2,
"currency": "EUR",
"filters": [
"review_score_8",
"free_cancellation"
],
"proxy_country": "de"
}'The field is destination. A location key is rejected with a 400, and it is the single most common first-call mistake, because location is a field in the response.
proxy_country routes the request through a residential proxy in that country. Booking.com quotes different markets differently; this is how you observe that, and it is the basis of rate-parity and geo-pricing monitoring. Omit it and you get the global pool.
Same key, two hosts
If you would rather not depend on a marketplace
Every call above works just as well against the RapidAPI host you subscribed on. The paths differ; the key, the request bodies and the responses do not.
curl -X POST "https://google-flights-live-api.p.rapidapi.com/api/google_flights/oneway/v1" \
-H "Content-Type: application/json" \
-H "x-rapidapi-host: google-flights-live-api.p.rapidapi.com" \
-H "x-rapidapi-key: $RAPIDAPI_KEY" \
-d '{
"from_airport": "JFK",
"to_airport": "CUN",
"departure_date": "2027-01-01",
"currency": "usd"
}'api.flightpowers.com is our own domain and carries the machine-readable spec at /openapi.json. The key goes in x-api-key, x-rapidapi-key, or Authorization: Bearer, whichever your client makes easiest.