---
title: "Get card details"
method: GET
path: "/get-card-data"
---

# Get card details

`GET /get-card-data`

## Request

- Base URL: `https://laso.finance`
- URL: `https://laso.finance/get-card-data`
- Auth: API key in header `Authorization`

Returns the current status and details of card orders. If `card_id` is provided, returns a single card, looked up across U.S. non-reloadable, international non-reloadable, and reloadable cards. If omitted, returns all cards of the given `card_type` for the authenticated user; `card_type` defaults to `Non-Reloadable U.S.` when omitted, so existing callers see unchanged behavior. Pass `card_type=Non-Reloadable International` to list international cards, or `card_type=Reloadable` to list reloadable cards.

For U.S. non-reloadable cards, details take ~7-10 seconds to become available after ordering; poll every 2-3 seconds until `status` is `"ready"`, then read `card_details`. For international non-reloadable cards, the order is `queued` until an admin fulfills it (typically within 24 hours), after which `card_details` is populated.

For international cards, the `card_id` returned by `/order-intl-card` is a queue id. After admin fulfillment, the issuer's transaction id becomes the new `card_id` and the original queue id is preserved on the card as `queued_order_card_id`. You can keep polling `/get-card-data?card_id=<original-queue-id>` and it will resolve to the fulfilled card.

**Reloadable cards** are a separate product, set up by the account holder in the Laso dashboard rather than ordered through this API. They are reusable (a `multi_use` card stays open across charges until its limit is spent) and can be topped up, unlike the single-load non-reloadable cards. Listing them returns `balance`, `spend_limit`, `last4`, `expiry`, and `reusable`. If the wallet has no card issuer account linked, the list is empty and a `note` explains how the holder sets one up.

Reading a reloadable card's **number and CVV** is gated by the card issuer, and which gate applies depends on who issued it. Request the card by `card_id`; the response carries exactly one of three fields. `card_details` is the normal result for a card created through `/create-reloadable-card`, which Laso issues on the holder's behalf and can read for them directly — no approval step is involved. `details_approval` with `status: "pending"` and an `approval_id` appears only for a card the holder created in a DIFFERENT app: the issuer has emailed them an approve/deny link, and once they approve you retry as `GET /get-card-data?card_id=<CARD_ID>&approval_id=<APPROVAL_ID>` to receive `card_details`. `details_error` means the issuer could not return the number; retry shortly, and if it persists the holder can read the card in the dashboard. Spend the card by entering its number, expiry, and CVV at the merchant's checkout. `billing_address` is null on these cards and always will be — the issuer holds no billing address for a card. If a merchant requires one, use the address the account holder gave at identity verification (ask them; do not guess), since these cards are AVS-checked against it and a mismatch is the most common decline on a card that has funds. A card with `reusable: true` stays open after an approved charge and can be spent again up to its remaining `balance`; a charge larger than the balance is declined in full, as there are no partial approvals.

Requires a Bearer token from `/auth` or `/get-card`.

## Query parameters

- `card_id` string
- `card_type` 'Non-Reloadable U.S.' | 'Non-Reloadable International' | 'Reloadable'
- `approval_id` string

## Response `200`

Card status and details. Returns a single `CardData` object when `card_id` is provided, or `{ "cards": CardData[] }` when omitted.

