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

# Create Card

> Create a new virtual card for an approved user

Creates a virtual card for a KYC-approved user. Cards can be created with two funding types:

* **`float`** (default) — The initial funding amount is deducted from your partner wallet. Fund and withdraw via API.
* **`crypto`** — The card receives a stablecoin deposit address. Users fund the card by sending a supported stablecoin on-chain. No initial amount required.

<ParamField header="Authorization" type="string" required>
  Bearer token. Example: `Bearer sk_staging_your_api_key`
</ParamField>

<ParamField header="idempotency-key" type="string" required>
  Unique key to prevent duplicate card creation. Use a UUID.
</ParamField>

<ParamField body="serviceId" type="string" required>
  The user's service ID returned from [Create User](/api-reference/users/create-user).
</ParamField>

<ParamField body="amount" type="number">
  Initial funding amount in USD. Must be greater than 0 and at most 10000. **Required** for `float` cards, **not required** for `crypto` cards.
</ParamField>

<ParamField body="fundingType" type="string" default="float">
  Card funding type. Either `"float"` or `"crypto"`. When set to `"crypto"`, the card receives a stablecoin deposit address and `amount` is not required.
</ParamField>

<RequestExample>
  ```bash Float Card (default) theme={null}
  curl -X POST https://services-staging.getplu.com/api/v1/partner/card \
    -H "Authorization: Bearer sk_staging_your_api_key" \
    -H "Content-Type: application/json" \
    -H "idempotency-key: 660e8400-e29b-41d4-a716-446655440001" \
    -d '{
      "serviceId": "acme-user-abc123def456ghi",
      "amount": 50
    }'
  ```

  ```bash Crypto Card theme={null}
  curl -X POST https://services-staging.getplu.com/api/v1/partner/card \
    -H "Authorization: Bearer sk_staging_your_api_key" \
    -H "Content-Type: application/json" \
    -H "idempotency-key: 770f9500-f30c-52e5-b827-557766551002" \
    -d '{
      "serviceId": "acme-user-abc123def456ghi",
      "fundingType": "crypto"
    }'
  ```
</RequestExample>

<ResponseExample>
  ```json 201 — Float Card theme={null}
  {
    "status": "success",
    "message": "Card created successfully",
    "data": {
      "serviceCardId": "acme-card-xyz789jkl012mno",
      "serviceTransactionId": "acme-card-transactions-pqr345",
      "fundingType": "float"
    }
  }
  ```

  ```json 201 — Crypto Card theme={null}
  {
    "status": "success",
    "message": "Card created successfully",
    "data": {
      "serviceCardId": "acme-card-abc123def456ghi",
      "serviceTransactionId": "acme-card-transactions-uvw678",
      "fundingType": "crypto",
      "depositAddress": "0xFe3E1AD10Ae3ed07Dd79deb3E20E6118dEcE6904",
      "supportedNetworks": [
        { "chain": "base-sepolia", "chainId": 84532, "tokens": ["usdc"] },
        { "chain": "polygon-amoy", "chainId": 80002, "tokens": ["usdc"] },
        { "chain": "optimism-sepolia", "chainId": 11155420, "tokens": ["usdc"] }
      ]
    }
  }
  ```

  ```json 400 — User not approved theme={null}
  {
    "status": "error",
    "message": "USER_NOT_APPROVED",
    "data": {
      "error": "User has not completed KYC verification"
    }
  }
  ```

  ```json 400 — Rate limit theme={null}
  {
    "status": "error",
    "message": "CARD_CREATION_LIMIT",
    "data": {
      "error": "Only 1 card can be created per user every 5 minutes"
    }
  }
  ```

  ```json 402 — Insufficient balance theme={null}
  {
    "status": "error",
    "message": "INSUFFICIENT_WALLET_BALANCE",
    "data": {
      "error": "Partner wallet has insufficient funds"
    }
  }
  ```
</ResponseExample>

<Note>
  There is a rate limit of **1 card per user every 5 minutes**. If you need to create another card for the same user, wait for the cooldown to expire.
</Note>

<Info>
  For **crypto cards**, a card creation fee is still charged from your partner wallet. After creation, the card is funded exclusively by on-chain deposits to the returned `depositAddress` — the [Fund Card](/api-reference/cards/fund-card) endpoint is not available for crypto cards. [Withdraw](/api-reference/cards/withdraw-card) is supported.
</Info>

<Warning>
  Only the chain/token pairs in `supportedNetworks` are credited. `depositAddress` is an EVM address, so it
  will *receive* on any EVM chain, but anything outside that list has to be recovered manually. Read the
  array at runtime rather than hardcoding a chain — the values differ between staging and production, and
  the list grows. See [Supported networks](/webhooks#supported-networks) for the full table.
</Warning>
