Selling Products & Promotions
Everything a head coach needs to take payments — from one-off term fees and camps to fully automated monthly subscriptions, plus promo codes, refunds, and reporting.
1. Connect Stripe before you launch
Parents pay you directly via Stripe Connect Express — funds land in your bank account, minus Stripe's processing fee and our 3% platform fee on term registrations.
- From the admin dashboard, the onboarding checklist shows "Connect Stripe to accept payments" as a required step.
- Click Resume Stripe Setup — Stripe's hosted KYC flow opens.
- You'll need: business details, UK bank account (sort code + account number), and a photo ID.
- Stripe usually verifies in under 5 minutes. Occasionally up to 24 hours.
- Once verified, the dashboard tile flips to ✅ and we automatically provision your Stripe Customer Portal config so parents can self-serve subscription management. Zero manual setup.
payment_status=pendingwith a friendly "we'll email a payment link" message to the parent. No charges are attempted.2. Creating a product
From Commerce → Products, click New product. Choose a type:
| Type | Use it for | Platform fee |
|---|---|---|
| term_registration | Seasonal squad fees, plus the basis for recurring plans | 3% |
| camp | Multi-day holiday programs | 0% |
| event | Awards nights, parent evenings, tournaments | 0% |
| one_off | Kit, donations, individual items | 0% |
On top of the platform fee, parents pay Stripe's standard processing fee (~1.5% + 20p). Both are bundled into a single transparent "Booking fee" line at checkout — they aren't deducted from your take.
Required fields
- Name (2–120 chars) — e.g. "Autumn 2026 — U10 Wolves"
- Price in £ — e.g.
120.00. Use 0 for free items. - Status —
Drafthides it;Publishedmakes it appear on the public shop immediately.
Optional but recommended
- Description — what's included, what to bring, refund terms in plain English. Markdown supported.
- Capacity — once the cap is hit, parents see "Fully booked."
- Active from / Active to — outside this window, the product is hidden from
/shop. - Age min / Age max — restricts the product to a player age range.
3. Registration plans (the parent registration wizard)
A "registration plan" is just a product with the "Show on the parent registration wizard" toggle ticked. Whatever plans you publish appear as tiles on /register Step 3 — no more hardcoded trial/term/annual prices.
Four things to set on each plan
- Toggle on: tick "Show on the parent registration wizard". The plan appears on the wizard once it's also Published.
- Billing interval:
One-off— single charge via Stripe Checkout.Monthly/Quarterly/Annual— recurring via Stripe Subscriptions (see §4).
- Display order — lower numbers appear first. Default 100. Use 10/20/30 to control where each plan sits in the grid.
- Free trial days (recurring only, optional) — set to e.g.
7and parents get the first 7 days free; first charge happens after the trial. Leave blank for no trial.
Recommended starter set
For a new academy, publish at least three plans so parents have options:
| Plan | Interval | Price | Order |
|---|---|---|---|
| Trial Session | one_off | £10 | 10 |
| Term Registration | one_off | £150 | 20 |
| Annual Registration | one_off | £420 | 30 |
Add a Monthlyplan (e.g. "Monthly Membership — £25/month") if you want recurring subscribers — see §4.
4. Recurring subscriptions
Pick monthly / quarterly / annual as the billing interval and AcademyOS routes the parent through Stripe Checkout in subscription mode against your connected account. Stripe auto-charges them on that cadence going forward, with the same 3% platform fee on every recurring charge.
What parents see
- On the registration wizard: a "Recurring" badge on the tile, plus a trial-day note if you set one.
- After signup: an automatic confirmation email with the next charge date.
- Ongoing: a Stripe-generated receipt email after every successful charge — no double-send from us.
- In their portal (
/portal/subscriptions): live subscription status, recent invoices with PDF links, and a Manage subscription button that opens Stripe's Billing Portal for cancel + update card.
Cancellations
Parents cancel themselves from the Billing Portal — no support tickets to you. Cancellation takes effect at the end of the current billing period (no proration, no refund for unused time — that's the policy your guide can quote to parents). Once the period ends, the subscription is terminated and the registration is marked inactive.
Failed payments & dunning
- First failure: parent + you both get an email. Stripe automatically smart-retries on its standard schedule (typically up to 4 attempts over ~2 weeks).
- Eventual recovery: subscription returns to
active. No action needed. - Final failure: subscription moves to
unpaid/canceled. The local registration is auto-suspended (status=inactive) and both you and the parent get a "subscription cancelled" email.
Parents can rescue a past-due subscription themselves by going to /portal/subscriptions → Manage subscription and updating the card before the retry window exhausts.
Coach-side metrics (admin dashboard)
- MRR tile — active + trialing subscriptions normalised to a monthly figure (so quarterly/annual don't skew it).
- Active subscriptions count — how many parents are auto-renewing.
- Past-due count — your dunning early-warning indicator.
- Subscription badge column on the Registrations table (Active / Trial / Past due / Cancels [date] / Suspended).
5. Editing, archiving, deleting
You can edit name, description, price, capacity, booking window, age range, status, and the registration-plan toggles.
You can't edit the type or slug (URL) — both would break things.
Archiving and deleting are both reversible (soft-delete). Existing orders stay valid and refundable. Re-publishing brings the product back unchanged.
6. Promotions and discount codes
Voucher codes
From Commerce → Promotions → New, create a code parents type at checkout to get money off.
- Code — 3–20 characters, A–Z and 0–9 only. Auto-uppercased. Must be unique in your academy.
- Discount type —
percent(1–100) orfixed(£ off). - Valid from / valid to — optional date range.
- Max redemptions — total caps across all parents.
- Max per parent — defaults to 1.
- Applies to — restrict to specific products or product types if you want.
Sibling discount (automatic)
Auto-applied when a parent already has another active order with you. Only one active sibling promotion per academy at a time. Parents don't need a code — the discount appears at checkout.
Redemption report
Click Reportnext to any promotion on the Promotions page to see the full redemption log: parent name, email, product, payment status, total. Useful for understanding what's converting and chasing up unpaid orders that used a discount.
7. Orders and refunds
Commerce → Orders lists every order — parent name, product, total paid, status, and a link to the Stripe payment.
Issuing a refund
Click an order → Refund. You can refund the full amount or a partial amount.
- Stripe processes the refund — money returns to the parent's card in 5–10 business days.
- Order status flips to
refundedorpartial_refund. - Stripe deducts the refund from your next payout.
8. The parent's checkout journey
For visibility, here's exactly what a parent experiences:
Standalone shop products (camps / events / one-offs)
- Browses
/shop— sees published products grouped by type, with capacity remaining shown. - Clicks a product → arrives at
/shop/<slug>. - Fills in details + optional promo code → Buy now.
- Stripe's hosted checkout opens. Pays via card / Apple Pay / Google Pay.
- Returns to
/shop/success— order is confirmed.
Term registrations (one-off and recurring)
- Goes to
/register— 5-step wizard. - Steps 1–2: parent + player details + medical consent.
- Step 3: picks a squad, then picks one of your published registration plans.
- Step 4: terms + medical consent + photo consent (optional).
- Step 5: Stripe Checkout — single charge for one-off plans, subscription mode for recurring.
9. Multi-currency, taxes, payouts
- Currency — defaults to GBP. Each product stores its own currency, but the UI assumes GBP for now.
- Taxes — Stripe collects VAT in jurisdictions where it's registered for you. AcademyOS does not let you set per-product tax rates yet.
- Payouts — Stripe pays you on its own schedule (typically rolling 7-day for new accounts, then daily). Configure this in your Stripe dashboard.
Common questions
Can I run a recurring monthly subscription?
Yes — fully end-to-end. Create a plan with a monthly (or quarterly / annual) billing interval and parents are auto-charged via Stripe Subscriptions. They self-serve cancel and update card from /portal/subscriptions. Failed payments trigger Stripe smart retries; if the retry window exhausts, the registration is auto-suspended and both parties are emailed. Optional free trial supported.
Can I let parents cancel their own orders?
Subscriptions: yes, from /portal/subscriptions → Manage subscription. Takes effect at end of current period — no refund for unused time.
One-off orders: not yet self-serve. Parents email you, you issue the refund.
Can I see who used a promo code?
Yes — open Commerce → Promotions, click Report on any promo for the full redemption log: parent name, email, product, status, total.
Can I take a deposit and bill the rest later?
Not directly. Workaround: create two products, "Camp Deposit" and "Camp Balance", and ask parents to buy both. Or use a recurring subscription with a low monthly amount.
Do I have to configure anything in the Stripe Dashboard for the parent portal?
No. The Stripe Customer Portal configuration (cancel-at-period-end, update payment method) is provisioned automatically the moment your KYC clears. If something looks broken — clicking Manage subscriptionfrom a parent account returns an error — tell us and we'll backfill.
For technical or billing questions, email support@flowedgeai.com — we typically reply within 2 hours during business hours.