Products and Subscriptions
Keep a list of what you sell, put customers on recurring plans, and let renewals raise their own invoices.
Overview
Products and Subscriptions gives you:
- A catalogue of what you sell, each with its price, sold one off or as a subscription.
- Subscriptions that renew by themselves and raise a numbered invoice each period.
- A charge on your own Stripe account at each renewal, with retries on a schedule you set.
- Your discount codes in one place.
- Monthly recurring revenue, annual run rate, average revenue per customer and churn.
The price book
Go to Products and Subscriptions → Products and press New product. Give it a Name, an optional SKU (each SKU must be unique) and a Price. The price is required; enter 0 for a free product. A name can be up to 200 characters, and free trial days must be a whole number from 0 to 365. Under How is it sold? choose:
- One off - a single sale.
- Subscription - then pick how often it Bills every (weekly, monthly, quarterly or yearly) and any Free trial days.
Press Add product. Each product has one price. A product that live subscriptions still use cannot be deleted. Edit it and set its Status to Retired instead, so it stops being offered.
The same products can be added to deals in Sales Pipelines.
Starting a subscription
Open the Subscriptions page and press New subscription. Pick the Plan (any subscription product that is still selling), the Customer from your Contacts (required), an optional Discount code, and the Quantity (a whole number from 1), then press Start subscription.
The subscription shows as Active with the date it Renews. If the product has free trial days, it shows as In trial and nothing is charged until the trial ends.
Billing is at the end of each period. The first invoice is raised when the first period (or the trial) ends, not on the day you start.
What happens each period
Every hour SoftSolz looks for subscriptions due to renew. For each one it:
- Works out the amount: the price times the quantity.
- Raises a numbered invoice, such as SUB-0001, on the Invoices page.
- Moves the subscription on to the next period.
- Tries to charge the amount on your own Stripe account.
A charge needs Stripe connected and a card on file for the customer. SoftSolz does not collect cards for subscriptions, so in a live workspace the charge does not go through and the invoice shows as Payment late. Collect the money another way, for example with a payment link or an invoice.
You can change the invoice Number prefix and how tax is shown under Billing settings.
When a payment fails
Under Billing settings → When a payment fails:
- Retry after (days) - a list of waits between tries, for example 1, 3, 5, 7.
- End the subscription after the last try - turn this on and the subscription ends when the last try fails, and the invoice is marked Given up. Leave it off and the invoice stays unpaid for somebody to look at.
On the Invoices page, filter by Payment late to see everything that has not been paid. Each invoice shows how many Tries there have been and when the Next try is. From the row you can choose Try the card again, Refund a paid invoice or Void an unpaid one.
Pausing and ending
On the Subscriptions page, each row has Pause, Resume and End at period end. Ending never cuts a subscription off mid-period: it runs to the end of the period the customer is in, then stops. Open a subscription to change its plan or quantity (you see the cost first), keep one that was set to end, end it today, copy the customer's billing portal link, and read its history. A subscription still in its free trial cannot be paused.
Discount codes
Discount codes keeps your codes in one place. Press New code, type the Code, choose A percentage off or A fixed amount off, and set an optional Usage limit and Expires date, then press Create code. A percentage is between 1 and 100, a usage limit is at least 1 and the expiry date must be in the future. Type a code into New subscription to use it. Retire stops a code being used; Bring back turns it on again.
Revenue
The Revenue page shows Monthly recurring revenue, Annual run rate, Average per customer and Churn, plus how many subscriptions are active, in trial and late. Pick the last 30 days, the last 90 days or the last year for churn and the trend line.
A snapshot is taken every night, so the trend is real history rather than a recalculation. It starts filling in the day after your first subscription.
Test it step by step
These steps prove products and subscriptions work. Use the sandbox (open the workspace menu and choose Switch to Sandbox mode) so nothing real is charged. The sandbox keeps its own data and settings.
- Install the service. Open Marketplace, find Products and Subscriptions and press Install. Do this as the workspace owner or an Admin. Other roles need the Products and Subscriptions permissions turned on under Members & access → Roles.
- Add yourself as a contact. Under Contacts, press New contact and add your own name and email.
- Add a product. Under Products, press New product. Name it "Test plan", set a price of 10, choose Subscription, Bills every Weekly and leave Free trial days at 0. Press Add product. You should see "Product added" and the product listed as Selling.
- Start a subscription. Open Subscriptions, press New subscription, pick "Test plan", choose yourself as the customer and press Start subscription. You should see "Subscription started", and the row shows Active with a Renews date a week away.
- Wait for the first renewal. Until then, Invoices says "Invoices appear here the first time a subscription renews." Within an hour of the renewal date, an invoice such as SUB-0001 appears. If Stripe is connected in the sandbox (Stripe shows a test version of its sign-up that you can click through), the invoice is marked Paid without any real money moving. Without Stripe it shows as Payment late.
- Check Revenue. The Revenue page counts your test plan in monthly recurring revenue straight away. The trend line starts filling in the next day.
For developers
In the sandbox, create an API key under Developers with the service.catalog.manage scope. Sandbox keys start with sk_test_. Prices are in pence (or cents), so 2900 is 29.00.
curl -X POST https://app.softsolz.uk/api/v1/services/catalog/catalog/products \
-H "Authorization: Bearer sk_test_your_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Test plan",
"kind": "subscription",
"billing_interval": "month",
"unit_price_cents": 2900,
"currency": "GBP"
}'
A reply with the new product and "active": true means it worked, and the product appears under Products. The API can also read, change, retire and delete products, start, pause, resume and end subscriptions, create and retire discount codes, and read invoices. Create and change calls refuse fields they do not know and values that are out of range instead of changing them. Full details: Add a product.
If something goes wrong
| What you see | What it means |
|---|---|
| An invoice shows Payment late | The charge did not go through. Stripe may not be connected (Connect a Stripe account before charging a subscription.), not finished (Finish Stripe onboarding before charging a subscription.), or there is no card on file for the customer (No saved card for this customer.). Collect the payment another way. |
A subscription needs a billing interval... (code INVALID_INTERVAL) | You chose Subscription without saying how often it bills. Pick a value under Bills every. |
A product with that SKU already exists. (code SKU_EXISTS) | Each SKU must be unique. Use a different one, or leave it empty. |
| You have reached your free plan limit of 20 products... | The free plan allows 20 products and 20 subscriptions. Retire products you no longer sell, or choose a paid plan under Billing. |