---
title: "Withdraw from a reloadable card balance"
method: POST
path: "/withdraw-card-balance"
tags: ["cards"]
---

# Withdraw from a reloadable card balance

`POST /withdraw-card-balance`

## Request

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

Move unspent money off the account holder's reloadable card. The balance behind a reloadable card is held by the card issuer, and this asks the issuer to pay `amount` of it out as USDC on **Base** to the `destination_address` you supply. It is the reverse of `GET /fund-card-balance`, and free: the money is the holder's own, and Laso moves nothing itself.

**Base only.** The issuer pays on Base and nowhere else, so the destination must be a Base wallet you control. A Laso managed agent wallet holds USDC on **Solana** and cannot receive this. The card deposit address from `GET /get-card-deposit-address` is not a valid destination either.

**Not instant.** The issuer processes payouts manually, usually within 1-3 business days, and emails the account holder when the payout is sent. The response carries the issuer's `withdrawal_id`; there is no status route to poll. The request is recorded as a `withdrawal` event under `card_events` in `GET /list-card-transactions`, and the balance from `GET /get-card-deposit-address` drops once it is paid.

**Amount:** \$2 to \$10,000, and no more than the balance the issuer can release. Withdrawals the issuer has not paid yet still count against the balance, so a second request can only take what remains.

Confirm the amount and destination with the account holder before calling this. A linked card issuer account is required; the holder sets it up at https://laso.finance/agent/dashboard/verified/card.

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

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `amount` number, required: USD to withdraw from the card balance (min \$2, max \$10,000).
  - `destination_address` string, required: The 0x-prefixed Base wallet address that receives the USDC. Must be one you control; Base only.

## Response `200`

The issuer accepted the withdrawal request.

- object
  - `withdrawal_id` string: The card issuer's reference for this payout request. Quote it to support; it also appears on the matching `withdrawal` card event.
  - `status` string: Always `requested`: the issuer has accepted the request and will pay it out manually.
  - `amount` number: USD the issuer will pay out.
  - `destination_address` string: The Base address the USDC goes to.
  - `network` string
  - `asset` string
  - `note` string: Timing and where to see the request afterwards.

## Other responses

- `400`: Invalid `amount` (`amount_below_minimum`, `amount_above_maximum`), an invalid or non-Base `destination_address` (`invalid_destination_address`), no linked card issuer account, or the issuer refused the request: `insufficient_card_balance` (the `error` names how much can be withdrawn right now), `withdrawals_disabled`, `withdrawals_unavailable`, or `withdrawal_rejected`. The `error` carries the issuer's own reason.
- `401`: Missing or invalid Bearer token
- `403`: Account is frozen. The response includes a `frozen_message` field explaining why.
- `409`: A request with this `Idempotency-Key` is still being processed (`code: idempotency_key_in_progress`). Wait a moment and retry with the same key.
- `422`: The `Idempotency-Key` was already used for a different request body or route (`code: idempotency_key_reused`). Use a new key.

---

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