关于 bilt
bilt 是查询 Bilt 旅行门户酒店与航班报价的技能,无需搜索认证。它同时提供现金价格和 Bilt Points 成本,适合比较门户兑换价值及查找 HaFH 酒店;不支持预订。
主要功能
- 01查询酒店及客房价格
- 02搜索单程与往返航班
- 03同时返回现金与积分成本
- 04识别 HaFH 酒店
- 05按报价计算积分兑换价值
适用场景
- 01比较 Bilt 门户与奖励机票价格
- 02评估 Bilt Points 兑换价值
- 03寻找符合 HaFH 条件的酒店
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ borski/ travel-hacking-toolkit --skill bilt安装后在 Claude Code 中输入/bilt确认已加载。
详细介绍
Bilt 旅行门户搜索
通过公开的 REST API 搜索 Bilt Rewards 旅行门户。搜索无需身份验证。返回酒店和航班的美元现金价格以及 Bilt Points 所需点数。
重要提示:Bilt 是 Duffel 的白标服务
Bilt 的旅行搜索直接基于 Duffel 构建。所有迹象都表明这是一种完整的白标合作,而非部分集成:
- 航班报价 ID 为
off_XXX,航段 ID 为sli_XXX,航班区段 ID 为seg_XXX,飞机 ID 为arc_XXX,航空公司 ID 为arl_XXX。这些都是 Duffel 的 ID 格式。 - 航空公司和飞机的徽标由
assets.duffel.com提供。 - 酒店忠诚度计划的徽标由
assets.duffel.com/img/stays/loyalty-programmes提供。因此,酒店使用 Duffel Stays。 - JWT 中的
organisation_id: org_0000AaALZyFQ...符合 Duffel 的身份验证模式。 - 字段名称与 Duffel 完全一致:
marketingCarrier、operatingCarrier、cabinClassMarketingName、fareBasisCode、isNDC、ndcRedirectUrl、totalEmissionsKg、slices[].segments[].passengers[].baggages[]。
Bilt 在 Duffel 基础上增加的内容:
totalPointsRequired(按门户固定的 1.25 cpp 汇率计算的 Bilt Points 所需点数)isHafh(酒店的 Home Away From Home 标记)loyaltyProgram.reference(显示酒店所属品牌)- 一些 Bilt 专属筛选字段
这对工具包意味着:
- 对于仅现金支付的航班搜索,优先使用 duffel skill。它使用经过身份验证的 Duffel API 密钥,返回相同的数据,速度更快,并支持更多参数(多城市、时间窗口、最大中转次数、supplier_timeout 调整)。
- 对于 Bilt Points 相关信息(CPP、将门户价格与奖励兑换方案比较、Bilt 兑换计算),使用此 skill。点数价格仅由 Bilt 的接口提供。
- 对于 Home Away From Home 酒店调研,使用此 skill。
isHafh标记是 Bilt 专属的,可显示享有 $300+ 福利的酒店。
为什么重要
- Bilt Points 的标准兑换率为 1.25 cpp(1 USD = 80 points)。这是较优的固定门户兑换率之一。
- Home Away From Home(HaFH) 是 Bilt 的高端酒店计划。Gold 和 Platinum 会员每次入住可享 $300+ 福利(双人每日早餐、$100 酒店消费额度、抵达时客房升级、提前入住 / 延迟退房、专属 Virtuoso 旅行顾问)。
- Bilt Points 可按 1:1 转点至 Hyatt、Marriott、Hilton、IHG、United、AA、Air Canada Aeroplan、Air France/KLM、Virgin Atlantic、Cathay、Turkish 等,因此对于转点合作伙伴奖励搜索,此门户可作为 1.25 cpp 的“最低基准”进行比较。
- **航班由 Duffel 提供支持。**响应结构与 duffel skill 相同。航空公司相同、票价舱等相同、航班区段结构相同。
- **搜索无需身份验证。**无需浏览器自动化、登录或双重身份验证。直接使用 curl 即可。
适用场景
- 将 Bilt 门户价格与 seats.aero 奖励票进行比较
- 计算 Bilt Points 兑换的 CPP
- 查找 HaFH 酒店,以叠加 Bilt Gold/Platinum 福利
- 涉及 Bilt Points 时,判断现金支付还是点数兑换更合适
- 作为“兑换底价”参考:如果奖励航班的成本高于门户价格,则门户更划算
不适用场景
- **不涉及 Bilt Points 的纯现金航班搜索。**改用 duffel。Bilt 是 Duffel 的白标服务,因此 Duffel 可返回相同的现金价格和报价结构,速度更快,且支持更多参数。
- **预订航班或酒店。**此 skill 仅查找报价。预订需要登录并持有 Bilt Mastercard,不在此 skill 的范围内。
- **奖励航班搜索。**使用 seats-aero 搜索各忠诚度计划的奖励票可用情况。
- **Bilt 计划之外的酒店调研。**使用 premium-hotels 搜索 Amex FHR/THC 和 Chase Edit,使用 serpapi 搜索 Google Hotels 常规元搜索结果。
Bilt 积分估值
| 指标 | 数值 | 备注 |
|---|---|---|
| 门户兑换率 | 1.25 cpp | $1 = 80 积分(标准固定汇率) |
| 现金 → 积分公式 | points = round(usd / 0.0125) | 根据观察到的响应反向推导 |
| TPG 估值(转点) | 2.05 cpp | 转入最优合作伙伴时 |
**决策规则:**如果将 Bilt 积分转入合作伙伴计划可获得高于 1.25 cpp 的价值,就进行转点;否则使用门户。
API 基础地址
https://api.biltrewards.com/public/travel
所有端点均为公开端点,无需 API 密钥。响应采用标准 JSON 格式。
酒店搜索
第 1 步:查询地点搜索 ID
curl -s "https://api.biltrewards.com/public/travel/hotels/auto-complete?query=New+York" \
| jq '.searchResults[0].locationSuggestion'
返回:
{
"name": "New York",
"country": {"name": "USA", "code": "US"},
"region": {"name": "NY", "code": null},
"searchId": "ChIJOwg_06VPwokRYv534QaPC8g"
}
searchId 是 Google Places ID。你也可以将 searchType: HOTEL_SEARCH 的结果传入,以搜索特定酒店。
第 2 步:搜索酒店
curl -s "https://api.biltrewards.com/public/travel/hotels/search" \
--get \
--data-urlencode "checkInDate=2026-08-15" \
--data-urlencode "checkOutDate=2026-08-18" \
--data-urlencode "numGuestAdults=2" \
--data-urlencode "numRooms=1" \
--data-urlencode "searchId=ChIJOwg_06VPwokRYv534QaPC8g" \
| jq '.hotelResults | length'
通常返回 100 至 200 家酒店。同步执行,无需轮询。
必需参数
| 参数 | 类型 | 说明 |
|---|---|---|
checkInDate | YYYY-MM-DD | 必需 |
checkOutDate | YYYY-MM-DD | 必需 |
numGuestAdults | int | 必需,至少 1 |
numRooms | int | 必需,至少 1 |
searchId | string | 来自自动补全的 Google Places ID |
可选参数
| 参数 | 类型 | 说明 |
|---|---|---|
childrenAges | csv ints | 例如,5,8 表示两名年龄分别为 5 岁和 8 岁的儿童 |
hotelId | string | 搜索特定的 acc_XXX 酒店 |
酒店响应结构
{
stayDetails: { checkInDate, checkOutDate, numRooms, numGuestAdults, childrenAges },
hotelResults: [
{
id: "acc_XXX",
name: "Park Hyatt New York",
rating: 5, // star rating
description: "...",
isHafh: true, // Home Away From Home flag
loyaltyProgram: { // brand affiliation, if any
name: "World of Hyatt",
reference: "world_of_hyatt",
logoUrl: "..."
},
address: { street, city, stateProvince, countryCode, postalCode },
geolocation: { latitude, longitude },
amenities: [{ description, category }, ...],
images: [{ url }, ...],
lowestRateDetails: {
usdAmounts: { total }, // cash total in USD
points: 319681, // Bilt Points cost
dueAtHotelAmount, dueAtHotelCurrency,
...
}
}
],
filterDetails: { ... }
}
酒店详情(房型价格)
curl -s "https://api.biltrewards.com/public/travel/hotels/acc_0000AWPt2s3aNc1GpC5bmU?checkInDate=2026-08-15&checkOutDate=2026-08-18&numGuestAdults=2&numRooms=1" \
| jq '.hotelDetails | {name, isHafh, rates: .roomTypes[0]}'
返回包含完整酒店信息的 hotelDetails,以及包含每个可用价格的 roomTypes。
实用 jq 筛选器
# Top 10 cheapest hotels with HaFH flag and CPP rounded to 2 decimals
curl -s "$URL" | jq '
[.hotelResults[]
| select(.lowestRateDetails.usdAmounts.total != null)
| {name, isHafh, rating,
cash: .lowestRateDetails.usdAmounts.total,
points: .lowestRateDetails.points,
cpp: (((.lowestRateDetails.usdAmounts.total / .lowestRateDetails.points) * 100) * 100 | round / 100),
brand: .loyaltyProgram.name}]
| sort_by(.cash) | .[0:10]'
# Only HaFH properties (worth $300+ benefits if Gold/Platinum)
curl -s "$URL" | jq '
[.hotelResults[]
| select(.isHafh == true)
| {name, rating, cash: .lowestRateDetails.usdAmounts.total, points: .lowestRateDetails.points}]
| sort_by(.cash)'
航班搜索
第 1 步:提交搜索
curl -s "https://api.biltrewards.com/public/travel/flights/search" \
--get \
--data-urlencode "departureDate=2026-08-15" \
--data-urlencode "returnDate=2026-08-22" \
--data-urlencode "origin=SFO" \
--data-urlencode "destination=NRT" \
--data-urlencode "adults=1" \
--data-urlencode "cabinClass=business"
返回:
{
"data": {
"id": "orq_0000B5mQkPhO7VxuWClhZI",
"totalBatches": 35,
"remainingBatches": 35,
"createdAt": "...",
"clientKey": "..."
}
}
第 2 步:轮询结果
curl -s "https://api.biltrewards.com/public/travel/flights/search/$ID"
remainingBatches 会在 5 到 15 秒内逐步降至 0。首批结果返回后,响应中就会包含 offers 数组。每隔 3 到 5 秒轮询一次,直到 remainingBatches == 0,以获取完整结果集。
# Polling loop
for i in 1 2 3 4 5; do
RESP=$(curl -s "https://api.biltrewards.com/public/travel/flights/search/$ID")
REMAINING=$(echo "$RESP" | jq -r '.data.remainingBatches')
echo "Poll $i: $REMAINING batches remaining"
[ "$REMAINING" = "0" ] && break
sleep 4
done
echo "$RESP" | jq '.data.offers | length'
必需参数
| 参数 | 类型 | 说明 |
|---|---|---|
departureDate | YYYY-MM-DD | 必需 |
origin | IATA 机场代码 | 必需 |
destination | IATA 机场代码 | 必需 |
adults | int | 必需,至少 1 |
可选参数
| 参数 | 类型 | 说明 |
|---|---|---|
returnDate | YYYY-MM-DD | 往返行程;单程请省略 |
cabinClass | string | economy、premium_economy、business、first |
children | int | 儿童人数(需同时提供 childrenAges) |
infants | int | 怀抱婴儿人数 |
航班响应结构
与 Duffel 相同(Bilt 使用白标版 Duffel)。每个报价:
{
id: "off_XXX",
totalAmount: 1606.60, // cash total
totalCurrency: "USD",
baseAmount: 1132.00,
taxAmount: 474.60,
totalPointsRequired: 128528, // Bilt Points cost
totalPointsRequiredWithCredits: null, // applicable airline credits, if any
expiresAt: "2026-04-29T08:51:40Z",
owner: {
name: "KLM", iataCode: "KL", logoSymbolUrl, conditionsOfCarriageUrl
},
isNDC: false,
passengers: [{ type, loyaltyProgrammeAccounts, id }],
conditions: { refundBeforeDeparture, changeBeforeDeparture },
slices: [
{
id: "sli_XXX",
duration: "P1DT4H40M", // ISO 8601 duration
fareBrandName: "Standard",
origin: { iataCode, name, cityName, timeZone },
destination: { iataCode, name, cityName, timeZone },
segments: [
{
id, duration, departingAt, arrivingAt,
origin: {...}, destination: {...},
marketingCarrier: { name, iataCode, ... },
operatingCarrier: { name, iataCode, ... },
marketingCarrierFlightNumber: "0606",
aircraft: { name: "Boeing 787-10", iataCode: "781" },
stops: [],
passengers: [
{
passengerId,
fareBasisCode: "THA79NMP",
cabinClassMarketingName: "ECONOMY",
baggages: [{ type: "checked"|"carry_on", quantity }]
}
]
}
]
}
]
}
实用 jq 筛选器
# Top 5 cheapest offers with CPP calculation (rounded to 2 decimals)
echo "$RESP" | jq '
[.data.offers[]
| {airline: .owner.name,
cash: .totalAmount,
points: .totalPointsRequired,
cpp: (((.totalAmount / .totalPointsRequired) * 100) * 100 | round / 100),
stops: ([.slices[].segments | length] | map(. - 1)),
route: ([.slices[] | (.origin.iataCode + " -> " + .destination.iataCode)])}]
| sort_by(.cash) | .[0:5]'
# Group by airline, show cheapest per carrier
echo "$RESP" | jq '
[.data.offers[]
| {airline: .owner.name, cash: .totalAmount, points: .totalPointsRequired}]
| group_by(.airline)
| map({airline: .[0].airline, cheapest: (min_by(.cash))})'
# Filter to nonstop only
echo "$RESP" | jq '
[.data.offers[]
| select(([.slices[].segments | length] | add) == ([.slices | length]))
| {airline: .owner.name, cash: .totalAmount, points: .totalPointsRequired}]'
输出格式
**始终使用 Markdown 表格。**同时展示航班和酒店时,请分别使用独立表格。
酒店
| 酒店 | 星级 | HaFH | 品牌 | 现金 | 积分 | CPP |
|---|---|---|---|---|---|---|
| Park Hyatt New York | 5 | 是 | Hyatt | $3,996 | 319,681 | 1.25 |
| The St. Regis NY | 5 | 否 | Marriott | $4,210 | 336,800 | 1.25 |
航班(旧金山 SFO 至东京成田 NRT 单程)
| 航空公司 | 经停 | 时长 | 现金 | 积分 | CPP |
|---|---|---|---|---|---|
| Air Canada | 1(YVR) | 14 小时 5 分钟 | $871 | 69,720 | 1.25 |
| KLM | 1(AMS) | 28 小时 40 分钟 | $1,607 | 128,528 | 1.25 |
表格之后:突出显示最便宜的选项,标出用户有资格入住的 HaFH 酒店(需具备 Bilt Gold 或 Platinum 状态),并指出 CPP 明显异常的情况(这可能表示存在特别促销,或仅限积分兑换的「加值」价格)。
比较工作流
如需完整分析行程费用:
- 通过 awardwallet 查询 Bilt 积分余额。注意:Bilt 已纳入 AwardWallet。
- 通过 seats-aero 查询 奖励兑换替代方案。与门户价格(1.25 cpp)比较。
- 通过 transfer-partners 查询 转点合作伙伴。如果合作伙伴计划兑换 Bilt 积分的价值 >1.25 cpp,则应先转点,而不是使用门户。
- 通过 chase-travel(CSR/CSP 的 Points Boost 浮动机制,部分预订约为 1.5-2.0 cpp,但不保证最低兑换率)和 amex-travel(航班约为 1.0 cpp)查询 其他门户。请获取门户的实际报价,不要假定兑换率。
- 如果用户拥有 Bilt Gold 或 Platinum 身份,HaFH 福利每次住宿可增加约 $300 以上的价值。计算实际兑换率时应计入这项福利。
重要说明
isHafh: true表示该房源属于 Home Away From Home。全球约有 200 到 300 家豪华酒店。出现此标记时务必指出。- Bilt 不收取转点手续费。 与某些门户积分兑换不同,Bilt → 合作伙伴的转点比例为 1:1,且即时到账。
- 预订需要使用 Bilt 卡。 大多数高级福利(HaFH、Rent Day 积分倍率、身份等级)都要求持有 Bilt Mastercard。
- API 响应不包含 Agent 的用户上下文。 这是公开的未认证接口。认证后的调用会返回个性化数据(已保存的搜索、积分余额),但需要登录。本工具不涵盖这部分。
- Stellate(
bilt-rewards.stellate.sh) 是 Bilt 的 CMS 端点,而非搜索后端。它提供营销文案和福利说明。实际酒店和航班搜索数据来自api.biltrewards.com/public/travel,上述内容已完整涵盖相关数据。