Co-term Group Created

Event payload example and property overview for subscription.group.created

Webhook response payload example (expansion enabled)

When a subscription.group.created event is triggered, the webhook sends the following JSON payload:

{
  "cotermGroupId": "aB1c2deFGhIjKL3mn-opqR",
  "cotermGroupDisplayName": "Tech Services Monthly Plan",
  "cotermGroupPeriodStartDate": 1754044800000,
  "cotermGroupPeriodEndDate": 1756646400000,
  "cotermGroupPrimarySubscription": "sub-001",
  "cotermGroupStatus": "EXECUTED",
  "cotermGroupOrderId": "aBCDE12fGH3iJkL4mNOpq",
  "cotermGroupOrderReference": "ABC123456-7891-01112",
  "cotermNextChargeDate": 1756646400000,
  "cotermNextChargeTotal": 199.95,
  "cotermNextChargeTotalDisplay": "$199.95",
  "cotermGroupSize": 2,
  "currency": "USD",
  "changed": 1753526400000,
  "changedValue": 1753526400000,
  "changedInSeconds": 1753526400,
  "changedDisplay": "07/25/25",
  "changedDisplayISO8601": "2025-07-25",
  "nextChargeDate": 1756646400000,
  "nextChargeDateValue": 1756646400000,
  "nextChargeDateInSeconds": 1756646400,
  "nextChargeDateDisplay": "08/31/25",
  "nextChargeDateDisplayISO8601": "2025-08-31",
  "paymentOverdue": {
    "intervalUnit": "week",
    "intervalLength": 1,
    "total": 2,
    "sent": 0
  },
  "cancellationSetting": {
    "cancellation": "AFTER_LAST_NOTIFICATION",
    "intervalUnit": "week",
    "intervalLength": 1
  },
  "account": {
    "id": "abCdE1FGH2Hij3KLMnOpqR",
    "account": "abCdE1FGH2Hij3KLMnOpqR",
    "contact": {
      "first": "Jane",
      "last": "Doe",
      "email": "[email protected]",
      "company": "Company Inc.",
      "phone": "8001234567",
      "subscribed": true
    },
    "address": {
      "address line 1": "123 Business Rd",
      "address line 2": "Floor 4",
      "city": "Metropolis",
      "country": "US",
      "postal code": "12345",
      "region": "US-NY",
      "region custom": null,
      "company": "Company Inc."
    },
    "language": "en",
    "country": "US",
    "lookup": {
      "global": "lookup-001"
    },
    "url": "https://company.onfastspring.com/account"
  },
  "subscriptions": [
    {
      "id": "1abc2DE_FGhIjKLm3NoPQR",
      "active": true,
      "state": "active",
      "isSubscriptionEligibleForPauseByBuyer": false,
      "isPauseScheduled": false,
      "live": false,
      "currency": "USD",
      "product": "cloud-storage",
      "sku": "SKU-CS-101",
      "display": "Cloud Storage Service",
      "quantity": 1,
      "adhoc": false,
      "autoRenew": true,
      "price": 49.99,
      "discount": 0,
      "subtotal": 49.99,
      "end": null,
      "canceledDate": null,
      "deactivationDate": null,
      "sequence": 1,
      "periods": null,
      "remainingPeriods": null,
      "begin": 1754044800000,
      "intervalUnit": "month",
      "intervalUnitAbbreviation": "mo",
      "intervalLength": 1,
      "intervalLengthGtOne": false,
      "nextChargeCurrency": "USD",
      "nextChargeDate": 1756646400000,
      "nextChargePreTax": 44.99,
      "nextChargeTotal": 49.99,
      "taxExemptionData": null,
      "addons": [
        {
          "product": "data-backup",
          "sku": "SKU-DB-201",
          "display": "Data Backup",
          "quantity": 1,
          "price": 9.99,
          "discount": 0,
          "subtotal": 9.99,
          "subtotalDisplay": "$9.99",
          "discounts": []
        }
      ],
      "discounts": null,
      "fulfillments": {},
      "instructions": [
        {
          "product": "cloud-storage",
          "type": "regular",
          "periodStartDate": 1754044800000,
          "periodEndDate": null,
          "intervalUnit": "month",
          "intervalLength": 1,
          "discountDurationUnit": null,
          "discountDurationLength": null,
          "discountPercent": 0,
          "discountTotal": 0,
          "unitDiscount": 0,
          "price": 49.99,
          "priceTotal": 49.99,
          "unitPrice": 49.99,
          "total": 49.99,
          "totalWithTaxes": 49.99,
          "totalWithTaxesDisplay": "$49.99",
          "isNotTrial": true
        }
      ]
    },
    {
      "id": "2abc2DE_FGhIjKLm3NoPQR",
      "active": true,
      "state": "active",
      "isSubscriptionEligibleForPauseByBuyer": false,
      "isPauseScheduled": false,
      "live": false,
      "currency": "USD",
      "product": "data-analytics",
      "sku": "SKU-DA-102",
      "display": "Data Analytics Service",
      "quantity": 1,
      "adhoc": false,
      "autoRenew": true,
      "price": 79.99,
      "discount": 0,
      "subtotal": 79.99,
      "end": null,
      "canceledDate": null,
      "deactivationDate": null,
      "sequence": 1,
      "periods": null,
      "remainingPeriods": null,
      "begin": 1754044800000,
      "intervalUnit": "month",
      "intervalUnitAbbreviation": "mo",
      "intervalLength": 1,
      "intervalLengthGtOne": false,
      "nextChargeCurrency": "USD",
      "nextChargeDate": 1756646400000,
      "nextChargePreTax": 74.99,
      "nextChargeTotal": 79.99,
      "taxExemptionData": null,
      "addons": [
        {
          "product": "extended-support",
          "sku": "SKU-ES-202",
          "display": "Extended Support",
          "quantity": 1,
          "price": 14.99,
          "discount": 0,
          "subtotal": 14.99,
          "subtotalDisplay": "$14.99",
          "discounts": []
        }
      ],
      "discounts": null,
      "fulfillments": {},
      "instructions": [
        {
          "product": "data-analytics",
          "type": "regular",
          "periodStartDate": 1754044800000,
          "periodEndDate": null,
          "intervalUnit": "month",
          "intervalLength": 1,
          "discountDurationUnit": null,
          "discountDurationLength": null,
          "discountPercent": 0,
          "discountTotal": 0,
          "unitDiscount": 0,
          "price": 79.99,
          "priceTotal": 79.99,
          "unitPrice": 79.99,
          "total": 79.99,
          "totalWithTaxes": 79.99,
          "totalWithTaxesDisplay": "$79.99",
          "isNotTrial": true
        }
      ]
    }
  ]
}

