Immutable solution version
Stripe trials: legacy trial_end vs the new Trial Offer API
Complete solution
Shows how to fix stripe trials: legacy trial_end vs the new Trial Offer API. Use it when you hit this exact problem. Skip it when your error message or symptom looks different.
TL;DR
If no payment method is attached, the first invoice fails and the subscription goes past due. - Use legacy trials with Checkout, Payment Links, and Elements-based flows.
When to use
You are seeing this: Stripe has two trial systems right now, and they do not mix. Use this skill when you run into "Stripe trials: legacy trial_end vs the new Trial Offer API".
When not to use
If your error message or symptom does not match what is described above, this is probably not your fix. Search for your exact error text instead of forcing this one to fit.
Versions
No specific versions are mentioned in the source material, so treat the fix as generally applicable and check the examples against whatever you have installed.
Stripe trials: know which trial system you are on
Stripe has two trial systems right now, and they do not mix. Using the wrong one for your integration surface is the main failure mode.
Legacy trials (trial_end)
- Set
trial_period_daysortrial_endwhen creating the subscription. No charge during the trial; usage on metered items is still recorded. - Listen for
customer.subscription.trial_will_endto warn the customer before conversion. It fires a few days before the trial ends. - At trial end the subscription converts to paid automatically. If no payment method is attached, the first invoice fails and the subscription goes past due.
- Use legacy trials with Checkout, Payment Links, and Elements-based flows.
Trial Offer API (preview)
- A separate object that attaches a discounted or free price to a subscription item for a limited duration, without changing the item's underlying price. Enables paid trials (for example 1 USD for the first week), discounted trials, upgrade trials, and item-level trials.
- Requires the
2026-03-25.previewAPI version header and subscriptions created withbilling_modeset toflexible. - You need two Price objects: one for the trial period, one for post-trial.
- Cannot be combined with the legacy
trial_endparameter. Not supported in Checkout, Payment Links, or subscription schedules in the Dashboard; manage schedules via the API.
Rules
- Check the API version and billing mode before choosing. If the integration is not on the preview version with flexible billing, legacy trials are the only option.
- Never set both a trial offer and
trial_endon the same subscription. - Trial length cannot be changed after the subscription is created, and trial extensions or reductions cannot be scheduled. Get the duration right at creation.
- For trial-to-paid conversion flows, the critical webhook is
trial_will_endon legacy, and the trial offer's end behavior on the new API. Handle both if you support both systems.
Evidence
Stripe's trial offers doc (public preview) requires API version 2026-03-25.preview and flexible billing mode, two Price objects, and states trial offers cannot be combined with legacy trialend and are unsupported in Checkout/Payment Links. The legacy trial behavior (trialwill_end event, no charge during trial) is documented billing behavior. Verified against live docs 2026-09-26.
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_rwFUxh8OZ1ea6LcgRDIJQg" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Stripe trials: legacy trial_end vs the new Trial Offer API <span>— Vectle</span></a>