Video chapters
- 0:00 Welcome
- 0:17 How subscriptions work
- 0:38 1 · Plans and the payment gateway: explained
- 0:52 1 · Plans and the payment gateway — Stripe, the Coffee Club plan, the product
- 2:21 2 · Subscribing: explained
- 2:34 2 · Subscribing — Leah subscribes with a Stripe test card
- 3:25 3 · Checking the money: explained
- 3:37 3 · Checking the money — subscription details and Finance › Payments
- 4:22 4 · Renewing: explained
- 4:39 4 · Renewing — Renew now: a second Stripe charge
- 5:05 5 · A declined card, and changing plan: explained
- 5:24 5 · A declined card, and changing plan — declined card, update card, plan change
- 6:33 6 · Cancelling: explained
- 6:46 6 · Cancelling — cancel at period end
- 7:19 Wrap-up
Written guide
Overview
Prepare a recurring product in Appmint and understand exactly which parts are local configuration and which require a verified billing-provider agreement. This course does not present local status edits as recurring payment.
Limitations and checks
The illustrated plan is retained historical local evidence. Current creation and lifecycle instructions were checked against subscription-create.tsx, subscription-store.ts and the record view. No new enrollment, renewal or provider payment was executed in this pass; those outcomes remain unverified.
01. Create the plan
Why this matters
The plan defines the price and interval. Upstream identifiers connect it to a provider’s actual product and price.
Follow these steps
Open Storefront → Subscription → Plans & Pricing and add a plan. Enter Name, Title, Price, Display Price, Duration and Duration Unit. Units include minute, hour, day, week, month, year and forever. Set Trial Period in Days, Status, Features, Add-ons, Description and Images. Save Inactive while preparing it; refresh and reopen.
Check the result
Display Price is presentation, not a second charge. A plan saved locally does not establish provider billing.
Save and recognize the monthly plan
- Open Storefront → Subscription → Plans & Pricing and use the + create control in the plan table.
- Enter internal Name
course-print-club, readable TitleCedar Print Club, Price15, Display Price15, Duration Unit → Month, Duration → 1 and Trial Period in Days → 0. - Set Status → Inactive while preparing the offering. Save once, close the editor and use the table's Refresh.
- Find the same name and compare price, duration and status in the saved row. Reopen with its edit control before changing features or provider references.

