subscription.deactivated
Overview of the subscription.deactivated webhook
When a subscription.deactivated
event is triggered, FastSpring sends a webhook payload containing details about the deactivated subscription. This webhook only fires when a subscription deactivates. This occurs at the end of the billing period following a cancellation.
If webhook expansion is enabled, the payload includes full account and product objects. Otherwise, the payload includes only the corresponding IDs.
This page provides:
- A full sample payload showing a populated
subscription.deactivated
webhook - A detailed table listing every payload property, including name, type, and description
- Notes on field behavior, including how to detect trials and what's included when webhook expansion is enabled
Browse the table sections below or use the quick links to jump to a specific group of fields.
Tip: Not all fields are always included. Refer to the Payload properties table to understand when a field appears.
Webhook payload example (expansion enabled)
When a subscription.deactivated
event is triggered, the webhook sends the following JSON payload:
{
"id": "subSCR1pt10nAbc123-456XYZ",
"quote": "QUOT1234ABC5678XYZ",
"subscription": "subSCR1pt10nAbc123-456XYZ",
"active": false,
"state": "deactivated",
"changed": 1751328000000,
"changedValue": 1751328000000,
"changedInSeconds": 1751328000,
"changedDisplay": "7/31/25",
"live": true,
"currency": "USD",
"account": {
"id": "acctAbCdEfG123-XyZ456",
"account": "acctAbCdEfG123-XyZ456",
"contact": {
"first": "John",
"last": "Doe",
"email": "[email protected]",
"company": "Example Corp",
"phone": "+1 5550001000"
},
"language": "en",
"country": "US",
"lookup": {
"global": "acctPublicID789_XYZ"
},
"url": "https://examplestore.test.onfastspring.com/account"
},
"product": {
"product": "example-subscription-annual",
"parent": "example-parent-product",
"display": {
"en": "Example Subscription - Annual"
},
"description": {
"summary": {
"en": "This is the summary description for Example Subscription - Annual."
},
"action": {
"en": "Buy Now"
},
"full": {
"en": "This is the long description for Example Subscription - Annual."
}
},
"image": "https://cdn.example.com/images/subscription-annual.png",
"offers": [
{
"type": "addon",
"display": {
"en": "Extended Support"
},
"items": ["example-addon-product"]
}
],
"fulfillments": {
"example-subscription-annual_file_1": {
"fulfillment": "example-subscription-annual_file_1",
"name": "File Download (installer.exe)",
"applicability": "NON_REBILL_ONLY",
"display": {
"en": "Download Installer"
},
"url": "https://cdn.example.com/files/installer.exe",
"size": 24576,
"behavior": "PREFER_EXPLICIT",
"previous": []
}
},
"format": "digital",
"pricing": {
"interval": "year",
"intervalLength": 1,
"intervalCount": 1,
"quantityBehavior": "allow",
"quantityDefault": 1,
"price": {
"USD": 100
},
"dateLimitsEnabled": false,
"setupFee": {
"price": {
"USD": 10
},
"title": {
"en": "One-time Setup Fee"
}
},
"reminderNotification": {
"enabled": true,
"interval": "week",
"intervalLength": 1
},
"overdueNotification": {
"enabled": true,
"interval": "week",
"intervalLength": 1,
"amount": 4
},
"cancellation": {
"interval": "week",
"intervalLength": 1
}
}
},
"sku": "sub-annual-001",
"display": "Example Subscription - Annual",
"quantity": 1,
"adhoc": false,
"autoRenew": true,
"price": 100,
"priceDisplay": "$100.00",
"priceInPayoutCurrency": 100,
"priceInPayoutCurrencyDisplay": "$100.00",
"discount": 0,
"discountDisplay": "$0.00",
"discountInPayoutCurrency": 0,
"discountInPayoutCurrencyDisplay": "$0.00",
"subtotal": 110,
"subtotalDisplay": "$110.00",
"subtotalInPayoutCurrency": 110,
"subtotalInPayoutCurrencyDisplay": "$110.00",
"next": 1782864000000,
"nextValue": 1782864000000,
"nextInSeconds": 1782864000,
"nextDisplay": "7/31/26",
"end": 1814486400000,
"endValue": 1814486400000,
"endInSeconds": 1814486400,
"endDisplay": "7/31/27",
"canceledDate": 1814486400000,
"canceledDateValue": 1814486400000,
"canceledDateInSeconds": 1814486400,
"canceledDateDisplay": "7/31/27",
"deactivationDate": 1814572800000,
"deactivationDateValue": 1814572800000,
"deactivationDateInSeconds": 1814572800,
"deactivationDateDisplay": "8/1/27",
"sequence": 1,
"periods": 12,
"remainingPeriods": 11,
"begin": 1751328000000,
"beginValue": 1751328000000,
"beginInSeconds": 1751328000,
"beginDisplay": "7/31/25",
"intervalUnit": "year",
"intervalLength": 1,
"nextChargeCurrency": "USD",
"nextChargeDate": 1782864000000,
"nextChargeDateValue": 1782864000000,
"nextChargeDateInSeconds": 1782864000,
"nextChargeDateDisplay": "7/31/26",
"nextChargePreTax": 110,
"nextChargePreTaxDisplay": "$110.00",
"nextChargePreTaxInPayoutCurrency": 110,
"nextChargePreTaxInPayoutCurrencyDisplay": "$110.00",
"nextChargeTotal": 110,
"nextChargeTotalDisplay": "$110.00",
"nextChargeTotalInPayoutCurrency": 110,
"nextChargeTotalInPayoutCurrencyDisplay": "$110.00",
"nextNotificationType": "PAYMENT_REMINDER",
"nextNotificationDate": 1782259200000,
"nextNotificationDateValue": 1782259200000,
"nextNotificationDateInSeconds": 1782259200,
"nextNotificationDateDisplay": "7/25/26",
"paymentReminder": {
"intervalUnit": "week",
"intervalLength": 1
},
"paymentOverdue": {
"intervalUnit": "week",
"intervalLength": 1,
"total": 4,
"sent": 0
},
"cancellationSetting": {
"cancellation": "AFTER_LAST_NOTIFICATION",
"intervalUnit": "week",
"intervalLength": 1
},
"addons": [
{
"product": "example-addon-product",
"sku": "addon-001",
"display": "Example Add-on Product",
"quantity": 1,
"price": 10,
"priceDisplay": "$10.00",
"priceInPayoutCurrency": 10,
"priceInPayoutCurrencyDisplay": "$10.00",
"discount": 0,
"discountDisplay": "$0.00",
"discountInPayoutCurrency": 0,
"discountInPayoutCurrencyDisplay": "$0.00",
"subtotal": 10,
"subtotalDisplay": "$10.00",
"subtotalInPayoutCurrency": 10,
"subtotalInPayoutCurrencyDisplay": "$10.00",
"discounts": []
}
],
"setupFee": {
"price": {
"USD": 10
},
"title": {
"en": "One-time Setup Fee"
}
},
"fulfillments": {
"example-subscription-annual_file_1": [
{
"display": "installer.exe",
"size": 24576,
"file": "https://cdn.example.com/files/installer.exe",
"type": "file"
}
]
},
"instructions": [
{
"product": "example-subscription-annual",
"type": "regular",
"periodStartDate": 1751328000000,
"periodStartDateValue": 1751328000000,
"periodStartDateInSeconds": 1751328000,
"periodStartDateDisplay": "7/31/25",
"periodEndDate": 1782864000000,
"periodEndDateValue": 1782864000000,
"periodEndDateInSeconds": 1782864000,
"periodEndDateDisplay": "7/31/26",
"intervalUnit": "year",
"intervalLength": 1,
"discountPercent": 0,
"discountPercentValue": 0,
"discountPercentDisplay": "0%",
"discountTotal": 0,
"discountTotalDisplay": "$0.00",
"discountTotalInPayoutCurrency": 0,
"discountTotalInPayoutCurrencyDisplay": "$0.00",
"unitDiscount": 0,
"unitDiscountDisplay": "$0.00",
"unitDiscountInPayoutCurrency": 0,
"unitDiscountInPayoutCurrencyDisplay": "$0.00",
"price": 100,
"priceDisplay": "$100.00",
"priceInPayoutCurrency": 100,
"priceInPayoutCurrencyDisplay": "$100.00",
"priceTotal": 100,
"priceTotalDisplay": "$100.00",
"priceTotalInPayoutCurrency": 100,
"priceTotalInPayoutCurrencyDisplay": "$100.00",
"unitPrice": 100,
"unitPriceDisplay": "$100.00",
"unitPriceInPayoutCurrency": 100,
"unitPriceInPayoutCurrencyDisplay": "$100.00",
"total": 100,
"totalDisplay": "$100.00",
"totalInPayoutCurrency": 100,
"totalInPayoutCurrencyDisplay": "$100.00"
}
]
}
Payload properties
The payload properties table outlines each property in the subscription.deactivated
event JSON payload, specifying their name, data type, and description.
Navigate this webhook
Jump to a specific section of the subscription.deactivated
table using the links below:
Name | Type | Description |
---|---|---|
Subscription Metadata Back to top ↑ | ||
id | string | Unique identifier for the subscription instance. |
quote | string | Quote ID associated with the original order, if applicable. |
subscription | string | Subscription ID (backward compatibility). Matches the id field. |
active | boolean | Indicates whether the subscription is active. true if active; false if deactivated. |
state | string | Current subscription state. Example values: active , overdue , deactivated , trial , canceled . |
isSubscriptionEligibleForPauseByBuyer | boolean | true if the customer is allowed to pause the subscription from their account management portal. |
isPauseScheduled | boolean | true if a pause has been scheduled and will take effect on the next rebill date. |
Timestamps Back to top ↑ | ||
changed | integer | Timestamp (in milliseconds) of the last order update. |
changedValue | integer | Duplicate of order.changed for backward compatibility. |
changedInSeconds | integer | Timestamp (in seconds) of the last order update. |
changedDisplay | string | Formatted display string for the last order update. |
changedDisplayISO8601 | string | ISO 8601 formatted timestamp for the last order update. |
changedDisplayEmailEnhancements | string | Email-enhanced display for the last order update. |
changedDisplayEmailEnhancementsWithTime | string | Email-enhanced display with time for the last order update. |
Subscription Settings Back to top ↑ | ||
live | boolean | true indicates a live order. false indicates a test order. |
currency | string | 3-letter ISO code representing the currency of the subscription. |
declineReason | string | Code or message explaining why an operation (for example, a pause or rebill) was declined. |
Account Object Back to top ↑ | ||
account | object | Customer account object. Contains ID, contact info, language, country, and account lookup details. |
account.id | string | Unique ID for the customer account. |
account.account | string | Duplicate of account.id for backward compatibility. |
account.contact | object | Contact details for the account. |
account.contact.first | string | First name of the account contact. |
account.contact.last | string | Last name of the account contact. |
account.contact.email | string | Email address of the account contact. |
account.contact.company | string | Company name of the account contact, if provided. |
account.contact.phone | string | Phone number of the account contact, if provided. |
account.contact.subscribed | boolean |
true if the account contact is subscribed to updates; otherwise false .
|
account.address | object | Address details for the account. |
account.address.address line 1 | string | Primary street address line. |
account.address.address line 2 | string | Secondary street address line. |
account.address.city | string | City of the account address. |
account.address.country | string | 2-letter ISO country code for the address. |
account.address.postal code | string | Postal or ZIP code of the address. |
account.address.region | string | Region (state/province) for the address. |
account.address.region custom | string | Custom region name, if not standard. |
account.address.company | string | Company name associated with this address, if provided. |
account.language | string | 2-letter ISO code of the account’s preferred language. |
account.country | string | 2-letter ISO country code of the account’s location. |
account.lookup | object | Lookup identifiers for the account. |
account.lookup.global | string | Public account ID used in customer-facing portals. |
account.url | string | URL to the account management page. |
Product Object Back to top ↑ | ||
product | object | Product object associated with the subscription. Includes product details, pricing, and fulfillment metadata. |
product.product | string | Product path or ID of the subscription product. |
product.parent | string | ID of the parent product, if the subscription is part of a bundled or related set. |
product.display.en | string | Localized display name of the product in English. |
product.description.summary.en | string | Short summary description of the product in English. |
product.description.action.en | string | Call-to-action text for the product (e.g., “Buy Now”), localized in English. |
product.description.full.en | string | Long-form description of the product in English. |
product.image | string | URL to the main product image used in checkout and customer portals. |
product.sku | string | Internal stock-keeping unit (SKU) identifier for the product. |
product.visibility | string | Indicates whether a product is shown in the public catalog ( public ) or hidden from buyers ( private ). |
product.quotable | boolean | Indicates whether this product can be included in seller-generated quotes ( true ) or not ( false ). |
product.offers | array | List of add-on offers related to the product. |
product.offers.type | string | Type of offer (e.g., addon ). |
product.offers.display.en | string | Localized name of the offer in English. |
product.offers.items | array | List of product IDs included in the offer. |
product.fulfillments | object | Object containing one or more fulfillment items keyed by dynamic IDs. |
product.fulfillments.fulfillment | string | Unique identifier for the fulfillment item. |
product.fulfillments.name | string | Name or label of the fulfillment (e.g., "File Download"). |
product.fulfillments.applicability | string | Determines when the fulfillment applies. Example: NON_REBILL_ONLY . |
product.format | string | Format of the product. Example: digital . |
product.pricing.interval | string | Time unit for the billing interval. Example values: month , year . |
product.pricing.intervalLength | integer | Number of units per billing interval. Example: 1 for annual or monthly billing. |
product.pricing.intervalCount | integer | Total number of billing intervals for the subscription. Optional. |
product.pricing.quantityBehavior | string | Indicates how quantity is handled. Example: allow . |
product.pricing.quantityDefault | integer | Default quantity value for the product when added to the cart. |
product.pricing.price.USD | number | Product price in USD. |
product.pricing.dateLimitsEnabled | boolean | Indicates whether there are time-based restrictions on pricing availability. |
product.pricing.cancellation | object | Settings that control when to cancel the subscription after failed rebills. |
product.pricing.cancellation.interval | string | Time unit used with intervalLength to determine when to cancel the subscription. Example: week . |
product.pricing.cancellation.intervalLength | integer | Number of interval units after the cancellation condition is met. |
Subscription Details (Root-level) Back to top ↑ | ||
sku | string | Internal SKU for the subscription product. |
display | string | Display name of the subscription product. |
quantity | integer | Quantity of the subscription product in the order. |
adhoc | boolean | true for managed subscriptions; false for standard subscriptions. |
autoRenew | boolean | true for automatic subscriptions; false for manual renewal subscriptions. |
Pricing Back to top ↑ | ||
price | number | Base price of the subscription product. |
priceDisplay | string | Base price formatted for display (e.g., $100.00 ). |
priceInPayoutCurrency | number | Base price converted to your FastSpring disbursement currency. |
priceInPayoutCurrencyDisplay | string | Formatted version of priceInPayoutCurrency . |
discount | number | Total discount amount applied to the subscription. |
discountDisplay | string | Formatted discount amount (e.g., $0.00 ). |
discountInPayoutCurrency | number | Discount amount in your payout currency. |
discountInPayoutCurrencyDisplay | string | Formatted version of discountInPayoutCurrency . |
subtotal | number | Subtotal amount, including price and setup fees, before taxes. |
subtotalDisplay | string | Formatted version of the subtotal. |
subtotalInPayoutCurrency | number | Subtotal amount in your payout currency. |
subtotalInPayoutCurrencyDisplay | string | Formatted subtotal in your payout currency. |
Rebill and Expiration Back to top ↑ | ||
next | integer | Timestamp (in milliseconds) of the next scheduled rebill. |
nextValue | integer | Same as next . Included for backward compatibility. |
nextInSeconds | integer | Next scheduled rebill timestamp, in seconds. |
nextDisplay | string | Formatted date of the next scheduled rebill. |
end | integer | Timestamp (in milliseconds) of the subscription end date. |
endValue | integer | Same as end . Included for backward compatibility. |
endInSeconds | integer | End date of the subscription, in seconds. |
endDisplay | string | Formatted display of the subscription’s end date. |
Cancellation and Deactivation Back to top ↑ | ||
canceledDate | integer | Timestamp (in milliseconds) when the subscription was canceled. |
canceledDateValue | integer | Same as canceledDate . Included for backward compatibility. |
canceledDateInSeconds | integer | Timestamp in seconds when the subscription was canceled. |
canceledDateDisplay | string | Formatted display of the cancellation date. |
deactivationDate | integer | Timestamp (in milliseconds) when the subscription was deactivated. |
deactivationDateValue | integer | Same as deactivationDate . Included for backward compatibility. |
deactivationDateInSeconds | integer | Deactivation timestamp, in seconds. |
deactivationDateDisplay | string | Formatted display of the subscription's deactivation date. |
deactivationDateDisplayISO8601 | string | ISO 8601 formatted display of the subscription's deactivation date. |
Billing Schedule Back to top ↑ | ||
sequence | integer | Current billing period number for the subscription. |
periods | integer | Total number of expected billing periods. |
remainingPeriods | integer | Number of rebills remaining before expiration. |
begin | integer | Activation date timestamp in milliseconds. |
beginValue | integer | Same as begin . Included for backward compatibility. |
beginInSeconds | integer | Activation date timestamp in seconds. |
beginDisplay | string | Formatted activation date. |
intervalUnit | string | Time unit for rebilling. Example values: month , year , adhoc . |
intervalLength | integer | Number of interval units per billing cycle. |
intervalLengthGtOne | boolean | Indicates if the interval length is greater than one. |
cancellationSetting | object | Rules for canceling a subscription after failed payments or overdue notices. |
cancellationSetting.cancellation | string | Trigger for cancellation. Example: AFTER_LAST_NOTIFICATION . |
cancellationSetting.intervalUnit | string | Time unit used with the cancellation trigger. |
cancellationSetting.intervalLength | integer | Delay before cancellation occurs, in intervalUnits . |
Fulfillments Object Back to top ↑ | ||
Note: Each entry in the fulfillments object is keyed by a dynamic fulfillment ID (e.g. example-subscription-file ). The fields below describe the structure of each fulfillment item.
|
||
fulfillments.display | string | Display name of the downloadable file or fulfillment action. |
fulfillments.size | integer | File size in bytes. Applies when the fulfillment type is file . |
fulfillments.file | string | Secure URL for downloading the fulfillment file. |
fulfillments.type | string | Fulfillment type. Example values: file , license . |
Instructions Array Back to top ↑ | ||
Note: The instructions array describes the billing behavior for each rebill period. It includes pricing, discounts, and duration for each step in the subscription lifecycle.
|
||
instructions | array | Describes the billing logic and pricing terms for each rebill period. |
instructions.product | string | Product ID or path for the subscription associated with this billing period. |
instructions.type | string | Type of instructions. A subscription may have more than one instruction object when applicable:
|
instructions.trialType | string | The type of trial that was signed up for. Options:
|
instructions.periodStartDate | integer | Start date of the instruction period, in milliseconds. |
instructions.periodStartDateValue | integer | Same as periodStartDate . Included for backward compatibility. |
instructions.periodStartDateInSeconds | integer | Start date of the instruction period, in seconds. |
instructions.periodStartDateDisplay | string | Formatted display of the instruction period start date. |
instructions.periodEndDate | integer | End date of the instruction period, in milliseconds. |
instructions.periodEndDateValue | integer | Same as periodEndDate . Included for backward compatibility. |
instructions.periodEndDateInSeconds | integer | End date of the instruction period, in seconds. |
instructions.periodEndDateDisplay | string | Formatted display of the instruction period end date. |
instructions.intervalUnit | string | Time unit for the billing interval. Example: adhoc , day , week , month , year . |
instructions.intervalLength | integer | Length of the billing interval in intervalUnit units. |
instructions.discountPercent | number | Percentage discount applied during the period. |
instructions.discountPercentValue | number | Raw value of the discount percentage. Example: 0 . |
instructions.discountPercentDisplay | string | Formatted display of the discount percentage. |
instructions.discountTotal | number | Total discount applied during the period. |
instructions.discountTotalDisplay | string | Formatted display of the total discount. |
instructions.discountTotalInPayoutCurrency | number | Total discount in your payout currency. |
instructions.discountTotalInPayoutCurrencyDisplay | string | Formatted discount total in payout currency. |
instructions.unitDiscount | number | Discount applied to each unit. |
instructions.unitDiscountDisplay | string | Formatted display of the unit discount. |
instructions.unitDiscountInPayoutCurrency | number | Unit discount in your payout currency. |
instructions.unitDiscountInPayoutCurrencyDisplay | string | Formatted unit discount in payout currency. |
instructions.price | number | Base price of the period before discounts. |
instructions.priceDisplay | string | Formatted display of the base price. |
instructions.priceInPayoutCurrency | number | Base price in payout currency. |
instructions.priceInPayoutCurrencyDisplay | string | Formatted base price in payout currency. |
instructions.priceTotal | number | Total price after discount and before tax. |
instructions.priceTotalDisplay | string | Formatted total price display. |
instructions.priceTotalInPayoutCurrency | number | Total price in your payout currency. |
instructions.priceTotalInPayoutCurrencyDisplay | string | Formatted total price in payout currency. |
instructions.unitPrice | number | Price per unit after discount. |
instructions.unitPriceDisplay | string | Formatted display of the unit price. |
instructions.unitPriceInPayoutCurrency | number | Unit price in payout currency. |
instructions.unitPriceInPayoutCurrencyDisplay | string | Formatted unit price in payout currency. |
instructions.total | number | Total charge amount for the period. |
instructions.totalDisplay | string | Formatted total charge display. |
instructions.totalInPayoutCurrency | number | Total charge amount in payout currency. |
instructions.totalInPayoutCurrencyDisplay | string | Formatted total charge in payout currency. |
Back to top ↑ |