| [ Web Proxy ] |
| Viewing: https://stripe.com/de-lu/docs/billing/subscriptions/trials | [Back] [Original] |
[trial-offer.2128af954f90482fce40e29d1604a01b.png]Use the Trial Offer API to manage both free and paid introductory periods for your subscriptions with a single API integration. Trial offers enable you to qualify high-intent leads, reduce trial abuse, and provide discounted rates to your customers for a limited duration (for example, 1 HKD for the first week of an offer).
With trial offers, you can run promotional pricing and product offering experiments directly in Stripe. Common use cases for trial offers include:
| Use case | Description |
|---|---|
| Discounted trials | To improve trial-to-paid conversion and generate revenue, you can set up discounted trials. For example, you offer a reduced introductory price of 4 HKD for 4 weeks or a free 7-day trial. |
| Free trials | To offer a free trial subscription, include a 0 HKD item in the subscription. |
| Upgrade trials | To upsell premium features, you can configure upgrade trials. For example, you offer a customer on a basic plan a 7-day trial to access premium features at the basic rate. Then, when the trial ends, you automatically convert them to the premium rate. |
| Item-level trials | To sell add-ons, AI packs, and other feature bundles, you can set up item-level trials. You can offer customers a trial for a single line item in a subscription while billing other items at their regular price. |
flexible. If your existing subscriptions are set to classic billing mode, you can update your existing subscriptions from classic to flexible billing mode.Integration restrictions
Trial offers are only supported when creating subscriptions directly using the Subscriptions API. The following UI integrations dont support trial offers:
trial_end)You cant use trial offers and the legacy trial_end parameter together. We recommend using the Trial Offer API to configure discounted trials and free trials.
Dashboard limitations
Billing and analytics limitations
trialing status, but paid trials use active, meaning Stripe considers trial revenue as regular subscription revenue.A subscription charges a customer for a product, at the specified price, on a recurring basis. When you create a trial offer, you specify a trial price and a duration of the trial for a product. When the trial ends, the subscription automatically transitions to the regular price or another price you configure.
Trial offers dont replace products or prices. Trial Offer is a separate object that attaches a discounted or free price to a Subscription item for a limited time, without modifying the items underlying price.
To create a trial offer in the Dashboard:
You can also create a trial offer from the subscription editor:
To attach a trial offer to a new subscription in the Dashboard:
To add a trial offer to an existing subscription in the Dashboard:
To add a trial offer as another item to a subscription that has existing items in the Dashboard:
To convert an existing subscription item to a trial offer, include the items.id and specify the trial_offer.id in the items.current_trial.trial_offer parameter:
curl https://api.stripe.com/v1/subscriptions/\ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d "items[0][id]={{SUBSCRIPTION_ID}}" \ -d "items[0][current_trial][trial_offer]=to_123"{{SUBSCRIPTION_ITEM_ID}}
To change the item quantity for a trial offer in the Dashboard:
You can only use timestamp trial offers with subscription schedules. Unlike relative duration trials, which end after a set number of billing intervals, timestamp trials end on an absolute date. To create one, set the trial offers duration.type to timestamp:
curl https://api.stripe.com/v1/product_catalog/trial_offers \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d "price=" \ -d "duration[type]=timestamp" \ -d "end_behavior[transition][price]={{PRICE_ID}}"{{PRICE_ID}}
Next, use phases.items.trial_offer to attach the trial offer to the schedule phase of the subscription schedule:
curl https://api.stripe.com/v1/subscription_schedules \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d "customer_account=" \ -d start_date=1610403705 \ -d "phases[0][items][0][trial_offer]=to_123" \ -d "phases[0][end_date]=1610403706"{{CUSTOMER_ACCOUNT_ID}}
When you retrieve a subscription, the response includes the configuration for each item, including trial offers:
To cancel the subscription when the paid trial ends:
This flow supports opt-in renewals, so customers arent automatically converted to a recurring subscription by default.
To cancel a subscription at the end of a paid trial in the Dashboard:
For more information, see Cancel subscriptions.
When creating a Price object, you can specify a metered price instead of a recurring price and attach it to a trial offer. This lets you offer the same usage-based billing functionality at a discounted price.
To use a metered price, set the usage_type to metered and add an existing meter to track usage.
curl https://api.stripe.com/v1/prices \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -d currency=usd \ -d billing_scheme=per_unit \ -d unit_amount=1 \ -d "recurring[interval]=week" \ -d "recurring[usage_type]=metered" \ -d "recurring[meter]=mtr_123" \ -d "product_data[name]=Trial Period Price"
Next, attach the price to a trial offer as you would with any other recurring price:
curl https://api.stripe.com/v1/product_catalog/trial_offers \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d "price=" \ -d "duration[relative][iterations]=1" \ -d "duration[type]=relative" \ -d "end_behavior[transition][price]={{PRICE_ID}}"{{PRICE_ID}}
When using trial offers, a subscriptions status is determined by the price of the trial:
trialing. This matches the legacy trial_end behavior and is ideal for no-card-required or standard free trial flows.active, incomplete, or past_due. This behavior mimics other subscriptions without trial offers. Because a paid trial requires an immediate successful payment to begin, the subscription follows the standard PaymentIntent lifecycle. This ensures that your existing billing logicsuch as webhooks for successful paymentsremains consistent, whether the customer is paying a promotional price or the full recurring amount.Every time a trial changes, it triggers Events. Make sure that your integration handles them. For example, you might want to email a customer before a trial ends. Learn more about handling subscription events.
The following table describes the events that trigger before a free trial ends, when a trial subscription pauses or cancels, and when a subscription resumes and becomes active.
| Event | Description | Use case |
|---|---|---|
customer.subscription.deleted | Sent when a subscription ends. | Stop providing access to your product in response to this event. The subscription moves to the canceled status and sends this event after a free trial ends without a payment method, and if the subscriptions missing_payment_method end behavior is set to cancel. |
customer.subscription.resumed | Sent when a subscription is no longer paused. When you receive this event, grant the customer access to the product if they lost access while the subscription was paused. | Paused subscriptions are converted into active subscriptions they resume. Resuming a subscription might generate an invoice and corresponding Payment Intent that must be paid before the subscription moves out of the paused status. |
customer.subscription.paused | Sent when a subscription is fully paused. Invoicing wont occur until the subscription resumes. When you receive this event, you can revoke the customers access to the product until they add a payment method and the subscription resumes. | Stop providing access to your product in response to this event. The subscription moves to the paused status and sends this event after a free trial ends without a payment method and if the subscriptions missing_payment_method end behavior is set to pause. The subscription remains paused until explicitly resumed. |
customer.subscription.trial_will_end | Sent 3 days before the trial period ends. If the trial is less than 3 days, it triggers this event immediately. | Configure the subscription to automatically send an email to your customer 3 days before the trial period ends. |
When a trial offer ends and transitions to the regular recurring price, customers need to begin a fresh billing cycle immediately. By default, the subscriptions billing_cycle_anchor automatically resets to the time the trial ends (now). This ensures that your customers are charged the full amount for their first regular interval immediately, without generating prorations.
If you dont want your billing_cycle_anchor to change, you can set it to unchanged.
Configuration options for billing_cycle_anchor include:
now (default): Resets the subscriptions billing_cycle_anchor to the exact time the trial offer completes. This creates a new billing cycle for the regular price and generates a full-amount invoice with no proration.unchanged: Maintains the original anchor from when the subscription was first created. The period between the trial end and the next natural anchor date are billed as a prorated amount.For example, if you offer a 7-day trial for 1 HKD and want the first 20 HKD monthly charge to cover a full month starting on day 8:
billing_cycle_anchor automatically resets to Jan 8.curl https://api.stripe.com/v1/subscriptions \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d "customer_account=" \ -d "items[0][price]={{CUSTOMER_ACCOUNT_ID}}" \ -d "items[0][current_trial][trial_offer]={{TRIAL_OFFER_ID}}" \ -d "trial_settings[end_behavior][billing_cycle_anchor]=unchanged"{{PRICE_ID}}
| Web Proxy Viewer | New URL | Original Page |