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

# Quickstart

> Issue your first virtual card in the PointZero sandbox in five requests: find a program, create a customer, issue a card and read its transactions.

This guide takes you from an API key to an active virtual card in the sandbox. You need a sandbox key from the [PointZero Dashboard](https://dashboard.pointzero.io). Sandbox keys start with `sk_test_` and never move real money.

<Steps>
  <Step title="Set your API key">
    ```bash theme={null}
    export POINTZERO_API_KEY="sk_test_..."
    ```
  </Step>

  <Step title="Find your program">
    ```bash theme={null}
    curl https://sandbox.api.pointzero.io/v1/programs \
      -H "Authorization: Bearer $POINTZERO_API_KEY"
    ```

    ```json Response theme={null}
    {
      "object": "list",
      "data": [
        {
          "id": "prog_01JZ8A2K4M",
          "object": "program",
          "name": "Corporate Cards",
          "status": "active",
          "network": "visa",
          "supported_card_types": ["virtual", "physical"],
          "supported_currencies": ["EUR"]
        }
      ],
      "has_more": false,
      "next_cursor": null
    }
    ```

    Copy the `id` of an active program. If you leave `program_id` out when creating a card, your account's default program is used.
  </Step>

  <Step title="Create a customer">
    ```bash theme={null}
    curl https://sandbox.api.pointzero.io/v1/customers \
      -H "Authorization: Bearer $POINTZERO_API_KEY" \
      -H "Content-Type: application/json" \
      -H "Idempotency-Key: $(uuidgen)" \
      -d '{
        "type": "individual",
        "external_id": "user_10492",
        "name": { "first": "Alex", "last": "Morgan" },
        "email": "alex.morgan@example.com",
        "phone": "+34600000000"
      }'
    ```

    ```json Response theme={null}
    {
      "id": "cus_01JZ8M4X7K",
      "object": "customer",
      "type": "individual",
      "external_id": "user_10492",
      "name": { "first": "Alex", "last": "Morgan" },
      "email": "alex.morgan@example.com",
      "phone": "+34600000000",
      "status": "active",
      "created_at": "2026-10-05T19:47:12Z"
    }
    ```
  </Step>

  <Step title="Issue a virtual card">
    <CodeGroup>
      ```bash cURL theme={null}
      curl https://sandbox.api.pointzero.io/v1/cards \
        -H "Authorization: Bearer $POINTZERO_API_KEY" \
        -H "Content-Type: application/json" \
        -H "Idempotency-Key: $(uuidgen)" \
        -d '{
          "customer_id": "cus_01JZ8M4X7K",
          "program_id": "prog_01JZ8A2K4M",
          "type": "virtual",
          "currency": "EUR",
          "cardholder": { "name": "ALEX MORGAN" },
          "spending_controls": { "single_transaction_limit": 50000 }
        }'
      ```

      ```javascript Node.js theme={null}
      const response = await fetch("https://sandbox.api.pointzero.io/v1/cards", {
        method: "POST",
        headers: {
          Authorization: `Bearer ${process.env.POINTZERO_API_KEY}`,
          "Content-Type": "application/json",
          "Idempotency-Key": crypto.randomUUID(),
        },
        body: JSON.stringify({
          customer_id: "cus_01JZ8M4X7K",
          program_id: "prog_01JZ8A2K4M",
          type: "virtual",
          currency: "EUR",
          cardholder: { name: "ALEX MORGAN" },
          spending_controls: { single_transaction_limit: 50000 },
        }),
      });

      const card = await response.json();
      ```

      ```python Python theme={null}
      import os
      import uuid
      import requests

      response = requests.post(
          "https://sandbox.api.pointzero.io/v1/cards",
          headers={
              "Authorization": f"Bearer {os.environ['POINTZERO_API_KEY']}",
              "Idempotency-Key": str(uuid.uuid4()),
          },
          json={
              "customer_id": "cus_01JZ8M4X7K",
              "program_id": "prog_01JZ8A2K4M",
              "type": "virtual",
              "currency": "EUR",
              "cardholder": {"name": "ALEX MORGAN"},
              "spending_controls": {"single_transaction_limit": 50000},
          },
      )

      card = response.json()
      ```
    </CodeGroup>

    ```json Response theme={null}
    {
      "id": "card_01JZ8N2K4M",
      "object": "card",
      "customer_id": "cus_01JZ8M4X7K",
      "program_id": "prog_01JZ8A2K4M",
      "type": "virtual",
      "status": "active",
      "currency": "EUR",
      "brand": "visa",
      "last4": "4821",
      "expiry": { "month": 11, "year": 2029 },
      "spending_controls": {
        "single_transaction_limit": 50000,
        "daily_limit": null,
        "monthly_limit": null
      },
      "created_at": "2026-10-05T19:48:00Z"
    }
    ```

    `50000` is €500.00: all amounts are in minor units.
  </Step>

  <Step title="Check transactions">
    ```bash theme={null}
    curl "https://sandbox.api.pointzero.io/v1/transactions?card_id=card_01JZ8N2K4M" \
      -H "Authorization: Bearer $POINTZERO_API_KEY"
    ```

    Transactions are returned newest first. A new card returns an empty `data` array until it is used.
  </Step>
</Steps>

## Next steps

<CardGroup cols={3}>
  <Card title="Controls" icon="shield-check" href="/guides/spending-and-authorization-controls">
    Limit where and how the card works.
  </Card>

  <Card title="Physical cards" icon="truck" href="/guides/physical-cards">
    Order a plastic card and set its PIN.
  </Card>

  <Card title="Digital wallets" icon="mobile" href="/guides/digital-wallets">
    Add the card to Apple Pay or Google Pay.
  </Card>
</CardGroup>


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