- union
  - CardData: Response from `/get-card-data`. Three card types share this shape and each populates a different subset. **Non-reloadable (U.S. and International):** when `status` is `ready`, `card_details` carries the number, CVV, and expiry. International cards add `label`, `charged_usd_amount`, `fees_paid`, `state`, `balance_update_requested_timestamp`, and `queued_order_card_id`. **Reloadable:** returns `last4`, `expiry`, `balance`, `spend_limit`, `reusable`, `issuer_status`, `created_at`, and `expires_at` instead of the `usd_amount`/`timestamp` fields above. Reading its number and CVV is gated by the card issuer, so exactly one of `card_details`, `details_approval`, or `details_error` is present on a single-card lookup.
    - `card_id` string
    - `card_type` 'Non-Reloadable U.S.' | 'Non-Reloadable International' | 'Reloadable'
    - `usd_amount` number
    - `country` string: U.S. cards only.
    - `label` string, nullable: International cards only. User-supplied label, may be empty.
    - `charged_usd_amount` number: International cards only. Amount the user was charged including fees.
    - `fees_paid` number: International cards only. Fees paid for this card.
    - `state` 'queued' | 'redeemable' | 'complete' | 'refund-requested' | 'refund-requested-approved-for-queue' | 'archived' | 'refunded': International cards only. Raw card state.
    - `balance_update_requested_timestamp` number, nullable: International cards only. Unix timestamp (ms) of an outstanding admin balance update request, or null if none is pending.
    - `queued_order_card_id` string, nullable: International cards only. The original `card_id` returned by `/order-intl-card`. After admin fulfillment the card is reissued with a new `card_id` (the issuer's transaction id); querying `/get-card-data?card_id=<original>` continues to resolve to the fulfilled card via this field.
    - `timestamp` number
    - `timestamp_readable` string
    - `last_updated_timestamp` number: U.S. cards only. Unix timestamp (ms) of the last time card data was refreshed.
    - `status` 'pending' | 'ready' | 'queued' | 'complete' | 'refund-requested' | 'refunded' | 'archived'
    - `card_details` object: Only present when status is `ready` (U.S.) or `complete` (international).
      - `card_number` string
      - `exp_month` string
      - `exp_year` string
      - `cvv` string
      - `available_balance` number
      - `billing_address` object, nullable: The card billing address to enter when a merchant asks for one at checkout. The billing name is always `Laso Finance`. For USA non-reloadable cards `required` is `false` (any valid U.S. billing address works; this is a known-good default). For international non-reloadable cards `required` is `true` and the merchant AVS check is validated against exactly this address. On reloadable cards this is always null: the card issuer holds no billing address for a card, and they are AVS-checked against the address the account holder gave at their own identity verification. Ask the holder for it; do not substitute Laso's address.
        - `name` string: Always `Laso Finance`.
        - `line_1` string
        - `line_2` string
        - `city` string
        - `state` string
        - `zip` string
        - `country` string
        - `required` boolean: `true` if the card enforces AVS against this exact address (international cards); `false` if any valid U.S. address works (USA cards).
        - `note` string
    - `transactions` union[]: Card transaction history. U.S. and international cards use slightly different shapes — see `CardTransaction` and `IntlCardTransaction`.
      - union
        - CardTransaction: U.S. prepaid card transaction.
          - `amount` number
          - `date` string
          - `description` string
          - `is_credit` boolean
        - IntlCardTransaction: International prepaid card transaction.
          - `amount` number: Transaction amount in USD.
          - `date` number, nullable: Unix timestamp (ms) of the transaction.
          - `merchant` string
          - `status` string, nullable: Optional status, e.g. `pending`.
    - `last4` string: Reloadable cards only. Last four digits.
    - `expiry` string: Reloadable cards only. MM/YY.
    - `balance` number: Reloadable cards only. Spendable balance in dollars.
    - `spend_limit` number: Reloadable cards only. Spend cap in dollars.
    - `reusable` boolean: Reloadable cards only. True for a multi-use card.
    - `issuer_status` string: Reloadable cards only. The issuer's own status string, kept verbatim.
    - `created_at` number: Reloadable cards only. Epoch milliseconds.
    - `expires_at` number, nullable: Reloadable cards only. Epoch milliseconds, or null when the card does not expire.
    - `details_approval` object, nullable: Reloadable cards only, and only for a card the holder created in ANOTHER app. The issuer has emailed them an approve/deny link; retry with `approval_id` once they approve. Cards created through `/create-reloadable-card` are Laso-issued and never take this path.
      - `status` 'pending'
      - `approval_id` string, nullable
      - `note` string
    - `details_error` string, nullable: Reloadable cards only. Present when the issuer could not return the number, so a card with no `card_details` is never silently indistinguishable from one whose details are pending.
  - object
    - `cards` CardData[]
      - `card_id` string
      - `card_type` 'Non-Reloadable U.S.' | 'Non-Reloadable International' | 'Reloadable'
      - `usd_amount` number
      - `country` string: U.S. cards only.
      - `label` string, nullable: International cards only. User-supplied label, may be empty.
      - `charged_usd_amount` number: International cards only. Amount the user was charged including fees.
      - `fees_paid` number: International cards only. Fees paid for this card.
      - `state` 'queued' | 'redeemable' | 'complete' | 'refund-requested' | 'refund-requested-approved-for-queue' | 'archived' | 'refunded': International cards only. Raw card state.
      - `balance_update_requested_timestamp` number, nullable: International cards only. Unix timestamp (ms) of an outstanding admin balance update request, or null if none is pending.
      - `queued_order_card_id` string, nullable: International cards only. The original `card_id` returned by `/order-intl-card`. After admin fulfillment the card is reissued with a new `card_id` (the issuer's transaction id); querying `/get-card-data?card_id=<original>` continues to resolve to the fulfilled card via this field.
      - `timestamp` number
      - `timestamp_readable` string
      - `last_updated_timestamp` number: U.S. cards only. Unix timestamp (ms) of the last time card data was refreshed.
      - `status` 'pending' | 'ready' | 'queued' | 'complete' | 'refund-requested' | 'refunded' | 'archived'
      - `card_details` object: Only present when status is `ready` (U.S.) or `complete` (international).
        - `card_number` string
        - `exp_month` string
        - `exp_year` string
        - `cvv` string
        - `available_balance` number
        - `billing_address` object, nullable: The card billing address to enter when a merchant asks for one at checkout. The billing name is always `Laso Finance`. For USA non-reloadable cards `required` is `false` (any valid U.S. billing address works; this is a known-good default). For international non-reloadable cards `required` is `true` and the merchant AVS check is validated against exactly this address. On reloadable cards this is always null: the card issuer holds no billing address for a card, and they are AVS-checked against the address the account holder gave at their own identity verification. Ask the holder for it; do not substitute Laso's address.
          - `name` string: Always `Laso Finance`.
          - `line_1` string
          - `line_2` string
          - `city` string
          - `state` string
          - `zip` string
          - `country` string
          - `required` boolean: `true` if the card enforces AVS against this exact address (international cards); `false` if any valid U.S. address works (USA cards).
          - `note` string
      - `transactions` union[]: Card transaction history. U.S. and international cards use slightly different shapes — see `CardTransaction` and `IntlCardTransaction`.
        - union
          - CardTransaction: U.S. prepaid card transaction.
            - `amount` number
            - `date` string
            - `description` string
            - `is_credit` boolean
          - IntlCardTransaction: International prepaid card transaction.
            - `amount` number: Transaction amount in USD.
            - `date` number, nullable: Unix timestamp (ms) of the transaction.
            - `merchant` string
            - `status` string, nullable: Optional status, e.g. `pending`.
      - `last4` string: Reloadable cards only. Last four digits.
      - `expiry` string: Reloadable cards only. MM/YY.
      - `balance` number: Reloadable cards only. Spendable balance in dollars.
      - `spend_limit` number: Reloadable cards only. Spend cap in dollars.
      - `reusable` boolean: Reloadable cards only. True for a multi-use card.
      - `issuer_status` string: Reloadable cards only. The issuer's own status string, kept verbatim.
      - `created_at` number: Reloadable cards only. Epoch milliseconds.
      - `expires_at` number, nullable: Reloadable cards only. Epoch milliseconds, or null when the card does not expire.
      - `details_approval` object, nullable: Reloadable cards only, and only for a card the holder created in ANOTHER app. The issuer has emailed them an approve/deny link; retry with `approval_id` once they approve. Cards created through `/create-reloadable-card` are Laso-issued and never take this path.
        - `status` 'pending'
        - `approval_id` string, nullable
        - `note` string
      - `details_error` string, nullable: Reloadable cards only. Present when the issuer could not return the number, so a card with no `card_details` is never silently indistinguishable from one whose details are pending.

## Other responses

- `400`: Invalid card_type. Must be "Non-Reloadable" or "Non-Reloadable International" when provided.
- `401`: Missing or invalid Bearer token
- `403`: Not authorized to view this card, or the account is frozen (frozen responses include a `frozen_message` field).
- `404`: Card not found

---

[API](https://skmtc.dev/laso/apis/laso-finance-x402-api.md) · [All operations](https://skmtc.dev/laso/apis/laso-finance-x402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/laso/apis/laso-finance-x402-api/revisions/ff8ce20b49ba?raw)
