This page gives you a 10,000-ft view of an end-to-end Cards implementation. The detailed guides that follow cover concrete request shapes, edge cases, and step-by-step instructions.Documentation Index
Fetch the complete documentation index at: https://ramps-moonrise-limestone.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Cards sit on top of the same customer and internal-account primitives
you already use for payouts. If you’ve already onboarded customers and
funded internal accounts in Grid, the work to add cards is small.
Platform configuration
You need an existing Grid platform configuration before you can issue cards. Cards do not require new webhook endpoints or new API credentials — they reuse what’s already configured for the rest of Grid. You’ll only need to:- Subscribe to the new card-specific webhook types (
CARD.STATE_CHANGE,CARD.FUNDING_SOURCE_CHANGE,CARD_TRANSACTION.UPDATED). - Confirm with your Lightspark contact that cards are enabled for your platform — issuance requires an issuer-side onboarding.
Cardholder readiness
A card can only be issued to aCustomer with kycStatus: APPROVED.
This is the same gate you use for Grid’s other features. If the
cardholder hasn’t completed KYC, POST /cards returns
409 CARDHOLDER_KYC_NOT_APPROVED — see
Cardholder setup for how to drive
KYC to completion before issuing.
Funding sources
Every card is bound to at least oneInternalAccount as its funding
source at issue time. Authorization Decisioning checks the source’s
balance before approving each auth, so:
- Top up the funding source before you expect transactions.
- Use existing funding instructions (ACH, SEPA, wires, stablecoin) the same way you would for any other internal account.
- See Funding sources for rules around binding, unbinding, and the future multi-source path.
Issuing and lifecycle
Issuance is a singlePOST /cards call. New cards start in
PENDING_ISSUE while the issuer provisions them and transition to
ACTIVE automatically — you observe both transitions via the
CARD.STATE_CHANGE webhook. Day-to-day operational changes are:
PATCH /cards/{id}to freeze and unfreeze.DELETE /cards/{id}to close permanently.
202 → signed-retry pattern (the same
pattern as Embedded Wallet credential revocation). See
Freezing and closing cards.
Transactions and reconciliation
Each authorization on a card produces a parentCardTransaction row.
Children (pulls, clearings, refunds) are reconciled against the parent
and rolled up into pullSummary, settlementSummary, and
refundSummary aggregates. The lifecycle status moves
AUTHORIZED → PARTIALLY_SETTLED → SETTLED → REFUNDED, with
EXCEPTION as the failure path for stuck post-hoc pulls.
The full event model is covered in
Reconciliation.
Testing in Sandbox
Sandbox cannot receive real authorizations from the card network, so it exposes three simulate endpoints that drive the same internal paths the issuer would call in production:POST /sandbox/cards/{id}/simulate/authorizationPOST /sandbox/cards/{id}/simulate/clearingPOST /sandbox/cards/{id}/simulate/return
Enabling Production
When you’re ready to go live:- Complete card-issuer onboarding through your Lightspark contact.
- Confirm webhook security, monitoring, and alerting cover the
CARD.*andCARD_TRANSACTION.*event types. - Build the
EXCEPTIONdashboard view (filterGET /cards/{id}/transactions?status=EXCEPTION) and wire it into on-call alerting.
Contact your Lightspark representative to enable Production card
issuance and finalize issuer activations.