3-D Secure on first use
The payment that saves a card can be authenticated once, so later charges you start carry that authentication where rules like SCA ask for it.
Accept · SparkVault
Shoppers type their card one time. It goes straight into SparkVault, never to your servers, and comes back as one token your store, subscriptions, payment links and apps all share — kept current when the bank reissues it.
Simulated diagram. Maya types her Visa card ending 4242 into Northlight's checkout. The number goes straight to SparkVault, which returns the token pm_4Wc7Hn to Northlight's server; the server never receives the card number. Visa issues a network token. The same saved card then pays a one-click return checkout, a Desk Refill Club renewal, a payment link and an order in the Northlight iOS app. Later the bank reissues the card with a new expiry, 12/28, and the account updater changes it in SparkVault without Maya doing anything.
Tue, Oct 13Updated silently. Every channel keeps working — Maya did nothing.
Simulated — no real card data. Tap a channel to replay its charge.
For your team
Each customer has one record with every method they saved, where it is used and when the networks last refreshed it. A card added twice is caught by its fingerprint before it clutters the list.
Simulated SparkVault dashboard of Northlight for Maya Chen (cus_3Kp8Wm): two saved methods. Visa ending 4242, the default, expires 12/28, has an active network token and was updated by the account updater on Tue, Oct 13; it is used in the store, Club renewals, payment links and the iOS app, and last paid a one-click return order (#20352, Desk Clock, $89.00) on Tue, Oct 20. Apple Pay on her iPhone is used in the iOS app. A card added again from the Saved cards page matched the Visa's fingerprint and was not saved twice.
Maya Chen
[email protected] · Portland, OR
Visa •••• 4242
pm_4Wc7HnUsed in
For your customers
Returning shoppers are recognized by email, confirm with a passkey or a one-time code, and pay with the card they saved. A Saved cards page lets them add, remove or change the default without writing to support.
Simulated Northlight checkout on a phone, hosted by SparkIO. Maya Chen types her email, is recognized, confirms with a passkey (Face ID), and pays $56.00 for Ceramic Mug × 2 with her saved Visa ending 4242 — no card number and no CVC typed.
Network tokens & account updater
Every saved card is enrolled for a network token where the card network offers one. When a bank reissues a card, the network updates the token and the account updater refreshes the rest — before your next charge, without asking the customer.
Timeline of Maya's saved Visa. Saved Sat, Mar 14 with a network token; renewals paid on it. On Mon, Oct 12 the bank reissued the card with a new expiry; on Tue, Oct 13 the network token and the card on file were updated to 12/28, so the Wed, Oct 14 renewal was paid and the Sat, Nov 14 renewal is scheduled on the new card.
PCI scope
The card fields are served by SparkVault inside your checkout, so the number goes from the shopper's browser straight to us. Your systems only ever hold tokens, which keeps you eligible for the shortest self-assessment questionnaire, SAQ A.
Hosted page: the shopper types the card on a page served by SparkIO; the number goes to SparkVault, and Northlight's server receives only the token pm_4Wc7Hn with brand, last four, expiry and fingerprint. Northlight is eligible for SAQ A.
Your self-assessment
SAQ A
Eligible — the shortest questionnaire.
What reaches your serverPOST /orders
{ "payment_method": "pm_4Wc7Hn", "brand": "visa", "last4": "4242", "exp": "12/28", "fingerprint": "fp_9Lx2Qa"}Enough to show the card. Useless anywhere else.
PCI DSS Level 1: target, not yet assessed. Simulated payloads.
Portability
Import saved cards from your current provider through an encrypted transfer between PCI-compliant vaults, or export them to another one whenever you ask. Your customers never re-enter a card, and you are never locked in.
Import from your previous provider
Started Mon, Mar 2 · encrypted file
Mapping preview
+ 2,404 more rows
Swap the ids in your database with the mapping file.
Developers
Attach the payment method from checkout to a customer, then charge it whenever you need to — with the shopper present, or off-session for renewals and reorders.
import SparkIO from "sparkio";const sparkio = new SparkIO(process.env.SPARKIO_SECRET_KEY);// The checkout fields tokenized the card in the browser;// your server only ever sees "pm_4Wc7Hn".const method = await sparkio.paymentMethods.attach( "pm_4Wc7Hn", { customer: "cus_3Kp8Wm" },);{ "id": "pm_4Wc7Hn", "customer": "cus_3Kp8Wm", "card": { "brand": "visa", "last4": "4242", "fingerprint": "fp_9Lx2Qa" }, "network_token": "active"}Also in SparkVault
Controls you would otherwise build yourself, on from the first saved card.
The payment that saves a card can be authenticated once, so later charges you start carry that authentication where rules like SCA ask for it.
Each card gets a fingerprint that stays the same across customers, so duplicates, shared cards and repeat fraud stand out without anyone seeing the number.
Your store, your apps and your payment links read the same vault: a card saved in one works in all of them.
Card numbers are encrypted with AES-256, and the keys are held in hardware security modules, apart from the data they protect.
Decide who can view customers, remove cards or request an export. No role, including yours, can see a full card number.
Every view, change, import and export is recorded with who, when and from where, and kept for your records.
Questions
Sandbox keys now, live keys after verification. SparkVault is on from your first payment — nothing to switch on.