# Switch from Stripe

> Import customers, products, plans, discount codes, payment links and open invoices from Stripe, then move subscribers without charging anyone twice.

Source: https://anytime-capital.com/docs/switch-from-stripe · Markdown: https://anytime-capital.com/docs/switch-from-stripe.md · All docs: https://anytime-capital.com/docs/llms-full.txt

Moving to Anytime Capital Payments takes minutes. The importer reads your Stripe account with a read-only key and brings your customers, catalog, discount codes, payment links and open invoices across. Your subscribers then move themselves from a link we email them, free until the period they already paid for in Stripe ends, so nobody is charged twice. Nothing in Stripe is changed, and nothing is emailed to your customers until you choose to.

## What comes across

| In Stripe | Becomes | Notes |
| --- | --- | --- |
| Customer | Customer | Matched by email, so nobody is added twice. Address, phone, tax ID and metadata come with it; metadata lands in the customer's notes. |
| Product with a one-time price | Product | One product per price. A product with several prices becomes one product per price, named by the price's nickname or amount. |
| Recurring price | Subscription plan | Weekly, monthly, every 3 months or yearly, from $1.00 to $10,000.00 a period. Its free trial comes too, up to 90 days. |
| Promotion code | Discount code | Percent or amount off, expiry date and the uses left. |
| Coupon with no promotion code | Discount code | Named after the coupon's id, and flagged so you can archive it if customers shouldn't type it. |
| Payment link | Payment link | When every item maps to an imported product. A link that sells one plan points you to that plan's own link. |
| Open invoice you send yourself | Invoice, unsent | Line items, discount, tax and due date. Nothing is emailed: review and send each one. |
| Active subscription | Subscriber to move | Listed with the plan it maps to and the date its current period ends. See below. |

Run the importer again at any time. Everything already imported is skipped, a customer who already exists here is matched rather than copied, and anything that failed is tried again.

## What doesn't come across

- **Saved cards.** Card numbers can't move through any API. See [Saved cards](#saved-cards) for how to move them in bulk.
- **Payment history.** Past payments, refunds, disputes and payouts stay in Stripe for your records.
- **Prices we can't charge the same way:** metered (usage-based), tiered and package prices, customer-chosen amounts, and prices in currencies other than US dollars. Each is listed in the summary with the reason.
- **Codes with conditions:** codes for one customer, for first-time customers only, with a minimum order, or for certain products only. Codes here take money off the whole order for anyone who has them.
- **Subscriptions that don't fit one plan:** several prices or a quantity above one, a discount, or paused payments. They're listed so you can set them up by hand.
- **Invoices Stripe is still charging automatically, or that are partly paid.** Let those finish in Stripe.

> **Repeating coupons:** A Stripe coupon that came off every renewal for a few months, or forever, is imported as a code that takes money off one payment, and flagged in the summary.

## Run the importer

1. In your dashboard, open **Switching from Stripe?** on your home page, or **Import from Stripe** under **Integrations**. Owners and admins of a verified business can run it.
2. In Stripe, open **Developers → API keys** in live mode and create a **restricted key** with the permissions below set to **Read** and everything else set to **None**.
3. Paste the key (it starts with `rk_live_`). We check it with Stripe and show how many of each thing your account holds, with a few examples. Secret keys and test-mode keys are refused.
4. Choose what to import and start. It runs in the background, so you can leave the page; progress shows as it goes, and your team is notified when it's done.
5. Review the summary: everything imported, matched or skipped, and each item that needs a look, with the reason.

| Permission | Access | Used for |
| --- | --- | --- |
| Customers | Read | Names, emails, addresses and phone numbers |
| Products | Read | Your catalog |
| Prices | Read | One-time and recurring prices |
| Coupons | Read | Percent or amount off, expiry and limits |
| Promotion codes | Read | The codes customers type |
| Payment Links | Read | Links and their line items |
| Invoices | Read | Open invoices |
| Subscriptions | Read | Who subscribes to what, and when their period ends |

The key is used only to read. It's kept encrypted while the import runs and deleted the moment it finishes, fails or is cancelled. You can delete it in Stripe as soon as you're done.

