mcpField
L
letsfg

letsfg

github.com/letsfg其他2.2k58 次安装3 天前更新
代码仓库

关于 letsfg

LetsFG 是面向 AI Agent 的机票与酒店搜索预订技能,也支持搜索接送和活动。它通过 MCP、SDK、命令行和 API 提供访问,并支持异步预订状态查询。

主要功能

  1. 01跨航空公司和订票网站搜索航班
  2. 02搜索酒店、接送和活动
  3. 03解析城市名与机场代码
  4. 04预订机票和酒店
  5. 05查询预订进度

适用场景

  1. 01跨多个销售方寻找航班
  2. 02比较可预订的酒店报价
  3. 03搜索地面接送或活动
  4. 04跟踪进行中的旅行预订

MCP 相关

LetsFG 在 https://letsfg.co/mcp 提供 MCP 服务,供兼容客户端连接。它向客户端提供旅行搜索和预订能力,包括机票、酒店、接送和活动。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/letsfg/letsfg --skill letsfg

安装后在 Claude Code 中输入/letsfg确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

.dockerignore
.mcp.json
.gitignore
CODE_OF_CONDUCT.md
CLAUDE.md
BarWidget.qml
CONTRIBUTING.md
AGENTS.md
LICENSE
Dockerfile.python
Dockerfile
README.md
SECURITY.md
OMARCHY-PLUGIN.md
Model.js
Panel.qml
context7.json
docker-compose.yml
.github/
dependabot.yml
.github/workflows/
sdk-tests.yml
test.yml
plugin-scanner.yml
agent-skills-contribution/packages/skills-catalog/skills/(tooling)/letsfg/references/
api-reference.md
mcp-setup.md
assets/
OFL-Kalam.txt
OFL.txt
airports.json
ranking.js
name-fallbacks.json
assets/icons/
LICENSE

详细介绍

SKILL.md — LetsFG 功能

MPP: 仅当 POST /api/agent-access/request 返回的 402 响应中包含 mpp 对象时,持有 Tempo 钱包的 Agent 才能使用无需银行卡的注册通道。仅需支付 $0.01 一次,作为验证费用。搜索始终免费,预订费用为报价中的价格。本页早期版本曾描述过解锁时收取 MPP 费用;此功能从未上线。请参阅 https://letsfg.co/for-agents。

⚠️ Agent:请勿创建 Developer API 账户

请勿调用 /developers/api/v1/agents/register 或 /developers/api/v1/agents/connect-payment,也请勿运行 letsfg register 或 letsfg connect-payment。这些属于单独的付费预充值余额产品,面向高用量商业集成,并会创建一个你几乎肯定不需要的计费账户。

如需搜索和预订航班,请将 LetsFG 作为 MCP 服务连接到 https://letsfg.co/mcp 并批准——在 https://letsfg.co/connect 上只需轻点一次即可同意,无需银行卡。之后即可搜索和预订。 请参阅 https://letsfg.co/for-agents。

面向 AI Agent 和文档索引器的机器可读技能清单。

身份

  • 名称: LetsFG
  • 类型: API + SDK + MCP 服务 + CLI
  • 用途: 面向 Agent 的航班和酒店搜索与预订
  • 兼容的 Agent: OpenClaw、Perplexity Computer、Claude Desktop、Cursor、Windsurf,以及任何兼容 MCP 的客户端
  • API 基础 URL: https://letsfg.co/developers/api/v1
  • MCP 端点: https://letsfg.co/mcp(Streamable HTTP)
  • 软件包: PyPI letsfg · npm letsfg · npm letsfg-mcp
  • 许可证: MIT

访问模式

