---
title: "Order a USA prepaid card"
method: GET
path: "/get-card"
---

# Order a USA prepaid card

`GET /get-card`

## Request

- Base URL: `https://laso.finance`
- URL: `https://laso.finance/get-card`
- Auth: none declared

Pay between \$5–\$1000 USDC to order a Laso Finance USA prepaid card. By default returns JSON with auth credentials and card info (for AI agents). Pass `format=html` to get an HTML redirect to the card redemption URL (for browser-based flows).

The JSON response includes a `card.status` of `"pending"`. Card details (number, CVV, etc.) take ~7-10 seconds to become available. Poll `GET /get-card-data?card_id=<card_id>` with the returned `id_token` as a Bearer token every 2–3 seconds until `status` becomes `"ready"`.

**U.S. only.** This card is issued in USD and can only be used for purchases at U.S.-based merchants. Physical goods must ship to a U.S. address. For non-U.S. merchants or non-USD currencies, use `GET /order-intl-card` instead. This endpoint is intended for the caller's own use — the card is non-transferable.

## Query parameters

- `amount` number, required
- `format` 'json' | 'html'

## Response `200`

Card order response. JSON by default, or HTML redirect if `format=html`.

- object
  - `auth` AuthCredentials
    - `id_token` string: ID token — use as Bearer token for Laso Finance APIs
    - `refresh_token` string: Use with POST /auth (grant_type=refresh_token) to get a new id_token when it expires
    - `expires_in` string: Token lifetime in seconds
  - `callable_base_url` string
  - `user_id` string: Opaque account id for the authenticated user. It is not a wallet or deposit address.
  - `card` CardOrder: Card order info returned by /get-card. Status is always `pending` initially — poll `/get-card-data` to check when card details are ready.
    - `card_id` string
    - `usd_amount` number
    - `country` string
    - `timestamp` number
    - `timestamp_readable` string
    - `status` 'pending': Always `pending` at order time. Poll `/get-card-data` to check for `ready`.

## Other responses

- `400`: Invalid or missing amount
- `402`: Payment required. No valid x402 payment header was included. The payment details (price, recipient address, network) are base64-encoded in the `PAYMENT-REQUIRED` response header and echoed as JSON in the response body. x402 client libraries handle this automatically. A **second** 402 on the paid retry means something different: the payment was refused, either at verification (most often an underfunded wallet) or at on-chain settlement. That response body is not empty and carries no `accepts` — it is the x402 settlement-failure shape `{"success": false, "errorReason": "...", "errorMessage": "..."}`, plus `x_laso_guidance` when a concrete next step applies. Distinguish the two by body: a challenge carries `accepts`, a failure carries `success: false`. The usual cause is an underfunded wallet, and the usual cause of that is the fee being charged **on top of** `amount` on routes that add one (a wallet holding exactly \$2,000 cannot send a \$2,000 bank payment; `/get-card` adds no fee, so it costs exactly `amount`). Nothing is charged for a failed settlement, so retrying with a smaller amount is safe.
- `403`: Account is frozen. The response includes a `frozen_message` field explaining why.

---

[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)