## Move your subscribers

Each active Stripe subscription becomes a row in **Move your subscribers**, with the imported plan it maps to and the day its current period ends. You choose who to invite. Each subscriber gets one email from us, in your branding, with a link that restarts the same plan at the same price with nothing to pay until that day. If they haven't moved after a few days, they get one reminder.

- **Not invited:** on the list, waiting for you.
- **Invited:** the email went out. The link works only for the address it was sent to, and only until they've moved.
- **Moved:** they've restarted here. Their first payment here is on the day their Stripe period ends.
- **Declined:** they chose not to continue, or you marked them as not moving.

> **Cancel each subscription in Stripe:** We only ever have read access, so we can't cancel anything in Stripe. Once a subscriber has moved, cancel their Stripe subscription before its period ends, and tick it off in the list. That's what makes sure nobody is charged twice.

A subscriber whose Stripe period ends more than 90 days out can be invited once it's within 90 days. If a period renews in Stripe after your import, run the import again for subscriptions to refresh the dates.

## Saved cards

Under the card industry's security rules (PCI DSS), card numbers only ever move directly between payment processors, never through you or through an API. That's why subscribers re-enter their card when they move. If you'd rather move saved cards in bulk, choose **Request a card data migration** on the importer page: our business team checks what's possible for your account and walks you through it, and nothing changes until it's confirmed with you by email.

## API differences

|  | Stripe | Anytime Capital |
| --- | --- | --- |
| Base URL | `https://api.stripe.com/v1` | `https://anytime-capital.com/api/v1` |
| Authentication | Secret key as a Bearer token | API key from **Settings → Developers**, starting `ak_live_`, as a Bearer token. See [Authentication](https://anytime-capital.com/docs/authentication.md). |
| Request bodies | Form-encoded | JSON |
| Amounts | Integer cents (`amount`) | Integer cents, named for what they are (`amountCents`) |
| Pagination | `limit` with `starting_after` | `limit` with `cursor` from the previous page. See [Pagination](https://anytime-capital.com/docs/pagination.md). |
| Idempotency | `Idempotency-Key` header | `Idempotency-Key` header on every POST. See [Idempotency](https://anytime-capital.com/docs/idempotency.md). |
| Errors | `error.type`, `error.code`, `error.message` | `error.code` and `error.message`. See [Errors](https://anytime-capital.com/docs/errors.md). |
| Checkout | Checkout Sessions and Payment Links | Payment links (`/api/v1/payment-links`) and invoices; the hosted checkout is the link's page. See [Payment links](https://anytime-capital.com/docs/payment-links.md). |

For every object, call and webhook event side by side, with Node and curl examples, see [Stripe API to Anytime Capital](https://anytime-capital.com/docs/stripe-api-mapping.md). Selling on Shopify, WooCommerce or Square too? Their catalogues import the same way: see [Import from Shopify](https://anytime-capital.com/docs/import-from-shopify.md), [WooCommerce](https://anytime-capital.com/docs/import-from-woocommerce.md), [Square](https://anytime-capital.com/docs/import-from-square.md) or [a CSV file](https://anytime-capital.com/docs/import-from-csv.md).

## Webhook mapping

| Stripe event | Anytime Capital event |
| --- | --- |
| `payment_intent.succeeded`, `checkout.session.completed` | `payment.succeeded` |
| `payment_intent.payment_failed` | `payment.failed` |
| `charge.refunded` | `payment.refunded` |
| `charge.dispute.created` | `dispute.opened` |
| `charge.dispute.closed` | `dispute.closed` |
| `invoice.paid` | `invoice.paid` |
| `customer.subscription.created` | `subscription.created` |
| `customer.subscription.deleted` | `subscription.canceled` |

Verify each delivery with the `Anytime-Signature` header instead of Stripe's signature, and skip event ids you've already handled. See [Webhooks](https://anytime-capital.com/docs/webhooks.md).

---

Anytime Capital is a fintech company, not a bank. Payment processing, banking and payout services are provided by Anytime Capital's licensed partners. Rates shown are for US card payments; international cards, currency conversion and disputes may carry additional fees shown in your dashboard before you accept a payment.
