Issue a card
Changed onIssue a new card for a cardholder. Every card is bound to one internal account, fundingSource, at create time. The cardholder must have KYC status APPROVED before a card can be issued; otherwise the request is rejected with CARDHOLDER_KYC_NOT_APPROVED.
Card issuance is fee-bearing and cannot be reversed, so an Idempotency-Key header is required. Retries must carry the same key.
Optional maxSpendPerTransaction, maxSpendPerDay, and maxTransactionsPerDay values set the card-specific caps on one transaction, on spend during one UTC calendar day, and on the number of transactions during one UTC calendar day. Check the funding-source internal account's cardCapabilities.supportsSpendLimitsAtIssuance before supplying either spend limit, and cardCapabilities.supportsTransactionCountLimit before supplying the transaction count limit. If the platform config sets the corresponding cardConfigs value, Grid enforces the lower of the card and platform caps. Amounts use the smallest unit of the card's currency.
If the funding source is an Embedded Wallet internal account, the cardholder must authorize Grid to sign Spark token transactions for that card funding source by completing the delegated-key creation flow with POST /auth/delegated-keys. Until an active delegated key exists for that funding source, Authorization Decisioning cannot use it to fund card transactions.
A platform may be limited to a maximum number of live cards. Once that limit is reached, further issuance is rejected with CARD_LIMIT_REACHED until a card is closed or Lightspark raises the limit. Cards in CLOSED status do not count toward the limit.
New cards start in status: "PROCESSING" while the card issuer provisions the card. The card.status_change webhook fires on each status transition, including the transition to ACTIVE (or to CLOSED with statusReason: "ISSUER_REJECTED" if provisioning fails).
Request
- Base URL: https://api.lightspark.com/grid/2025-10-13
- URL: https://api.lightspark.com/grid/2025-10-13/cards
- Auth: HTTP basic
Headers
A unique identifier for the request, up to 255 characters. A retry carrying the same key returns the card created by the first request; reusing a key for a materially different card request is rejected with 409.
Request body
Example request
{
"customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
"platformCardId": "card-emp-001",
"threeDSecurePassword": "AbCd1234EfGh5678",
"fundingSource": "InternalAccount:019542f5-b3e7-1d02-0000-000000000002",
"maxSpendPerTransaction": 5000,
"maxSpendPerDay": 25000,
"maxTransactionsPerDay": 20
}Response
Card created successfully. Newly-created cards start in PROCESSING while the issuer provisions them. Cards funded by an Embedded Wallet internal account also require an active delegated key for that funding source before Authorization Decisioning can use it.
Example response
{
"id": "Card:019542f5-b3e7-1d02-0000-000000000010",
"customerId": "Customer:019542f5-b3e7-1d02-0000-000000000001",
"platformCardId": "card-emp-001",
"last4": "4242",
"expMonth": 12,
"expYear": 2029,
"fundingSource": "InternalAccount:019542f5-b3e7-1d02-0000-000000000002",
"cardCapabilities": {
"supportsSpendLimits": true,
"supportsSpendLimitsAtIssuance": true,
"supportsTransactionCountLimit": true,
"supportsPanReveal": true,
"supportsDigitalWalletTokenization": true
},
"maxSpendPerTransaction": 5000,
"maxSpendPerDay": 25000,
"maxTransactionsPerDay": 20,
"currency": "USD",
"processorRef": "card_b81c2a4f",
"issuerRef": "lead_card_7a1b9c3d",
"createdAt": "2026-05-08T14:10:00Z",
"updatedAt": "2026-05-08T14:11:00Z"
}Changes
- info
added the required property
/to the response with the status
- info
- breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - breaking
removed the required property
from the response with the status - warning
added the new
DOCUMENT_ALREADY_EXISTSenum value to theresponse property for the response status - warning
added the new
DUPLICATE_EXTERNAL_ACCOUNTenum value to theresponse property for the response status - warning
added the new
DUPLICATE_PAY_REQUESTenum value to theresponse property for the response status - warning
added the new
INSUFFICIENT_FUNDSenum value to theresponse property for the response status - warning
added the new
QUOTE_EXPIREDenum value to theresponse property for the response status - warning
added the new
QUOTE_RATE_UNAVAILABLEenum value to theresponse property for the response status - warning
added the new
SMS_OTP_CREDENTIAL_SET_CHANGEDenum value to theresponse property for the response status - warning
added the new
SMS_OTP_PHONE_NUMBER_ALREADY_EXISTSenum value to theresponse property for the response status - warning
added the new
STABLECOIN_AMOUNT_NOT_REPRESENTABLEenum value to theresponse property for the response status - warning
added the new
STABLECOIN_BURN_SOURCE_NOT_SUPPORTEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_EXTERNAL_ACCOUNT_LINK_FAILEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_EXTERNAL_ACCOUNT_LINK_METHOD_REQUIREDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_EXTERNAL_ACCOUNT_NOT_LINKEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_EXTERNAL_ACCOUNT_NOT_SUPPORTEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_EXTERNAL_ACCOUNT_PROVIDER_LINK_FAILEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_EXTERNAL_ACCOUNT_PROVIDER_LINK_REQUIREDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_GRID_OPERATIONS_NOT_ENABLEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_NOT_PROVISIONEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_OPERATION_NOT_SUPPORTEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_PROVIDER_ERRORenum value to theresponse property for the response status - warning
added the new
STABLECOIN_PROVIDER_SOURCE_NOT_LINKEDenum value to theresponse property for the response status - warning
added the new
STABLECOIN_SYMBOL_ALREADY_EXISTSenum value to theresponse property for the response status - warning
added the new
STABLECOIN_TOKEN_IDENTIFIER_ALREADY_EXISTSenum value to theresponse property for the response status - warning
added the new
STABLECOIN_VERIFICATION_FAILEDenum value to theresponse property for the response status - warning
added the new
UNRECOGNIZED_MANDATORY_COUNTERPARTY_DATA_KEYenum value to theresponse property for the response status - warning
added the new
WALLET_NOT_PROVISIONEDenum value to theresponse property for the response status - info
added the required property
/to the response with the status - info
added the required property
to the response with the status - info
added the required property
to the response with the status - info
added the required property
to the response with the status - info
added the required property
to the response with the status - info
added the required property
to the response with the status
- breaking