Historical saved local plan: price15/display15, Month1, Inactive. No customer subscription or billing outcome is shown.
02. Connect the provider and catalogue offering
Why this matters
Provider product/price references must describe the same currency and interval as the local plan.
Follow these steps
Configure the compatible payment/billing integration first. In the plan’s Upstream section choose the offered Stripe, PayPal or Paddle provider and enter the actual Price ID, Product ID and remarks where used. Save and reopen. Attach the plan through the product’s Subscription Plan selector and inspect the intended customer offering.
Check the result
The offered upstream enum is not proof every billing operation is fully implemented. Match references to the correct provider environment and inspect the consumer enrollment path before claiming purchase readiness.
03. Customer subscription record
Why this matters
A manually created subscription is a record, not a customer’s authorization for recurring charges.
Follow these steps
- Open Create Subscription. The current screen is Subscribe a customer, not the older generic data form.
- In Customer, select the actual customer or enter their email in the supplied email field. In Plan, select the intended saved plan; the selector uses the plan's name reference.
- Review Skip the plan's trial (paid plans with a trial only). Leave it off when the plan's trial should apply. Enter a Note if a reason should appear in subscription history.
- Choose Start subscription once and wait through Starting…. This calls the server subscribe operation; it is not merely saving a draft row.
- Read the returned state: the UI distinguishes Subscription started, Trial started, and Subscription created — waiting for the first payment. Open the saved subscription and inspect its period, payment and history before telling the customer billing is active.
Check the result
An active free plan does not imply money was collected. A paid plan can require the customer's payment method. Do not use a real paid plan for a harmless form practice: this action can start actual billing through the configured system. Provider execution remains unverified in this documentation pass.
04. Pause, resume, renew and cancel boundaries
Why this matters
Current lifecycle controls call server subscription actions. They are no longer accurately described as generic local status edits. Their effect must be checked on the subscription history and any associated billing records.
Follow these steps
- Open the saved subscription's normal record view. Use Edit fields only for ancillary details; use the named lifecycle action for pausing, resuming, renewing or cancellation.
- For Pause, inspect the reason and optional resume date, then confirm Pause subscription. Wait for completion and inspect the refreshed record/history.
- For cancellation, choose Cancel now or At period end deliberately. Confirm the corresponding action and inspect whether the record ended immediately or has a scheduled end.
- Before Renew, inspect the current period and existing payment attempt. Recheck the returned record and payment result; do not click again simply because one screen was slow.
- Where an external billing agreement is involved, reconcile its state and references separately. A server response or UI badge alone is not proof of external settlement.
Check the result
The current store invokes SubscriptionApi.pause, resume, renew and cancel; the record screen supplies cancellation timing and history. This source inspection supersedes the older claim that these buttons only changed local fields. Fresh controlled lifecycle screenshots and provider/payment proof are still required.
05. Failed collection and history
Why this matters
A failed invoice, expired local record and cancelled provider agreement require different recovery.
Follow these steps
Inspect the subscription’s customer, plan, dates and upstream references, then the corresponding provider/payment result and history. Correct a missing/mismatched reference before retrying enrollment. If payment failed, inspect whether an agreement or charge already exists before another attempt.
Check the result
Do not present a successful Renew request as collected money without inspecting the resulting payment. Use genuine provider sandbox evidence, clearly identified, when the integration is ready.
06. Create and reopen the product
Why this matters
A product record ties customer presentation to the SKU your team uses. A saved draft is a useful first checkpoint before making the product available.
Follow these steps
Open Storefront → Product → Products → Add Product. Enter Product Name, SKU and URL Slug. Enter Description and Price. Leave the product in Draft while preparing it. Choose Create Product, close the editor, refresh Products and reopen the same SKU. Check its name, slug, price and status. Cost per Item is an internal product value; it must not be narrated as another buyer charge.
Check the result
Use a unique SKU and slug. Inspect save errors before repeating Create Product. The list and reopened record establish persistence; the public product page establishes customer visibility.
07. Media and catalogue organization
Why this matters
Reusable catalogue references keep products consistent, while the default image controls the first visual impression.
Follow these steps
Open Media, add the intended product images and use Set as default image on the lead image. Inspect image order and remove an incorrect image. Add Brand, Categories and Tags through their selectors. Use extraInfo for titled sections, reorder them with Move up/Move down and save. Open the customer product page through the site and check its gallery, description and brand.
Check the result
A file visible in the picker is not necessarily the default product image. Reopen the product and public route after saving. Links to shared brand/category records should remain references rather than duplicate names.
08. Shipping, bundles and alternative offerings
Why this matters
Physical shipping, digital delivery, bundles and recurring plans have different requirements. Select the model the product actually uses rather than assuming every product ships as one parcel.
Follow these steps
Open Shipping. Enter Weight and dimensions with the intended units; choose Ships As and Shipping Config where needed. Review Packaging, Flat Rate override, Ships From Location, signature, hazmat, fragile and geographic exclusions. For a bundle, open bundle and select component products and quantities, then inspect the buyer basket and component stock after a controlled order. For digital goods use Digital Download URL and test access as the buyer. For recurring goods select Subscription Plan and verify the linked plan is active and provider-ready.
Check the result
A product override can supersede the default delivery rule. A download URL does not establish buyer-only authorization. A subscription plan reference does not create a recurring provider agreement; that lifecycle belongs to the subscription checks.
09. Preview and share the customer document
Why this matters
The customer link must identify the same saved document the operator edits. Sending and copying a link are separate actions.
Follow these steps
Open Invoice Preview and compare line calculations and total with the editor. Obtain the actual payment/customer link from the invoice; if unavailable, read the reported reason and correct site/link readiness instead of constructing an invented URL. Use Send Invoice, verify email/phone and Send a copy to myself, then send to the controlled recipient. Open the received link in an independent customer browser.
Check the result
Keep internal notes separate from Customer Notes. A sent notice does not establish receipt. Earlier preview omitted line-discount explanation; inspect current rendering and report unexplained arithmetic.
10. Payment, partial balance and order conversion
Why this matters
Payment creates financial evidence; conversion creates the working order. Neither is implied by a printable invoice.
Follow these steps
Use Take Payment with the configured method and intended amount, complete the controlled payment and inspect transaction/reference, total paid and remaining balance. For a partial payment compare both the payment record and updated customer document. Use the supported Create Order conversion and follow the linked order. Confirm catalogue SKU and quantities survive; distinguish manual service lines from inventory-backed lines.
Check the result
Refresh before retrying an unclear collection. Mark Paid is not provider collection. The invoice can show its converted order link; use that link to avoid duplicate conversion.
11. Verify the recurring contract and future billing boundary
Why this matters
The connected result must be checked at both sides of this handoff. Keep the original record reference visible while moving to the destination.
Follow these steps
Use the actual customer enrollment route only after the provider integration and upstream plan references are ready. Inspect the provider subscription identifier, first invoice/payment, period and next billing date. For renewal use genuine provider sandbox execution and compare the new invoice and payment. For cancellation inspect the external agreement and future billing behavior independently of the Appmint local status.
Check the result
Current local Pause/Resume/Cancel/Renew handlers only save fields. This is a documented application capability gap, not an instruction to pretend recurring billing stopped. Keep the course in source-draft status until the end-to-end agreement flow is proven or fixed.
Limitations and checks
Provider enrollment, renewal, plan change and cancellation outcomes are not complete in current evidence. The script includes these required checks and explicitly blocks unsupported claims.
Next steps
Return to the saved records and check the handoff that matters for your use of the platform. A visible result at each end makes the workflow explainable and gives you a precise place to investigate when it fails.
Appmint Subscriptions and recurring billing — supporting guide
Overview
Set up a recurring offering and distinguish Appmint’s local subscription record from provider-controlled billing. We will cover plans and customer records, then the evidence needed for renewals and lifecycle changes.
Before you start
Prepare the saved plan and actual customer identity. Current subscriptions use a server-backed Start subscription flow; the old generic create form in historical recordings is superseded. A free plan, a trial and a paid plan can return different starting states. Inspect that result instead of assuming every creation collects money.
The historical Cedar Print Club plan below is inactive, price15, duration1Month. It demonstrates plan persistence only; it has no proven provider enrollment or renewal. Current-source procedures below require fresh browser rehearsal before the course can claim those outcomes.
01. Create the plan
Why this matters
The plan defines the price and interval. Upstream identifiers connect it to a provider’s actual product and price.
Follow these steps
Open Storefront → Subscription → Plans & Pricing and add a plan. Enter Name, Title, Price, Display Price, Duration and Duration Unit. Units include minute, hour, day, week, month, year and forever. Set Trial Period in Days, Status, Features, Add-ons, Description and Images. Save Inactive while preparing it; refresh and reopen.
Check the result
Display Price is presentation, not a second charge. A plan saved locally does not establish provider billing.
Save and recognize the monthly plan
- Open Storefront → Subscription → Plans & Pricing and use the + create control in the plan table.
- Enter internal Name
course-print-club, readable TitleCedar Print Club, Price15, Display Price15, Duration Unit → Month, Duration → 1 and Trial Period in Days → 0. - Set Status → Inactive while preparing the offering. Save once, close the editor and use the table's Refresh.
- Find the same name and compare price, duration and status in the saved row. Reopen with its edit control before changing features or provider references.

