Subscription Status Webhooks

Receive real-time updates about subscription lifecycle events

The Subscription Status Webhook notifies your server whenever a subscriber’s status changes, including new subscriptions, renewals, grace transitions, cancellations, reactivations, and quantity/package updates.

Use this webhook to keep your internal user access logic, CRM, analytics systems, and billing dashboards fully synchronized with Zotlo lifecycle events.

When This Is Triggered

You will receive a callback when any of the following events occur:

Event Type
Description

newSubscriber

A new subscription has been created (trial or paid)

renewal

A subscription has successfully renewed

activeToGrace

Renewal failed → subscriber moved to grace period

graceToActive

A retry succeeded → subscriber returned to active

graceToPassive

All retries failed → subscription became passive

cancel

Subscription canceled by user, merchant, or system

reactivate

A canceled subscription was reactivated

package_update

The subscriber upgraded or downgraded their plan

Webhook Structure

Every Subscription Status webhook contains two main sections:

  • queue → event metadata

  • parameters → full subscription profile and changes

Example Payload

Field Reference

queue

Metadata describing the event:

Field
Description

queue.type

Always SubscriberUpdate

queue.eventType

Type of subscription event (renewal, cancel, newSubscriber, etc.)

queue.requestID

Unique identifier for this webhook call

queue.createDate

Timestamp of the event

queue.appId

ID of the project where the transaction occurred

parameters.profile

Current subscription profile and lifecycle state:

Field
Description

status

Current status → active, grace, or passive

realStatus

The true state (canceled users return passive immediately even if cycle not ended)

subscriptionType

trial or paid

subscriberId

Unique identifier sent during purchase (email or phone)

subscriptionId

Internal Zotlo subscription record ID

startDate

Subscription start date

expireDate

Access expiration date

renewalDate

Scheduled next billing attempt

package

Current packageId

originalTransactionId

First purchase transactionId

lastTransactionId

Latest successful payment transactionId

country

Subscriber’s country

language

Subscriber’s preferred language

cancellation

Cancellation details if subscription was canceled

quantity

Current billable quantity

pendingQuantity

Quantity change that will apply on next renewal

customParameters

Custom metadata sent during purchase

parameters.package

Information about the package currently active or last used.

Field
Description

packageId

ID of the package

price

Base price

currency

Currency

packageType

subscription / one-time

name

Display name

parameters.newPackage

Returned when a downgrade has occurred. null if no plan change happened.

parameters.card

Masked card details, if a card is used.

Field
Description

cardNumber

Masked card

expireDate

Expiry date

tokenId

Tokenized card ID

parameters.customer

Customer details (if applicable). May return null.

parameters.package_update

Indicates whether this event was triggered after a plan change:

  • 1 → package was updated

  • 0 → no change

How to Use This Webhook

Typical use cases:

  • Update subscription status in your backend

  • Grant or revoke access based on status or realStatus

  • Trigger email notifications (trial ending, renewal success, cancellation)

  • Update CRM / marketing automation

  • Sync billing data to analytics systems

  • Automate upgrade/downgrade flows

Logic for Access Control

Use realStatus for determining true access logic when cancellations are involved:

  • status = active but realStatus = passive → user canceled; access decision depends on your rules

  • status = grace → payment failed; retry active; your app decides access

  • status = passive → subscription ended

Last updated