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 Premium or Pro.
  • 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:

  • premium
  • premium-access
  • pro
  • members_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:

  1. Add the onsite script to your site.
  2. Use the tier access key in ezsubscriptions.hasAccess(...).
  3. Use the offer key in ezsubscriptions.showPaywall({ offer: "offer-key" }).
  4. Add paywalled-content SEO markup to gated articles.
  5. Verify checkout as a new visitor.