Connect, approve, checkout: browser payments with Link
Connect your Link wallet, approve a spending request, and let the same Notte browser session fill checkout with a temporary card. Your agent uses placeholders; Notte handles the credential handoff.
Browser agents can sign in, compare products, and prepare a cart. Payment is where developers have to connect two separate systems: the wallet that authorizes spending and the browser session that completes checkout.
That connection belongs close to the browser. The session already contains the signed-in account, cart, selected options, and payment form. By coordinating approved credentials inside the browser infrastructure, Notte lets the agent continue the same task using placeholders, without asking developers to build their own card-handling layer.
Connect once, approve each request
The agent first shares a connection URL and confirmation phrase. You authorize the wallet connection, which can be reused for later requests.
At checkout, the agent specifies the amount, currency, merchant, and purpose. You receive a separate spending approval URL. After Link confirms approval, Notte stores the temporary card in the session vault.
The first approval connects the wallet. The second authorizes spending. The merchant separately confirms the purchase. Your application controls when the browser continues, whether it is preparing a supply order or completing a booking.
Try the CLI flow
Use an existing session containing the cart. Set SESSION_ID, CHECKOUT_URL, and MERCHANT_NAME, and generate a unique REQUEST_KEY. This example assumes an authorized USD 35.00 total, including taxes and shipping.
First, connect the wallet:
notte payment connect --mode live -o jsonShare connection_url and connection_phrase. After approval, repeat the command and proceed when status=connected.
Then request spending:
notte page observe --session-id "$SESSION_ID"
PAYMENT_ID=$(notte payment request --session-id "$SESSION_ID" --mode live \
--amount 35.00 --currency usd \
--merchant-url "$CHECKOUT_URL" --merchant-name "$MERCHANT_NAME" \
--description "Purchase the item in the user's current shopping cart, with an authorized total of USD 35.00 including shipping and taxes, after explicit wallet approval." \
--idempotency-key "$REQUEST_KEY" -o json | jq -er '.id')
notte payment status "$PAYMENT_ID" -o jsonShare approval_url before waiting. If status is creating, check again for the URL. After approval:
notte payment wait "$PAYMENT_ID" --wait-timeout 10m -o jsonContinue at status=ready. A timeout or CLI disconnection does not cancel provisioning: wait on the same ID. Relay any further verification instructions from payment status. Reuse the idempotency key after an uncertain request response.
35.00 means USD 35.00. For a dev/test payment, use --mode test for both connection and request.
Fill using --vault-field. Use your checkout's actual selectors and iframe; these examples assume standard autocomplete attributes and a combined expiration field:
notte page fill --session-id "$SESSION_ID" 'input[autocomplete="cc-number"]' --vault-field card_number
notte page fill --session-id "$SESSION_ID" 'input[autocomplete="cc-name"]' --vault-field card_holder_name
notte page fill --session-id "$SESSION_ID" 'input[autocomplete="cc-exp"]' --vault-field card_expiration
notte page fill --session-id "$SESSION_ID" 'input[autocomplete="cc-csc"]' --vault-field card_cvv
notte page observe --session-id "$SESSION_ID"Recheck the total, submit once, and verify the merchant's confirmation. ready means credentials are available, not that a purchase succeeded. Inspect uncertain outcomes before resubmitting.
Where credentials enter the browser
Notte verifies approval directly with Link before provisioning the card. The agent cannot approve its own request, and a browser redirect is never proof of approval.
Wallet tokens stay in encrypted backend secret storage. Payment responses expose status and approval instructions, without card numbers or security codes. Each connection belongs to the user who authorized it.
Notte resolves placeholders at execution time and masks sensitive values in supported outputs and checkout screenshots, including iframes. The filled credential reaches the browser and merchant page; both remain part of the payment security boundary.
Session closure or credential expiration triggers removal of the installed temporary card. Other saved credentials keep their existing access permissions.
What's next
We're focusing on broader checkout support and making approval easier to integrate into agent workflows.
Build the approval step into your agent with the payment workflow reference.
Frequently asked questions
How do I let an AI agent pay at checkout on a website?
Connect a Link wallet once, then have the agent request spending for a specific amount, currency, merchant and purpose. You approve that request at a separate URL. Notte then stores the temporary card in the session vault, and the agent fills the payment form with named placeholders such as card_number instead of real card details.
Can the agent approve its own payment?
No. Notte verifies approval directly with Link before provisioning the card, and a browser redirect is never treated as proof of approval.
Does the agent see the card number?
Payment responses expose status and approval instructions, without card numbers or security codes. Notte resolves placeholders at execution time and masks sensitive values in supported outputs and checkout screenshots. The filled credential does reach the browser and the merchant page, so both remain part of the payment security boundary.