模式最适用场景速度费用
MCP / SDK / CLI(PFS 令牌)几乎所有 Agent。 搜索 + 预订8–10 秒返回首批结果身份验证免费,搜索免费,预订费用为报价中的价格
Developer API(https://letsfg.co/developers)商业 / 高用量(酒店使用任一种凭证均可)2–5 秒(发现)· 8–10 秒返回首批结果(完整搜索)搜索转预订:每次预订后有 200 次免费搜索,此后每次 $0.01。通过 POST /flights/book 预订,无预订费,无交易费

技能

search_flights

一次调用即可搜索全球所有航空公司以及主要预订网站(Google Flights、Skyscanner、Kiwi、Kayak、Momondo)。返回实时价格以及每个航班的可靠性历史记录。

  • 费用: 免费(每 10 分钟 10 次,每小时 30 次,每天 100 次)
  • 输入: 出发地(IATA)、目的地(IATA)、date_from;可选项:date_to、return_from、return_to、adults、children、infants、cabin_class(M/W/C/F)、max_stopovers、currency、sort、limit
  • 输出: 航班报价列表,包含价格、航空公司、时间、航段、条件、passenger_ids
  • 注意: 使用 PFS(Bearer 令牌)时,直接调用 book_flight——无需解锁步骤——然后轮询 get_flight_booking。Developer API 同样无需解锁步骤:使用 POST /flights/book 预订,并轮询 GET /flights/bookings/{id}。
  • 速率限制(PFS): 每个账户每 10 分钟 10 次搜索、每小时 30 次、每天 100 次(添加银行卡后按卡计算)。轮询结果不计入次数。
resolve_hotel_city

将地点名称解析为酒店搜索所需的供应商城市 ID。

  • 费用: 免费(但账户中仍须留存银行卡)
  • 端点: POST /api/v1/hotels/destinations
  • 输入: text(地点名称,例如 “Warsaw”)
  • 输出: 匹配结果,最佳结果排在最前。将 Id 用作 city_id,将 Name 用作 city_name。
search_hotels

搜索真实可预订的酒店库存。

  • 费用: 免费。搜索无需银行卡;未绑定银行卡的账户每天可搜索一定次数的酒店。预订需要绑定支付方式,否则会返回 HTTP 402。
  • 身份验证: 使用 Developer API 密钥(X-API-Key)或连接流程中的 PFS 令牌均可。同一张卡可授权预订航班和酒店。
  • 端点: POST /api/v1/hotels/search
  • 输入: city_id、city_name、check_in、check_out、adults、children、child_ages、nationality、currency(默认为 USD)、limit
  • 输出: hotels[],其中每项包含 offers[];每个 offer 均包含 price(住客需支付的全包总价,以 currency 计价)、fx_rate、expected_cost、refundable、free_cancellation_until(仅限可退款房价)、cancellation_policy、combination_id_v2 和 session_id
  • 注意: 所有房价类型均可售,且有可退款和不可退款之分——预订前请展示 refundable 和 free_cancellation_until。请保留所选 offer 的 session_id 和 combination_id_v2;预订时两者缺一不可。price 是住客需支付的金额。
  • 额度: 每次酒店预订后可免费搜索酒店 1,000 次,之后可使用预付余额购买额度,每 1,000 次收费 $5.00。
search_transfers

搜索地面接送服务——专车、出租车、共享班车、机场快线。

  • 费用: 免费
  • 输入: origin、destination、date、passengers
  • 输出: 接送选项及价格和车型
search_activities

搜索活动——旅游团、门票、一日游(供应商覆盖范围有限)。

  • 费用: 免费
  • 输入: location、date_from、date_to
  • 输出: 活动选项及价格、描述和可订情况
resolve_location

将城市名称解析为 IATA 机场/城市代码。

  • 费用: 免费
  • 输入: query(城市名称,例如 “London”)
  • 输出: 匹配的 IATA 代码列表(例如 LON、LHR、LGW、STN、LTN、LCY)
unlock_flight_offer

已于 2026-09-08 停用——该路由会返回 410 Gone。

  • 两种接入方式均无需解锁步骤。预订时会锁定票价,且只有在生成真实 PNR 后才会扣款;这正是解锁功能原本要防范的问题。请改用 /api/agent-book(PFS)或 POST /flights/book(Developer API)。
  • 端点: POST /api/v1/bookings/unlock——会返回 410 Gone,SDK 中的 unlock() 也会以相同方式失败。
预订航班

预订报价。

  • PFS(Bearer token): POST /api/agent-book。无需解锁步骤——搜索后即可直接预订。 适用于搜索结果中的所有报价,无论报价来自哪个卖家。这与网站上的结账流程完全相同:显示的价格会在关联卡上预授权(不会扣款),LetsFG 预订 Agent 会向卖家购买机票,只有在获得真实航空公司 PNR 后才会扣款。如果预订失败,预授权会解除,不会扣款。
    • 输入: search_id 和 offer_id(必须与搜索结果原样一致;报价约 15 分钟后过期)、contact_email,以及每次调用一个 passenger:given_name、family_name、born_on、gender(m/f)、nationality(ISO-2)、phone_number 和 phone_country、address_line1、address_city、address_postal、address_country;passport_number/country/expiry 为可选项。
    • 输出(秒级): {"state": "booking_in_progress", "booking_ref": "eyJ...", "held": {"amount": 93, "currency": "EUR", "card": "visa ending 5709"}, "charged": 0}。 预订本身需要 4–11 分钟——轮询 get_flight_booking。
    • 不会扣款的情况: {"error": "missing_details", "missing_fields": [...]}(询问缺少的信息,然后再次调用)、 payment_method_required 和 payment_declined(两者都会提供 add_card_url: https://letsfg.co/connect)。
    • 同一趟行程有预订正在进行时,切勿再次调用——这会再次预授权。
    • CLI: letsfg book ws_off_xxx --search-id ws_xxx --passenger '{...}' --email [email protected]
    • Python: bt.book(offer_id=..., passengers=[{...}], contact_email=..., search_id=...)
  • 开发者 API: POST /api/v1/flights/book。流程相同,无需解锁步骤:票价会在关联的 Revolut 付款方式上预授权,LetsFG 预订 Agent 会购买机票,只有在获得真实航空公司 PNR 后才会扣款。不收取预订费或交易费。
    • 前提条件: 已通过 POST /api/v1/agents/connect-payment 关联 Revolut 付款方式(关联时不会扣款)。
    • 输入: search_id、offer_id、passengers(given_name、family_name、born_on、gender、email、phone_number、nationality 等)、contact_email、idempotency_key
    • 输出: 返回 202,包含 booking_id、held、charged: 0 和 poll_url。轮询 GET /api/v1/flights/bookings/{booking_id},直到状态为 terminal:completed(pnr、charged_amount)| failed(预授权已解除,不会扣款)| needs_attention。
  • 重要(两种方式均适用): 使用旅客的真实姓名(必须与护照/身份证件一致)和真实电子邮箱(航空公司会向此邮箱发送电子机票)。
查询航班预订状态

查看通过 book_flight 发起的预订进度(PFS)。POST /api/agent-book/status {"booking_ref": "eyJ..."}。

  • 费用: 免费。每隔 20–30 秒轮询一次。
  • 状态: booking_in_progress(Agent 正在卖家的结账页面操作——继续等待)→ completed(pnr、charged_amount、currency——已预订)| failed(failure_reason;预授权已解除,不会扣款)| needs_attention(LetsFG 的人工人员正在检查——请勿再次预订;系统会向旅客发送电子邮件)。updated_at_ms 表示状态最近一次变更的时间。
  • 只有状态为 completed 且包含 PNR,才表示预订成功。
book_hotel

开始预订酒店。返回一个任务,而不是预订结果。

  • 费用:报价中的 price。该金额会在已连接的银行卡上预授权(不会扣款),由 LetsFG 预订客房并向供应商付款,只有酒店确认后才会扣款。预订失败时会解除预授权。无预订费、无押金、无支付链接。
  • 端点:POST /api/v1/hotels/book
  • **输入:**session_id(所选报价的)、hotel_code、combination_id_v2、expected_price、 expected_cost、currency、fx_rate、city_id、city_name、check_in、check_out、adults、 guests[{title, first_name, last_name}]、email、phone;可选 phone_country_code、 special_requests、idempotency_key
  • **输出:**booking_job_id、booking_id、状态 "in_progress"、预授权金额、轮询 URL
  • **异步操作:**实际预订需要几分钟——供应商会重新锁定房价、确认客房并完成付款。轮询 get_hotel_booking,直到状态变为 succeeded、failed 或 attention。
  • **重要:**请原样传回所选报价返回的 expected_price、expected_cost、currency 和 fx_rate,否则预订会因 price_mismatch 被拒绝——绝不会向客人收取其未同意的价格。没有 expected_balance。
  • **本地软件包:**酒店预订需要 letsfg-mcp 2026.5.77+、letsfg 2026.5.101+(Python)或 letsfg 2026.5.74+(npm)。较早版本会发送已弃用的 expected_balance 契约,因此它们发起的每笔酒店预订都会被拒绝。托管版 MCP 无需更新。
  • **重要:**任务运行期间,切勿再次调用此工具——请轮询任务。使用相同的 idempotency_key 重试时,会返回现有任务,而不会重复预订。
  • **注意:**在预授权之前会检查客人姓名、电话和电子邮件(400 invalid_details)。
  • 重要:guests 必须包含房间内每个人的姓名,包括儿童:先列成人,再按 child_ages 的顺序列儿童。姓名数量少于搜索时的同行人数,预订会在提交给酒店之前失败,并解除预授权。
get_hotel_booking

获取通过 book_hotel 发起的预订结果。

  • **费用:**免费
  • 端点:GET /api/v1/hotels/booking/{booking_job_id}
  • **输出:**状态——in_progress,随后为 succeeded(确认信息、total_price + currency = 向客人收取的金额、是否可退款、free_cancellation_until、包含完整取消阶梯的条款)| failed(error;预授权已解除,未收取任何费用)| attention(error;LetsFG 的工作人员正在向供应商确认结果,预授权会保留——请勿再次预订)
  • **注意:**无论预订以何种结果结束,都会向客人发送电子邮件。
cancel_hotel_booking

取消酒店预订。

  • **费用:**在 free_cancellation_until 之前取消可退款房价时免费——费用将全额退还。若酒店会因取消而收费(不可退款房价,或已超过该日期),则会以 409 拒绝;酒店自己的取消阶梯列于预订的 terms 中。
  • 端点:POST /api/v1/hotels/cancel
  • **输入:**confirmation(仅限你自己的预订)
  • **输出:**confirmation、charge、refund
  • **注意:**此操作会在供应商处驱动浏览器,需要一分钟以上。如果超时,不要假定操作失败——请在重试前重新检查。
register

注册一个新的 AI Agent。

  • **费用:**免费
  • **输入:**agent_name、email
  • **输出:**api_key(永久凭证)
connect_payment

仅限开发者 API。POST /api/v1/agents/connect-payment 会返回一次性 connect_url;用户在浏览器中打开该链接并保存银行卡或 Revolut Pay。使用 PFS 通道的 Agent 不调用此接口——访问 https://letsfg.co/connect 即可完成连接,无需银行卡,首次预订时才会要求提供银行卡。

  • **费用:**免费——连接不会产生任何扣款
  • 输出:connect_url(有效期一小时)
  • **注意:**Stripe 于 2026-09-08 停用后,setup_payment(POST /agents/setup-payment)已弃用,并会返回 410 Gone。
get_agent_profile

获取当前 Agent 的资料、使用统计和付款状态。

  • 费用: 免费
  • 输出: Agent 详情、搜索次数、预订次数、付款状态

身份验证

PFS(推荐——几乎适用于所有 Agent): 来自连接流程的 Bearer 令牌。 连接无需银行卡,也不会产生任何费用。首次预订时才需要提供银行卡,届时会在 https://letsfg.co/connect 完成 0.00 Revolut 验证(可使用任何银行卡,或 Revolut Pay / Google Pay;无需 Revolut 账户;银行卡信息绝不会传给 LetsFG)。使用该方式可进行搜索、预订航班和预订酒店。

Authorization: Bearer eyJ...

获取令牌——唯一的接入方式:

  1. 将 LetsFG 添加为远程 MCP 服务:https://letsfg.co/mcp。
  2. 批准连接。OAuth 授权步骤会打开 https://letsfg.co/connect:轻点一次,无需银行卡。
  3. 通过 MCP 时,OAuth 令牌会自动随请求传递;通过原始 HTTP 时,请将其作为 Authorization: Bearer <token> 发送。

POST /api/agent-access/request 会以 JSON 返回 402 响应,其中包含这些步骤 (add_card_url、how)。Stripe 注册流程(setup_url、setup_intent、 card_token)已于 2026-09-02 停用,其签发的所有令牌均已撤销 (401 TOKEN_REVOKED;Stripe 凭据调用 /api/agent-access/verify 会返回 410)——请在 letsfg.co/connect 重新连接。letsfg auth(npm 或 PyPI)现在可在终端中引导你完成连接流程并保存令牌;除此之外,CLI 和 SDK 会从 LETSFG_BEARER_TOKEN 读取令牌。一张银行卡对应一个账户;配额按账户计算,添加银行卡后也会按银行卡计算。完整流程: https://letsfg.co/for-agents。

开发者 API(企业/高用量): 除 register 外,每个端点都需要 X-API-Key 标头。

X-API-Key: letsfg_...

调用 POST /api/v1/agents/register,并提供 agent_name 和 email,即可获取密钥。密钥永久有效——请保存好。

然后调用 POST /api/v1/agents/connect-payment 连接付款方式,并打开返回的 connect_url 一次(不会产生任何费用)。

完整工作流

预订航班——PFS(3 次 API 调用)
1. POST /api/search                    → Search flights (FREE), returns search_id; poll GET /api/results/{search_id}
2. POST /api/agent-book                → Book directly — no unlock step. Holds the fare on the connected card, returns booking_ref in seconds
3. POST /api/agent-book/status         → Poll every 20–30 s (4–11 min) → completed (PNR) | failed (hold released) | needs_attention
预订航班——开发者 API(5 次 API 调用)
1. POST /api/v1/agents/register          → Get API key (once)
2. POST /api/v1/agents/connect-payment   → Open the connect_url once to save a card (nothing charged)
3. POST /api/v1/flights/search           → Search flights (look-to-book: 200 free after every booking)
4. POST /api/v1/flights/book             → Hold the fare, dispatch the booking agent → booking_id (202)
5. GET  /api/v1/flights/bookings/{id}    → Poll until terminal → completed (PNR) | failed (hold released) | needs_attention
预订酒店(PFS Bearer 令牌或开发者 API 密钥——同一张银行卡授权两者使用)
1. Card on file (to book; search needs none) → PFS: asked for at the first booking; Developer API: POST /api/v1/agents/connect-payment
2. POST /api/v1/hotels/destinations        → Place name → city_id
3. POST /api/v1/hotels/search              → Bookable rates (card required; 1,000 free after every hotel booking)
4. POST /api/v1/hotels/book                → Holds the price; returns booking_job_id — NOT a booking
5. GET  /api/v1/hotels/booking/{job_id}    → Poll ~20s until succeeded / failed / attention
                                             → confirmation + total_price + currency
6. POST /api/v1/hotels/cancel              → Optional; free on a refundable rate before free_cancellation_until

第 4 步会从银行卡中预授权全额,只有酒店确认后才会扣款;预订失败则会解除预授权。没有预订费、押金或付款链接。任务运行期间切勿重复执行第 4 步——请轮询任务状态。

CLI 用法

pip install -U letsfg   # 2026.5.101 or later books hotels

export LETSFG_BEARER_TOKEN=eyJ...   # token from the connect flow (see Authentication)

# Search flights — prints search_id, needed for book
letsfg search LHR JFK 2026-04-15
letsfg search LON BCN 2026-04-01 --return 2026-04-08 --cabin C --sort price
letsfg search GDN BER 2026-05-10 --adults 2 --children 1

# Resolve locations
letsfg locations "New York"

# Book — price shown on the offer, no unlock step. Holds the fare on the connected
# card and prints a booking_ref; poll POST /api/agent-book/status every 20–30 s
letsfg book ws_off_xxx --search-id ws_xxx \
  --passenger '{"given_name":"John","family_name":"Doe","born_on":"1990-01-15","gender":"m","nationality":"GB","phone_number":"+447123456789","phone_country":"GB","address_line1":"1 High St","address_city":"London","address_postal":"N1 9GU","address_country":"GB"}' \
  --email [email protected]

# Machine-readable output
letsfg search GDN BER 2026-03-03 --json

要改用开发者 API?执行一次 letsfg register + letsfg connect-payment(打开打印出的链接),然后执行 letsfg search ... --api-key letsfg_... 和 letsfg book off_xxx --search-id <search_id> --api-key letsfg_... --passenger '{...}' --email ...。 无需解锁步骤。

Python SDK 用法

from letsfg import LetsFG

bt = LetsFG()  # reads LETSFG_BEARER_TOKEN — the token from the connect flow

# Search
results = bt.search("LHR", "JFK", "2026-04-15")
for offer in results.offers:
    print(f"{offer.price} {offer.currency} — {', '.join(offer.airlines)}")

# Book — price shown on the offer, no unlock step. Holds the fare on the
# connected card; a LetsFG agent buys the ticket; captured only on a real PNR.
result = bt.book(
    offer_id=results.offers[0].id,
    passengers=[{
        "given_name": "John", "family_name": "Doe",
        "born_on": "1990-01-15", "gender": "m", "nationality": "GB",
        "phone_number": "+447123456789", "phone_country": "GB",
        "address_line1": "1 High St", "address_city": "London",
        "address_postal": "N1 9GU", "address_country": "GB",
    }],
    contact_email="[email protected]",
    search_id=results.search_id,
)
if "missing_fields" in result:
    print("Nothing charged — ask for:", result["missing_fields"])
else:
    print("Started:", result["booking_ref"], result["held"])
    # poll POST /api/agent-book/status {"booking_ref": ...} every 20–30 s
    # until state is completed (pnr) | failed (hold released) | needs_attention

要改用开发者 API?使用 LetsFG(api_key="letsfg_..."),然后调用 bt.book(offer_id, passengers, contact_email, search_id=..., idempotency_key=...)——无需解锁步骤。该调用会启动预订;可使用 bt.get_booking(booking_id) 轮询状态,或调用 bt.book_and_wait(...) 阻塞等待预订完成。

MCP 服务设置

远程(Streamable HTTP)——Agent 的入口:

{
  "mcpServers": {
    "letsfg": { "url": "https://letsfg.co/mcp" }
  }
}

Claude Code:claude mcp add --transport http letsfg https://letsfg.co/mcp。 Claude:从 Claude 官方连接器目录添加,https://claude.ai/directory/letsfg——无需粘贴 URL(添加后,也可在 Claude Desktop 和 Claude 手机应用中使用)。 ChatGPT:在浏览器中访问 chatgpt.com(ChatGPT 手机应用无法添加),依次选择 Plugins > Add > Add custom MCP server,输入该 URL,并将身份验证设为 OAuth;添加后,也可在手机应用中使用。Windsurf 使用 "serverUrl",而非 "url"。客户端会运行 OAuth;同意步骤会打开 https://letsfg.co/connect:点一下即可,无需银行卡。客户端收到令牌后即可立即搜索;首次预订时才会要求提供银行卡。 Developer API 账户可以使用相同的 URL,并通过 "headers": {"X-API-Key": "letsfg_..."} 代替 OAuth。

本地(stdio)——需要你已有的令牌:

npm install -g letsfg-mcp@latest   # 2026.5.77 or later books hotels
LETSFG_BEARER_TOKEN=eyJ...  letsfg-mcp   # token from the connect flow

本地服务也接受 LETSFG_API_KEY,用于 Developer API。 book_flight 会根据已设置的凭据自动分派。其 authenticate 工具会返回当前的连接说明(add_card_url、 how);运行 letsfg auth 可在终端中生成令牌。

MCP 工具

工具说明费用
search_flights通过服务器端引擎搜索全球所有航空公司免费
resolve_location城市名称 → IATA 代码免费
book_flight开始预订。PFS:直接预订,无需解锁步骤——从已连接的银行卡中冻结票价,并返回 booking_ref。Developer API 密钥:调用方式相同,无需解锁步骤报价显示的价格,无额外 LetsFG 费用(PFS)
get_flight_booking每隔 20–30 s 轮询一次 PFS 预订:booking_in_progress → completed(PNR)/ failed(已解除冻结)/ needs_attention免费
unlock_flight_offer已于 2026-09-08 退役——返回 410 Gone。请直接调用 book_flight—
connect_payment[仅限 Developer API] 生成一次性链接,将银行卡连接到付费账户(不会扣款)。PFS Agent 请改为访问 letsfg.co/connect 进行连接免费
resolve_hotel_city地名 → search_hotels 使用的供应商城市 ID免费
search_hotels可预订的酒店房价,包括可退款和不可退款选项免费(每次酒店预订 1,000)
book_hotel开始酒店预订:冻结房价,酒店确认后扣款。返回 booking_job_id报价显示的价格
get_hotel_booking轮询,直到状态变为 succeeded / failed / attention免费
cancel_hotel_booking在 free_cancellation_until 之前取消可退款预订(退还 98%,收取 2% 费用)免费
get_agent_profile查看用量统计免费

搜索标志参考

标志API 字段值默认值
--adultsadults1–91
--childrenchildren0–90
--infantsinfants0–90
--cabincabin_classM(经济舱)、W(超级经济舱)、C(商务舱)、F(头等舱)(任意)
--returnreturn_fromYYYY-MM-DD—
--max-stopsmax_stopovers0–42
--sortsort价格、时长价格
--limitlimit1–10020
--currencycurrencyEUR、USD、GBP 等EUR
舱位等级代码说明
代码等级说明典型使用场景
M经济舱标准座位经济出行、大多数预订
W超级经济舱更多腿部空间、优先登机长途旅行,舒适度高于经济舱,但价格低于商务舱
C商务舱长途航班可平躺,享有贵宾室使用权商务出行、6 小时以上航班
F头等舱私人套间、高级餐饮超高端航线(航空公司有限)
--json—以 JSON 格式输出—

错误处理

异常HTTP 状态码情况
AuthenticationError401API 密钥无效或缺失
PaymentRequiredError402未关联付款方式,或搜索额度已用完
OfferExpiredError410优惠已不可用
LetsFGError422请求参数无效
LetsFGError429请求过多(采用退避策略重试)
LetsFGError502上游航空公司/酒店 API 错误
认证失败后的恢复
from letsfg import LetsFG
from letsfg.connectors.auth import BearerTokenError

try:
    bt = LetsFG()  # reads LETSFG_BEARER_TOKEN — the token from the connect flow
    flights = bt.search("LHR", "JFK", "2026-04-15")
except BearerTokenError:
    print("Token expired, revoked or missing — reconnect at https://letsfg.co/connect")

开发者 API:

from letsfg import LetsFG, AuthenticationError

try:
    bt = LetsFG(api_key="letsfg_...")
    flights = bt.search("LHR", "JFK", "2026-04-15")
except AuthenticationError:
    # API key invalid or expired — re-register, then connect a payment method on the new key
    creds = LetsFG.register("my-agent", "[email protected]")
    bt = LetsFG(api_key=creds["api_key"])
    print("Open once to connect a card:", bt.connect_payment()["connect_url"])  # nothing is charged
速率限制和超时处理
import time
from letsfg import LetsFG, LetsFGError

def search_with_retry(bt, origin, dest, date, max_retries=3):
    for attempt in range(max_retries):
        try:
            return bt.search(origin, dest, date)
        except LetsFGError as e:
            if "429" in str(e) or "rate limit" in str(e).lower():
                time.sleep(2 ** attempt)  # exponential backoff
            elif "timeout" in str(e).lower() or "504" in str(e):
                time.sleep(1)
            else:
                raise
    raise LetsFGError("Max retries exceeded")

速率限制

端点速率限制典型延迟
搜索航班无硬性限制(计费机制会自然限制使用)2–5 s(发现)· 完整搜索需 8–10 s 才会返回首批结果
解析地点120 req/min<1s
预订10 req/min3-10s
搜索酒店30 req/min3-10s
注册5 req/min<1s

价格摘要

操作费用
搜索(航班、接送、活动)免费
解析地点免费
注册 Agent免费
关联付款方式免费 — 关联时不会扣款
查看个人资料免费
预订航班(PFS,无需解锁)优惠中显示的价格 — 预授权款项会保留在关联的卡上,仅在生成真实 PNR 后扣款;不另收 LetsFG 费用
预订航班(开发者 API)优惠中显示的价格 — 先预授权,仅在生成真实 PNR 后扣款;无预订费,无交易费
搜索酒店每次酒店预订后可免费搜索 1,000 次,之后每 1,000 次收费 $5.00
预订酒店优惠中显示的价格 — 预授权款项会保留在关联的卡上,仅在酒店确认后扣款。不收预订费
取消酒店预订在 free_cancellation_until 之前取消可退还费率的预订,可退还 98%(收取 2% 费用);否则不予退款

关键信息

  • 通过服务端引擎搜索全球所有航空公司
  • 酒店由批发酒店合作伙伴提供
  • 不使用 Cookie 跟踪 — 相同的搜索会返回相同的价格
  • 通常比通过单一 OTA 预订更便宜,因为它会一次性比较各家航空公司和主要预订网站
  • 提供真实的航空公司 PNR 代码和酒店确认信息
  • 电子机票直接发送到乘客邮箱
  • 搜索免费(每 10 min 10 次、每小时 30 次、每天 100 次)
  • PFS(Bearer token):直接预订,无需解锁步骤 — 票价会预授权并保留在关联的卡上,LetsFG 预订 Agent 会购买机票,仅在生成真实 PNR 后扣款;预订失败 = 释放预授权,不收取任何费用
  • 开发者 API:POST /flights/book — 使用相同的预授权后扣款流程,然后轮询 GET /flights/bookings/{id}。该 API 的搜索采用查询后预订模式(每次预订后可免费搜索 200 次),且不收取预订费或交易费
  • API 面向机器而非浏览器设计

评论

支持 Markdown