Navigate this webhook

The subscription.group.created 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.group.created webhook payload. Fields are grouped into categories for easier navigation.

<tr id="coterm-group" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Co-term Group</a>
  </td>
</tr>

<tr><td>cotermGroupId</td><td>string</td><td>Unique identifier for the co-term group</td></tr>
<tr><td>cotermGroupDisplayName</td><td>string</td><td>Display name of the co-term group</td></tr>
<tr><td>cotermGroupPeriodStartDate</td><td>integer</td><td>Start of the current co-term period in milliseconds since epoch</td></tr>
<tr><td>cotermGroupPeriodEndDate</td><td>integer</td><td>End of the current co-term period in milliseconds since epoch</td></tr>
<tr><td>cotermGroupPrimarySubscription</td><td>string</td><td>ID of the primary subscription in the co-term group</td></tr>
<tr><td>cotermGroupStatus</td><td>string</td><td>Status of the co-term group (e.g., <code>EXECUTED</code>)</td></tr>
<tr><td>cotermGroupOrderId</td><td>string</td><td>Order ID associated with the co-term group</td></tr>
<tr><td>cotermGroupOrderReference</td><td>string</td><td>Order reference for the co-term group</td></tr>
<tr><td>cotermNextChargeDate</td><td>integer</td><td>Next charge date for the co-term group in milliseconds since epoch</td></tr>
<tr><td>cotermNextChargeTotal</td><td>number</td><td>Total amount for the next group charge</td></tr>
<tr><td>cotermNextChargeTotalDisplay</td><td>string</td><td>Formatted next group charge total</td></tr>
<tr><td>cotermGroupSize</td><td>integer</td><td>Number of subscriptions in the co-term group</td></tr>
<tr><td>currency</td><td>string</td><td>Three-letter ISO currency code</td></tr>


