Resources / Field guide
Stripe payment links, promo codes & free trials
Stripe payment links are the fastest way to get paid without building a checkout — but there are sharp edges around what you can pre-bake into a URL, how discounts actually apply, and how to turn a promotion off cleanly. Here's what actually works, learned shipping real campaigns.
Payment links, in one line
A payment link is a hosted Stripe Checkout you create once and share anywhere — no code, no checkout page to build. For subscriptions it handles the whole billing lifecycle. The questions that trip people up aren't "how do I make one," they're "how do discounts and trials behave," so let's go straight there.
Free trials — including without a card
You can offer a trial in two flavors. The default collects a card up front and starts billing when the trial ends. The friction-free option is a trial that doesn't collect a payment method at all: on a subscription payment link, enable "Include a free trial" and choose let customers start without a payment method (the API equivalent is payment_method_collection=if_required). If no card is added by the time the trial ends, the subscription simply cancels rather than charging.
Trade-off: no-card trials maximize sign-ups but convert lower, because nothing auto-charges. Use Stripe's built-in trial-ending reminder emails (with a link to add a card) to recover conversions — that's the lever that makes no-card trials pay off.
Promo codes: what a URL can and can't do
This is the most common misconception. A discount in Stripe is a coupon (the rule: 10% off, $20 off, for N months) plus a promotion code (the human-typeable string customers enter, like LAUNCH50). On a payment link you enable "allow promotion codes," and the customer types the code at checkout.
You can prefill the code in the URL so the customer doesn't have to type it:
https://buy.stripe.com/your-link?prefilled_promo_code=LAUNCH50
But you cannot fully bake a subscription discount into a single opaque URL such that no code is involved at all — the discount is always mediated by a promotion code on the link. Practically, you share a link plus a code ("go here, use LAUNCH50"), or a link with the code prefilled. Plan your campaign copy around that.
Do links expire?
No — Stripe payment links stay active until you deactivate them. A link you create today still works months from now, provided the underlying product/price isn't archived and (for no-card trials) you didn't set an end date. That makes them safe to save and reuse — but it also means you have to turn them off deliberately.
The clean off switches
- Stop a link: Dashboard → Payment Links → ⋯ → Deactivate. The URL stops working immediately.
- Kill a discount everywhere: delete (or disable) the coupon. That instantly invalidates every promotion code attached to it — the cleanest way to end a promo. Toggling an individual code's active flag isn't always exposed via the API, so deleting the coupon is the reliable kill switch.
Don't yank the rug mid-campaign. Archiving the underlying product/price, or pausing an ad that points at a link, can break live links and feeds. If a campaign is running, change the discount, not the product — and deactivate links only when you actually mean to end them.
When to use links vs. a real integration
Payment links are perfect for campaigns, one-off sales, and getting a subscription business live without engineering a checkout. Once you need tight control — custom checkout UX, complex proration, usage-based billing, or deep app integration — graduate to the Checkout Session / Billing APIs. Most teams start with links and only build more when a link genuinely can't do the job.
Setting up Stripe billing the right way?
Subscriptions, trials, promos, webhooks, and the reconciliation that keeps your books honest — built and tested end to end. I take this on directly. Let's talk.
Work with me