How to Add Payments to Your App with Stripe, Simply
Estimated read time: 8 min

TLDR
- Fastest, zero code: a Stripe Payment Link is a shareable URL that takes card payments. You can create one in the Stripe Dashboard in minutes, no app changes needed.
- Inside your app: Stripe Checkout is a prebuilt payment page. It needs a little code, and AI builders like Lovable or Replit can wire it for you.
- One-off or subscription: both work with Links and Checkout. Recurring billing is handled by Stripe Billing.
- Fees (US): 2.9% + 30¢ per successful card charge, no setup or monthly fee (pricing).
- To take real money you verify your business and add a payout bank account, then switch from test keys to live keys.
You built the thing. People want it. Now you need to charge them, and that is where a lot of non-technical builders freeze. Payments feel like the scary, legal, could-break-something part of shipping. It is not. Stripe has spent a decade making "take a card payment" a job you can do without an engineer, and in some cases without touching your app at all.
This guide takes you from no payments to real money in your bank, simplest path first. We will cover how to test safely, the three ways to actually charge, one-off versus subscriptions, what Stripe takes, and exactly what you need to flip the switch and go live.
First: test mode vs live mode
When you create a Stripe account, you start in a sandbox, also called test mode. Everything works exactly like the real thing, except no real money moves. Stripe gives you test API keys and test card numbers (the classic one is 4242 4242 4242 4242 with any future expiry and any CVC) so you can run a full purchase and watch it succeed without charging anyone.
An API key is just a secret password your app uses to talk to Stripe. A test key can only touch test data, a live key touches real money, and objects created in one mode are invisible to the other. Build and rehearse everything in test mode. When you are happy, you swap the test keys for live keys and the same flow starts charging real cards. That is the whole mental model.
The simplest path: a Payment Link (no code)
If you sell one product, a service, or take donations, you may not need to touch your app at all. A Payment Link is a Stripe-hosted checkout page at its own URL. You create it in the Dashboard: name the product, set a price, pick one-time or recurring, and Stripe gives you a link like checkout.stripe.com/... that accepts cards and 40+ payment methods.
You can share that link anywhere: email, SMS, an Instagram bio, a QR code, or a buy button you paste into a website with a single snippet. Stripe handles the receipt, and you can even issue refunds from the Dashboard with no code. For a lot of solo builders, this is genuinely all you need to start collecting money today.
The close cousin is an invoice. Use a Payment Link when anyone with the URL can buy. Use an invoice when you are billing one specific client a specific amount, one-off or on a schedule. Both are no-code, both live in the Dashboard.
When you need Checkout (a little code, or let AI do it)
A Payment Link sends the buyer to a standalone page. That is fine for a shop, but a real app usually needs payment woven into a flow: someone clicks Upgrade, pays, and lands back inside your product with their new plan active. That is Stripe Checkout.
Checkout is still a prebuilt, Stripe-hosted payment page, so you are not designing a card form or handling card numbers yourself. Stripe rates its full-page hosted option as low complexity to build. Your app does two small things: it asks Stripe to create a Checkout Session when the user clicks buy, then it listens for a webhook, a message Stripe sends your app the moment the payment succeeds, so you can unlock the feature or mark the order paid.
This is exactly the kind of glue AI builders are good at. In Lovable, Replit, Cursor, or v0, a prompt like this gets you most of the way: "Add Stripe Checkout. When a user clicks Upgrade, create a Checkout Session on the server for my $19/month price and redirect them. Add a webhook that marks the user as paid when checkout.session.completed fires. Use my Stripe secret key from an environment variable." Paste your test secret key from the Dashboard, test with card 4242, then swap in the live key. Keep secret keys in environment variables, never in code you commit.
Here is how the main ways to charge compare.
| Method | Code needed | Best for |
|---|---|---|
| Payment Link | None | One product, service, or donation. Share a URL or QR code. |
| Invoice | None | Billing one specific customer, one-off or recurring. |
| Checkout (hosted) | A little, or AI writes it | Payment inside a real app flow. Prebuilt page, low effort. |
| Payment Element | The most | A fully custom, in-app checkout you fully control. |
One-off vs subscriptions
A one-off charge is a single payment: a product, a one-time unlock, a consulting fee. A subscription charges the same customer on a schedule and is how most SaaS makes money. Stripe handles both through the same tools.
For subscriptions, you create a recurring price (say $19 per month) instead of a one-time one, and the rest is nearly identical. A Payment Link can be recurring, and Checkout can run subscriptions, both powered by Stripe Billing. Billing also gives you a customer portal, a Stripe-hosted page where subscribers update their card, change plans, or cancel without emailing you. Start with a Payment Link subscription to validate demand, move to Checkout when you want it inside the app.
What Stripe actually charges
Stripe is pay-as-you-go. There is no setup fee, no monthly fee, and no charge for a failed payment. You pay a cut of each successful charge. These are the standard US rates, straight from Stripe's pricing page.
| Charge | US fee | Notes |
|---|---|---|
| Online card (domestic) | 2.9% + 30¢ | Per successful transaction. No setup or monthly fee. |
| International card | +1.5% | Added on top of the base rate. |
| Currency conversion | +1% | When Stripe converts to your default currency. |
| Recurring billing (Stripe Billing) | +0.7% | Pay-as-you-go, on top of card fees, for subscriptions. |
| Payout to your bank | Free | Standard rolling schedule. |
| Instant payout | 1.5% | Optional, money in minutes instead of days. |
In plain terms: on a $20 domestic sale you keep about $19.12. Rates vary by country, so check the pricing page for yours, but the shape is the same everywhere. The one number worth planning around: on small-ticket items, the flat 30¢ matters more than the percentage, so bundling or minimum order values help.
Going live: the checklist
Test mode never asks who you are. Real money does. To take live payments, Stripe has to verify your business to meet Know Your Customer rules that all payment processors follow. Work through this list and you are taking real money.
- Verify your business. In the Dashboard, answer questions about your business, what you sell, and your relationship to it. A sole proprietor or individual is fine, you do not need a company (details).
- Add your public business info. Business name, website or support URL, and a support email. This shows on receipts and on the customer's card statement so they recognize the charge and do not dispute it.
- Set your statement descriptor. The short text buyers see on their statement. Make it clearly your brand.
- Add a payout bank account. Where your money lands. Standard payouts are free on a rolling schedule; the first one can take around a week while Stripe verifies you.
- Confirm your country. You cannot change your business origin country after activation, so pick the right one up front.
- Swap test keys for live keys. Exit the sandbox, drop your live API key into your app's environment variables, and run one real transaction on your own card to confirm it works end to end (keys).
Bottom line
You do not need to be an engineer to charge money. If you sell one thing, a Payment Link has you taking cards this afternoon with zero code. If payment lives inside your app, Checkout is a prebuilt page you can wire yourself or hand to an AI builder in one prompt. Test everything for free with card 4242, verify your business, connect your bank, and flip to live keys. The scary part was never the payments. It was starting. Now you can.
Join the vibe coder community
Weekly prompts, tools, and success stories to help you build and monetize with AI.
Unsubscribe any time.