<tr id="changed-timestamps" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Changed Timestamps</a>
  </td>
</tr>

<tr><td>changed</td><td>integer</td><td>Last update timestamp in milliseconds</td></tr>
<tr><td>changedValue</td><td>integer</td><td>Duplicate of <code>changed</code> (milliseconds)</td></tr>
<tr><td>changedInSeconds</td><td>integer</td><td>Last update timestamp in seconds</td></tr>
<tr><td>changedDisplay</td><td>string</td><td>User-friendly display date of the last update</td></tr>
<tr><td>changedDisplayISO8601</td><td>string</td><td>ISO 8601 date of the last update</td></tr>


<tr id="next-charge" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Next Charge</a>
  </td>
</tr>

<tr><td>nextChargeDate</td><td>integer</td><td>Next charge date in milliseconds</td></tr>
<tr><td>nextChargeDateValue</td><td>integer</td><td>Duplicate of <code>nextChargeDate</code> (milliseconds)</td></tr>
<tr><td>nextChargeDateInSeconds</td><td>integer</td><td>Next charge date in seconds</td></tr>
<tr><td>nextChargeDateDisplay</td><td>string</td><td>User-friendly next charge date</td></tr>
<tr><td>nextChargeDateDisplayISO8601</td><td>string</td><td>ISO 8601 formatted next charge date</td></tr>


<tr id="payment-overdue" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Payment Overdue</a>
  </td>
</tr>

<tr><td>paymentOverdue.intervalUnit</td><td>string</td><td>Time unit for overdue notifications (e.g., <code>week</code>)</td></tr>
<tr><td>paymentOverdue.intervalLength</td><td>integer</td><td>Number of units before the first overdue notification is sent</td></tr>
<tr><td>paymentOverdue.total</td><td>integer</td><td>Total number of overdue notifications to send</td></tr>
<tr><td>paymentOverdue.sent</td><td>integer</td><td>Number of overdue notifications already sent</td></tr>


<tr id="cancellation-settings" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Cancellation Settings</a>
  </td>
</tr>

<tr><td>cancellationSetting.cancellation</td><td>string</td><td>Cancellation policy timing (e.g., <code>AFTER_LAST_NOTIFICATION</code>)</td></tr>
<tr><td>cancellationSetting.intervalUnit</td><td>string</td><td>Time unit for the cancellation interval</td></tr>
<tr><td>cancellationSetting.intervalLength</td><td>integer</td><td>Length of the cancellation interval in units</td></tr>


<tr id="account-object" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Account object</a>
  </td>
</tr>

<tr><td>account</td><td>object</td><td>Account object containing customer details</td></tr>
<tr><td>account.id</td><td>string</td><td>Unique FastSpring account ID</td></tr>
<tr><td>account.account</td><td>string</td><td>Duplicate of the account ID for compatibility</td></tr>
<tr><td>account.contact.first</td><td>string</td><td>Account contact first name</td></tr>
<tr><td>account.contact.last</td><td>string</td><td>Account contact last name</td></tr>
<tr><td>account.contact.email</td><td>string</td><td>Account contact email address</td></tr>
<tr><td>account.contact.company</td><td>string</td><td>Account contact company name</td></tr>
<tr><td>account.contact.phone</td><td>string</td><td>Account contact phone number</td></tr>
<tr><td>account.contact.subscribed</td><td>boolean</td><td>Whether the account contact is subscribed</td></tr>
<tr><td>account.address.address line 1</td><td>string</td><td>Primary street address line</td></tr>
<tr><td>account.address.address line 2</td><td>string</td><td>Secondary street address line</td></tr>
<tr><td>account.address.city</td><td>string</td><td>City</td></tr>
<tr><td>account.address.country</td><td>string</td><td>Two-letter ISO country code</td></tr>
<tr><td>account.address.postal code</td><td>string</td><td>Postal or ZIP code</td></tr>
<tr><td>account.address.region</td><td>string</td><td>Region code (e.g., <code>US-NY</code>)</td></tr>
<tr><td>account.address.region custom</td><td>string|null</td><td>Custom region text when applicable</td></tr>
<tr><td>account.address.company</td><td>string</td><td>Company associated with the address</td></tr>
<tr><td>account.language</td><td>string</td><td>Preferred language (two-letter ISO code)</td></tr>
<tr><td>account.country</td><td>string</td><td>Two-letter ISO country code</td></tr>
<tr><td>account.lookup.global</td><td>string</td><td>Globally unique public ID for lookup</td></tr>
<tr><td>account.url</td><td>string</td><td>Customer-facing account management URL</td></tr>


