Create and sell an offer
An offer is one way to sell one product. The product says what the access is; the offer says how it is sold. One product usually has several offers, priced and pitched differently.
You need the catalog write permission (the Owner, Admin and Developer roles). Every change here edits the draft and reaches checkout after the next deploy. Audience is the exception: decisions read it as saved.
Create an offer
Section titled “Create an offer”- Create the product first: see Set up a product.
- Open Revenue › Catalog › Offers and select New offer.
- Fill in the form:
- Name: what staff and your page call it, up to 200 characters.
- Code: your own offer code, kept exactly as typed. Letters, digits, dots, hyphens and underscores, up to 128
characters. The offer’s id is made from it:
ofr_, then the code in lower case with each run of other characters replaced by_, and any_left at its start or end dropped.pro-annualandpro-annual.both becomeofr_pro_annual. - Access set: the product this offer sells.
- Family and Audience: optional, your own words. Audience says who the offer is sold to. A user’s
user.membership_typefact is the audience of the offer behind their membership grant.
- Select Create. The offer is created not for sale and opens for editing.
Set how it is sold
Section titled “Set how it is sold”The offer’s screen has five sections: Merchandising, Access set, Discount, Prices and Upgrades.
In Merchandising:
| Field | What it changes |
|---|---|
| Purchasable | Whether checkout sells it now. Off by default. |
| Status | active or archived. An archived offer is not sold. |
| The offer is the trial | Marks a free trial offer. Checkout applies your organization’s trial reuse rule to it. |
| Trial days | The trial length your page shows. 1 to 365 whole days, or empty for none. |
| Renews | Whether it bills again at the end of a term, for your page to show. |
| Name, Code, Family | How staff and your page name it. |
| Audience | Who it is sold to. Read as user.membership_type. |
| Eligibility | Who may buy it, as free text. Empty means anyone. Checkout does not enforce it. |
| Import key | A second identifier, if you carry one. |
| Upgrade template | Which of your upgrade pages renders it. |
The free-text fields are your own vocabulary. An outcome’s ref field can return all of them except Import key,
together with the discount and the prices, so your page renders the offer from the decision.
Trial days and Renews are labels. What the buyer is charged, and when, is set by the price in your billing provider.
Check the price
Section titled “Check the price”Checkout charges the offer’s active price in your billing provider. The Prices section lists the billing provider prices mapped to the offer: Billing provider, Billing provider price, Currency, Amount, Interval, Introductory and Active. The amounts are read from your billing provider; EdgeKit never changes them.
EdgeKit maps your billing provider’s prices to your offers. The console shows the mapping and has no action that
changes it. An offer with no active price for your active billing provider cannot be bought: checkout answers
409 offer_not_priced.
When an offer has active prices in several currencies, checkout charges the first one. The buyer cannot choose the currency.
Add an introductory discount
Section titled “Add an introductory discount”An introductory discount takes a percentage or a fixed amount off the first few billing periods. Every buyer gets it; there is no code to enter. An offer has at most one.
- In Discount, choose percentage off or fixed amount off.
- For a percentage, enter Percent, up to four decimals. It applies to every currency.
100is free. - For a fixed amount, enter an amount for each currency the offer sells in, in minor units:
2000is 20.00. A fixed amount needs an active price, so the currency exists. - Enter Periods:
1is the first billing period,3the first three. A period is the price’s own interval. - Enter the Billing provider coupon code: the coupon in your billing provider that takes this discount off the charge. Create the coupon in your billing provider first, then copy its code exactly, casing included. EdgeKit names the coupon and never creates one.
- Save, then deploy.
What the buyer is charged comes from the coupon. Percent, amounts and periods are what your page shows, and the Introductory column under Prices is an estimate from them. Keep the coupon and the discount in step.
The deploy is refused when:
- a fixed discount has no amount, or no amount for a currency the offer sells in;
- an offer that is on sale has a discount and no billing provider coupon code.
An offer not on sale with a discount and no coupon code deploys with a warning. Checkout never charges full price
for a discount with no coupon code: it answers 409 offer_discount_unsupported.
To remove the discount, choose none and save.
Put it on sale
Section titled “Put it on sale”- Check that Prices lists an active price.
- In Merchandising, tick Purchasable, keep Status
active, and save. - Add an
offer_tokenfield naming the offer to an outcome in Revenue › Decision Engine › Outcomes. That outcome is where your page gets the offer token checkout needs. - Deploy from Delivery › Deployments › Versions.
The deploy is refused when an outcome’s offer_token field names an offer that is not purchasable or not active, so a
live outcome never offers something checkout would refuse. It is also refused when an offer on sale has active prices
from two billing providers.
Then sell it: see Sell an offer with checkout.
Stop selling an offer
Section titled “Stop selling an offer”Clear Purchasable, or set Status to archived, and deploy. Either one stops new purchases and revokes
nothing: every grant bought through the offer keeps working and keeps renewing with your billing provider.
First remove the offer from every outcome’s offer_token field, or the deploy is refused.
The console cannot delete an offer.
Change the product an offer sells
Section titled “Change the product an offer sells”In Access set, pick another product and select Assign. Purchases from the next deployment on get a grant for the new product. Grants already written keep the product they were written with.
Upgrade paths
Section titled “Upgrade paths”Upgrades shows both directions: the offers sold on top of this one (Upgrades to) and the offers that upgrade into it (Upgraded from). The console shows these paths and has no action that changes them.
Read the offer list
Section titled “Read the offer list”The list shows each offer’s Offer, Product, Audience, Sale, Trial and Prices. Filter by product, by whether it is on sale and by trial. Search by name, code or product, and sort by name, code or product.