Canceled Subscriptions

subscription.canceled

Overview of the subscription.canceled webhook

When a subscription.canceled event is triggered, FastSpring sends a webhook payload with details about the canceled subscription. This webhook typically fires when a customer cancels through their account management portal, when you select Deactivate at Next Period in the FastSpring app, or when you cancel via the API without including billingPeriod=0.

Webhook behavior

Fires when:

  • A customer cancels a subscription via the customer portal
  • You select Deactivate at Next Period in the FastSpring app
  • You cancel a subscription using the API and omit billingPeriod=0

Does not fire when:

  • You select Deactivate Now in the FastSpring app
  • You cancel a subscription using the API and include billingPeriod=0
  • You cancel a managed subscription

This page includes:

  • A full sample payload for the subscription.canceled webhook
  • A detailed table listing every payload property, including name, type, and description
  • Notes on when this webhook is triggered and which fields appear based on Webhook Expansion

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.canceled event is triggered, the webhook sends the following JSON payload:

{
  "id": "subSCR1pt10nAbc123-456XYZ",
  "quote": "QUOT1234ABC5678XYZ",
  "subscription": "subSCR1pt10nAbc123-456XYZ",
  "active": true,
  "state": "canceled",
  "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",
    "fulfillments": {
      "example-subscription-monthly_file_0": {
        "fulfillment": "example-subscription-monthly_file_0",
        "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": {
      "trial": 7,  
      "interval": "month",
      "intervalLength": 1,
      "intervalCount": 1,
      "quantityBehavior": "allow",
      "quantityDefault": 1,
      "price": {
        "USD": 100
      },
      "dateLimitsEnabled": false,
      "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",
  "trialReminder": {
    "intervalUnit": "day",
    "intervalLength": 3
  },
  "paymentReminder": {
    "intervalUnit": "week",
    "intervalLength": 1
  },
  "paymentOverdue": {
    "intervalUnit": "week",
    "intervalLength": 1,
    "total": 4,
    "sent": 0
  },
  "cancellationSetting": {
    "cancellation": "AFTER_LAST_NOTIFICATION",
    "intervalUnit": "week",
    "intervalLength": 1
  },
  "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"
    }
  ]
}

Navigate this webhook

The subscription.canceled webhook payload includes dozens of fields. Use the cards below to jump to a specific section of the property reference.

Payload properties

All fields below are included in the subscription.canceled webhook payload. Fields are grouped into categories for easier navigation.

NameTypeDescription
Subscription Metadata
idstringUnique identifier for the subscription instance
quotestringQuote ID associated with the originating order when applicable
subscriptionstringLegacy subscription identifier matching id for backward compatibility
activebooleanWhether the subscription is currently active
statestringCurrent subscription state such as active, overdue, deactivated, trial, or canceled
Timestamps
changedintegerTime of the most recent update in milliseconds since epoch
changedValueintegerDuplicate of changed for backward compatibility
changedInSecondsintegerTime of the most recent update in seconds since epoch
changedDisplaystringHuman-readable display of the most recent update time
Subscription Settings
livebooleanWhether the subscription was created in live mode
currencystringThree-letter ISO currency code for the subscription
Account Object
accountobjectCustomer account object containing ID, contact information, language, country, and account lookup values
account.idstringFastSpring-generated customer account ID
account.accountstringDuplicate of account.id for backward compatibility
account.contact.firststringFirst name of the customer
account.contact.laststringLast name of the customer
account.contact.emailstringEmail address of the customer
account.contact.companystringCompany name of the customer when provided
account.contact.phonestringPhone number of the customer when provided
account.languagestringTwo-letter ISO code for the customer’s preferred language
account.countrystringTwo-letter ISO country code for the customer
account.lookup.globalstringGlobally unique public ID used to look up the account in customer-facing portals
account.urlstringCustomer-facing account management URL
Product Object
product.pricing.trialstringTrial configuration for the product when applicable
productstringIdentifier or path of the subscription product
parentstringIdentifier of the parent product when applicable
display.enstringLocalized display name of the product in English
description.summary.enstringShort summary description of the product in English
description.action.enstringCall-to-action text for the product in English
description.full.enstringLong-form description of the product in English
imagestringURL of the product image
offersarrayList of add-on offers related to the product
offers.typestringType of offer such as addon
offers.display.enstringDisplay name of the offer in English
offers.itemsarrayIdentifiers of products included in the offer
fulfillmentsobjectOne or more fulfillment items keyed by dynamic identifiers
fulfillments.fulfillmentstringUnique identifier for the fulfillment item
fulfillments.namestringName or label of the fulfillment
fulfillments.applicabilitystringApplicability of the fulfillment such as NON_REBILL_ONLY
fulfillments.display.enstringBuyer-facing display name of the fulfillment in English
fulfillments.urlstringDownload URL for a file-based fulfillment
fulfillments.sizeintegerFile size in bytes for a downloadable fulfillment
fulfillments.behaviorstringDelivery behavior such as PREFER_EXPLICIT
fulfillments.previousarrayArray of previously used fulfillment items
formatstringProduct format such as digital
Pricing
intervalstringTime unit for the billing interval such as month or year
intervalLengthintegerNumber of units per billing interval
intervalCountintegerTotal number of billing intervals when applicable
quantityBehaviorstringHow quantity is handled for the subscription
quantityDefaultintegerDefault quantity value when the product is added
price.USDnumberPrice of the product in USD
dateLimitsEnabledbooleanWhether time-based restrictions are enabled for pricing
setupFee.price.USDnumberSetup fee amount in USD
setupFee.title.enstringLocalized display label for the setup fee
reminderNotification.enabledbooleanWhether renewal reminders are enabled
reminderNotification.intervalstringTime unit for the reminder interval
reminderNotification.intervalLengthintegerNumber of interval units before the charge when the reminder is sent
overdueNotification.enabledbooleanWhether overdue notifications are enabled
overdueNotification.intervalstringTime unit between overdue notifications
overdueNotification.intervalLengthintegerInterval length between overdue notifications
overdueNotification.amountintegerTotal number of overdue notifications to send
cancellation.intervalstringTime unit used with intervalLength to determine cancellation timing
cancellation.intervalLengthintegerNumber of interval units after which the subscription is canceled
Subscription Details (Root-level)
skustringInternal SKU for the subscription product
displaystringDisplay name of the subscription product
quantityintegerQuantity of the subscription product
adhocbooleanWhether the subscription is managed outside standard checkout flows
autoRenewbooleanWhether the subscription renews automatically
pricenumberBase price of the subscription product
priceDisplaystringFormatted base price
priceInPayoutCurrencynumberBase price converted to your disbursement currency
priceInPayoutCurrencyDisplaystringFormatted base price in your disbursement currency
discountnumberTotal discount amount applied to the subscription
discountDisplaystringFormatted discount amount
discountInPayoutCurrencynumberDiscount amount in your disbursement currency
discountInPayoutCurrencyDisplaystringFormatted discount amount in your disbursement currency
subtotalnumberSubtotal including price and setup fees before taxes
subtotalDisplaystringFormatted subtotal
subtotalInPayoutCurrencynumberSubtotal in your disbursement currency
subtotalInPayoutCurrencyDisplaystringFormatted subtotal in your disbursement currency
Rebill and Expiration
nextintegerTimestamp in milliseconds for the next scheduled rebill
nextValueintegerDuplicate of next for backward compatibility
nextInSecondsintegerTimestamp in seconds for the next scheduled rebill
nextDisplaystringFormatted date for the next scheduled rebill
endintegerTimestamp in milliseconds for the subscription end date
endValueintegerDuplicate of end for backward compatibility
endInSecondsintegerSubscription end date in seconds
endDisplaystringFormatted subscription end date
Next Charge Details
nextChargeCurrencystringThree-letter ISO currency code for the next scheduled charge
nextChargeDateintegerNext charge date timestamp in milliseconds
nextChargeDateValueintegerDuplicate of nextChargeDate for backward compatibility
nextChargeDateInSecondsintegerNext charge date timestamp in seconds
nextChargeDateDisplaystringFormatted next charge date
nextChargePreTaxnumberTotal pre-tax amount for the next scheduled charge
nextChargePreTaxDisplaystringFormatted pre-tax charge amount
nextChargePreTaxInPayoutCurrencynumberPre-tax charge amount in your disbursement currency
nextChargePreTaxInPayoutCurrencyDisplaystringFormatted pre-tax charge amount in your disbursement currency
nextChargeTotalnumberTotal charge amount for the next scheduled charge
nextChargeTotalDisplaystringFormatted total charge amount
nextChargeTotalInPayoutCurrencynumberTotal charge amount in your disbursement currency
nextChargeTotalInPayoutCurrencyDisplaystringFormatted total charge amount in your disbursement currency
Cancellation and Deactivation
canceledDateintegerTimestamp in milliseconds when the subscription was canceled
canceledDateValueintegerDuplicate of canceledDate for backward compatibility
canceledDateInSecondsintegerCancellation timestamp in seconds
canceledDateDisplaystringFormatted cancellation date
deactivationDateintegerTimestamp in milliseconds when the subscription was deactivated
deactivationDateValueintegerDuplicate of deactivationDate for backward compatibility
deactivationDateInSecondsintegerDeactivation timestamp in seconds
deactivationDateDisplaystringFormatted deactivation date
Billing Schedule
sequenceintegerCurrent billing period number
periodsintegerTotal number of expected billing periods
remainingPeriodsintegerNumber of rebills remaining before expiration
beginintegerActivation timestamp in milliseconds
beginValueintegerDuplicate of begin for backward compatibility
beginInSecondsintegerActivation timestamp in seconds
beginDisplaystringFormatted activation date
intervalUnitstringTime unit for rebills such as month or year
intervalLengthintegerNumber of units per billing cycle
Notification Settings
nextNotificationTypestringType of next scheduled notification such as PAYMENT_REMINDER
nextNotificationDateintegerNext notification timestamp in milliseconds
nextNotificationDateValueintegerDuplicate of nextNotificationDate for backward compatibility
nextNotificationDateInSecondsintegerNext notification timestamp in seconds
nextNotificationDateDisplaystringFormatted next notification date
trialReminderobjectConfiguration for a pre-trial-end reminder when a free trial is used
trialReminder.intervalUnitstringTime unit for the trial reminder interval
trialReminder.intervalLengthintegerNumber of interval units before trial end to send the reminder
paymentReminderobjectInterval settings for pre-billing reminders
paymentReminder.intervalUnitstringTime unit for reminder intervals such as week
paymentReminder.intervalLengthintegerNumber of time units before rebill to send a reminder
paymentOverdueobjectSettings for overdue payment notifications
paymentOverdue.intervalUnitstringTime unit between overdue reminders
paymentOverdue.intervalLengthintegerNumber of time units between overdue reminders
paymentOverdue.totalintegerTotal number of overdue reminders to send
paymentOverdue.sentintegerNumber of overdue reminders already sent
cancellationSettingobjectRules for automatic cancellation after reminders
cancellationSetting.cancellationstringCancellation trigger such as AFTER_LAST_NOTIFICATION
cancellationSetting.intervalUnitstringTime unit used to delay cancellation
cancellationSetting.intervalLengthintegerNumber of time units to wait before cancellation
Add-ons Array
addonsarrayList of optional add-on products included with the subscription
addons.productstringIdentifier of the add-on product
addons.skustringSKU of the add-on product
addons.displaystringDisplay name of the add-on product
addons.quantityintegerQuantity of the add-on product
addons.pricenumberUnit price of the add-on
addons.priceDisplaystringFormatted unit price of the add-on
addons.priceInPayoutCurrencynumberUnit price of the add-on in your disbursement currency
addons.priceInPayoutCurrencyDisplaystringFormatted unit price of the add-on in your disbursement currency
addons.discountnumberTotal discount applied to the add-on
addons.discountDisplaystringFormatted discount applied to the add-on
addons.discountInPayoutCurrencynumberDiscount applied to the add-on in your disbursement currency
addons.discountInPayoutCurrencyDisplaystringFormatted discount applied to the add-on in your disbursement currency
addons.subtotalnumberTotal cost of the add-on after discounts
addons.subtotalDisplaystringFormatted subtotal of the add-on
addons.subtotalInPayoutCurrencynumberSubtotal for the add-on in your disbursement currency
addons.subtotalInPayoutCurrencyDisplaystringFormatted subtotal for the add-on in your disbursement currency
addons.discountsarrayList of discount objects applied to the add-on
Setup Fee Object
setupFeeobjectObject containing setup fee information
setupFee.pricenumberSetup fee amount
setupFee.titlestringDisplay label for the setup fee
Fulfillments Object
fulfillments.licensestringLicense key or keys associated with the subscription
fulfillments.displaystringDisplay name of the fulfillment
fulfillments.sizeintegerFile size in bytes when applicable
fulfillments.filestringDownload URL for the fulfillment file
fulfillments.typestringType of fulfillment such as file or license
Instructions Array
instructionsarrayArray of billing instruction objects for each rebill period
instructions.productstringProduct identifier for this billing period
instructions.typestringInstruction type such as regular, trial, or discounted
instructions.trialTypestringTrial type for the period such as PAID, FREE_WITH_PAYMENT, or FREE_WITHOUT_PAYMENT
instructions.periodStartDateintegerInstruction period start timestamp in milliseconds
instructions.periodStartDateValueintegerDuplicate of instructions.periodStartDate for backward compatibility
instructions.periodStartDateInSecondsintegerInstruction period start timestamp in seconds
instructions.periodStartDateDisplaystringFormatted instruction period start date
instructions.periodEndDateintegerInstruction period end timestamp in milliseconds
instructions.periodEndDateValueintegerDuplicate of instructions.periodEndDate for backward compatibility
instructions.periodEndDateInSecondsintegerInstruction period end timestamp in seconds
instructions.periodEndDateDisplaystringFormatted instruction period end date
instructions.intervalUnitstringTime unit for the billing interval
instructions.intervalLengthintegerNumber of units per instruction interval
instructions.discountPercentnumberPercentage discount applied during the period
instructions.discountPercentValuenumberRaw discount percentage value
instructions.discountPercentDisplaystringFormatted discount percentage
instructions.discountTotalnumberTotal discount applied during the period
instructions.discountTotalDisplaystringFormatted total discount
instructions.discountTotalInPayoutCurrencynumberTotal discount in your disbursement currency
instructions.discountTotalInPayoutCurrencyDisplaystringFormatted discount total in your disbursement currency
instructions.unitDiscountnumberUnit-level discount amount
instructions.unitDiscountDisplaystringFormatted unit-level discount
instructions.unitDiscountInPayoutCurrencynumberUnit-level discount in your disbursement currency
instructions.unitDiscountInPayoutCurrencyDisplaystringFormatted unit-level discount in your disbursement currency
instructions.pricenumberBase price for the instruction period before discounts
instructions.priceDisplaystringFormatted base price for the period
instructions.priceInPayoutCurrencynumberBase price in your disbursement currency
instructions.priceInPayoutCurrencyDisplaystringFormatted base price in your disbursement currency
instructions.priceTotalnumberTotal price after discounts before tax
instructions.priceTotalDisplaystringFormatted total price after discounts
instructions.priceTotalInPayoutCurrencynumberTotal price after discounts in your disbursement currency
instructions.priceTotalInPayoutCurrencyDisplaystringFormatted total price after discounts in your disbursement currency
instructions.unitPricenumberPrice per unit after discounts
instructions.unitPriceDisplaystringFormatted price per unit after discounts
instructions.unitPriceInPayoutCurrencynumberUnit price after discounts in your disbursement currency
instructions.unitPriceInPayoutCurrencyDisplaystringFormatted unit price after discounts in your disbursement currency
instructions.totalnumberTotal charge for the instruction period before tax
instructions.totalDisplaystringFormatted total charge for the period
instructions.totalInPayoutCurrencynumberTotal charge in your disbursement currency
instructions.totalInPayoutCurrencyDisplaystringFormatted total charge in your disbursement currency