<tr id="subscriptions-array" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Subscriptions array</a>
  </td>
</tr>

<tr><td>subscriptions</td><td>array</td><td>List of subscriptions created in the co-term group</td></tr>
<tr><td>subscriptions.id</td><td>string</td><td>Subscription ID</td></tr>
<tr><td>subscriptions.active</td><td>boolean</td><td>Whether the subscription is active</td></tr>
<tr><td>subscriptions.state</td><td>string</td><td>Current subscription state (e.g., <code>active</code>)</td></tr>
<tr><td>subscriptions.isSubscriptionEligibleForPauseByBuyer</td><td>boolean</td><td>Whether the buyer can pause the subscription</td></tr>
<tr><td>subscriptions.isPauseScheduled</td><td>boolean</td><td>Whether a pause is scheduled</td></tr>
<tr><td>subscriptions.live</td><td>boolean</td><td>Whether the subscription is in live mode</td></tr>
<tr><td>subscriptions.currency</td><td>string</td><td>Three-letter ISO currency code</td></tr>
<tr><td>subscriptions.product</td><td>string</td><td>Product path or identifier</td></tr>
<tr><td>subscriptions.sku</td><td>string</td><td>SKU of the subscription product</td></tr>
<tr><td>subscriptions.display</td><td>string</td><td>Customer-facing product display name</td></tr>
<tr><td>subscriptions.quantity</td><td>integer</td><td>Quantity on the subscription</td></tr>
<tr><td>subscriptions.adhoc</td><td>boolean</td><td>Whether the subscription is ad-hoc</td></tr>
<tr><td>subscriptions.autoRenew</td><td>boolean</td><td>Whether auto-renew is enabled</td></tr>
<tr><td>subscriptions.price</td><td>number</td><td>Unit price for the subscription</td></tr>
<tr><td>subscriptions.discount</td><td>number</td><td>Discount amount applied</td></tr>
<tr><td>subscriptions.subtotal</td><td>number</td><td>Subtotal amount before tax</td></tr>
<tr><td>subscriptions.end</td><td>null|string</td><td>End date, when applicable</td></tr>
<tr><td>subscriptions.canceledDate</td><td>null|string</td><td>Cancellation date, when applicable</td></tr>
<tr><td>subscriptions.deactivationDate</td><td>null|string</td><td>Deactivation date, when applicable</td></tr>
<tr><td>subscriptions.sequence</td><td>integer</td><td>Sequence number for the billing period</td></tr>
<tr><td>subscriptions.periods</td><td>null|string</td><td>Total number of billing periods when fixed-term</td></tr>
<tr><td>subscriptions.remainingPeriods</td><td>null|string</td><td>Remaining number of billing periods</td></tr>
<tr><td>subscriptions.begin</td><td>integer</td><td>Activation timestamp in milliseconds</td></tr>
<tr><td>subscriptions.intervalUnit</td><td>string</td><td>Billing interval unit (e.g., <code>month</code>)</td></tr>
<tr><td>subscriptions.intervalUnitAbbreviation</td><td>string</td><td>Abbreviation of the interval unit (e.g., <code>mo</code>)</td></tr>
<tr><td>subscriptions.intervalLength</td><td>integer</td><td>Number of interval units per billing period</td></tr>
<tr><td>subscriptions.intervalLengthGtOne</td><td>boolean</td><td>Whether the interval length is greater than one</td></tr>
<tr><td>subscriptions.nextChargeCurrency</td><td>string</td><td>Currency of the next charge</td></tr>
<tr><td>subscriptions.nextChargeDate</td><td>integer</td><td>Next charge date in milliseconds</td></tr>
<tr><td>subscriptions.nextChargePreTax</td><td>number</td><td>Pre-tax amount for the next charge</td></tr>
<tr><td>subscriptions.nextChargeTotal</td><td>number</td><td>Total next charge amount</td></tr>
<tr><td>subscriptions.taxExemptionData</td><td>null|string</td><td>Tax exemption details when applicable</td></tr>
<tr><td>subscriptions.addons</td><td>array|null</td><td>Array of add-on items when present</td></tr>
<tr><td>subscriptions.discounts</td><td>null|array</td><td>Array of applied discount objects when present</td></tr>
<tr><td>subscriptions.fulfillments</td><td>object</td><td>Fulfillment details (object may be empty)</td></tr>


