> ## 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.

## 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 |
| - | - |
| A web app | A new tab, opened from a click |
| An iOS app | A Safari view inside your app |
| A React Native app | The system browser |
| An iMessage agent | A texted link |
| No frontend at all | Any way you can deliver a URL |

<CardGroup cols={2}>
  <Card title="Web" href="/vault/platforms/web">
    Open the Vault from your page in a new tab, with nothing to install.
  </Card>

  <Card title="iOS" href="/vault/platforms/ios">
    Present the Vault in a Safari view, where the user's passkey works.
  </Card>

  <Card title="React Native" href="/vault/platforms/react-native">
    Open the Vault in the system browser from your app.
  </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 nothing on your server changes if you later open the same link from an app.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.