Every MCP tool Miles exposes, grouped by domain, on one page: the fetch an agent makes instead of nine.
Cards
get_best_card
Best card in the user's wallet for a spending category (dining, groceries, gas, travel, rent, ...) or a specific merchant -- pass at least one of category or merchant; amount (dollars) is optional.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
category
string
The one key that names what is being bought. other when no key fits and the base rate applies. The brand goes in merchant.
merchant
string
A specific merchant (e.g. "Costco").
amount
number
Purchase amount in dollars, for the receipt's dollar line; a non-positive value is treated as absent.
international
boolean
Set to true when the purchase happens OUTSIDE the United States: the user names a foreign city or country ('in Tokyo', 'in Europe'), says abroad/overseas, or is on an international trip. Ranks by net return after foreign transaction fees and drops U.S.-only earning categories (Business Gold's 4X is 'U.S. purchases at restaurants' and earns nothing extra in Tokyo). Default false. Leave it off for domestic spending.
cards
string[]
Cards the user says they hold; ones the saved wallet lacks are ranked as held (stated_cards).
channel
string
How the purchase is made, when the person says so: online for a website or online order, in_app for a merchant's own app, mobile_wallet for Apple Pay or Google Pay, physical_card for the physical card, direct for booked directly with the airline or hotel. Omit otherwise.
portal
string
The booking portal the purchase goes through, when the person names one. Omit otherwise.
housing
string
With category rent: mortgage for a mortgage payment, rent for rent. Omit otherwise.
merchant_role
string
provider sells the category itself (restaurant, airline, hotel); reseller resells travel or experiences (day passes, tours); payment_platform is a payment app. Omit if unsure.
paid_through
string
Third-party payment platform named by the person. Keep the seller in merchant and name the payment platform here. Omit otherwise.
redemption_basis
string
The member's own stated way of redeeming, for this conversation. Omit unless the member said how they redeem.
get_card_info
Full details for a credit card PRODUCT: fees, earning rates, credits, benefits, transfer partners, sign-up bonus.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
card_name
string
Catalog product name, fuzzy-matched ("Amex Plat" resolves). Send this or wallet_id, not both; wallet_id wins when both arrive.
wallet_id
string
A cc_N wallet entry id from get_wallet_cards; resolves to the product that entry holds. Takes only the cc_N shape: a product name here is refused, and an id with no entry is refused rather than fuzzy-matched.
get_product_changes
Upgrade and downgrade paths for a wallet card -- the natural next question after analyze_keep_cancel. Wallet-aware: results reflect which products you already hold.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
card_name
string
required
Name of a card in the user's wallet to list upgrade and downgrade paths for.
get_top_offers
Current top sign-up bonuses, optionally filtered by card type (personal/business), ranked by Miles's first-year value.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
card_type
string
Filter to "personal" or "business" cards; omit for both.
member
string
On a Household Profiles account, the household member to rank offers for; omit to keep any offer some member can apply for. A household member's name; a name matching no member is refused, not guessed.
annual_fee_max
number
Maximum recorded annual fee in dollars; 0 means no-fee offers only. Offers with unknown fees are excluded.
recent_denial_reason
string
A recent card denial the person states, by reason; every issuer then reads may_be_restricted, never open.
hard_inquiries_6m
integer
Hard inquiries in the last 6 months, when stated; read by issuer inquiry limits.
get_wallet_complement
Recommends NEW cards to get -- fills gaps in the wallet, not a keep/cancel review of cards already held. Finds orphaned points needing a companion card, weak spending categories, missing transfer ecosystems, and network gaps, then ranks up to 5 candidate cards with gap-fill reasons, ongoing value, and sign-up bonus. Each recommendation carries inline eligibility annotations (5/24, 6/24, Amex velocity limits) and portfolio rules (e.g. one Sapphire product at a time); results are filtered to the wallet's card type (personal/business) automatically.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
focus
string
"earning" narrows to category-multiplier gaps, "ecosystem" to new transfer-partner access; omit for a comprehensive analysis.
card_name
string
Find complements for one specific wallet card instead of the whole wallet.
check_eligibility
boolean
When true, drop cards the user cannot currently apply for instead of just annotating them. Already on by default whenever the wallet is non-empty.
member
string
On a Household Profiles account, the household member whose eligibility judges each candidate; omit to keep any candidate some member can apply for. A household member's name; a name matching no member is refused, not guessed.
preferred_programs
string[]
Loyalty programs the user has explicitly named as preferences, any spelling. A card that earns one, or transfers to one, is nudged up the ranking and says so in its gap-fill reasons: a tie-breaker, not a filter. Never infer these from the wallet; unrecognized names come back in preferred_programs_unmatched.
recent_denial_reason
string
A recent card denial the person states, by reason; every issuer then reads may_be_restricted, never open.
hard_inquiries_6m
integer
Hard inquiries in the last 6 months, when stated; read by issuer inquiry limits.
search_cards
Search the 180+ card dataset by issuer, fees, rewards program, airline/hotel affiliation, or bonus spending categories.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
spending_categories
string[]
Bonus spending categories the card should earn well in, as a list of category names (e.g. ["dining", "groceries"]), not one comma-joined string.
issuer
string
Limit results to one issuer (e.g. "Chase", "Amex").
card_type
string
Limit results to "Personal" or "Business" cards.
max_annual_fee
integer
Highest annual fee to include, in whole dollars; 0 means no-annual-fee cards only.
rewards_program
string
Limit results to cards earning one rewards program or currency (e.g. "Chase Ultimate Rewards"). Applied after the search, so the response notes when fewer than limit cards matched.
airline
string
Limit results to cards affiliated with one airline (e.g. "United").
hotel
string
Limit results to cards affiliated with one hotel program (e.g. "Hyatt").
has_signup_bonus
boolean
When true, keep only cards currently offering a sign-up bonus.
limit
integer
Maximum number of cards to return. Default 10.
member
string
On a Household Profiles account, the household member whose application eligibility filters the result; omit to keep any card some member can apply for. A household member's name; a name matching no member is refused, not guessed.
is_student
boolean
True only when the user said they are a student. Student cards are hidden otherwise.
Transfer partners
compare_transfer_options
What a balance of points is worth across transfer paths, with the arithmetic shown -- the points-quantity question, distinct from get_transfer_partners (which lists WHICH paths exist, not what YOUR points are worth). Call program only (from), target only (to), or both (one specific path, e.g. 60k UR → Hyatt).
Scope
Quota
miles:read
standard
Name
Type
Required
Description
points
integer
required
The points balance to value, as a whole number of points.
program
string
Source currency the points are in (e.g. "Chase Ultimate Rewards"). Pass alone to see every path from it, or with target for one path.
target
string
Destination program (e.g. "World of Hyatt"). Pass alone to see every path into it, or with program for one path.
cardholder
string
Whose points these are: a household member's name or id, or "me". Omit for the account holder's own. An unknown name is refused.
get_transfer_partners
Transfer partner lookup. mode='from_program' lists where a currency (e.g. 'Chase Ultimate Rewards') transfers; 'to_program' lists which currencies reach a destination (e.g. 'World of Hyatt'); 'auto' infers.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
query
string
required
A currency or loyalty program name (e.g. "Chase Ultimate Rewards" or "World of Hyatt").
mode
string
"from_program" lists where the named currency transfers; "to_program" lists which currencies reach the named destination; "auto" (default) infers which from the query.
get_valuations
Point valuations (cents per point), using your custom values when set and defaults otherwise. Includes issuer rules for direct bank deposits.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
programs
string[]
Loyalty program names to limit the result to (e.g. ["Chase Ultimate Rewards", "World of Hyatt"]); omit for every program on file.
plan_transfer
"I need N points at program X -- which of my HELD currencies gets me there cheapest?" The advisor flagship: ranks the loyalty currencies you've told Miles you hold (get_balances) by cheapest path to target_program -- transfer graph x ratios x active bonuses x transfer minimums/increments x your own valuations -- including two-currency split suggestions and "you hold it but not enough" rows. Deterministic, receipt-style, built on the same functions compare_transfer_options uses, so the two tools cannot disagree about a shared leg.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
target_program
string
required
The destination loyalty program (e.g. "World of Hyatt"). An unrecognized name returns an unknown_program error rather than a guess.
points_needed
integer
required
How many of the target program's points are needed, as a whole number; never dollars and never your own balance.
cardholder
string
Rank one household member's balances: their name or id, or "me". Omit for every cardholder. An unknown name is refused.
portfolio_review
"Here are my balances -- where should I focus?" Ranks every loyalty currency the member has told Miles they hold against a redemption goal, and says which one to focus on, which to stop growing, and why.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
goal
string
Redemption goal: flights_premium, flights_economy, hotels or cash_like. Omit for a rankings block across all four plus a suggested_goal; any other value, flexible included, returns a validation_error naming the four.
cardholder
string
A household member's name or id. Omit for every cardholder, reported separately. A name nobody in the household has returns an unknown_cardholder error listing the names that exist; one with no balances on file returns rows: [], NOT empty_ledger.
reset_valuation
Reset a custom valuation back to the reasonable redemption value. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
point_type
string
required
The program or currency whose custom valuation to reset to the reasonable redemption value.
set_valuation
Set the user's custom point/mile valuations (cents per point). Pass valuations to set several at once. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
point_type
string
The program or currency to set one valuation for (e.g. "Chase Ultimate Rewards"); pair with valuation.
valuation
number
The value in cents per point (1.8 means 1.8 cents), not dollars and not a percentage; pair with point_type.
valuations
object
Several valuations at once, program name to cents per point (e.g. {"Chase Ultimate Rewards": 1.8, "World of Hyatt": 2.1}).
where_to_credit
Answers "which frequent flyer program should I credit this flight to?". Ranks every program that can take the flight by what the miles are worth TO THIS USER -- their own valuations, balances, and elite tier -- not by the raw mileage count. That distinction matters: on most economy fares nearly every program pays the SAME percentage, so the mileage number does not decide the answer and the value does.
Scope
Quota
miles:read
expensive
Name
Type
Required
Description
segments
object[]
required
One entry per flown leg (a return trip is two), each {operating_airline, origin, destination, fare_class}. operating_airline is the two-letter IATA code of the airline that OPERATES the flight, not the one on the ticket; fare_class is the single booking-class letter from the ticket, and it decides the answer -- ask for it rather than guessing one from the cabin.
programs
string[]
Limit the ranking to these programs. Omit to rank every program the source lists.
member
string
Household member who is flying, so their balances and elite tier are used instead of the account holder's.
Wallet
add_card
Add one credit card, or a BATCH of them, to the member's wallet. Requires wallet-change access. Every argument's own description carries that argument's rules; this is what no single argument can say.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
card_name
string
The card to add, as the member names it; matched against the Miles catalog, and an ambiguous name is refused with close matches rather than guessed. Ignored when cards is present.
nickname
string
A short label of the member's own for this holding, for telling copies of the same product apart.
date_opened
string
The date the account was opened, YYYY-MM-DD.
anniversary_date
string
The date the annual fee posts, YYYY-MM-DD. Do not derive it from date_opened: for many issuers they differ, and every free-night and credit-cycle figure Miles computes reads this field.
sign_up_bonus
string
The member's own record of the sign-up bonus they were offered. Reads back as user_sign_up_bonus; a key spelled sign_up_bonus on a card you read is the catalog's current offer and must never be written back.
signup_bonus_status
string
Where the sign-up bonus stands: pending / in_progress / received / expired. Once it is received or expired, sub_deadline stops raising alerts.
signup_bonus_received_on
string
The date the sign-up bonus posted, YYYY-MM-DD. Several welcome-offer rules run a 15- to 48-month clock from this day.
bonus_accepted_on
string
The date the member accepted this bonus offer, YYYY-MM-DD. This, not the account-open, product-change, or bonus-posted date, anchors a retention/clawback window.
sub_deadline
string
The date the sign-up bonus spend window closes, YYYY-MM-DD. Set it only from what the member told you, never from the card's marketing terms.
sub_target
number
The spend the sign-up bonus requires, in dollars. Never the amount the member has spent so far: Miles holds no transactions and has no field for progress.
notes
string
The member's own free-text note on this holding. Reads back as user_notes; a key spelled notes on a card you read is the catalog's note about the product and must never be written back.
status
string
The holding's status: active (the default), closed or pending. A retired product is accepted only with closed.
closed_on
string
The date the card closed, YYYY-MM-DD; pass it with status="closed". Left out, a closed card is stored as closed on an unknown date, never as closed today.
autopay_status
string
on or off, whether the member has the issuer's autopay set up. Omit it when the member has not said: absent means nobody has checked, which Miles reports differently from off.
retention_offers
object[]
The history of what the issuer offered to keep the member, as a list of {date, offer, took_it}. REPLACES the stored list, so send the whole history every time; sending one entry deletes the rest.
card_settings
object
The member's per-card selections (a relationship tier, a chosen bonus category, an earning-modifier opt-in), keyed by the setting id from the card's card_settings_available. A key the card does not define is refused, and the refusal names the ids it does define.
benefit_selections
object
Which vendor the member picked for a credit that locks to one, keyed by the credit's id from the card's benefits (airline_fees, splurge). Each value is a list of {choices, period, selected_on, source}, one per benefit window. choices is a list even for a credit that takes one pick; period is the window the pick governs -- 2026 on a calendar-year credit, 2026-05 on a cardmember-year one -- and is optional, derived from selected_on, needed explicitly only when it differs from the window selected_on falls in. Replaces the stored map: send the whole history.
original_card_name
string
The product the card was first opened as, for a card that was product-changed before it reached Miles.
product_history
object[]
Product changes that happened before this card reached Miles, oldest first, each {from_card, to_card, changed_date, direction, note} with every field optional; changed_date is YYYY-MM-DD and direction is upgrade or downgrade. REPLACES the stored list. For a change happening now, use update_card with product_change=true.
cardholder
string
The household member this card belongs to, by name as it appears in Household Profiles; a name matching no member is refused rather than guessed. With two or more members it is required: ask whose card it is, and pass skip to leave it Unassigned. A supporter feature: without Household Profiles the card is still added under the primary cardholder and the result carries a note saying so.
holder_type
string
Whether the cardholder is the primary account holder (the default) or an authorized_user on the card.
card_number_last4
string
The last four digits of the account number, exactly four, for telling two copies of the same product apart. Anything longer is refused rather than stored.
intentional_duplicate
boolean
Pass true only when the member genuinely holds a second copy of a card the wallet already has; otherwise adding it again is reported as already present, not duplicated.
entry_key
string
An idempotency key of your own choosing, at most 64 characters. Repeating the same key makes the add an exact no-op, so a retry after a lost response cannot double-add. Ignored when cards is present.
cards
object[]
Batch form: a list of up to 100 entries using the same fields as a single add, each with its own card_name. When present, the top-level card_name and entry_key are ignored, and the result reports each entry in order as applied, already_present, ambiguous or rejected; a failed entry never blocks the rest.
analyze_keep_cancel
Keep/downgrade/cancel analysis for one card: marginal value vs annual fee, duplicate-benefit discounting, downgrade paths. Name it with wallet_id or card_name (wallet_id wins); a name matching two holdings the SAME person holds is refused ambiguous_holding: call again with one holdings[].wallet_id. Two household members each holding one copy is not refused -- you get the member's own, plus household_note. credit_value_basis is recorded (from the member's recorded use), typical, or mixed.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
card_name
string
Name of a card in the member's wallet, fuzzy-matched.
wallet_id
string
A cc_N id from get_wallet_cards (other results call it wallet_entry_id). Takes only the cc_N shape.
cardholder
string
A household member's name or id, for THAT person's copy of a card the household holds more than once. Omit it for the member's own, which is the default. A name matching no member is refused, not guessed.
basis
string
auto (default) values each credit from the member's recorded use once enough is on record; typical ignores what the member recorded and answers for a typical cardholder. Membership only: without it every credit is typical and periods_needed is null, so recording more periods will not change the answer. typical results carry what_if.
analyze_spending
Earning-potential analysis for a spending profile: for each category, the wallet's best card and the annual rewards value it produces -- pre-computed dollar figures, not estimates to redo.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
spending
object
required
Monthly spend in dollars keyed by category (dining, groceries, gas, travel, hotels, airlines, rent, entertainment, streaming, online_shopping, ...). Use only figures the user stated; never estimate one.
candidate_cards
string[]
Card names not in the wallet (e.g. from search_cards or get_wallet_complement) to evaluate on the same profile; omit for a wallet-only read.
international
boolean
When true, factor foreign transaction fees into the return. Default false.
redemption_basis
string
The member's own stated way of redeeming, for this conversation. Omit unless the member said how they redeem.
clear_cap_status
Remove a cap mark an agent recorded -- the retraction half of set_cap_status. Requires reconciliation write access, like it.
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
card_name
string
Card in the wallet, e.g. Blue Cash Preferred.
wallet_entry_id
string
Wallet entry id (cc_3), instead of card_name.
category
string
Capped category, e.g. groceries; omit if one cap.
cap_key
string
Cap key from a result's caps, instead of category.
cardholder
string
Household member name or me, if several hold it.
get_dated_events
Everything with a real date across the wallet, inside the next N days -- transfer bonuses, SUB deadlines, annual fees, certificates, tracked credits ending (amount = value left), points expiring. One call for "what's ending this month" or "am I on track for any welcome bonus".
Scope
Quota
miles:read
standard
Name
Type
Required
Description
days
integer
Days out to look, inclusive (default 30).
kinds
string[]
Optional: restrict to specific kinds. Omit for every kind.
get_eligibility
Application-rule status (Chase 5/24, issuer velocity limits) based on the user's wallet card-open dates.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
issuer
string
Narrow to one issuer's application rules (e.g. "Chase", "Amex").
card
string
A specific card name; adds card-specific checks (lifetime language, family restrictions, One Sapphire).
member
string
On a Household Profiles account, the household member whose status to report; omit for a per-member breakdown under members. A household member's name; a name matching no member is refused, not guessed.
recent_denial_reason
string
A recent card denial the person states, by reason; every issuer then reads may_be_restricted, never open.
hard_inquiries_6m
integer
Hard inquiries in the last 6 months, when stated; read by issuer inquiry limits.
get_needs_attention
Everything that needs eyes on it right now -- in the wallet, and on the cards the user is only considering.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
credit_window_days
integer
How many days ahead to look for expiring tracked credits. Default 14.
fee_window_days
integer
How many days ahead to look for an annual fee posting. Default 30.
sub_window_days
integer
How many days ahead to look for a sign-up-bonus spend deadline. Default 30.
get_spending_strategy
Category-by-category map of which wallet card to use for every spending type.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
international
boolean
Set to true when the spending happens OUTSIDE the United States: the user names a foreign city or country, says abroad/overseas, or is planning an international trip. Ranks every category by net return after foreign transaction fees and drops U.S.-only earning categories. Default false.
redemption_basis
string
The member's own stated way of redeeming, for this conversation. Omit unless the member said how they redeem.
get_travel_day_summary
Wallet-derived checklist for travel-day lounges and perks, filtered by airline and international context; prefer it over flat get_wallet_benefits for a travel day. Optionally provide both adjacent flight segments to assess a same-airport connection. Segment data is used for this answer only.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
airline
string
The carrier for this trip, to keep only benefits that apply on that airline.
international
boolean
Whether this is an international itinerary, to keep only benefits that apply to it.
arrival_segment
object
First leg: arrival_airport and arrival_time. Local times need IANA arrival_timezone; optional arrival_terminal, carrier, cabin.
departure_segment
object
Next leg: departure_airport and departure_time. Local times need IANA departure_timezone; optional departure_terminal, carrier, cabin.
get_wallet_benefits
filtered_by_cardholder echoes member. All credits: benefit_type='credits'; named: mode='index' then credit_ids; filter doesn't resolve names.
ONE card the member holds, with their own entered layer on it -- nickname, notes, date_opened, anniversary_date, card_settings, benefit_selections, retention_offers, product_history, the sign-up-bonus fields, and updated_at.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
wallet_id
string
A cc_N wallet entry id from get_wallet_cards. Wins if both selectors arrive; takes only the cc_N shape, so a product name here is refused.
card_name
string
The member's own holding by name or nickname, not the catalog. Two household members each holding one copy answers about the member's own; ONE member holding two is refused ambiguous_holding: call again with one holdings[].wallet_id as wallet_id.
cardholder
string
A household member's name or id, for THAT person's copy of a card the household holds more than once. Omit it for the member's own. A name matching no member is refused, not guessed.
get_wallet_cards
The wallet's cards, one per row -- the lean per-card reader. get_wallet_summary / get_wallet_benefits are whole-wallet; use this for "what X cards do I have" or a per-card field scan.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
issuer
string
Narrow to one issuer (e.g. "Chase", "Amex"). A filter matching nothing in a non-empty wallet is dropped, and the payload names it.
rewards_category
string
Narrow to one rewards category: transferable, cashback, hotel, airline, store or other; any narrows nothing. A filter matching nothing in a non-empty wallet is dropped, and the payload names it.
format
string
"summary" (default, about 15 fields per card), "with_multipliers" (summary plus a reward_multipliers array), or "full" (every field, including benefits and protections text; large for a big wallet).
include_closed
boolean
When true, append the member's closed holdings after the active ones, each with closed_on (YYYY-MM-DD, or null). Closed cards are hidden otherwise.
cardholder
string
On a Household Profiles account, one household member's name to return only their holdings; omit for the whole household. A name matching no member is refused, not answered household-wide.
get_wallet_summary
The user's wallet: cards with fees, credits, and key benefits.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
cardholder
string
On a Household Profiles account, narrow every total to one household member's holdings; omit for the whole household. A name matching no member is refused rather than answered household-wide.
get_weekly_update
What changed in points and miles recently -- the digest as pull: a scheduled agent can poll this instead of waiting on the email digest. Local reads only (indexed article dates, a changelog artifact, in-memory dataset) -- no paid vendor, no query embedding, no Miles token spend.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
days
integer
Look-back window in days, clamped to 1-90. Default 7.
categories
string[]
Subset of "news", "card_changes", "transfer_bonuses" and "offers" as a list, not one comma-joined string; omit for all four.
remove_card
Remove a card from the user's wallet. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
lookup_card_name
string
The holding to remove, by card name or nickname, e.g. Amex Gold. A name matching more than one holding is refused; pass card_id instead.
card_id
string
The holding's cc_N id from get_wallet_cards; use it instead of lookup_card_name when the wallet holds two of the same card.
lookup_cardholder
string
Whose copy lookup_card_name means (a household member's name, e.g. Andy) when the household holds the card more than once. Identifies only; never changes the holder.
set_cap_status
Record that a card's bonus spending cap is used up for the current period, so get_best_card ranks the card at its after-cap rate until the cap resets (returns_on). Requires reconciliation write access.
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
card_name
string
Card in the wallet, e.g. Blue Cash Preferred.
wallet_entry_id
string
Wallet entry id (cc_3), instead of card_name.
category
string
Capped category, e.g. groceries; omit if one cap.
cap_key
string
Cap key from a result's caps, instead of category.
cardholder
string
Household member name or me, if several hold it.
hit_on
string
When it was hit: YYYY-MM-DD or YYYY-MM.
hit_before_close
boolean
Answer to a confirm_close, as its fix says.
statement_closes_on
string
Day the statement ending the period closes (YYYY-MM-DD, or 20); the bonus is back the day after.
resets_on
string
First day the bonus earns again (YYYY-MM-DD), if known.
update_card
Update a holding in the member's wallet -- nickname, status, notes, dates, the member's decision about it, or a product change. Requires wallet-change access. Every argument's own description carries that argument's rules; this is what no single argument can say.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
lookup_card_name
string
The holding to update, by card name or nickname, e.g. Amex Gold. A name matching more than one holding is refused; pass card_id instead.
card_id
string
The holding's id from get_wallet_cards; use it instead of lookup_card_name when the wallet holds two of the same card.
lookup_cardholder
string
Whose copy lookup_card_name means (a household member's name, e.g. Andy) when the household holds the card more than once. Identifies only; never changes the holder.
nickname
string
A short label of the member's own for this holding, for telling copies of the same product apart.
date_opened
string
The date the account was opened, YYYY-MM-DD.
anniversary_date
string
The date the annual fee posts, YYYY-MM-DD. Do not derive it from date_opened: for many issuers they differ, and every free-night and credit-cycle figure Miles computes reads this field.
sign_up_bonus
string
The member's own record of the sign-up bonus they were offered. Reads back as user_sign_up_bonus; a key spelled sign_up_bonus on a card you read is the catalog's current offer and must never be written back. It can accompany a product change to record a new upgrade offer.
signup_bonus_status
string
Where the sign-up bonus stands: pending / in_progress / received / expired. Set received when the bonus posts: that is what stops the sub_deadline alerts.
signup_bonus_received_on
string
The date the sign-up bonus posted, YYYY-MM-DD, sent with signup_bonus_status="received". Several welcome-offer rules run a 15- to 48-month clock from this day. On an ordinary update, a newly received status without this date stamps today; on a product change recording a new offer, omit it when unknown and Miles clears the old offer's date instead.
bonus_accepted_on
string
The date the member accepted this bonus offer, YYYY-MM-DD. Retention/clawback windows use this member-stated date, never an account-open, product-change, or bonus-posted date. When a product change keeps or newly records a bonus and it is not already stored, ask the member for this date before recording it. A newly supplied offer needs it in the same call; never reuse a stored prior-offer date.
sub_deadline
string
The date the sign-up bonus spend window closes, YYYY-MM-DD. Set it only from what the member told you, never from the card's marketing terms.
sub_target
number
The spend the sign-up bonus requires, in dollars. Never the amount the member has spent so far: Miles holds no transactions and has no field for progress.
notes
string
The member's own free-text note on this holding. Reads back as user_notes; a key spelled notes on a card you read is the catalog's note about the product and must never be written back.
status
string
The holding's status: active, closed or pending. closed alone stamps today as closed_on; add closed_on when the member says when it actually closed.
closed_on
string
The date the card closed, YYYY-MM-DD. Pass it with status="closed", or by itself to correct the date on a card already closed.
autopay_status
string
on or off, whether the member has the issuer's autopay set up. Omit it when the member has not said: absent means nobody has checked, which Miles reports differently from off.
disposition
string
What the MEMBER decided to do with this holding: keep / cancel / downgrade / upgrade / undecided. Set it only when the member states a decision in their own words, never by copying analyze_keep_cancel's recommendation. Omit it when nobody has decided; take it back to that state with clear_fields.
review_by
string
A date, YYYY-MM-DD, when the member wants to be reminded to revisit this holding's disposition.
fee_posts_on
string
The exact day the annual fee posts, YYYY-MM-DD: a fee that already posted (a past date) or one expected. Beats anniversary_date for an observed posting.
retention_offers
object[]
The history of what the issuer offered to keep the member, as a list of {date, offer, took_it}. REPLACES the stored list, so send the whole history every time; sending one entry deletes the rest.
card_settings
object
The member's per-card selections, keyed by the setting id from the card's card_settings_available. MERGES with what is stored, so send only what changed; null as a value clears one setting. A key the card does not define is refused.
benefit_selections
object
Which vendor the member picked for a credit that locks to one, keyed by the credit's id from the card's benefits (airline_fees, splurge). Each value is a list of {choices, period, selected_on, source}, one per benefit window. choices is a list even for a credit that takes one pick; period is the window the pick governs -- 2026 on a calendar-year credit, 2026-05 on a cardmember-year one -- and is optional, derived from selected_on, needed explicitly only when it differs from the window selected_on falls in. Replaces the stored map: send the whole history.
original_card_name
string
The product the card was first opened as. Correctable here to fix history; a change happening now goes through product_change instead.
product_history
object[]
The full list of past product changes, oldest first, each {from_card, to_card, changed_date, direction, note}. REPLACES the stored list, which is how a wrong or missing changed_date on a recorded change is corrected. To record a new change, use product_change=true instead.
cardholder
string
The household member this card belongs to, by name as it appears in Household Profiles; "" unassigns. A supporter feature: an ungated member's update still applies, minus the attribution, and says so in a note.
holder_type
string
Whether the cardholder is the primary account holder (the default) or an authorized_user on the card.
card_number_last4
string
The last four digits of the account number, exactly four; set, correct or clear it here. Anything longer is refused rather than stored.
product_change
boolean
true records a product change happening now: the holding is renamed to new_card_name and a row is appended to product_history. Cannot be combined with clear_fields; make that two calls.
new_card_name
string
The product the card was changed to. Required with product_change=true.
changed_date
string
The date the product change happened, YYYY-MM-DD, with product_change=true. Omit it when unknown; Miles records unknown rather than stamping today. This is not the bonus acceptance date.
direction
string
upgrade or downgrade, with product_change=true. Inferred from the card family when omitted.
product_change_note
string
Why the product change was made, recorded with product_change=true.
new_anniversary_date
string
The new annual-fee date, YYYY-MM-DD, when the issuer reset it as part of a product change.
keep_bonus
boolean
Whether a product_change=true keeps the recorded or newly supplied sign-up bonus. Defaults to true on an upgrade -- an upgrade offer's bonus belongs to the new product -- or when this call supplies a new bonus; it is false otherwise. A kept bonus needs member-stated bonus_accepted_on.
expected_updated_at
string
The card's stored updated_at as you last read it, copied back character for character, microseconds included. If the card has changed since, nothing is written and the result is stale_precondition: re-read and retry. Omit it and the last writer wins.
clear_fields
string[]
Names of fields to reset to empty, e.g. ["nickname", "notes"], since a null argument is dropped and changes nothing. A field that cannot be cleared, or one named here while also given a value, is refused and nothing is written. Cannot ride along with product_change=true.
Balances
get_balances
The loyalty-point balances the user has told Miles about -- Ultimate Rewards, Membership Rewards, airline and hotel currencies. To RECORD one, see set_balances.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
programs
string[]
Loyalty program names to limit the read to, e.g. ["Chase Ultimate Rewards", "Marriott Bonvoy"]. Omit for every balance on file.
get_reconciliation_needs
QUESTIONS, not assertions, about the wallet that transaction data could answer -- the division of labor with a transactions agent (Copilot Money's MCP or similar): Miles knows what a transaction would MEAN; the agent knows where transactions ARE. Miles never sees spending, so it cannot confirm anything here itself.
Scope
Quota
miles:read
standard
No parameters.
set_balances
Record loyalty-point balances you have READ or reconciled -- from a statement, an account page, or something the user told you. Requires reconciliation write access (the narrower of the two write grants). undo_balance_write reverses any call to this one.
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
entries
object[]
required
A list of rows, one per loyalty program, even for a single row. Each row is {program, points, as_of?, expires_on?, cardholder?, confirm?}. program is the program's full name as Miles spells it; points a whole number; as_of an ISO date the reading was accurate, defaulting to now; expires_on an ISO date the points expire, only ever one you READ, never one you worked out; cardholder a household member's name or id, omitted for the account holder's own balance; confirm: true re-affirms a row a previous call flagged for review. Any source field is discarded; every row is stamped agent_reconciled. Replaying the same batch overwrites in place.
undo_balance_write
Put back what the balances looked like before one set_balances call. Requires reconciliation write access, the same grant set_balances needs.
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
history_id
integer
The history_id a set_balances call returned. Omit it to reverse the most recent balance write this app made that has not already been undone.
Credits and certificates
clear_credit_usage
Remove credit usage an agent recorded -- the retraction half of set_credit_usage. Requires reconciliation write access, like it.
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
entries
object[]
required
A list of rows to remove, one per credit and period, even for a single row. Each row is {credit_id, period, card_id?, card_name?}; period is required, in the label the credit's own frequency produces (2026-08 monthly, 2026-Q3 quarterly).
get_certificates
Companion certificates and lounge-pass bundles across the wallet -- what's pending, available, used, or expired, plus an estimated total value. The quantity-aware sibling of get_free_nights (a lounge-pass bundle grants more than one use; a companion fare does not).
Scope
Quota
miles:read
standard
Name
Type
Required
Description
status
string
Filter to one status: pending, available, used, expired, may_have_expired, unconfirmed, or dismissed. Omit for every certificate on file; to answer whether one has been used, omit it and read each row's own status.
program
string
Filter by loyalty program name, matched as a substring, e.g. Hilton. Omit for every program.
get_credit_usage
Which of the wallet's recurring card credits are still unused this period -- the read half of the reconciliation loop get_reconciliation_needs opens.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
card_name
string
Limit the result to one wallet card, matched fuzzily by name. Omit for every card's credits.
only_unused
boolean
When true, drops rows whose status is used or unknown -- both already-resolved questions -- leaving only the credits still open this period.
include_record
boolean
When true, adds value_record: each card's last 12 months of recorded credit use, with every closed period's source and, for an agent's write, the client_id of the app that wrote it. Without Membership it is value_record_locked: true instead. Off, the payload is unchanged.
category
string
Limit to credits of this kind, e.g. 'dining'. 'travel' includes airline, hotel, car-rental and Global Entry/TSA credits. 'any' or omit for every credit.
get_free_nights
Free-night hotel certificates across the wallet (Marriott/Hilton/ Hyatt/IHG-style annual and spend-triggered certs): status (available/pending/used/expired/may_have_expired/unconfirmed/unknown), estimated expiry, and estimated value.
Scope
Quota
miles:read
standard
Name
Type
Required
Description
status
string
Filter to one status: available, pending, used, expired, may_have_expired, unconfirmed, or unknown. Omit for every certificate on file; to answer whether one has been used, omit it and read each row's own status.
program
string
Filter by hotel loyalty program name, e.g. Marriott Bonvoy. Omit for every program.
set_certificate_status
Record a companion certificate or lounge-pass bundle's status. Requires reconciliation write access (the narrower of the two write grants -- see get_reconciliation_needs's own docstring).
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
card_id
string
required
The exact card_id from the certificate's get_certificates row, e.g. cc_4. There is no fuzzy card-name lookup here.
cert_id
string
required
The exact cert_id from the certificate's get_certificates row, e.g. companion-fare.
status
string
The new status: pending, available, used, or dismissed. Required UNLESS you are sending note, earned_on or expires_on; omit it then and the saved status is left exactly as it was.
count
integer
For status=used only: how many units of a bundle to mark used on this call; omit for 1. Silently clamped to what is actually left, so read the returned used_count rather than assuming the value landed exactly.
expected_used_count
integer
For status=used only: the used_count you last read from get_certificates. If it no longer matches what is stored, the write is rejected, so a retried or double-sent call is a safe no-op. Pass it on every used call; omit only with no prior read.
used_on
string
For status=used only: the date of use, written YYYY-MM-DD, no later than today and no earlier than the certificate's own earned_on if one is on file.
note
string
The member's own note about this certificate -- what it is for, or where it is already booked ("Maui, March -- booked"). Their words, not a summary; 500 characters max; "" clears it; omit it to leave it alone. A note is never a status.
earned_on
string
The date (YYYY-MM-DD) or month (YYYY-MM) the certificate was earned. Makes the expiry exact. "" clears it.
expires_on
string
The date the certificate really expires, written YYYY-MM-DD, as the member read it off the issuer. May be in the past. "" clears the override and falls back to the estimate.
source
string
Who is attesting the status: agent_reconciled (you found an actual transaction showing the certificate was earned or used) or user_reported (the member told you directly). Defaults to user_reported when omitted.
set_credit_usage
Record which recurring card credits were used, for a batch of periods -- the write half of the reconciliation loop get_reconciliation_needs opens. Requires reconciliation write access (the narrower of the two write grants -- see get_reconciliation_needs's own docstring).
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
entries
object[]
required
A list of rows, one per credit and period, even for a single row. Each row is {credit_id, status, card_id?, card_name?, period?, amount_used?}; status is used, partial (needs amount_used, in dollars), unused, or unknown. period is the label the credit's own frequency produces: 2026-08 for a monthly or cardmember-year credit, 2026 for calendar-year, 2026-Q3 quarterly, 2026-H1 semi-annual. Any source field is discarded; every row is stamped agent_reconciled. Replaying the same batch overwrites in place.
only_if_absent
boolean
When true, a period that already has an answer is left alone and comes back skipped with reason: "already_recorded" and the existing entry.
overwrite
boolean
When true, a row replaces an answer the member recorded themselves. Send it only when the member told you, in this conversation, to replace their answer; otherwise such a row comes back skipped with reason: "member_recorded".
set_free_night_status
Record a free-night certificate as used, or confirm a pending spend-threshold certificate was earned. Requires reconciliation write access (the narrower of the two write grants -- see get_reconciliation_needs's own docstring).
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
status
string
The new status: pending, available (a pending spend-threshold certificate was confirmed earned), used, dismissed, or unknown (you searched for matching spend and could not determine whether it was earned). Required UNLESS you are sending note, earned_on or expires_on; omit it then and the saved status is left exactly as it was.
card_name
string
Identify the card by name, matched fuzzily -- the everyday form. Required unless card_id is given; cannot be combined with source.
cert_id
string
The certificate's id from its get_free_nights row, e.g. anniversary or spend_30k. Required when the card carries more than one free-night certificate, and always required alongside card_id; never guess between certificates.
used_on
string
The date the certificate was used, written YYYY-MM-DD, no later than today.
card_id
string
Identify the card exactly by the card_id a get_free_nights or get_reconciliation_needs row carries, e.g. cc_5. Requires cert_id; the only form that accepts source.
note
string
The member's own note about this certificate -- what it is for, or where it is already booked ("Maui, March -- booked"). Their words, not a summary; 500 characters max; "" clears it; omit it to leave it alone. A note is never a status.
earned_on
string
The date (YYYY-MM-DD) the certificate was earned. Makes the expiry exact. "" clears it.
expires_on
string
The date the certificate really expires, written YYYY-MM-DD, as the member read it off the issuer. May be in the past. "" clears the override and falls back to the estimate.
source
string
Who is attesting the status: agent_reconciled (you found an actual transaction showing the certificate was earned or used) or user_reported (the member told you directly). Requires card_id, not card_name. Omit for a member's own plain statement.
set_status_entitlement
Record a status-earned certificate or award -- what a member's elite tier grants (milestone nights, upgrade certificates, suite night awards, choice benefits). Requires reconciliation write access.
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
program_id
string
required
From a get_certificates offer or row.
item_id
string
required
The offer's item_id. For used, a confirmed row's cert_id also works with no option_id.
status
string
required
confirmed or used. There is no decline.
option_id
string
The pick from a choice menu (the offer's option_id). Required for a choice, refused otherwise.
program_year
integer
e.g. 2026. Only when the offer says program_year_required.
period
string
Required for used: the row's period, e.g. 2026.
count
integer
For used: units used; omit for 1. Clamped.
expected_used_count
integer
For used: the used_count you last read; a mismatch rejects the write, so a retry is safe.
used_on
string
For used: YYYY-MM-DD; defaults to today.
undo_status_entitlement
Take back the last status-entitlement write -- the retraction half of set_status_entitlement. Requires reconciliation write access.
Scope
Quota
miles:write:reconcile
standard
Name
Type
Required
Description
program_id
string
required
As on the write.
item_id
string
required
The row's cert_id, or the offer's item_id with option_id.
period
string
required
The row's period, e.g. 2026.
option_id
string
The choice option, with an offer's item_id.
Gift cards
add_gift_card
Save a gift card to the member's wallet. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
merchant
string
required
The merchant the gift card is for, stored exactly as given -- there is no catalog to resolve it against, so spell it the way the member did.
amount
number
The remaining balance in dollars, as a number (e.g. 73.40). 0 is a valid, meaningful balance for a drained card the member still holds; pass it rather than omitting the field.
expiration
string
The expiration date, written YYYY-MM-DD only. Any other spelling is refused rather than stored; leave it out if the member only knows an approximate date.
card_number_last4
string
The last four digits of the gift card number, exactly four digits. Write-only on this surface: never returned by this tool's echo or by get_gift_cards. Never a full card number or a PIN.
notes
string
Free text about the card. Write-only on this surface: never returned by this tool's echo or by get_gift_cards, so do not store anything here you will need to read back. Never a full card number or a PIN.
get_gift_cards
The wallet's stored gift cards: merchant, balance, and expiration only.
Scope
Quota
miles:read
standard
No parameters.
remove_gift_card
Delete a gift card from the wallet -- a spent card, or one saved by mistake. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
lookup_merchant
string
Identify the card by its stored merchant name, e.g. REI, when that merchant appears exactly once. An ambiguous name is refused rather than guessed at; retry with card_id.
card_id
string
Identify the card exactly by the id get_gift_cards or an earlier add_gift_card echo returned, e.g. gc_1.
update_gift_card
Change a gift card already in the wallet -- most often its balance after the member spends some of it. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
lookup_merchant
string
Identify the card by its stored merchant name, e.g. REI. A name matching more than one stored card is refused with the candidates named; retry with card_id.
card_id
string
Identify the card exactly by the id get_gift_cards or an earlier add_gift_card echo returned, e.g. gc_1.
merchant
string
New merchant name; renames the card. Omit to leave unchanged.
amount
number
New remaining balance in dollars, as a number. 0 records a fully drained card. Omit to leave unchanged.
expiration
string
New expiration date, written YYYY-MM-DD only; any other spelling is refused rather than stored. Omit to leave unchanged.
card_number_last4
string
New last four digits of the gift card number, exactly four digits. Write-only: never returned by this tool's echo or by get_gift_cards. Omit to leave unchanged; an empty string is also treated as no change.
notes
string
New free text about the card. Write-only: never returned by this tool's echo or by get_gift_cards. Omit to leave unchanged; an empty string is treated as no change, not as clearing the field.
Elite status
compare_atmos_earning
Compare Alaska Atmos Rewards distance, price and segment earning for one traveler's flights under the rules effective 2027-01-01 (2025/2026 input is a replay, not posted history).
Scope
Quota
miles:read
standard
Name
Type
Required
Description
travel_year
integer
required
2025, 2026 or 2027: the departure year compared.
flights
object[]
required
One object per traveler per flight number. Fields (* required): id*; departure_date*; marketing_carrier; operating_carrier; ticket_stock; booking_channel (alaska_hawaiian
defaults
object
{elite_status, elite_status_held_all_year}: the tier for rows without one; held_all_year for a status match.
other_status_points
number
Non-flight status points.
other_redeemable_points
number
Non-flight redeemable points.
detail_offset
integer
Paging.
detail_limit
integer
Rows returned; default all (500).
get_elite_status
The user's elite status, self-reported and card-granted. elite_status is what the member TOLD Miles. card_granted is what their cards give: held (now) and available (gated behind enrollment/registration/spend -- never report as held).
Scope
Quota
miles:read
standard
No parameters.
get_status_benefits
What an airline/hotel elite TIER grants -- checked bags, lounge access, upgrades, breakfast, late checkout, points bonus, and an estimated annual value. Reference data about the program; it reads nothing about the member (get_elite_status is what they hold).
Scope
Quota
miles:read
standard
Name
Type
Required
Description
program
string
required
The airline or hotel loyalty program to describe, e.g. Alaska Atmos Rewards or World of Hyatt. Reference data about the program, not the member's own status.
tier
string
One elite tier within the program, e.g. Atmos Gold. Omit for the program's full tier ladder.
remove_elite_status
Forget a stored elite status -- the member lost it, never had it, or it was recorded against the wrong program. Requires wallet-change access. Removes every stored spelling of the program.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
program
string
required
The loyalty program whose stored elite status to forget, e.g. World of Hyatt. Every stored spelling of the program is removed. To change a tier instead, call set_elite_status.
member
string
Household member whose status it is; omit for the member's own.
set_elite_status
Record elite status the member says they hold, and how far along they are toward the next hotel tier. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
program
string
required
The loyalty program the status is held in, e.g. World of Hyatt -- a program Miles knows; get_elite_status lists them as known_programs. One call per program; calling again for the same program replaces that program's stored tier.
tier
string
The tier exactly as the member stated it, e.g. Globalist. Omit only when updating a night count for a program that already has a stored tier, or when storing nights_per_year. Never inferred.
nights_ytd
integer
Qualifying hotel nights this year, a whole number exactly as the member states it. The program's own count already includes card-granted elite night credits, so pass it through unchanged. Hotels only.
nights_ytd_as_of
string
The calendar date the nights_ytd count is current as of, written YYYY-MM-DD. Omit for today.
nights_booked
integer
Nights booked but not yet stayed, a whole number kept as a separate forecast alongside nights_ytd.
member
string
Household member who holds it, by name; omit for the member's own. An unknown name is refused: ask who.
nights_per_year
integer
Roughly how many nights a year they stay with this program, NOT counting card elite night credits.
Watchlist
add_to_watchlist
Add a card to the member's watchlist -- considering it, not yet applied for, or holding it and still tracking it (its offer, a second copy, another household member's application). Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
card_name
string
required
The card to watch. Must resolve to a real card in Miles' catalog; an unmatched name is refused rather than stored.
cardholder
string
Which household member is considering the card, by name (an id works too). Pass it whenever the member names a person: on an account with household members, an unassigned entry has no single eligibility answer. Editable later via update_watchlist_entry.
notes
string
The member's own free text on why the card is being watched, written as they said it. Not the place for the member's own decision deadline (use update_watchlist_entry's decide_by). Ignored when the card is already on the watchlist; change an existing note with update_watchlist_entry.
get_watchlist
Cards the member is considering -- not yet in their wallet.
Scope
Quota
miles:read
standard
No parameters.
remove_from_watchlist
Remove a card from the member's watchlist. Requires wallet-change access. Use lookup_card_name to identify the entry by name; if multiple entries match, use entry_id on retry.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
lookup_card_name
string
Identify the entry by card name, e.g. Venture X. If more than one entry matches, retry with entry_id.
entry_id
string
Identify the entry exactly by the w_N id get_watchlist keys its entries by, e.g. w_2. Use on retry when lookup_card_name is ambiguous.
update_watchlist_entry
Edit a watched card's cardholder, its notes, the date the member means to decide by, or any combination. Requires wallet-change access.
Scope
Quota
miles:write
standard
Name
Type
Required
Description
cardholder
string
New household member for the entry, by name (an id works too); the empty string unassigns it. Omit to leave unchanged.
notes
string
New note text. Replaces the stored note rather than appending to it, so send the whole new text; the empty string clears it. Omit to leave unchanged.
decide_by
string
The member's own deadline for deciding whether to apply, written YYYY-MM-DD -- never the offer's expiry or an eligibility date. The empty string clears it; omitting it (or sending null) leaves it unchanged.
lookup_card_name
string
Identify the entry by card name, e.g. Venture X. If more than one entry matches, retry with entry_id.
entry_id
string
Identify the entry exactly by the w_N id get_watchlist keys its entries by, e.g. w_2. Use on retry when lookup_card_name is ambiguous.
Knowledge
knowledge_search
Retrieval over indexed points-and-miles articles, guides and reviews -- reach for this when a question needs explanation or strategy that Miles' structured tools don't cover: how a transfer bonus mechanic actually works, what changed about a lounge network, how to think through a redemption trade-off. If the answer is a fact about the member's own wallet or the card dataset -- current benefits, transfer ratios, eligibility -- use the structured tool for it instead (get_card_info, get_transfer_partners, get_wallet_summary); those cost nothing beyond the shared per-day ceiling and are exact, and this tool is not a substitute for them.
Scope
Quota
miles:read
expensive
Name
Type
Required
Description
query
string
required
A short topical phrase naming the subject and any specific program, card, or place involved, e.g. Chase trifecta card combination or Hyatt points expiration policy. Not the member's question restated verbatim, and not a bare keyword list: search runs a semantic match and exact-term matching, so naming the specific entity matters most.