MPP (updated 2026-07-30): the MPP (Machine Payments Protocol)
402challenge is live, as a card-free enrolment lane for agents holding a Tempo wallet. It costs $0.01 once, as verification only — MPP has no zero-amount intent, so a card-free rail has to settle something. Search and booking stay free. Earlier revisions of this page described an MPP charge at unlock time; that never shipped. See https://letsfg.co/for-agents.
Do NOT call
/developers/api/v1/agents/registeror/developers/api/v1/agents/setup-payment, and do NOT runletsfg registerorletsfg setup-payment. Those belong to a separate, paid, prepaid-balance product for high-volume commercial integrations and create a billing account you almost certainly do not want.To search and book flights, run
letsfg auth— a zero-amount card setup (nothing charged), then search and book. See https://letsfg.co/for-agents.
Planning a trip shouldn't mean 47 tabs open, 3 hours of searching, and that feeling you could've got a better deal if you'd just waited a little longer.
Then a separate app to watch for delays. Then another one for the ride to the airport.
So we're building one thing that handles all of it.
The real best deal, across every airline and OTA. The right airport when your city has three. Ground transport on the other end. Someone watching your flight so a delay or cancellation gets handled before you're the one stuck in a line.
No markup. No tracking. No price that goes up because you looked twice.
Search and booking work today, right here in this repo. The rest is what we're building next.
Join the community. Help others find cheaper flights. Spread the word.
⭐ Star the repo. Share with a friend ✈️
Hundreds of airlines. Real prices. One function call.
LetsFG gives your AI agent flight search and booking superpowers. Our server-side engine scans the entire world for the cheapest price. Search is free. Real airline tickets, booked through us or handed to you as a direct link.
The same flight costs $20–$50 less because you skip OTA inflation, cookie tracking, and surge pricing.
CLI or scripts: Run letsfg auth once — it puts a payment method on file through a zero-amount Stripe setup (nothing is charged) and returns a 90-day token. Then letsfg search and letsfg book hit our cloud engine. Developer API: a separate paid product for high-volume commercial use; most agents do not need it. → Get started
| Path 1 — CLI / SDK | Path 2 — PFS (Programmatic Flight Search via letsfg.co) | Path 3 — Developer API | |
|---|---|---|---|
| Best for | Developers, personal use, AI agents — easiest way in | Scripts/agents calling the API directly with a Bearer token | High-volume commercial integrations that want prepaid billing. Most agents should not use this |
| Speed | 60–90 s | 60–90 s | 2–5 s (discover) · 60–90 s (full search) |
| Search cost | Free (one-time letsfg auth, nothing charged) |
Free (one-time letsfg auth, nothing charged) |
Prepaid credits ($0.50/$0.20/$0.10 per search, monthly tiers) |
| Booking | POST /api/agent-book |
POST /api/agent-book |
Direct airline URLs |
| Setup | pip install letsfg && letsfg auth |
Payment method on file — see below | letsfg.co/developers |
| Runs where | Our servers (auth + ranking local) | Our servers | Our servers |
-
CLI / SDK (Path 1):
pip install letsfgand runletsfg authonce — it puts a payment method on file via a zero-amount Stripe setup (no charge, no authorization hold) and gives you a 90-day Bearer token. After that,letsfg searchcalls our server-side engine and applies the open-source ranking algorithm locally. Search is free and unlimited. -
PFS — Programmatic Flight Search (Path 2): For scripts and agents that call the API directly. letsfg.co is human-only by default (Cloudflare Turnstile + bot protection). Get a 90-day Bearer token by putting a payment method on file. Nothing is charged on the card lanes — it is a zero-amount Stripe setup:
POST https://letsfg.co/api/agent-access/request→402withsetup_url(hosted), aheadlessobject, and anmppobject- Present a payment method, whichever fits how you run:
- hosted — a human adds a card at
setup_url, then send{ "setup_session_id": "cs_..." } - headless — no browser: create a PaymentMethod and confirm the SetupIntent yourself against
api.stripe.comwith the supplied publishable key, then send{ "setup_intent_id": "seti_..." } - MPP — no card at all: answer the
WWW-Authenticate: Paymentchallenge ($0.01 once, verification only), then retry withAuthorization: Payment <credential>
- hosted — a human adds a card at
POST https://letsfg.co/api/agent-access/verify→ receive your Bearer token- Search:
POST https://letsfg.co/api/searchwithAuthorization: Bearer <token> - Book:
POST https://letsfg.co/api/agent-book
Full guide and response schema: letsfg.co/for-agents. Booking returns either a confirmed order or a direct booking link for that exact offer.
-
Developer API (Path 3): Paid server-side search at letsfg.co/developers. Prepaid credits, direct airline booking URLs (no checkout step), full NL query parsing, and a
/discoverendpoint that checks 20 destinations in one call for 1 credit (2–5 s). Includes a free sandbox at/sandbox/flights/*. Full docs: letsfg.co/developers/api/docs.
Free server-side search: Use Path 1 or PFS — one
letsfg auth(a zero-amount card setup, nothing charged) gives you a 90-day token and free searches on our servers. No Playwright, no local install beyond the SDK.
Direct booking URLs with no per-booking fee: Use the Developer API (Path 3) — prepaid credits, instant results, no checkout layer.
We searched 5 routes on Google Flights and LetsFG on the same day (June 15, 2026). Same airline, same itinerary — LetsFG was cheaper every time:
| Route | Airline | Google Flights | LetsFG | You Save |
|---|---|---|---|---|
| LAX → Paris (CDG) | WestJet, 1 stop | $723 | $687 | $36 |
| Warsaw → Bali (DPS) | Etihad, 1 stop | $876 | $842 | $34 |
| SFO → London (LHR) | WestJet, 1 stop | $669 | $636 | $33 |
| Chicago → Miami | Spirit, nonstop | $120 | $114 | $6 |
| London → Barcelona | Vueling, nonstop | $62 | $56 | $6 |
| LA → New York (JFK) | Frontier, 1 stop | $125 | $124 | $1 |
$116 cheaper across 6 routes in a verified comparison (May 2026). Google Flights inflates on repeat searches; LetsFG returns the same prices however often you run the search, because it reads airlines and the major booking sites directly rather than tracking you.
Why the difference? Google Flights only searches its own limited set of airline partners. LetsFG searches everywhere — Skyscanner, Kiwi, Kayak, Momondo, plus direct airline websites (Ryanair, United, Southwest, EasyJet, Spirit, Norwegian, AirAsia, and hundreds more). More sources = better prices. No demand-based inflation and no cookie tracking: the same search returns the same prices however often you run it.
Human users: Use letsfg.co and search flights instantly in your browser:
Search any route, compare live results, and unlock the booking links for the flights you want — no installation needed.
Agents / scripts (free server-side): Get a Bearer token by putting a payment method on file (nothing is charged) → use POST /api/search and POST /api/agent-book. This is PFS — Programmatic Flight Search powered by the letsfg.co engine, free for 90 days per token. See letsfg.co/for-agents for the full guide.
When you're ready to integrate it into your own agent, keep reading.
| How you use it | Search | Booking URL unlock | Runs where? |
|---|---|---|---|
| CLI / Python SDK / npm | ✅ Free (Twitter/X token) | 1% fee (min $3) via letsfg.co | Our servers |
| MCP Server | ✅ Free (Twitter/X token) | 1% fee (min $3) via letsfg.co | Our servers |
| letsfg.co (website / agent API) | ✅ Free | 1% fee (min $3) via letsfg.co | Our servers |
| Developer API | Prepaid credits | Included (direct airline URLs) | Our servers |
CLI / SDK / MCP = free search. Run letsfg auth once (a zero-amount card setup — nothing is charged) and searches are free for 90 days. No credits, no Playwright. Booking goes through POST /api/agent-book.
Developer API = prepaid, business use. letsfg.co/developers returns direct airline booking URLs with no per-booking fee. Monthly billing: $0.50/search for the first 10, $0.20 for 11–1,000, then $0.10/search. Resets monthly. Minimum top-up: $5.
PFS (raw API) = same as CLI but you call the API directly. Get a 90-day Bearer token by putting a payment method on file, then call POST /api/search and POST /api/agent-book yourself. Purpose-built for agents (OpenClaw, Claude, GPT, etc.) that call the API directly.
💡 Know someone who travels? The more people discover LetsFG, the more airlines we cover — and the better it gets for everyone. ⭐ Star · Share with a friend
| Google Flights / Expedia | LetsFG | |
|---|---|---|
| Price | Inflated (tracking, cookies, surge) | Stable across repeat searches. $116 cheaper across 6 routes, verified May 2026. |
| Coverage | Misses budget airlines | Hundreds of airlines — OTAs, budget carriers, full-service |
| Speed | 30 s+ (page loads, ads, redirects) | CLI/PFS: 60–90 s · API discover: 2–5 s |
| Repeat search raises price? | Yes | Never |
| Works in AI agents? | No API | CLI · MCP · PFS (Twitter/X token, free) · Developer API (prepaid) |
| Booking | Redirects to OTA checkout | Real airline PNR, e-ticket to inbox |
| Cabin class filter | No | Economy, premium, business, first |
| Cost to you | Hidden markup | CLI/PFS: free search. Developer API: prepaid credits. |
Pick where you want search to run. Local runs on your machine for free; PFS and the Developer API run on our servers.
pip install letsfg
letsfg auth # one-time card-on-file setup → 90-day Bearer token (nothing charged)
letsfg search LHR BCN 2026-06-15One auth step, then searches are free for 90 days — no install of browsers, no scrapers. The search runs on our servers.
letsfg search LHR JFK 2026-06-15 --cabin C # cabin class: M economy, W premium, C business, F firstBooking from CLI search: you get a letsfg.co booking link, not a direct airline URL. Unlock it through the letsfg.co concierge checkout (1% fee, min $3) to reveal the airline link. Want direct airline URLs with no fee? Use the Developer API below.
Run LetsFG's full search on our servers — no local browser, no install. Access requires a payment method on file: letsfg.co is human-only (Cloudflare Turnstile), so a Bearer token is the only programmatic way in. Nothing is charged to get one — it is a zero-amount Stripe setup — and the token lasts 90 days.
# 1. Request a challenge code
curl -X POST https://letsfg.co/api/agent-access/request
# 2. Add a card at the returned setup_url (nothing is charged), or confirm the
# SetupIntent yourself against api.stripe.com with the supplied publishable key
# 3. Exchange it → receive a 90-day Bearer token
curl -X POST https://letsfg.co/api/agent-access/verify \
-H "Content-Type: application/json" \
-d '{"setup_session_id":"cs_<from step 1>"}'
# 4. Search with the token
curl -X POST https://letsfg.co/api/search \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{"origin":"LHR","destination":"BCN","date_from":"2026-06-15"}'Search is free; booking links go through letsfg.co (1% fee, min $3). Full guide and response schema: letsfg.co/for-agents.
A separate paid product for high-volume commercial integrations; most agents should not use it. Prepaid credits, results in seconds, direct airline booking URLs — plus /discover (20 destinations in one call, 1 credit), async polling, NL query parsing, and a free sandbox.
# Register, then search with your API key
curl -X POST https://letsfg.co/developers/api/v1/agents/register \
-H "Content-Type: application/json" \
-d '{"agent_name":"my-agent","email":"you@example.com"}'
curl -X POST https://letsfg.co/developers/api/v1/flights/search \
-H "X-API-Key: trav_..." \
-H "Content-Type: application/json" \
-d '{"origin":"LHR","destination":"BCN","date_from":"2026-06-15"}'Pricing: $0.50/search for the first 10 each month, $0.20 for 11–1,000, $0.10 beyond. Minimum top-up $5. Test for free in the sandbox first. Full docs: letsfg.co/developers/api/docs.
Full search → unlock → book flow
# Search (free with letsfg auth token)
letsfg search LON BCN 2026-04-01 --return 2026-04-08 --sort price
# Unlock (confirms live price, holds for 30 min — 1% fee, min $3)
letsfg unlock off_xxx
# Book
letsfg book off_xxx \
--passenger '{"id":"pas_0","given_name":"John","family_name":"Doe","born_on":"1990-01-15","gender":"m","title":"mr"}' \
--email john.doe@example.com💡 Like what you see? Support us — ⭐ Star · Share with a friend
{
"mcpServers": {
"letsfg": {
"command": "npx",
"args": ["-y", "letsfg-mcp"]
}
}
}Run letsfg auth inside the MCP session once (prints the tweet to post, then saves the token). After that, searches work immediately.
Add API key for unlock/book
{
"mcpServers": {
"letsfg": {
"command": "npx",
"args": ["-y", "letsfg-mcp"],
"env": {
"LETSFG_API_KEY": "trav_your_api_key"
}
}
}
}Get a key: letsfg register --name my-agent --email you@example.com
5-minute quickstarts: Claude Desktop · Cursor · Windsurf
from letsfg import LetsFG
bt = LetsFG() # reads LETSFG_API_KEY from env
flights = bt.search("LHR", "JFK", "2026-04-15")
print(f"{flights.total_results} offers, cheapest: {flights.cheapest.summary()}")import { LetsFG } from 'letsfg';
const bt = new LetsFG({ apiKey: 'trav_...' });
const flights = await bt.search('LHR', 'JFK', '2026-04-15');
console.log(`${flights.totalResults} offers`);from letsfg.local import search_local
# Reads LETSFG_BEARER_TOKEN env var or ~/.letsfg/config.json (set by `letsfg auth`)
result = await search_local("GDN", "BCN", "2026-06-15")
for offer in result.offers[:5]:
print(f"{offer.airlines[0]}: {offer.currency} {offer.price}")| Package | Command | What you get |
|---|---|---|
| Python SDK + CLI | pip install letsfg |
SDK + CLI (run letsfg auth once for free search) |
| MCP Server | npx letsfg-mcp |
Claude, Cursor, Windsurf (run letsfg auth once) |
| JS/TS SDK | npm install -g letsfg |
SDK + CLI + open-source ranking engine |
| Remote MCP | https://letsfg.co/developers/api/mcp |
No install (API key required) |
| Agent Skill | npx skills add LetsFG/LetsFG |
Install flight search skill for any AI agent (skills.sh) |
| Smithery | smithery.ai/servers/letsfg | One-click MCP install |
| Command | Description |
|---|---|
letsfg auth |
One-time card-on-file setup (nothing charged) → saves 90-day Bearer token |
letsfg search <origin> <dest> <date> |
Search flights (free after letsfg auth) |
letsfg register |
Register an account for the Developer API |
letsfg setup-payment |
Attach a payment method (required for unlock) |
letsfg recover --email <email> |
Recover lost API key via email |
letsfg locations <query> |
Resolve city/airport to IATA codes |
letsfg unlock <offer_id> |
[Developer API only] Confirm live price & pay unlock fee (1% of ticket, min $3). Not part of the agent flow — use letsfg book |
letsfg book <offer_id> |
Book the flight |
letsfg me |
View profile & usage stats |
All commands accept --json for structured output and --api-key to override the env variable.
letsfg auth (once) → Bearer token (90-day) → Search (free) → Unlock & Book via letsfg.co
- Auth —
letsfg authruns the payment-token flow:POST /api/agent-access/request→ add a card at the printedsetup_url(or confirm the SetupIntent headlessly) →POST /api/agent-access/verify. Nothing is charged. Token saved to~/.letsfg/config.json, valid 90 days. - Search —
letsfg search LHR BCN 2026-06-15callsPOST https://letsfg.co/api/search, polls until done (60–90 s), and applies the open-source ranking algorithm locally. - Book —
POST /api/agent-book. Returns either a confirmed order or a direct booking link for that exact offer. No LetsFG fee either way.
Payment method on file -> Bearer token (90-day) -> POST /api/search -> poll GET /api/results/<id> -> POST /api/agent-book
- Get a Bearer token —
POST /api/agent-access/request→ present a payment method (hosted card page, headless SetupIntent, or MPP) →POST /api/agent-access/verify. Nothing is charged on the card lanes. Token valid 90 days. - Search —
POST https://letsfg.co/api/searchwithAuthorization: Bearer <token>. Returns{ search_id }. PollGET /api/results/<search_id>every 10 s untilstatus: "done". - Book —
POST /api/agent-book. No LetsFG fee.
Register → Fund balance → Discover or Search (credits) → Direct booking URL (no checkout)
- Discover —
POST /flights/discoverwith up to 20 destinations, get indicative prices sorted cheapest-first. 1 credit, 2–5 s. Use to rank options before committing to a full search. - Full search —
POST /flights/search(blocking) or/flights/search/async(non-blocking + poll). 1 credit, 60–90 s. - Book — each offer includes a direct airline
booking_url. No LetsFG fee, no checkout step.
Virtual interlining
The server-side engine builds cross-airline round-trips by combining one-way fares from different carriers. A Ryanair outbound + Wizz Air return can save 30-50% vs booking a round-trip on either airline alone.
City-wide airport expansion
Search a city code and LetsFG automatically searches all airports in that city. LON expands to LHR, LGW, STN, LTN, SEN, LCY. NYC expands to JFK, EWR, LGA. Works for 25+ major cities worldwide.
CLI / SDK / MCP / PFS
CLI / SDK / MCP / AI Agent
│ Payment method on file -> 90-day Bearer token
▼
POST letsfg.co/api/search (bot-protected, token required)
│
▼
letsfg.co server-side search engine
│
▼
GET /api/results/<search_id> (poll every 10 s until done)
│
▼
Ranking applied locally (sdk/js/src/ranking.ts, open-source)
│
▼
Results + booking links via letsfg.co (1% fee)
Developer API
Product / Team / Agent
│ API key + prepaid credits
▼
letsfg.co/developers/api/v1
├─ /flights/discover (indicative prices, 20 dest, 1 credit, 2–5 s)
├─ /flights/search (full search, 1 credit, 60–90 s)
├─ /flights/search/async (non-blocking + poll)
├─ /flights/parse-query (Gemini NL parsing, free)
└─ /sandbox/flights/* (fake data, same schema, free)
│
▼
Direct airline booking_url - no checkout step
Airlines covered
| Region | Airlines |
|---|---|
| Europe | Ryanair, Wizz Air, EasyJet, Norwegian, Vueling, Eurowings, Transavia, Pegasus, Turkish Airlines, Condor, SunExpress, Volotea, Smartwings, Jet2, LOT Polish Airlines, Finnair, SAS, Aegean, Aer Lingus, ITA Airways, TAP Portugal, Icelandair, PLAY |
| Middle East & Africa | Emirates, Etihad, Qatar Airways, flydubai, Air Arabia, flynas, Salam Air, Air Peace, FlySafair, EgyptAir, Ethiopian Airlines, Kenya Airways, Royal Air Maroc, South African Airways |
| Asia-Pacific | AirAsia, AirAsia X, IndiGo, SpiceJet, Akasa Air, Air India, Air India Express, Alliance Air, Star Air, EaseMyTrip OTA, VietJet, Cebu Pacific, Scoot, Jetstar, Peach, Spring Airlines, Lucky Air, 9 Air, Nok Air, Batik Air, Jeju Air, T'way Air, ZIPAIR, Skymark, H.I.S. Travel OTA, Singapore Airlines, Cathay Pacific, Malaysian Airlines, Thai Airways, Korean Air, ANA, JAL, Qantas, Virgin Australia, Bangkok Airways, Air New Zealand, Garuda Indonesia, Philippine Airlines, US-Bangla, Biman Bangladesh |
| Americas | Southwest, JetBlue, Frontier, Spirit, Allegiant, Avelo, Breeze, Sun Country, Flair, Porter, WestJet, Volaris, VivaAerobus, GOL, Azul, LATAM, JetSmart, Flybondi, Arajet, Wingo, Sky Airline, Copa, Avianca |
| Oceania | Rex, Bonza, Link Airways, Air Vanuatu, Fiji Airways |
letsfg.co · API Docs · Connector Health · PyPI · npm · Smithery · Instagram · TikTok · X
Open source · MIT License · Made with ❤️ by travelers, for travelers
Want updates? Click Watch above, or follow LetsFG on Instagram, @letsfg_ on TikTok, or @LetsFG_ on X.