Offers, Tiers, and Paid Access
An offer is the paid product visitors can buy. Two publisher-authored keys drive the onsite integration: the access key, which your site checks with ezsubscriptions.hasAccess(...), and the offer key, which your site passes to ezsubscriptions.showPaywall({ offer: "offer-key" }) to open checkout for a specific offer.
Publisher-Managed Offers 🔗
Publisher-managed offers are designed for sites that want direct control over the paid-content experience. You create the offer in Ezoic, then your site checks whether a visitor has the right access key and opens the matching offer when they do not.
Suppose you create an offer named Premium Membership with the offer key premium-plan, containing a Premium tier whose access key is premium-access. On your site, your article template checks access with ezsubscriptions.hasAccess("premium-access").
If the visitor has access, your site shows the subscriber-only content. If the visitor does not have access, your site calls ezsubscriptions.showPaywall({ offer: "premium-plan" }). That call opens Ezoic's pre-built paywall and checkout experience for the products in that offer.
Multiple Offers 🔗
You can create more than one offer on a site. Each offer has its own offer key, so your site can open whichever offer fits the page. For example, a site might sell a remove-ads offer site-wide and a separate poll-access offer on results pages, calling showPaywall({ offer }) with the matching key in each place.
Offers can share products and tiers, so the same access key can be granted by more than one offer.
Offer Keys 🔗
The offer key is the stable identifier your site passes to showPaywall({ offer }). Pick a key when you create the offer in your Ezoic dashboard.
Offer keys are:
- Domain-scoped and unique per site.
- Case-insensitive and stored lowercase.
- Limited to letters, numbers, hyphens, and underscores.
Examples: premium-plan, remove-ads, poll-access.
Avoid changing an offer key after your site is using it unless you also update the showPaywall({ offer }) calls.
Tiers 🔗
A tier is a subscription level inside an offer. Each tier has:
- A public name, such as
PremiumorPro. - A recurring price.
- An access key your site checks with
hasAccess(...).
The access key answers "does this visitor have access?"; the offer key answers "which offer should checkout sell?". They are independent: hasAccess takes the access key, showPaywall({ offer }) takes the offer key.
Access keys should be short, stable, and developer-friendly. Valid keys use letters, numbers, hyphens, and underscores. Examples:
premiumpremium-accesspromembers_only
Avoid changing an access key after your site is using it unless you also update the site code that checks it.
Example Offer Structures 🔗
Simple Premium Membership 🔗
- Offer name:
Premium Membership - Offer key:
premium-plan - Tier:
Premium - Access key:
premium-access - Price:
$9.99 / month
Use this when one paid level unlocks all subscriber-only content.
Two-Tier Membership 🔗
-
Offer key:
membership -
Tier:
Premium -
Access key:
premium -
Price:
$9.99 / month -
Tier:
Pro -
Access key:
pro -
Price:
$19.99 / month
Use this when different subscriber levels unlock different tools, sections, downloads, or article groups.
Donations Are Separate 🔗
Donations are a separate domain-level support option. They do not grant access keys and do not unlock subscriber-only content. Use Donations if you want readers to contribute without buying a subscription.
After Creating an Offer 🔗
After your offer is live:
- Add the onsite script to your site.
- Use the tier access key in
ezsubscriptions.hasAccess(...). - Use the offer key in
ezsubscriptions.showPaywall({ offer: "offer-key" }). - Add paywalled-content SEO markup to gated articles.
- Verify checkout as a new visitor.