Open the Vault in a Safari view
Create a vault session on your server, hand theurl to the app, and present it with SFSafariViewController.
SFSafariViewController rather than WKWebView. The Vault saves the user’s card behind a passkey, and a Safari view shares Safari’s passkeys, so a returning user unlocks with Face ID inside your app. Inside a WKWebView the page cannot complete the passkey prompt and asks the user to open the link in Safari instead.
Open the approval link the same way. When your agent reaches the payment form, onApprovalUrl fires with a link; present it in the same Safari view, or send it by push notification if the user is not in the app.
When the user finishes, you receive vault.session_linked with their user_id, then vault.card_stored. Store the user_id: it is what you pass as user on every checkout. Without webhooks, poll the session instead.
Show the wallet natively
AgentcardWalletKit is a SwiftUI package. You pass it a wallet link and present it like any other sheet; the wallet screens are native and talk to the API directly. The package is in early access: the repository is private, so ask us for an invite and we add your GitHub account.1. Install the package
In Xcode, add the package and pin it at0.1.0 or later:
2. Connect the user
A wallet link is issued to a connected user. Send the user a one-time code, verify it, and record their consent. Theuser.id you get back is the same id the Vault uses.
user.id. In test mode the code is always 111111.
3. Create a wallet link
url. Your client_secret never ships in the app binary. A link lasts 15 minutes by default; pass expires_in (60 to 86400 seconds) to change that.
4. Present the sheet
AgentcardWalletSheet also accepts linkToken: if you would rather pass the raw token than the URL. The sheet handles its own failures and tells the user what to do, so the one case your code owns is .tokenExpired: the link or its session ended, so create a fresh link and present the sheet again.
Confirm with webhooks
The sheet’s events tell your app what the user just did. Your server should act on webhooks, because an event can fire on a sheet the user then dismisses:vault.card_storedwhen a card lands in the vault.checkout_authorization.approvedand the othercheckout_authorization.*events when purchases are approved or declined.
Test it
A sandbox token creates a sandbox session, a sandbox connection and a sandbox wallet link. The connect code is always111111. Store any of Stripe’s published test cards, any future expiry, any CVC. Rehearse a purchase against shop.agentcard.sh, a demo store on Stripe test mode.
Next: Create a cart.