mcpField
B
bilt

bilt

github.com/borski其他78069 次安装2 天前更新
代码仓库

关于 bilt

bilt 是查询 Bilt 旅行门户酒店与航班报价的技能,无需搜索认证。它同时提供现金价格和 Bilt Points 成本,适合比较门户兑换价值及查找 HaFH 酒店;不支持预订。

主要功能

  1. 01查询酒店及客房价格
  2. 02搜索单程与往返航班
  3. 03同时返回现金与积分成本
  4. 04识别 HaFH 酒店
  5. 05按报价计算积分兑换价值

适用场景

  1. 01比较 Bilt 门户与奖励机票价格
  2. 02评估 Bilt Points 兑换价值
  3. 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 家酒店。同步执行,无需轮询。

必需参数
参数类型说明
checkInDateYYYY-MM-DD必需
checkOutDateYYYY-MM-DD必需
numGuestAdultsint必需,至少 1
numRoomsint必需,至少 1
searchIdstring来自自动补全的 Google Places ID
可选参数
参数类型说明
childrenAgescsv ints例如,5,8 表示两名年龄分别为 5 岁和 8 岁的儿童
hotelIdstring搜索特定的 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'
必需参数
参数类型说明
departureDateYYYY-MM-DD必需
originIATA 机场代码必需
destinationIATA 机场代码必需
adultsint必需,至少 1
可选参数
参数类型说明
returnDateYYYY-MM-DD往返行程;单程请省略
cabinClassstringeconomy、premium_economy、business、first
childrenint儿童人数(需同时提供 childrenAges)
infantsint怀抱婴儿人数
航班响应结构

与 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 York5是Hyatt$3,996319,6811.25
The St. Regis NY5否Marriott$4,210336,8001.25
航班(旧金山 SFO 至东京成田 NRT 单程)
航空公司经停时长现金积分CPP
Air Canada1(YVR)14 小时 5 分钟$87169,7201.25
KLM1(AMS)28 小时 40 分钟$1,607128,5281.25

表格之后:突出显示最便宜的选项,标出用户有资格入住的 HaFH 酒店(需具备 Bilt Gold 或 Platinum 状态),并指出 CPP 明显异常的情况(这可能表示存在特别促销,或仅限积分兑换的「加值」价格)。

比较工作流

如需完整分析行程费用:

  1. 通过 awardwallet 查询 Bilt 积分余额。注意:Bilt 已纳入 AwardWallet。
  2. 通过 seats-aero 查询 奖励兑换替代方案。与门户价格(1.25 cpp)比较。
  3. 通过 transfer-partners 查询 转点合作伙伴。如果合作伙伴计划兑换 Bilt 积分的价值 >1.25 cpp,则应先转点,而不是使用门户。
  4. 通过 chase-travel(CSR/CSP 的 Points Boost 浮动机制,部分预订约为 1.5-2.0 cpp,但不保证最低兑换率)和 amex-travel(航班约为 1.0 cpp)查询 其他门户。请获取门户的实际报价,不要假定兑换率。
  5. 如果用户拥有 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,上述内容已完整涵盖相关数据。

评论

支持 Markdown