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

> ## Agent Instructions
> If you are an AI assistant operating Infinite for a user, read the skill first: https://docs.infinite.dev/agent-skill.md (setup per host, tool reference, rules for moving money, journeys).
> When operating Infinite for a user, use the MCP server. Sign in at https://bot.api.infinite.dev/mcp (production, acts as the user) or send `Authorization: Bearer <key>` to https://bot.api.infinite.dev/mcp/sse. Prefer its tools over raw HTTP; use REST only for steps no tool covers, and check `get_endpoint_schema` before guessing a request shape.
> Net-new Infinite Connect (org_connect) is operator-assisted: do not grant end users shared org_connect Auth Kit membership or the shared platform org API key — those credentials are org-wide on /v1. BYO org keys onboard under that customer's org id. Operator sessions should show org_connect in get_organization_info.
> The key decides the tools. Every organization key (`sk_sandbox_…` / `sk_live_…`) gets docs, onboarding, `get_account_balance`, and request logs for your own organization. BYO organizations add payees an agent will pay with `create_payee` (payable once ACTIVE). Platform Connect sessions instead get bound-customer payment lookups (`get_quote`, `get_transfer`, `list_transfers`, `list_account_balances`), payee drafts (`create_payee_draft` / `get_payee_draft`; screening only, never payable), and transfer drafts that wait for Infinite approval (`create_transfer_draft` / `get_transfer_draft`; never POST /v1/transfers). Where offered, platform `create_transfer` files a real transfer that Infinite holds in review before funding; it cannot be submitted from DRAFT.
> An agent key (`sk_sandbox_agent_…` / `sk_live_agent_…`) moves money within that agent's limits: `create_transfer` → `submit_transfer` → `wait_for_transfer`.
> On sandbox organization-key sessions, `sandbox_approve_customer` (makes the capabilities you pass READY, and related ones may turn READY too; `request_capabilities` is not needed), `sandbox_fund_account`, and `sandbox_complete_transfer` stand in for verification, funding, and settlement, so a whole flow runs from MCP. BYO keys can pass `customerId` on each call without binding; platform sessions must bind a customer first (`create_business_customer` auto-binds, or send `X-Infinite-On-Behalf-Of`).
> When searching documentation without a key, use the docs MCP at https://docs.infinite.dev/mcp.
> Start in sandbox (https://sandbox.api.infinite.dev). Do not use production unless the user explicitly asks.
> Confirm amount, currency, and payee with the user before any payment is submitted. Pass the invoice number as `reference` on `create_transfer`; the summary says what the payee will see.
> REST amounts are integer minor units (`"4000"` = 40.00 USD). MCP payment tools take exact decimal strings (`"40.00"`). Never mix them.
> Agent denials return `403 { denial: { code, message, window, limit, used, remaining, attemptedAmount, currency }, hint }` with decimal amounts; per-transfer denials omit `used` and `remaining`. Report them to the user; do not work around them.

# Cards (Coming Soon)

> Learn about our upcoming card issuing capabilities

# Cards

<Note>
  Card issuing is coming soon to Infinite! This page provides a preview of our upcoming card functionality.
</Note>

## Overview

Infinite Cards will allow you to issue virtual cards to your customers, enabling them to spend their balances anywhere cards are accepted. These cards will be directly funded from their Virtual Wallet accounts.

## Key Features (Coming Soon)

### Virtual Card Issuing

* Instantly create virtual cards via API
* Cards are ready to use immediately upon creation
* Full PAN, CVV, and expiration date provided securely

### Integrated Funding

* Cards draw funds directly from Virtual Wallet accounts
* Real-time balance checks ensure transactions never overdraft
* Seamless integration with your existing account infrastructure

### Spending Controls

* Set per-authorization limits
* Configure daily, weekly, or monthly spending caps
* Enable/disable cards instantly via API

### Real-time Authorization

* Receive webhooks for every authorization attempt
* Approve or decline transactions programmatically
* Full transaction history and reporting

## How It Will Work

1. **Create a Card**: Issue a virtual card linked to a customer's Virtual Wallet
2. **Set Limits**: Configure spending controls appropriate for the use case
3. **Process Transactions**: Cards can be used anywhere, with real-time authorization
4. **Track Activity**: Monitor all card activity through webhooks and API endpoints

## Balance and Funding Model

Cards will be seamlessly integrated with your existing Virtual Wallet infrastructure:

### Fund Management

* **Single Funding Source**: Each card draws from a designated Virtual Wallet account
* **Real-time Balance**: Card spending power equals the available balance in the linked Virtual Wallet
* **Fund Earmarking**: Authorized transactions place a hold on funds until captured or voided

### Enhanced Account Balance Structure

When cards launch, Virtual Wallet accounts will include:

```json theme={null}
{
  "id": "vwa_abc123",
  "balance": 100000,        // Total funds in cents
  "earmarkedBalance": 1500, // Funds held for pending authorizations
  "availableBalance": 98500 // balance - earmarkedBalance
}
```

## Transaction Lifecycle

Understanding how card transactions flow through the system:

### 1. Authorization

When a merchant swipes the card:

* System checks the Virtual Wallet's available balance
* If sufficient, funds are earmarked (not yet moved)
* Authorization is approved or declined in real-time
* Webhook: `card.authorization.created`

### 2. Capture

When the merchant finalizes the transaction:

* A Transfer is created from the Virtual Wallet
* Earmarked funds are released and balance is deducted
* Transaction is recorded in the account history
* Webhook: `card.authorization.captured`

### 3. Void/Expiration

If a transaction is cancelled or expires:

* Earmarked funds are released back to available balance
* No Transfer is created
* Authorization status updates to voided/expired
* Webhook: `card.authorization.voided`

## API Preview

Here's a preview of the upcoming card endpoints:

### Create a Card

<CodeGroup>
  ```python Python theme={null}
  import requests

  response = requests.post(
      'https://api.infinite.dev/v1/cards',
      headers={
          'Authorization': 'Bearer sk_live_...',
          'Content-Type': 'application/json',
      },
      json={
          'customerId': 'cus_abc123',
          'fundingAccountId': 'vwa_abc123',
          'type': 'VIRTUAL',
          'spendingLimits': [
              {
                  'amount': 50000,
                  'interval': 'PER_AUTHORIZATION',
              },
              {
                  'amount': 500000,
                  'interval': 'DAILY',
              },
          ],
      },
  )
  ```

  ```typescript TypeScript theme={null}
  const response = await fetch('https://api.infinite.dev/v1/cards', {
    method: 'POST',
    headers: {
      Authorization: 'Bearer sk_live_...',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      customerId: 'cus_abc123',
      fundingAccountId: 'vwa_abc123',
      type: 'VIRTUAL',
      spendingLimits: [
        {
          amount: 50000,
          interval: 'PER_AUTHORIZATION',
        },
        {
          amount: 500000,
          interval: 'DAILY',
        },
      ],
    }),
  });
  ```

  ```bash CLI theme={null}
  export INFINITE_API_KEY=sk_live_...
  infinite api POST /v1/cards --body '{
    "customerId": "cus_abc123",
    "fundingAccountId": "vwa_abc123",
    "type": "VIRTUAL",
    "spendingLimits": [
      {
        "amount": 50000,
        "interval": "PER_AUTHORIZATION"
      },
      {
        "amount": 500000,
        "interval": "DAILY"
      }
    ]
  }'
  ```

  ```text MCP theme={null}
  Create a virtual card for cus_abc123 funded from vwa_abc123, with a $500 per-authorization limit and a $5,000 daily limit.

  # Preview — card endpoints are not live yet.
  ```

  ```bash cURL theme={null}
  curl -X POST "https://api.infinite.dev/v1/cards" \
    -H "Authorization: Bearer sk_live_..." \
    -H "Content-Type: application/json" \
    -d '{
      "customerId": "cus_abc123",
      "fundingAccountId": "vwa_abc123",
      "type": "VIRTUAL",
      "spendingLimits": [
        {
          "amount": 50000,
          "interval": "PER_AUTHORIZATION"
        },
        {
          "amount": 500000,
          "interval": "DAILY"
        }
      ]
    }'
  ```
</CodeGroup>

```json theme={null}
{
  "id": "crd_123abc",
  "object": "card",
  "customerId": "cus_abc123",
  "fundingAccountId": "vwa_abc123",
  "type": "VIRTUAL",
  "status": "ACTIVE",
  "last4": "1234",
  "expirationMonth": 12,
  "expirationYear": 2028,
  "spendingLimits": [...],
  "createdAt": "2026-11-03T10:00:00Z"
}
```

### Update Card Status or Limits

<CodeGroup>
  ```python Python theme={null}
  import requests

  response = requests.patch(
      'https://api.infinite.dev/v1/cards/crd_123abc',
      headers={
          'Authorization': 'Bearer sk_live_...',
          'Content-Type': 'application/json',
      },
      json={
          'status': 'INACTIVE',
          'spendingLimits': [
              {
                  'amount': 10000,
                  'interval': 'PER_AUTHORIZATION',
              },
          ],
      },
  )
  ```

  ```typescript TypeScript theme={null}
  const response = await fetch('https://api.infinite.dev/v1/cards/crd_123abc', {
    method: 'PATCH',
    headers: {
      Authorization: 'Bearer sk_live_...',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({
      status: 'INACTIVE',
      spendingLimits: [
        {
          amount: 10000,
          interval: 'PER_AUTHORIZATION',
        },
      ],
    }),
  });
  ```

  ```bash CLI theme={null}
  export INFINITE_API_KEY=sk_live_...
  infinite api PATCH /v1/cards/crd_123abc --body '{
    "status": "INACTIVE",
    "spendingLimits": [
      {
        "amount": 10000,
        "interval": "PER_AUTHORIZATION"
      }
    ]
  }'
  ```

  ```text MCP theme={null}
  Deactivate card crd_123abc and lower its per-authorization limit to $100.

  # Preview — card endpoints are not live yet.
  ```

  ```bash cURL theme={null}
  curl -X PATCH "https://api.infinite.dev/v1/cards/crd_123abc" \
    -H "Authorization: Bearer sk_live_..." \
    -H "Content-Type: application/json" \
    -d '{
      "status": "INACTIVE",
      "spendingLimits": [
        {
          "amount": 10000,
          "interval": "PER_AUTHORIZATION"
        }
      ]
    }'
  ```
</CodeGroup>

### Authorization Webhook Example

When a transaction is authorized, you'll receive:

```json theme={null}
{
  "id": "evt_123abc",
  "type": "card.authorization.created",
  "data": {
    "id": "auth_123abc",
    "cardId": "crd_123abc",
    "amount": 1500,
    "currency": "USD",
    "status": "APPROVED",
    "merchantData": {
      "name": "Infinite Coffee",
      "mcc": "5812",
      "city": "San Francisco",
      "country": "US"
    },
    "createdAt": "2026-11-03T10:05:00Z"
  }
}
```

## Use Cases

* **Corporate Expense Management**: Issue cards to employees with preset spending limits
* **Platform Payouts**: Enable instant access to earnings through virtual cards
* **Subscription Management**: Create single-use or recurring payment cards
* **Travel and Entertainment**: Issue cards with merchant category restrictions

Check back soon for updates on our card issuing capabilities!


## Related topics

- [Identity Verification](/coverage/identity.md)
- [Welcome](/welcome.md)
- [Introduction](/api-reference/introduction.md)
- [Accounts](/concepts/accounts.md)
- [Agents](/concepts/agents.md)
