PATCH /cards/{id} request and return the updated card with 200 OK.
PATCH /cards/{id} covers freeze / unfreeze (state), funding source
updates (fundingSources), per-transaction spending limits
(maxSpendPerTransaction), and UTC-calendar-day spending limits
(maxSpendPerDay). See
Funding sources for the
funding-source-only flow.
Valid state transitions
Any other transition returns
409 INVALID_STATE_TRANSITION. In
particular, you cannot un-freeze a CLOSED card — close is terminal.
You can also combine a state change with a funding source replacement
in one PATCH — just include both fields in the body.
200 OK with the updated Card and a
CARD.STATE_CHANGE webhook.
What freeze does
Setting a card toFROZEN:
- Causes Authorization Decisioning to decline new auths with
CARD_PAUSED. - Does not pause the lifecycle of authorizations that already passed. Pulls, clearings, and refunds against existing transactions continue to reconcile normally.
- Emits
CARD.STATE_CHANGEwithstate: "FROZEN".
state: "ACTIVE") reverses this — new auths flow normally
again.
What close does
Closing a card is done with the samePATCH /cards/{id} endpoint by
setting state: "CLOSED". The operation is permanent:
- Card state transitions to
CLOSED,stateReason: "CLOSED_BY_PLATFORM". - All pending authorizations reconcile to a terminal state via the existing reconcile primitive.
- Funding-source bindings are detached. Refunds already in flight continue to complete because Lightspark holds the card-reserve keys.
- Inbound clearings received after close follow the standard force-post / late-presentment path — Lightspark absorbs the loss if a post-hoc pull on the now-unbound source fails.
CARD.STATE_CHANGEfires withstate: "CLOSED".
fundingSources cannot be supplied alongside state: CLOSED.
409 CARD_ALREADY_CLOSED is returned if the card is already in the
terminal CLOSED state.
Updating the per-transaction limit
To set or change the per-transaction spending limit:null to clear it. Omitting the field leaves the
current limit unchanged. maxSpendPerTransaction cannot be supplied
alongside state: CLOSED.
Updating the daily limit
SetmaxSpendPerDay to a positive integer in the smallest unit of the card’s
currency, or set it to null to clear the card-specific daily limit. The
window resets at 00:00 UTC. Refunds, reversals, and authorization expiries do
not restore capacity during the same day.