The rule
subscription.made_active fires only when a subscription changes status into active from a different status. It is a transition event, not a “this subscription is active” event. If the status was already active, or the subscription was created directly as trialing, nothing is sent.
It fires on these transitions
incompletetoactive– first successful payment on a checkout with no trialtrialingtoactive– the free trial ends and the first real payment succeedspast_duetoactive– a failed renewal is recoveredcanceledtoactive– a fully canceled subscription is restored via Resubscribe
It does not fire here
- Checkout on a price with a free trial – the subscription is born
trialing, so you only getsubscription.created - Cancel Plan using the default “at period end” behaviour – status stays
active, you getsubscription.set_to_cancel - Restore Plan on a subscription that was only set to cancel – status never left
active, you getsubscription.updated - Any renewal of an already active subscription – that is
subscription.renewed
Tested on this site
Every row below was run in test mode on this store and captured from the live webhook log. Numbers in brackets are the delivery IDs shown in the log further down.
| Scenario | Webhooks actually delivered | made_active |
|---|---|---|
| Checkout, monthly price, no trial | subscription.created [91]subscription.made_active [93] | YES |
| Checkout, annual price, 365 day free trial | subscription.created [100] (status trialing)nothing else | NO |
| Trial ended, subscription converts | subscription.updated [94]subscription.made_active [96] | YES |
| Cancel immediately, then Resubscribe | subscription.canceled [83]purchase.revoked [84]subscription.made_active [85, 87]purchase.invoked [88] | YES |
| Cancel Plan (default, at period end), then Restore Plan | subscription.set_to_cancel [97]subscription.updated [98] | NO |
Live webhook log
This reads the store’s own incoming webhook log. You need to be logged in to this site as an administrator. Rows containing made_active are highlighted.
| ID | Event | Status | Object | Received |
|---|
Auto-refreshes every 15 seconds while this page is open.
Reproduce it yourself
- Fire it. Buy Subscribe & Save Product and pick the Subscribe Monthly & Save option. This price has no trial, so you get
subscription.createdthensubscription.made_activewithin a couple of seconds. - Miss it with a trial. Buy a price that has a free trial. Only
subscription.createdarrives, with statustrialing. - Miss it with a soft cancel. Open the customer dashboard, cancel a plan (the default keeps it running until period end), then click Restore Plan. You get
set_to_cancelandupdated, nevermade_active. - Fire it again. Cancel a subscription immediately from the store admin so its status really becomes
canceled, then use Resubscribe. Nowmade_activearrives.
What to listen for instead
| If you want to know… | Subscribe to |
|---|---|
| A new subscription started, trial or not | subscription.created – then read status on the payload |
| Access should be granted or restored | purchase.created and purchase.invoked |
| Access should be removed | purchase.revoked |
| Someone asked to cancel at period end | subscription.set_to_cancel |
| Someone undid that cancellation | subscription.updated – check cancel_at_period_end |
| A subscription genuinely became active again | subscription.made_active |