Trials

A trial is a layer on top of Plans & Subscriptions, switched on by the subscription_mode setting being trial. The API owns all of it, who gets a trial, for how long and on which plan, and the App's job is to show what the API has already decided. There is no trial logic in the front end beyond reading it off the data.

Two ways a trial starts

The API's card requirement changes when a trial begins, and the App works with both. Without a card up front, which is the default, the trial is stamped at registration and the user is let straight in. There is no start trial screen. The clock just runs, and the plans page tells them where it stands. With a card up front, nothing is stamped at registration and the API gates the user until they subscribe. The trial begins at checkout, on a session that carries a trial end, so nothing is charged and the subscription lands trialing.

The App reads which one is running from subscription_card_upfront, and only uses it to decide whether to offer a trial.

The trial card

A trial applies to one plan, the lowest paid one. The API marks it with is_trial on the plan, so the App never works out which plan that is from tiers or prices, and keeps working if the rule changes. The card shows how many days are free and its button reads "Start free trial" in place of Subscribe.

Whether to show that is a local check on the user. They need to be in trial mode with a card up front and have no subscription at all. The profile keeps a dead subscription set, so a returning subscriber is not offered a second trial. Without a card up front nobody is offered one, since the trial was already running from registration. It is deliberately not a flag from the API, because the user object already says everything the check needs.

While on a trial

A user on a trial sees a line above the plans with the end date. One on a trial with no subscription behind it, which only happens without a card up front, keeps the cards, since subscribing early carries the remaining days over rather than starting a fresh window. One whose subscription is trialing at Stripe sees the line and nothing else, because the API refuses a plan change while trialing and there is nothing left to pick.

At checkout

A trial charges nothing today, so the session total reads zero. The checkout shows what is due today and what is billed once the trial ends, with the date, all read off the session. The next charge comes from the session rather than the plan's price so tax and any promotion code are already in it.

Cancelling

The cancel confirm page has its own wording for a trial. Access runs to the end of the trial and nothing was ever charged, so there is no mention of a refund. The date comes off the user's trial rather than the subscription, since a subscription only carries an end date once it has been cancelled.

© Websanova 2026 About Privacy