Issue a card
Order a debit card tied to your Wingspan Wallet, activate it, replace a lost one, and suspend or cancel a card.
A card is a debit card tied to your Wingspan Wallet. Spending comes out of the Wallet balance. This page covers ordering a card and managing its status. For PINs, limits, showing card details, and phone wallets, see Card controls and digital wallets.
These are cards Wingspan issues to you. They aren't the cards you save to pay with. For those, see Payment and payout methods.
Prerequisites
- A Wallet. See Internal accounts and balances.
- A credential with
payments.card:writeto change cards, andpayments.card:readto read them.
Order a card
Call POST /v3/finance/cards.
| Field | Required | Notes |
|---|---|---|
cardType | Yes | Physical or Virtual |
shippingAddress | Yes | line1, line2, city, state, postalCode, and country (ISO 3166-1 alpha-2) |
customName | No | A label for the card |
replacesCardId | No | The card this one replaces. It must be the same cardType. |
curl -X POST "https://api.wingspan.app/v3/finance/cards" \
-H "Authorization: Bearer $WINGSPAN_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-card-2026-10-20" \
-d '{
"cardType": "Physical",
"customName": "Travel card",
"shippingAddress": {
"line1": "123 Market St",
"city": "San Francisco",
"state": "CA",
"postalCode": "94105",
"country": "US"
}
}'// 201 Created (trimmed)
{
"id": "Cd6Wn3Qk8Lx5Bz2Mh7Rc4T",
"status": "PendingFulfillment",
"cardType": "Physical",
"customName": "Travel card",
"last4": "4821",
"expirationMonth": 10,
"expirationYear": 2030,
"internalAccountId": "Ia4Kq9Wn2Lx7Tz5Bm8Hc3V",
"events": { "createdAt": "2026-10-20T15:02:11Z" }
}Card statuses
status | Meaning |
|---|---|
PendingFulfillment | The card is being made and shipped |
PendingActivation | The card is ready to activate |
Active | The card can be used |
Suspended | Paused. You can reactivate it. |
Cancelled | Closed for good |
OneTime | A single-use virtual card |
events holds a timestamp for each change: activatedAt, suspendedAt, cancelledAt, reportedLostStolenAt, and reissuedAt.
Activate a card
Call POST /v3/finance/cards/{cardId}/activate. The body is optional. It can carry an encrypted pin to set the first PIN. See Card controls and digital wallets for how to encrypt it. The response is the card.
List and read cards
GET /v3/finance/cardslists your cards. Filter withfilter[status][eq]and one of the statuses above. An unknown status returns422.GET /v3/finance/cards/{cardId}reads one.
Card responses show only last4 and the expiry. The full card number and CVV are never in an API response. To show them to the cardholder, see Show card details.
Rename a card
Call PATCH /v3/finance/cards/{cardId} with customName. That is the only field you can change. metadata returns 422.
Suspend or cancel
POST /v3/finance/cards/{cardId}/suspendpauses the card. The reference says it can be reactivated later.POST /v3/finance/cards/{cardId}/cancelcloses the card for good. You can't undo it.
Both return the card. A 409 means the card's current status doesn't allow the change.
Replace a lost or damaged card
Order a new card with replacesCardId set to the old card's id. The cardType must match. Cards carry replacesCardId and replacedByCardId so you can follow the chain. Cancel the old card with the call above if it is lost.
Errors
| Status | Meaning |
|---|---|
403 | Missing payments.card:read or payments.card:write |
404 | The card doesn't exist or isn't yours |
409 | The card's status doesn't allow the change, or IdempotencyKeyConflict |
422 | shippingAddress or cardType is missing or invalid, replacesCardId points to a card of another type, or the status filter isn't a known status |
Webhook events
Card.Created, Card.Activated, Card.Suspended, Card.Cancelled, Card.ReportedLostStolen, Card.Reissued and Card.Updated are published. See Webhooks and events to subscribe.
Related pages
Updated 12 minutes ago