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

# Test Issuing Virtual Cards

> Ready-to-use offer IDs for issuing virtual cards in the staging environment, plus how to discover offers dynamically.

Use these offer IDs to issue virtual cards in the **staging** environment. Every virtual card is created against an *offer*, which determines the card program (network, BIN, and rewards). The offer IDs below are enabled for staging and can be passed straight to `createVirtualCard`.

<Warning>
  **Complete KYC first**

  Virtual cards can only be issued on an account that has completed identity verification. Until the account — and, for a business, its beneficial owners — passes KYC/KYB, `getVirtualCardOffers` may return empty and `createVirtualCard` will fail. Run verification before you test. See [User KYC Verification](/user-kyc-verification) for how to submit it, and pull test identities from [Testing KYC Flows](/test-kyc-flows).
</Warning>

<Note>
  **Staging only**

  These offer IDs are accepted only on the staging endpoint (`https://transactional-graph.staging.fluzapp.com/api/v1/graphql`). They will be rejected in production, where you must retrieve a live offer ID from [Get Virtual Card Offers](/features/get-card-offers).
</Note>

## Staging offer IDs

| Offer ID                               | Program                                         | Issuer           | Network    |
| -------------------------------------- | ----------------------------------------------- | ---------------- | ---------- |
| `387a57ce-5fc9-400f-a610-1991d5748ea5` | Virtual Card - Mastercard Prepaid               | TransPecos Banks | Mastercard |
| `bc7f66ab-199c-4a39-bba8-defde1348d73` | Brand Locked Virtual Card - Mastercard Prepaid  | TransPecos Banks | Mastercard |
| `41b8c025-2b3c-4ede-81f7-efd34c170b76` | Single Load - Virtual Card - Mastercard Prepaid | —                | Mastercard |
| `490032ad-2e67-4ef0-92ff-cd7071332716` | Reloadable Virtual Card - Mastercard Prepaid    | —                | Mastercard |

<Info>
  **Offer IDs change.** Staging card programs are added and retired over time, so treat the table above as a starting point rather than a fixed list. If an ID is rejected, query the current set instead:

  ```bash theme={null}
  curl -X POST https://transactional-graph.staging.fluzapp.com/api/v1/graphql \
    -H "Authorization: Bearer <ACCESS_TOKEN>" \
    -H "Content-Type: application/json" \
    -d '{"query":"query { getVirtualCardOffers { offerId programName bankName } }"}'
  ```

  Staging currently exposes more than 40 offers, including Visa and debit programs not listed here.
</Info>

## Which offer should you choose?

Each program issues a Mastercard prepaid card, but they differ in where the card can be spent and how it's funded. Pick the one that matches the behavior you want to test:

<AccordionGroup>
  <Accordion title="Virtual Card" icon="credit-card">
    The general-purpose program — a standard multi-use prepaid card that can be spent anywhere Mastercard is accepted, within the spend limits you set. Start here if you just want to run the happy path end to end.
  </Accordion>

  <Accordion title="Brand Locked Virtual Card" icon="store">
    A card restricted to a single merchant or brand. Transactions at any other merchant are declined. Use this to test merchant-restricted spend controls — for example, a card that only works at one vendor.
  </Accordion>

  <Accordion title="Single Load Virtual Card" icon="banknote">
    A card funded once, at creation. The balance is loaded up front and spent down — it can't be topped up afterward. Use this to test fixed-value, disposable card flows like one-off vendor payments or payouts.
  </Accordion>

  <Accordion title="Reloadable Virtual Card" icon="refresh-ccw">
    A card whose balance can be topped up after creation. Use this to test long-lived cards that get refunded repeatedly — recurring allowances, team cards, or ongoing subscription spend.
  </Accordion>
</AccordionGroup>

## Recommended flow

Rather than hard-coding an offer ID, discover offers at runtime — the returned list reflects exactly what your account is entitled to. It's a quick two-call sequence.

<Steps>
  <Step title="List available offers">
    Call `getVirtualCardOffers` and grab an `offer_id` from the response.
  </Step>

  <Step title="Create the card">
    Pass that `offer_id` to `createVirtualCard`. A successful response returns a `virtual_card_id` with a status of `ACTIVE`.
  </Step>
</Steps>

<CodeGroup>
  ```graphql Step 1 — Get offers theme={null}
  query {
    getVirtualCardOffers(input: {}) {
      offerId
      programName
      bankName
      rewardValue
    }
  }
  ```

  ```graphql Step 2 — Create a card theme={null}
  mutation {
    createVirtualCard(input: {
      offerId: "387a57ce-5fc9-400f-a610-1991d5748ea5"
      spendLimit: 5.00
      idempotencyKey: "3f1a9c72-5b84-4e2d-9a06-1c7d8e4b2f50"
      billingAddress: {
        streetAddressLine1: "1600 Amphitheatre Pkwy"
        city: "Mountain View"
        state: "CA"
        postalCode: "94043"
        country: "United States"
      }
    }) {
      virtualCardId
      status
      initialAmount
    }
  }
  ```
</CodeGroup>

<Tip>
  Keep `spendLimit` at or below your available balance — the card is funded from your Fluz balance, so a higher limit fails with an insufficient-balance error. A \$5 test is the safest first attempt.

  **A billing address is required.** If your account has none on file, `createVirtualCard` fails with *"The address on your account couldn't be verified"* — pass a `billingAddress` in the input, or a saved `userAddressId`. It must be a real, deliverable US address; a value from [Test Addresses](/test-addresses) works in staging. See [Add Virtual Card Address](/features/add-billing-address).
</Tip>

## Next steps

<CardGroup cols={2}>
  <Card title="Create Virtual Card" icon="credit-card" href="/features/create-virtual-card">
    The full `createVirtualCard` reference — inputs, funding, and the card lifecycle.
  </Card>

  <Card title="Testing KYC flows" icon="id-card" href="/test-kyc-flows">
    Test identities that return each verification outcome — approved, declined, and duplicate.
  </Card>
</CardGroup>

**Want to learn more?** Contact us at [partnerships@fluz.app](mailto:partnerships@fluz.app). Speak with our experts for more info or to request a demo.