<tr id="subscriptions-addons" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Add-ons</a>
  </td>
</tr>

<tr><td>subscriptions.addons.product</td><td>string</td><td>Product path for the add-on</td></tr>
<tr><td>subscriptions.addons.sku</td><td>string</td><td>SKU for the add-on</td></tr>
<tr><td>subscriptions.addons.display</td><td>string</td><td>Add-on display name</td></tr>
<tr><td>subscriptions.addons.quantity</td><td>integer</td><td>Add-on quantity</td></tr>
<tr><td>subscriptions.addons.price</td><td>number</td><td>Unit price for the add-on</td></tr>
<tr><td>subscriptions.addons.discount</td><td>number</td><td>Discount amount applied to the add-on</td></tr>
<tr><td>subscriptions.addons.subtotal</td><td>number</td><td>Subtotal amount for the add-on</td></tr>
<tr><td>subscriptions.addons.subtotalDisplay</td><td>string</td><td>Formatted add-on subtotal</td></tr>
<tr><td>subscriptions.addons.discounts</td><td>array</td><td>Applied discount codes or objects for the add-on</td></tr>


<tr id="subscriptions-instructions" style={{ borderTop: "4px solid #ddd" }}>
  <td colSpan="3" style={{ paddingTop: "4px", fontWeight: "600" }}>
    <a href="#navigate-this-webhook">Instructions</a>
  </td>
</tr>

<tr><td>subscriptions.instructions</td><td>array</td><td>Pricing and timing instructions for each subscription period</td></tr>
<tr><td>subscriptions.instructions.product</td><td>string</td><td>Product path associated with the instruction</td></tr>
<tr><td>subscriptions.instructions.type</td><td>string</td><td>Instruction type (e.g., <code>regular</code>)</td></tr>
<tr><td>subscriptions.instructions.periodStartDate</td><td>integer</td><td>Start date of the instruction period in milliseconds</td></tr>
<tr><td>subscriptions.instructions.periodEndDate</td><td>null|integer</td><td>End date of the instruction period when present</td></tr>
<tr><td>subscriptions.instructions.intervalUnit</td><td>string</td><td>Billing interval unit for the instruction</td></tr>
<tr><td>subscriptions.instructions.intervalLength</td><td>integer</td><td>Number of interval units for the instruction period</td></tr>
<tr><td>subscriptions.instructions.discountDurationUnit</td><td>null|string</td><td>Unit for remaining discount duration, when applicable</td></tr>
<tr><td>subscriptions.instructions.discountDurationLength</td><td>null|integer</td><td>Length of remaining discount duration, when applicable</td></tr>
<tr><td>subscriptions.instructions.discountPercent</td><td>number</td><td>Discount percentage</td></tr>
<tr><td>subscriptions.instructions.discountTotal</td><td>number</td><td>Total discount amount</td></tr>
<tr><td>subscriptions.instructions.unitDiscount</td><td>number</td><td>Per-unit discount</td></tr>
<tr><td>subscriptions.instructions.price</td><td>number</td><td>Unit price</td></tr>
<tr><td>subscriptions.instructions.priceTotal</td><td>number</td><td>Total price for the instruction</td></tr>
<tr><td>subscriptions.instructions.unitPrice</td><td>number</td><td>Unit price before taxes</td></tr>
<tr><td>subscriptions.instructions.total</td><td>number</td><td>Total amount before taxes</td></tr>
<tr><td>subscriptions.instructions.totalWithTaxes</td><td>number</td><td>Total amount including taxes</td></tr>
<tr><td>subscriptions.instructions.totalWithTaxesDisplay</td><td>string</td><td>Formatted total including taxes</td></tr>
<tr><td>subscriptions.instructions.isNotTrial</td><td>boolean</td><td>Whether the instruction is not a trial</td></tr>
Name Type Description