Software / SaaS subscriptions on Zenofy

Sell access to software or online services with recurring billing, a dedicated subscription list in your dashboard, and HTTPS webhooks so your systems can grant or revoke access automatically.

When you create a product, choose the Software / SaaS type. For subscriptions that renew after each payment, set the billing cycle to a recurring interval (weekly, monthly, quarterly, semiannual, or yearly). One-time billing is still possible for that product type but behaves like a single period without renewals.

On the product form you must provide an HTTPS webhook URL (and may set an optional shared secret). Zenofy POSTs JSON there when the subscription lifecycle changes so your app can create accounts, activate licenses, or sync billing. You can also set an optional sales or marketing page URL for your own funnel.

Customers use the same public checkout URL as any other product — for example https://pay.zenofy.io/p/YOUR_PRODUCT_ID — with the same optional query parameters described in the other tutorials (?lang=, ?currency=, coupons, UTMs, and so on).

SaaS webhook vs. Integrations → Webhook

The Webhook integration under Integrations notifies your server about order_paid, order_refunded, and order_cancelled with a line-item style payload. The SaaS subscription webhook is configured on the product itself (webhook URL field for Software / SaaS) and sends subscription.* events with subscription id, period dates, and renewal metadata. You may use both: one for ecommerce-style order handling, the other for entitlement management.

After a successful payment, buyers may see subscription details (plan period, reference id, renewal link) on the success page when the product is recurring Software / SaaS.

Renewals: send the customer back to the same product checkout link. They should pay using the same email address as the original subscription so the new payment extends the existing subscription period instead of creating a disjoint record.

In the Zenofy merchant app, open Catalog → SaaS Subscriptions to list every subscription for your products—filter by status or product, search by customer, and cancel a subscription from the list when your process allows it.

Statuses include PENDING, ACTIVE, SUSPENDED, CANCELED, and EXPIRED. Recurring SaaS products can optionally use “days after period end” thresholds to send subscription.suspended then subscription.expired when the second threshold is reached; otherwise lapse still becomes EXPIRED with subscription.expired when the billing period ends (no schedule).

Subscription statuses (summary)

statusMeaning (typical)
PENDINGCreated with the order; not yet fully active or awaiting payment completion
ACTIVEPeriod paid (or grace before suspend if configured on the recurring product)
SUSPENDEDConfigured recurring product: unpaid past the suspend-after-period-end threshold until expiry or renewal
CANCELEDCanceled manually (merchant/dashboard flow) — subscription.canceled
EXPIREDBilling period ended without renewal (subscription.expired), including after suspend when “expire after period end” days elapse without payment

Technical reference: JSON payloads and subscription.* event names → SaaS subscription webhooks (HTTP)

All tutorials