Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty programs book which airlines, including bilateral partnerships outside alliances.
日本語の概要は準備中です。原文の説明を表示しています。
Search Bilt Rewards travel portal for cash and Bilt Points pricing on hotels and flights. Public REST API, no auth required. Includes Home Away From Home (HaFH) properties with $300+ benefits.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Search Bilt Rewards travel portal via the public REST API. No authentication required for search. Returns both cash prices in USD and Bilt Points cost for hotels and flights.
Bilt's travel search is built directly on top of Duffel. All evidence points to a complete white-label arrangement, not a partial integration:
off_XXX, slices sli_XXX, segments seg_XXX, aircraft arc_XXX, airlines arl_XXX. All Duffel ID patterns.assets.duffel.com.assets.duffel.com/img/stays/loyalty-programmes. So hotels are Duffel Stays.organisation_id: org_0000AaALZyFQ... is a Duffel auth pattern.marketingCarrier, operatingCarrier, cabinClassMarketingName, fareBasisCode, isNDC, ndcRedirectUrl, totalEmissionsKg, slices[].segments[].passengers[].baggages[].What Bilt adds on top of Duffel:
totalPointsRequired (Bilt Points cost at the fixed 1.25 cpp portal rate)isHafh (Home Away From Home flag on hotels)loyaltyProgram.reference (brand affiliation surfacing for hotels)What this means for the toolkit:
isHafh flag is Bilt-specific and surfaces the $300+ benefits properties.| Metric | Value | Notes |
|---|---|---|
| Portal redemption rate | 1.25 cpp | $1 = 80 points (standard, fixed) |
| Cash → points formula | points = round(usd / 0.0125) | Reverse-derived from observed responses |
| TPG valuation (transfers) | 2.05 cpp | When transferred to optimal partners |
Decision rule: If transferring Bilt Points to a partner program would yield more than 1.25 cpp, transfer. If not, use the portal.
https://api.biltrewards.com/public/travel
All endpoints are public, no API key required. Standard JSON responses.
curl -s "https://api.biltrewards.com/public/travel/hotels/auto-complete?query=New+York" \
| jq '.searchResults[0].locationSuggestion'
Returns:
{
"name": "New York",
"country": {"name": "USA", "code": "US"},
"region": {"name": "NY", "code": null},
"searchId": "ChIJOwg_06VPwokRYv534QaPC8g"
}
The searchId is a Google Places ID. You can also pass searchType: HOTEL_SEARCH results to search a specific property.
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'
Returns 100 to 200 hotels typically. Synchronous, no polling needed.
| Parameter | Type | Description |
|---|---|---|
checkInDate | YYYY-MM-DD | Required |
checkOutDate | YYYY-MM-DD | Required |
numGuestAdults | int | Required, 1+ |
numRooms | int | Required, 1+ |
searchId | string | Google Places ID from auto-complete |
| Parameter | Type | Description |
|---|---|---|
childrenAges | csv ints | E.g. 5,8 for two children aged 5 and 8 |
hotelId | string | Search a specific acc_XXX property |
{
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]}'
Returns hotelDetails with full property info plus roomTypes containing each available rate.
# 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)'
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"
Returns:
{
"data": {
"id": "orq_0000B5mQkPhO7VxuWClhZI",
"totalBatches": 35,
"remainingBatches": 35,
"createdAt": "...",
"clientKey": "..."
}
}
curl -s "https://api.biltrewards.com/public/travel/flights/search/$ID"
remainingBatches ticks down to 0 over 5 to 15 seconds. The response includes the offers array as soon as the first batch returns. Poll every 3 to 5 seconds until remainingBatches == 0 for the complete result set.
# 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'
| Parameter | Type | Description |
|---|---|---|
departureDate | YYYY-MM-DD | Required |
origin | IATA airport code | Required |
destination | IATA airport code | Required |
adults | int | Required, 1+ |
| Parameter | Type | Description |
|---|---|---|
returnDate | YYYY-MM-DD | Round-trip, omit for one-way |
cabinClass | string | economy, premium_economy, business, first |
children | int | Number of children (with childrenAges) |
infants | int | Lap infants |
Same as Duffel (Bilt is whitelabel-Duffel). Each offer:
{
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 }]
}
]
}
]
}
]
}
# 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}]'
Always use markdown tables. When showing both flights and hotels, separate tables.
| Hotel | Stars | HaFH | Brand | Cash | Points | CPP |
|---|---|---|---|---|---|---|
| Park Hyatt New York | 5 | yes | Hyatt | $3,996 | 319,681 | 1.25 |
| The St. Regis NY | 5 | no | Marriott | $4,210 | 336,800 | 1.25 |
| Airline | Stops | Duration | Cash | Points | CPP |
|---|---|---|---|---|---|
| Air Canada | 1 (YVR) | 14h 5m | $871 | 69,720 | 1.25 |
| KLM | 1 (AMS) | 28h 40m | $1,607 | 128,528 | 1.25 |
After tables: highlight the cheapest, flag any HaFH stays the user qualifies for (Bilt Gold or Platinum status required), and call out anything where CPP is wildly off (would indicate a special promo or a points-only "boost" rate).
For a complete trip cost analysis:
isHafh: true identifies Home Away From Home properties. Roughly 200 to 300 luxury hotels worldwide. Always flag when present.bilt-rewards.stellate.sh) is Bilt's CMS endpoint, not a search backend. It serves marketing copy and benefit descriptions. The actual hotel/flight search data comes from api.biltrewards.com/public/travel and is fully covered above.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Airline alliance membership (Star Alliance, oneworld, SkyTeam) and cross-alliance booking relationships. Maps which loyalty programs book which airlines, including bilateral partnerships outside alliances.
日本語の概要は準備中です。原文の説明を表示しています。
Check American Airlines AAdvantage balance, elite status, and loyalty points via Patchright. Handles email 2FA with 6-box code entry. Uses persistent browser profiles to skip 2FA on subsequent runs.
日本語の概要は準備中です。原文の説明を表示しています。
Search Amex travel portal for cash prices, MR points pricing, IAP discounts, and FHR/THC hotel benefits via Patchright. Use when comparing pay-with-points portal pricing to award alternatives.
日本語の概要は準備中です。原文の説明を表示しています。
Search Atlas Obscura for weird, wonderful, and hidden gem places near any destination. Find the interesting stuff, not boring plaques. Search by coordinates, get full details with descriptions and images.
日本語の概要は準備中です。原文の説明を表示しています。
Find the cheapest award dates for a route over a date range. Searches seats.aero across all programs, groups by date, and shows a calendar grid of the best deals. Use when dates are flexible and you want to find the sweet spot.
日本語の概要は準備中です。原文の説明を表示しています。
Per-program rules for placing award flights on hold before transferring points. Covers programs with holds (AA, Lufthansa, Flying Blue, Cathay, Turkish, Virgin Atlantic, ANA, Emirates, EVA Air) and those without. Includes transfer-speed reference.
日本語の概要は準備中です。原文の説明を表示しています。