> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentcard.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose a platform

> Put the Vault in front of your users wherever your product lives: a web app, an iOS app, a React Native app, an iMessage agent, or a plain link.

The Vault is two hosted pages. On one, a user adds a card. On the other, they approve a purchase. Your server creates the links to those pages, and the platform only changes how you open them and whether you also show the user their cards inside your own product.

## Get the two links

Every platform uses the same two links, so the server side of your integration never changes.

| Link                    | Where it comes from                                                                                                             | What the user does with it                                         |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| The vault session `url` | [`POST /api/v2/vault_sessions`](/api-reference/vault/sessions-create)                                                           | Types their card once and saves it with a passkey.                 |
| The approval link       | `onApprovalUrl` in the checkout SDK, or `approvalUrl` on a [checkout authorization](/api-reference/vault/authorizations-create) | Sees the merchant and the amount, and confirms with their passkey. |

Both pages open on their own, in a full browser. They refuse to load inside another page's frame, and the passkey prompt needs a real browser: Safari or Chrome on a phone, a Safari view inside an iOS app, never an in-app browser. If a user opens a link inside a messaging app's built-in browser, the page asks them to open it in Safari or Chrome instead.

## Pick your platform

| Your product       | Open the links                 | Show the user's cards in your product            |
| ------------------ | ------------------------------ | ------------------------------------------------ |
| A web app          | A new tab, opened from a click | The JavaScript SDK sheet                         |
| An iOS app         | A Safari view inside your app  | The AgentcardWalletKit Swift package             |
| A React Native app | The system browser             | The `@agent-cards/wallet-react-native` component |
| An iMessage agent  | A texted link                  | Linq's native bubbles                            |
| No frontend at all | Any way you can deliver a URL  | Nothing to add                                   |

<CardGroup cols={2}>
  <Card title="Web" href="/vault/platforms/web">
    Open the Vault from your page, or drop the wallet sheet in with one script tag.
  </Card>

  <Card title="iOS" href="/vault/platforms/ios">
    Present the Vault in a Safari view, or show the wallet natively with the Swift package.
  </Card>

  <Card title="React Native" href="/vault/platforms/react-native">
    Open the Vault in the system browser, or render the wallet with one component.
  </Card>

  <Card title="iMessage" href="/vault/platforms/imessage">
    Text the links from your own number, or let Linq render them as native bubbles.
  </Card>

  <Card title="Hosted link" href="/vault/platforms/hosted-link">
    Send the URL from a CLI, an email, WhatsApp, or anywhere else, with nothing to embed.
  </Card>
</CardGroup>

If you are not sure, start with the [hosted link](/vault/platforms/hosted-link). It needs nothing but a URL, and you can add an embedded wallet later without changing anything on your server.