Historical saved local plan: price15/display15, Month1, Inactive. No customer subscription or billing outcome is shown.
02. Connect the provider and catalogue offering
Why this matters
Provider product/price references must describe the same currency and interval as the local plan.
Follow these steps
Configure the compatible payment/billing integration first. In the plan’s Upstream section choose the offered Stripe, PayPal or Paddle provider and enter the actual Price ID, Product ID and remarks where used. Save and reopen. Attach the plan through the product’s Subscription Plan selector and inspect the intended customer offering.
Check the result
The offered upstream enum is not proof every billing operation is fully implemented. Match references to the correct provider environment and inspect the consumer enrollment path before claiming purchase readiness.
03. Customer subscription record
Why this matters
A manually created subscription is a record, not a customer’s authorization for recurring charges.
Follow these steps
- Open Create Subscription. The current screen is Subscribe a customer, not the older generic data form.
- In Customer, select the actual customer or enter their email in the supplied email field. In Plan, select the intended saved plan; the selector uses the plan's name reference.
- Review Skip the plan's trial (paid plans with a trial only). Leave it off when the plan's trial should apply. Enter a Note if a reason should appear in subscription history.
- Choose Start subscription once and wait through Starting…. This calls the server subscribe operation; it is not merely saving a draft row.
- Read the returned state: the UI distinguishes Subscription started, Trial started, and Subscription created — waiting for the first payment. Open the saved subscription and inspect its period, payment and history before telling the customer billing is active.
Check the result
An active free plan does not imply money was collected. A paid plan can require the customer's payment method. Do not use a real paid plan for a harmless form practice: this action can start actual billing through the configured system. Provider execution remains unverified in this documentation pass.
04. Pause, resume, renew and cancel boundaries
Why this matters
Current lifecycle controls call server subscription actions. They are no longer accurately described as generic local status edits. Their effect must be checked on the subscription history and any associated billing records.
Follow these steps
- Open the saved subscription's normal record view. Use Edit fields only for ancillary details; use the named lifecycle action for pausing, resuming, renewing or cancellation.
- For Pause, inspect the reason and optional resume date, then confirm Pause subscription. Wait for completion and inspect the refreshed record/history.
- For cancellation, choose Cancel now or At period end deliberately. Confirm the corresponding action and inspect whether the record ended immediately or has a scheduled end.
- Before Renew, inspect the current period and existing payment attempt. Recheck the returned record and payment result; do not click again simply because one screen was slow.
- Where an external billing agreement is involved, reconcile its state and references separately. A server response or UI badge alone is not proof of external settlement.
Check the result
The current store invokes SubscriptionApi.pause, resume, renew and cancel; the record screen supplies cancellation timing and history. This source inspection supersedes the older claim that these buttons only changed local fields. Fresh controlled lifecycle screenshots and provider/payment proof are still required.
05. Failed collection and history
Why this matters
A failed invoice, expired local record and cancelled provider agreement require different recovery.
Follow these steps
Inspect the subscription’s customer, plan, dates and upstream references, then the corresponding provider/payment result and history. Correct a missing/mismatched reference before retrying enrollment. If payment failed, inspect whether an agreement or charge already exists before another attempt.
Check the result
A Renew action is a server operation, not a demonstration shortcut. Inspect its returned period, payment attempt and history before claiming collection. Use genuine controlled provider evidence when billing is configured.
Detailed instructions
The following retained material documents earlier local work. Its pending checks remain pending; historical successful outcomes are not claims of a fresh execution. Use the source-authored instructions above to prepare the new recording, and preserve these references for comparison.
T08: Sell a recurring offering
Worked example
Cedar Print Club is a recurring offer, so first define the plan without creating a subscriber. Open Subscription, then Plans and Pricing. Use the toolbar plus to open Store Subscription Plan. Enter course-print-club as Name, Cedar Print Club as Title, and fifteen for Price and Display Price. Choose Month and Duration one. Trial Period in Days is zero. Keep Status Inactive and Upstream unset for this local setup. Save returns Data inserted. If the list still shows zero records, use Refresh; the saved plan then appears. Select its row to reveal the leading-cell actions and choose Edit. Check the persisted prices, Month, Duration one, zero trial and Inactive status. Create Subscription is a different tab: that is where the plan would be connected to a customer agreement. Our subscriber list is still empty. Saving this plan has not collected fifteen dollars, started a trial or proved provider renewal or cancellation.
Included controls: Dashboard, Subscriptions, Plans & Pricing, Create Subscription, plan duration/unit, price, trial, addons/features, upstream product/price, Details, Customer, active/paused/cancelled/trial, renewal.
Limitations and checks: All current plan/create/customer/detail field labels, saved/read-back plan and customer contract, configured sandbox billing first/renewal, trial/pause/cancel actions/history and rejection. SF13 cancelled form is inspection only.
Check the result: Plan and contract identities distinct; actual provider events/customer state/charge verified.
Implementation reference: subscription-plans.tsx, subscription-details.tsx.
New actual evidence: SF26-subscription-rental-local.webm, LEDGER.md.
Limitations and checks
Current UI entry and editor: . Corresponding SDK storefront schemas and the retained AppEngine references define fields and consumer boundaries. Provider calls, external delivery, payments and financial mutations were not performed for this writing task.
Next steps
You can now follow the module from its configuration to the record that proves the result. Use the relevant chapter to revisit an alternative or troubleshoot the exact failed handoff.