get_credential handles authorization matching and setup for the checkout total; do not first call list_spendable_instructions or create_purchase_instruction.
Understand the three layers
Connecting a wallet does not authorize every purchase. Creating an instruction also does not activate it: only an
ACTIVE instruction with an applicable mandate can authorize spending.
Passkeys and purchase authorization

Read the wallet
Callget_account_state with {} when the user asks which cards are available, which is the default, or whether a named card can be used. Read again for each new wallet question: cards and defaults can change outside the conversation.
The response contains paymentMethods, defaultPaymentInstrumentId, and ready. Show cards by cardScheme and cardLastFour; use paymentInstrumentId in tool calls.
Select or manage a card
If a description matches several cards, ask the user which card they mean. Do not choose a new default automatically. Changing the default requires
wallet:setup as well as wallet:read; if direct modification is unavailable, provide the user-managed set-default flow.
start_payment_method_action returns an Operation with a REDIRECT_USER action. Give the URL to the user to open on their own device. After they complete it, read the same Operation with get_operation, then refresh get_account_state. Merely opening or returning from the page does not prove completion.
Create a spending authorization
Usecreate_purchase_instruction when the user explicitly wants to establish an authorization, such as a bounded budget or recurring spending. Preserve their purpose, amount, currency, and validity. Read the connected MCP server’s current rules before creating it.
The user’s intent determines which flow to use:
For a separate one-time authorization, such as “Approve up to USD 25.00 for my next office supplies purchase,” use the example below. For the monthly scenario, use the recurring fields described after the authorization flow:
requestId for each new user intent. After a timeout or setup step, reuse that ID and the exact original arguments. Do not create a second authorization just because the first request is still waiting.
Instruction limits use decimal strings in major currency units:
"25.00" means USD 25.00. Browser Pay’s get_credential.amount uses minor units: 2500 means USD 25.00.operationId and verify the same instructionId.
Follow the returned next_action: setup and authorization can require more than one user action. If the instruction is PENDING and has no bound card, keep the same instruction through card setup. CREATED, PENDING, a failed read, or the user’s statement that they finished is not evidence of an active authorization.
The returned effectiveUntilTime is the effective expiry. The service may apply an expiry limit. For recurring instructions, set isRecurring: true and a recurringFrequency of WEEKLY, MONTHLY, or YEARLY on every mandate; this authorizes spending within those limits and does not schedule purchases by itself.
Read, update, or cancel an authorization
- Use
list_spendable_instructionsto find active instructions for a card. OmitpaymentInstrumentIdto use the current default. An active result still needs to match the intended purpose, currency, limit, merchant or category, and validity. - Use
get_instructionto read a specific instruction and verify activation or a later change. - Use
start_instruction_actionwithaction: "sign"andinstructionIdto obtain an activation link for an existing instruction. - Use
action: "update"or"cancel"to open the user-managed instruction page. These actions take no instruction ID; the user chooses the instruction on that page. Read the relevant instruction afterward to verify the change.
start_instruction_action returns { action, actor, url, ... }, not an Operation. Its actor is USER_DEVICE_ONLY; present url to the user.
Registration and risk settings
For an explicit Agent Pay registration request, callstart_agent_pay_registration with the selected paymentInstrumentId. Follow the returned Operation and verify strongAuthRegistered: true for that same card. Browser Pay and instruction creation handle their own setup flow, so do not run standalone registration before them.
Read current risk settings with get_risk_rules. To change them, call start_risk_rules_action and give the returned URL to the user. Read get_risk_rules afterward for the actual values; an Operation’s completion alone does not describe the settings.
Wallet tool reference
Parameters, scopes, return fields, and recovery behavior.
Continue with Browser Pay
Obtain a credential, submit payment, and report the result.