Update a card
Update a card’s state, bound fundingSource, and / or maxSpendPerTransaction, maxSpendPerDay, or maxTransactionsPerDay. At least one field must be supplied.
statetransitions are limited toACTIVE ⇄ FROZENandACTIVE | FROZEN → CLOSED.CLOSEDis terminal and irreversible. Any other transition returns409 INVALID_STATE_TRANSITION.fundingSource, when supplied, replaces the card’s bound internal account. It must belong to the customer and be denominated in the card’s currency.fundingSourcecannot be supplied alongsidestate: CLOSED. On card programs where the card issuer makes authorization decisions,fundingSourcecannot be combined with anystatechange, so send the changes as separate requests. On card programs where Grid makes the authorization decision, the combination remains valid forstatechanges other thanCLOSED.maxSpendPerTransaction, when supplied, replaces the card-specific per-transaction cap. Supply a positive integer in the smallest unit of the card’s currency to set it or null to clear it. If the platform config setscardConfigs.maxSpendPerTransaction, Grid enforces the lower of the card and platform values. The card’scardCapabilities.supportsSpendLimitsmust be true.maxSpendPerTransactioncannot be supplied alongsidestate: CLOSED.maxSpendPerDay, when supplied, replaces the card-specific cap on cumulative new spend during one UTC calendar day. Supply a positive integer in the smallest unit of the card’s currency to set it or null to clear it. If the platform config setscardConfigs.maxSpendPerDay, Grid enforces the lower of the card and platform values. Refunds, reversals, and authorization expiries do not restore capacity during the day. The card’scardCapabilities.supportsSpendLimitsmust be true.maxSpendPerDaycannot be supplied alongsidestate: CLOSED.maxTransactionsPerDay, when supplied, replaces the card-specific cap on the number of transactions the card may authorize during one UTC calendar day. Supply a positive integer to set it or null to clear it. If the platform config setscardConfigs.maxTransactionsPerDay, Grid enforces the lower of the card and platform values. Refunds, reversals, and authorization expiries do not restore capacity during the day.maxTransactionsPerDayrequires the card’scardCapabilities.supportsTransactionCountLimitto be true and cannot be supplied alongsidestate: CLOSED.
This endpoint is authenticated by the platform credential alone and returns 200 directly. 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:
state: FROZEN: Authorization Decisioning declines new auths withCARD_PAUSED. Existing pulls and in-flight reconciliation continue — freezing does not pause the lifecycle of authorizations that already passed.state: ACTIVE: normal authorization behavior resumes.state: CLOSED: terminal close. The card transitions tostate: "CLOSED"withstateReason: "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.state_change webhook fires on every successful state transition.
Authorizations
API token authentication using format <api token id>:<api client secret>
Path Parameters
System-generated unique card identifier
Body
Update request for PATCH /cards/{id}. At least one of state, fundingSource, maxSpendPerTransaction, maxSpendPerDay, or maxTransactionsPerDay must be supplied. state transitions are limited to ACTIVE ⇄ FROZEN and ACTIVE | FROZEN → CLOSED; any other transition returns 409 INVALID_STATE_TRANSITION. CLOSED is terminal and irreversible and cannot be combined with fundingSource, maxSpendPerTransaction, maxSpendPerDay, or maxTransactionsPerDay.
Target state for the card. Permitted transitions are ACTIVE ⇄ FROZEN and ACTIVE | FROZEN → CLOSED. 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"
Replaces the card's funding source. Must belong to the customer and be denominated in the card's currency. Cannot be supplied alongside state: CLOSED. To stop a card from spending, set state: FROZEN instead.
"InternalAccount:019542f5-b3e7-1d02-0000-000000000002"
Replacement card-specific per-transaction cap, in the smallest unit of the card's currency. Omit this field to leave the current cap unchanged, supply null to clear it, or supply a positive integer to set it. When the platform config also supplies cardConfigs.maxSpendPerTransaction, Grid enforces the lower of the two values. Accepted only when the card's cardCapabilities.supportsSpendLimits is true. Cannot be supplied alongside state: CLOSED.
1 <= x <= 900719925474099110000
Replacement card-specific UTC-calendar-day cap, in the smallest unit of the card's currency. Omit this field to leave the current cap unchanged, supply null to clear it, or supply a positive integer to set it. When the platform config also supplies cardConfigs.maxSpendPerDay, Grid enforces the lower of the two values. Refunds, reversals, and authorization expiries do not restore capacity during the day. Accepted only when the card's cardCapabilities.supportsSpendLimits is true. Cannot be supplied alongside state: CLOSED.
1 <= x <= 900719925474099125000
Replacement card-specific cap on the number of transactions the card may authorize during one UTC calendar day. Omit this field to leave the current cap unchanged, supply null to clear it, or supply a positive integer to set it. When the platform config also supplies cardConfigs.maxTransactionsPerDay, Grid enforces the lower of the two values. Refunds, reversals, and authorization expiries do not restore capacity during the day. Accepted only when the card's cardCapabilities.supportsTransactionCountLimit is true. Cannot be supplied alongside state: CLOSED.
1 <= x <= 214748364720
Response
Card updated. Returns the updated card.
System-generated unique card identifier
"Card:019542f5-b3e7-1d02-0000-000000000010"
The id of the Customer who holds this card.
"Customer:019542f5-b3e7-1d02-0000-000000000001"
Lifecycle state of a card.
PENDING_KYC, PROCESSING, ACTIVE, FROZEN, CLOSED Physical form factor of the card. Only VIRTUAL is supported in v1;
PHYSICAL will be added in a later release.
VIRTUAL Internal account id that funds this card.
"InternalAccount:019542f5-b3e7-1d02-0000-000000000002"
Card-specific cap on a single transaction, in the smallest unit of the card's currency. Null means the card has no card-specific cap. When the platform config also supplies cardConfigs.maxSpendPerTransaction, Grid enforces the lower of the two values without replacing this configured value. A transaction for exactly the effective limit is allowed.
1 <= x <= 90071992547409915000
Card-specific cap on cumulative new spend during one UTC calendar day, in the smallest unit of the card's currency. The window resets at 00:00 UTC. Null means the card has no card-specific daily cap. When the platform config also supplies cardConfigs.maxSpendPerDay, Grid enforces the lower of the two values without replacing this configured value. Refunds, reversals, and authorization expiries do not restore capacity during the day. Spend exactly equal to the effective limit is allowed.
1 <= x <= 900719925474099125000
Card-specific cap on the number of transactions the card may authorize during one UTC calendar day. The window resets at 00:00 UTC. Null means the card has no card-specific daily transaction cap. When the platform config also supplies cardConfigs.maxTransactionsPerDay, Grid enforces the lower of the two values without replacing this configured value. Each approved authorization counts once for the day it was authorized; refunds, reversals, and authorization expiries do not restore capacity during the day. A transaction that brings the day's count exactly to the effective limit is allowed.
1 <= x <= 214748364720
Creation timestamp
"2026-05-08T14:10:00Z"
Last update timestamp
"2026-05-08T14:11:00Z"
Platform-specific card identifier generated by the server.
"card-emp-001"
Reason associated with the current state. Present when the card is CLOSED or when provisioning was rejected; absent otherwise.
ISSUER_REJECTED, CLOSED_BY_PLATFORM, CLOSED_BY_GRID Card network brand. Read-only — determined by Grid when the card is provisioned with the issuer.
VISA, MASTERCARD Last four digits of the card PAN.
"4242"
Card expiration month (1–12).
1 <= x <= 1212
Card expiration year (four digits).
2029
Actions supported for this card by the issuer selected at issuance. Present for cards whose program has been resolved; absent otherwise. These capabilities are fixed at issuance for the card's lifetime.
Currency the card transacts in (ISO 4217 for fiat, tickers for crypto). Derived from the funding source at issue time.
"USD"
Opaque processor-side reference for the card (e.g. the Lithic card token). Useful for cross-referencing in the processor's dashboards; not used for any Grid request routing.
"card_b81c2a4f"
Opaque identifier for the card on the issuer of record (e.g. the Lead Bank account/card identifier). Useful for cross-referencing in issuer dashboards; not used for any Grid request routing.
"lead_card_7a1b9c3d"