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

# attach_card

> Attach the user's own Visa card so purchases charge it directly, with no KYC and no balance funding

Attaches the user's own Visa card to Agentcard so purchases charge that card directly, with no identity verification (KYC) and no balance funding needed. The tool is two-phase and conversational: the first call returns a secure link the user opens (about a minute: a one-time code from their bank plus a passkey); call `attach_card` again to check whether they finished. Once attached, [create\_card](/companies/mcp/tools/create_card) automatically mints against the attached card.

If the card is not eligible (for example a business or non-US card, or an excluded issuer), fall back to `create_card`, which issues an Agentcard funded from the user's cash balance.

<Note>
  This is the MCP counterpart of the REST [card attachment flow](/companies/guides/attach-card) (`POST /api/v2/attach`). Use REST when your backend drives the flow with a platform token; use this tool when the user's own agent drives it over an OAuth connection.
</Note>

## Parameters

| Parameter    | Type    | Required | Description                                                                                                                                                                        |
| ------------ | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `restart`    | boolean | No       | Set true only when the user lost or never received a pending attach link; starts a fresh link. Never needed on the first call or for status checks                                 |
| `additional` | boolean | No       | Attach another card while one is already active (multi-card). Default false: with a card already attached the tool answers `already_attached` instead of starting a new enrollment |

## Returns

A `status` discriminator with a human-readable `message`:

* `attach_started`: send the user the returned `attachUrl` (with `expiresAt`), then call `attach_card` again to check the result.
* `pending`: the user has not finished the link yet; ask them to complete it and check again.
* `attached` / `already_attached`: done. The `connectedCardId` and the card's brand and last4 are returned, and `create_card` now mints against the attached card.
* `attach_ineligible`: this card cannot be attached (a `reason` such as `issuer_excluded` or `commercial_card` says why); fall back to `create_card`.
* `byoc_unavailable`: attaching is not available right now; fall back to `create_card`.
* `user_info_required`: collect a phone number and terms acceptance via [submit\_user\_info](/companies/mcp/tools/submit_user_info) first, then call `attach_card` again.

With multiple cards attached, the newest active one is the default mint target; list them with [list\_attached\_cards](/companies/mcp/tools/list_attached_cards) and pick a specific one with `create_card`'s `connected_card_id`. Unenroll one any time with [remove\_attached\_card](/companies/mcp/tools/remove_attached_card).

## Example

```json theme={null}
{ "name": "attach_card", "arguments": {} }
```

Attach a second card alongside the current one:

```json theme={null}
{ "name": "attach_card", "arguments": { "additional": true } }
```
