Billing and terms
The 10% deposit and 1-month trial, annual billing, the 12-month minimum term, renewal, cancelling, and what is stored with each order.
Draft, needs legal review
The terms and the cancellation & refund policy need legal review before launch, in particular consumer withdrawal rules and the digital-services consent exception. Current terms version: 2026-10-16.5.
Free trial
- 1-month trial · 10% deposit, one per customer. Every first purchase pays a 10% deposit and gets a one-month trial. The rule is one trial per workspace, enforced in Postgres by a unique index on trial orders, so a second trial order for the same workspace is refused by the database.
- 10% deposit today. Checkout collects a payment method, the consent, and a deposit of 10% of the first year. The rest is charged when the trial month ends. The deposit is not refunded.
- End of the trial month. The rest of the first year is charged and the 12-month non-refundable term starts.
- Cancel trial. Cancelling the trial stops the rest of the charge. The 10% deposit is not refunded. You keep access until the trial month ends, then the plan stops.
- AI during the trial is limited to 400 AI credits in total, on any plan.
- Status. While the trial runs, the subscription status is
trialing. Settings → Plan & billing shows the days left and a Cancel trial button.
How the end-of-trial charge happens
A trial order starts with status trialing. When the trial month ends it becomes paid when the rest is charged, or void if the trial was cancelled (the deposit stays paid). An idempotent job makes that change: run pnpm billing:run, and in local test mode it also runs whenever billing is read. Running it twice never charges twice.
In a real build, the deposit is captured at checkout and the rest is captured when the trial month ends. For banks without recurring billing, checkout places a 3-D Secure pre-authorisation for the rest, which the job captures at the end of the month or drops on cancel. No card number is ever typed into Portline; test mode offers these methods:
| Test method | Flow |
|---|---|
| Visa •••• 4242 (test card) | Recurring card: the deposit now, the rest when the trial month ends |
| Mastercard •••• 4444 (test card) | Recurring card: the deposit now, the rest when the trial month ends |
| Debit card with 3-D Secure pre-authorisation (test) | 3-D Secure: the deposit is captured now, the rest when the trial month ends, and the rest is not captured if the trial is cancelled |
The rules
- Annual only. Prices are shown per month, and the whole year is charged up front. There is no month-to-month option.
- 12-month minimum term. After the trial, every tier, pack and add-on is bought for 12 months.
- Renewal. The term renews for another 12 months on the renewal date unless renewal was cancelled before it.
- Cancel renewal only. The owner cancels renewal in Settings → Plan & billing. Cancelling renewal stops the next annual charge. Your plan stays active until the end of the current term. Nothing already paid is refunded.
- No refunds after the trial. Once the first year is charged, nothing is refunded or credited, including after cancelling early or not using Portline. Cancelling during the trial is free.
- Changing plan mid-term starts a new 12-month term from the day of the change. In this build the old term isn't prorated or refunded.
- Test mode. No card is charged in this local build.
The public versions are the site's Terms of service and Cancellation & refund policy pages.
Consent at checkout
The store's checkout has one consent checkbox. It is unticked by default, and checkout refuses an order without it. With a trial, the text is:
I agree to the Terms and the Cancellation & refund policy. I authorise Portline to charge a 10% deposit today, which opens a 1-month trial. The rest of the first year is charged when the trial month ends, unless I cancel before then. The deposit is not refunded. After the trial this is a 12-month minimum term, billed annually in advance, and payments are not refundable, including if I cancel early or stop using Portline. I can cancel renewal at any time.
When the customer has already used their trial, it reads:
I agree to the Terms and the Cancellation & refund policy. I understand this is a 12-month minimum term, billed annually in advance starting today, and that payments are not refundable, including if I cancel early or stop using Portline. I can cancel renewal at any time.
What each order stores
Prices are recomputed on the server from @portline/pricing; the browser never sends a price. Each order stores:
- the base (tier or pack), the add-ons and each line's per-month and annual price;
- the consent: when it was ticked (
consentAt), the exact text, and the terms version it accepted (termsVersion); - the term:
trialEndsAt(or none),firstChargeAt,termStart,termEndandrenewsAt(the renewal date, the same day the term ends); - the status (
trialing, thenpaidorvoid), who placed it, the payment method and a test-mode payment reference.
The workspace subscription keeps the plan, add-ons, term start and end, and cancelAtTermEnd. Only the billing path (the service role) writes plan, add-ons, status and term dates. An owner can only cancel renewal, through the pl_cancel_renewal function: it checks the caller is the owner and sets cancel_at_term_end. It can't undo a charge or change anything else.