Migrating card tokens to NEXT
v0.2Updated Sep 4, 2026
If you're moving to NEXT with existing card-on-file subscribers held by another processor, such as Stripe, this guide covers how those stored cards move into NEXT's payment vault and how each recurring subscription is re-created on NEXT so renewals keep charging without interruption.
How migration works
Migrating card-on-file subscribers is a two-step process. First, the saved cards move into NEXT's payment vault. Then each customer's subscription record is re-created on NEXT and linked to the right vaulted card. Both steps have to happen, and they have to happen in order.
Step 1: Import saved cards into the NEXT payment vault
Your stored cards are securely transferred from your old processor's vault into NEXT's payment vault. NEXT's vault provider returns a map of each card's new token.
Step 2: Re-create each subscription on NEXT
Using the imported card tokens, you re-create each customer's subscription via the NEXT Admin API so renewals continue charging on NEXT.
Who initiates
You authorize the export from your old processor. Payment processors only release vaulted card data at the account owner's request, and NEXT coordinates the vault import once that export is approved.
What moves
The card number and expiry for each stored card. CVV does not migrate under PCI rules and isn't needed for card-on-file renewals.
What you'll need
A card-token export from your old processor, a subscription export from your old platform, a way to match each subscription to the right exported card, and an Admin API token for the subscription step.
How long it takes
Plan for around two weeks for the secure vault import, plus the time to re-create subscriptions. Coordinate the cutover with your NEXT contact.
Before you start
You must initiate the export from your old processor
The stored cards belong to your payment account. Your old processor, for example Stripe, will reject a migration request that doesn't come from the account owner, so the export has to start with you. NEXT supports you through it but cannot make the request on your behalf.
NEXT coordinates the vault import
NEXT uses Spreedly as the backend vault provider for this import. Your NEXT contact opens the provider request, supplies the internal target vault details, and arranges the secure file transfer.
Export your subscription data separately
The vault import moves the cards only. Export each customer's plan, amount, currency, interval, and next renewal date from your old platform separately. You'll use them in Step 2.
Have an Admin API token ready
Step 2 calls the NEXT Admin API. Make sure you (or your technical team) have a valid Admin API token for the store before you begin.
Step 1 · Import saved cards into the NEXT payment vault
The first step transfers your stored cards into NEXT's payment vault through a coordinated one-time bulk import. It is not a self-serve API call. NEXT handles the provider workflow through Spreedly's Importing Vaulted Payment Methods process.
Request the card export from your old processor
Ask your old processor to export your stored payment methods. For PCI reasons this is delivered as a secure, encrypted file; processors will not send raw card data over insecure channels. Each record should include, at minimum, an external ID (the card's identifier in the old vault), the card number, and the expiration month/year. Cardholder name, billing/shipping address, and contact details are recommended where available. Keep the old card or customer identifier that lets you match this export back to each subscription row.
Hand off to NEXT to open the vault import
Because the provider import request must originate from NEXT, your NEXT contact opens the Spreedly support request, provides the target vault details, and coordinates a GPG-encrypted file transfer over SFTP. The export file never travels over email.
The vault provider processes the import
Spreedly validates and vaults the cards for your NEXT store. This typically takes about two weeks. Imported cards are automatically enrolled in card updater where supported, so expiries can stay current over time.
Receive the token map
When the import completes, NEXT receives a mapping file that pairs each card's original external_id with its new provider token, labeled spreedly_token in the file, plus a card fingerprint. The spreedly_token is the value you'll reference when you re-create each subscription in Step 2.
CVV does not come across
Due to PCI regulations, CVV is never imported or stored. Only the card number and expiry migrate. That's fine for card-on-file subscription renewals, which don't require a CVV.
Step 2 · Re-create each subscription on NEXT
With the cards imported into the NEXT payment vault, re-create each subscription on NEXT using the Admin API Create Subscription endpoint, matching what the customer had on the old platform.
POST /api/admin/subscriptions/
Set payment_method to "card_token" and put the customer's imported provider token, the spreedly_token from the Step 1 map, in payment_details.card_token. Replace every placeholder below, including the future renewal date, before sending the request.
{
"payment_method": "card_token",
"payment_details": {
"card_token": "<spreedly_token from the import map>"
},
"user": {
"email": "customer@example.com",
"first_name": "Jane",
"last_name": "Doe"
},
"use_default_billing_address": true,
"use_default_shipping_address": true,
"currency": "USD",
"lines": [
{
"product_id": 12345,
"quantity": 1,
"price": "39.00"
}
],
"shipping_code": "standard",
"shipping_price": "5.00",
"interval": "day",
"interval_count": 30,
"next_renewal_date": "<future-YYYY-MM-DDTHH:MM:SSZ>"
}Repeat for each subscriber, mapping each customer to their spreedly_token. Use NEXT product IDs in the lines array, not product IDs from the old platform. If you don't use stored default addresses, pass full billing and shipping address objects instead of the use_default_* flags.
Pause external billing at cutover
Once a subscription is live on NEXT, stop the matching recurring charge on your old platform so subscribers aren't billed on both systems during the transition.
Critical ordering rule
Import to the NEXT payment vault first
The card token must already exist in the payment vault before you call Create Subscription. When you create a subscription, NEXT looks up the token with the vault provider to retrieve the card's details (first 6, last 4, expiry). If you reference a token that hasn't been imported yet, the call fails. Always complete Step 1 before Step 2.
Field reference
The key fields on the Create Subscription request:
| Field | Description |
|---|---|
payment_method | Set to "card_token" for a migrated card. |
payment_details.card_token | The imported provider token for this customer's card, from the Step 1 map. In the map file, this is labeled spreedly_token. |
user | Customer identity: email, first_name, and last_name. |
use_default_billing_address / use_default_shipping_address | Use the customer's default addresses, or pass full address objects instead. |
currency | The subscription currency, set once at the top level of the request. |
lines | Subscription items. Each line contains NEXT's product_id, quantity, and optional override price. |
shipping_code / shipping_price | Shipping method and amount applied at each renewal. |
interval / interval_count | Billing cadence, such as "day" with a count of 30. |
next_renewal_date | When the next charge should run, as an ISO 8601 date-time in YYYY-MM-DDTHH:MM:SSZ format. Use a future value that matches the customer's existing schedule so they aren't charged early. |
Gotchas & FAQ
"Can NEXT request the export from Stripe for me?"
No. Your old processor only accepts an export request from the account owner, so you have to initiate it. NEXT then coordinates the vault import once you have the export file.
"My Create Subscription call returns an error about the token"
This usually means the token hasn't finished importing into the NEXT payment vault. Confirm the card appears in the Step 1 token map, then retry. See Critical ordering rule.
"Do customers need to re-enter their cards?"
Usually no. The goal of the migration is to keep saved cards usable for renewals without asking customers to type card details again. If a processor refuses export for specific cards, or if a record fails import, those customers may need to add a new payment method.
"How do I avoid double-charging customers?"
Pause or stop the matching recurring charge on your old platform as each subscription goes live on NEXT. Don't disable old billing wholesale before NEXT subscriptions exist, or renewals could lapse.
"Will expired cards still work after migration?"
Imported cards are enrolled in the vault provider's card updater where supported (eligible_for_card_updater), which can refresh expiries automatically over time. The original CVV does not migrate, but it isn't needed for renewals.
"How long does the whole thing take?"
Budget around two weeks for the vault provider to process the import, then the time to re-create subscriptions. Plan the cutover with your NEXT contact so external billing is paused at the right moment.
Need a hand?
Migrations are coordinated with your NEXT contact. Reach out in your shared Slack channel before you start the export so we can line up the vault import and time the cutover with you.
Exporting your Shopify Payments statements
Export the last three full months of Shopify Payments activity for your NEXT Payments application.
Submitting chargeback defense evidence
How to find a chargeback in the NEXT Payments portal, decide whether to accept or defend it, and submit a defense evidence document before the response deadline.