Update a card
Update a card’s status, funding source, merchant categories, risk ceiling, or threeDSecurePassword. At least one field must be supplied. Manage velocity limits through /card-velocity-limits.
statustransitions includeACTIVE ⇄ FROZEN,PENDING_AUTH → ACTIVE | FROZEN, andACTIVE | PENDING_AUTH | FROZEN → CLOSED.CLOSEDis terminal and irreversible. Activating a card whose USDB funding source lacks a usable delegated key returns409 INVALID_STATE_TRANSITION.PENDING_AUTHis managed by Grid and cannot be requested. Completing delegation does not unfreeze or reopen a card. Requestingstatus: ACTIVEreturns409 INVALID_STATE_TRANSITIONwhile the customer is notACTIVE, for a card Grid froze for review, and for a card frozen with substatusCOMPROMISED. Contact Grid support to have such a card reviewed, or close a compromised card and issue a new one.fundingSource, when supplied, replaces the card’s bound internal account. It must belong to the customer and use a currency supported by the card program, including USDB for USD cards. An active card becomesPENDING_AUTHwhen switched to USDB without an active delegated key. Switching back to USD restores readiness.fundingSourcecannot be supplied alongsidestatus: CLOSED. On card programs where the card issuer makes authorization decisions,fundingSourcecannot be combined with anystatuschange, so send the changes as separate requests. On card programs where Grid makes the authorization decision, the combination remains valid forstatuschanges other thanCLOSED. This endpoint is authenticated by the platform credential alone and returns200directly. It deliberately does not use Grid’s 202 → signed-retry pattern: that pattern signs with the session key of a credential on the owning internal account, so it models actions taken by the end user on their own credentials or funds. Freezing or closing a card is routinely an action taken about a user and without them present - fraud response, offboarding, an ops-driven freeze - and requiring the cardholder’s signature would make exactly those cases impossible. Operations that expose sensitive card data (POST /cards/{id}/reveal, 3DS password retrieval) are SCA-railed instead, because there the cardholder is the party being served.
Effects:
status: FROZEN: Authorization Decisioning declines new auths withcardDeclinedReason: CARD_NOT_ACTIVE. Existing pulls and in-flight reconciliation continue — freezing does not pause the lifecycle of authorizations that already passed.status: ACTIVE: normal authorization behavior resumes.status: CLOSED: terminal close. The card transitions tostatus: "CLOSED"withstatusReason: "CLOSED_BY_PLATFORM"and stays in the system for audit and reconciliation. All pending auths reconcile to a terminal state via the existing reconcile primitive. 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. The funding source is detached. Refunds already in flight still complete because Lightspark holds the card-reserve keys.fundingSourcechange: returns the updated card with the new binding and fires no webhook.
The card.status_change webhook fires on every successful status transition.
Authorizations
Body
Update request for PATCH /cards/{id}. At least one of status, fundingSource, maxNetworkRiskScore, allowedMccs, blockedMccs, defaultMccBlocksLifted, or threeDSecurePassword must be supplied. defaultMccBlocksLifted counts only on a card issued for an agent. Fields that do not count are ignored. Supplying status also requires substatus and reason, so every card state change carries why it happened. status transitions include ACTIVE ⇄ FROZEN, PENDING_AUTH → ACTIVE | FROZEN, and ACTIVE | PENDING_AUTH | FROZEN → CLOSED. Explicit activation requires completed delegated signing authorization; otherwise it returns 409 INVALID_STATE_TRANSITION. Funding-source changes reconcile ACTIVE / PENDING_AUTH automatically. PENDING_AUTH cannot be requested. CLOSED is terminal and irreversible and cannot be combined with fundingSource or maxNetworkRiskScore. Manage velocity limits through /card-velocity-limits.
Target status for the card. Permitted transitions are ACTIVE ⇄ FROZEN, PENDING_AUTH → ACTIVE | FROZEN, and ACTIVE | PENDING_AUTH | FROZEN → CLOSED. Activation requires completed delegated signing authorization. CLOSED is terminal and irreversible; once closed, the card stays in the system for audit and reconciliation but cannot transact again.
ACTIVE, FROZEN, CLOSED "FROZEN"
Why the card is moving, in the card issuer's vocabulary. Required whenever status is supplied, and forwarded to the issuer. Pick OTHER when none of the named values fit and say why in reason.
LOST, COMPROMISED, DAMAGED, END_USER_REQUEST, ISSUER_REQUEST, NOT_ACTIVE, SUSPICIOUS_ACTIVITY, INTERNAL_REVIEW, EXPIRED, UNDELIVERABLE, OTHER "SUSPICIOUS_ACTIVITY"
Replaces the card's funding source. Must belong to the customer and be denominated in a currency supported by the card's program, including USDB for USD cards. Changing the funding source does not change the card's currency or spending-limit units. Cannot be supplied alongside status: CLOSED. To stop a card from spending, set status: FROZEN instead.
"InternalAccount:019542f5-b3e7-1d02-0000-000000000002"
Maximum normalized network risk score allowed for real-time card authorizations. Scores range from 0 (lowest risk) to 999 (highest risk). Visa scores are normalized by multiplying the raw 0–99 score by 10. Scores equal to the ceiling are allowed. Authorizations without a score are also allowed. The lowest configured card or platform ceiling applies. Omit to preserve the current setting or send null to clear this scope.
0 <= x <= 999700
Replacement list of merchant category codes the card may spend at. Supply null to allow every category not blocked, or omit to leave it unchanged. Rejected with INVALID_INPUT on a card whose issuer makes authorization decisions. Cannot be supplied alongside status: CLOSED. Changing or clearing this list does not loosen Lightspark's global, platform, or card controls: all configured allow lists intersect and all block lists combine.
1^[0-9]{4}$Replacement list of merchant category codes the card declines. Supply null to clear it, or omit to leave it unchanged. On a card issued for an agent, Grid's default agent blocks still apply on top of this list; lift them with defaultMccBlocksLifted. Rejected with INVALID_INPUT on a card whose issuer makes authorization decisions. Cannot be supplied alongside status: CLOSED. Clearing this list removes only the card's own blocks; Lightspark's global, platform, and card controls still apply.
^[0-9]{4}$Response
Card updated. Returns the updated card.
State of the card's PIN. On the Card resource, this is the last known status
and is present whenever PIN management is supported. An absent value means
PIN management is unavailable for this card; it does not mean NOT_SET.
Use GET /cards/{id} to retrieve pinStatus.
NOT_SET, OK, BLOCKED "OK"
Maximum normalized network risk score allowed for real-time card authorizations. Scores range from 0 (lowest risk) to 999 (highest risk). Visa scores are normalized by multiplying the raw 0–99 score by 10. Scores equal to the ceiling are allowed. Authorizations without a score are also allowed. The lowest configured card or platform ceiling applies. Null means no card-specific ceiling. Platform controls still apply.
0 <= x <= 999700
The card's own merchant-category allow list. Absent when the card sets no allow list of its own. Lightspark's global, platform, and card controls also apply: spending must satisfy every configured allow list and no block list. This field does not include inherited restrictions.
1^[0-9]{4}$Merchant category codes the card declines, with cardDeclinedReason: BLOCKED. Absent when the card blocks no category of its own. A card issued for an agent also declines Grid's default agent categories unless defaultMccBlocksLifted is true. Lightspark's global, platform, and card blocks apply in addition to this list and are not included in this field.
^[0-9]{4}$Currency the card transacts in, fixed at issuance by its card program. USDB-funded cards transact in USD, with funding converted at 1 USDB = 1 USD. Spending limits use the smallest unit of the card's currency (USD cents for USDB-funded cards). Changing the funding source does not change the card's currency or spending-limit units.
"USD"