Use the mailingListEntry webhooks to collect abandoned cart information and send remarketing messages.
When a mailingListEntry.updated
, mailingListEntry.abandoned
, or mailingListEntry.removed
event is triggered, FastSpring sends a webhook payload containing the customer's email address and any associated order details.
- mailingListEntry.updated fires when a customer adds their email to your mailing list, or when the mailing list status changes (subscribed, unsubscribed, or abandoned).
- mailingListEntry.abandoned fires 30 minutes after the most recent activity. This applies if a customer entered their email, but did not complete their purchase.
- mailingListEntry.removed fires when a customer's email is removed from the mailing list. This may happen when a customer unsubscribes.
This page provides:
- A full sample payload showing a populated
mailingListEntry.updated
,mailingListEntry.abandoned
, andmailingListEntry.removed
webhook - A detailed table listing every payload property, including name, type, and description
- Notes on when this webhook is triggered
Webhook payload examples
mailingListEntry.updated
When a mailingListEntry.updated
event is triggered, the webhook sends the following JSON payload:
{
"id": "208cc47000a1c0b04991a742b151f7f84e04baee6ffbde7ecabd2911aee1d4ad",
"list": "subscribed",
"updated": 1751561132926,
"reason": "subscribed",
"order": {
"reference": "ABC1234567-8910-11121D",
"id": "abCdE1FGH2Hij3KLMnOpqR",
"order": "abCdE1FGH2Hij3KLMnOpqR",
"referrer": "https://mystore.test.onfastspring.com/cloud-storage",
"session": "LDN5SX4KBZCI2:-WSh0LWdSn-delCV0a0ibw",
"storefront": "mystore",
"items": [
{
"product": "cloud-storage",
"path": "cloud-storage",
"quantity": 1,
"display": "Cloud Storage Service",
"summary": "Cloud Storage Service",
"imageUrl": null,
"isVirtual": false,
"isSubscription": false,
"price": 14.95,
"variation": "cloud-storage",
"description": "Cloud Storage Service",
"sku": "SKU-12345",
"pricing": {
"values": {
"USD": 14.95
}
}
}
]
},
"email": "[email protected]",
"firstName": "Jane",
"lastName": "Doe",
"country": "US",
"currency": "USD",
"language": "en",
"storefront": "mystore",
"referrer": "https://mystore.test.onfastspring.com/cloud-storage",
"optIn": false
}
mailingListEntry.abandoned
When a mailingListEntry.abandoned
event is triggered, the webhook sends the following JSON payload:
{
"id": "208cc47000a1c0b04991a742b151f7f84e04baee6ffbde7ecabd2911aee1d4ad",
"list": "abandoned",
"updated": 1751561434399,
"reason": "abandoned",
"order": {
"reference": "ABC1234567-8910-11121D",
"id": "abCdE1FGH2Hij3KLMnOpqR",
"order": "abCdE1FGH2Hij3KLMnOpqR",
"referrer": "https://app.fastspring.com/",
"origin": "https://app.fastspring.com/2/product/home.xml?mRef=Product:XEBDgN...",
"storefront": "mystore/popup-defaultB2B",
"items": [
{
"product": "cloud-storage",
"path": "cloud-storage",
"quantity": 1,
"display": "Cloud Storage Service",
"summary": "Cloud Storage Service",
"imageUrl": null,
"isVirtual": false,
"isSubscription": false,
"price": 14.95,
"variation": "cloud-storage",
"description": "Cloud Storage Service",
"sku": "SKU-12345",
"pricing": {
"values": {
"USD": 14.95
}
}
}
]
},
"email": "[email protected]",
"firstName": "Jane",
"lastName": "Doe",
"country": "US",
"currency": "USD",
"language": "en",
"storefront": "mystore/popup-defaultB2B",
"referrer": "https://app.fastspring.com/",
"optIn": true
}
mailingListEntry.removed
When a mailingListEntry.removed
event is triggered, the webhook sends the following JSON payload:
{
"id": "208cc47000a1c0b04991a742b151f7f84e04baee6ffbde7ecabd2911aee1d4ad",
"list": "unsubscribed",
"updated": 1751561113784,
"email": "[email protected]",
"firstName": "Jane",
"lastName": "Doe",
"country": "US",
}
Payload properties
The payload properties table outlines each property in the mailingListEntry.subscribed
, mailingListEntry.unsubscribed
, and mailingListEntry.removed
event JSON payload, specifying their name, data type, and description.
Name | Type | Description |
---|---|---|
id | string | Unique ID of this mailingListEntry event. |
list | string | Updated list category: subscribed , unsubscribed , or abandoned . |
updated | integer | Timestamp (in milliseconds) when this event was generated. |
reason | string | Reason for the update: subscribed , unsubscribed , or abandoned . |
order.reference | string | Customer-facing order reference number, or null if checkout was incomplete. |
order.id | string | Unique order ID associated with this event. |
order.order | string | Duplicate of order.id for backward compatibility. |
order.referrer | string | URL of the page where the customer last came from before checkout or cart abandonment. |
order.session | string | Session ID of the order at checkout. This expires after 24 hours. |
order.origin | string | Original storefront (checkout) URL where checkout was initiated. |
order.storefront | string | Name of the storefront (checkout) used. |
order.items | array | Array of products that were in the cart when the customer entered their email. This array contains one object per product. |
order.items.product | string | Product path or ID. |
order.items.path | string | Same as product . |
order.items.quantity | integer | Number of units the customer intended to purchase. |
order.items.display | string | Customer-facing product name. |
order.items.summary | string | Short description of the product. |
order.items.imageUrl | string | URL of the product image, if any. |
order.items.isVirtual | boolean | Indicates whether the product is virtual (non-physical). Always false for physical products. |
order.items.isSubscription | boolean | Indicates whether the product is a subscription. Returns true if the product is a subscription. |
order.items.price | number | Unit price of the product in transaction currency. |
order.items.variation | string | Product variation ID, if applicable. |
order.items.description | string | Detailed product description. |
order.items.sku | string | Stock Keeping Unit (SKU) for inventory tracking. |
order.items.pricing | object | Product price. May contain one string pairing for each currency. |
string | Email address entered or updated. | |
firstName | string | Customer's first name, if provided. |
lastName | string | Customer's last name, if provided. |
country | string | Two-letter ISO country code of the customer. |
currency | string | Three-letter ISO currency code for the cart. |
language | string | Two-letter ISO language code used in checkout. |
storefront | string | Storefront (checkout) identifier used. |
referrer | string | Full URL of the page where the customer completed checkout or abandoned the cart. |
optIn | boolean | Indicates whether the customer opted in to marketing or communications via the FastSpring checkout. Returns true if the customer opted in to marketing communications. |
Cart abandonment tracking
When a customer enters their email but doesn't complete checkout, FastSpring marks the cart as abandoned and sends a mailingListEntry.updated
webhook.
Customer flow:
- Start timer: The moment an item is added to cart, a 30-minute countdown begins.
- Abandon event: If the purchase isn't completed within 30 minutes, the cart is flagged as abandoned.
- Webhook dispatch: Within 15 minutes of abandonment, FastSpring sends:
- Event:
mailingListEntry.updated
- list:
abandoned
- reason:
abandoned
- Event:
The webhook's items array contains one object per abandoned product, each with:
- product: Product path or ID
- quantity: Units selected
- display: Customer-facing product name
- summary: Short product description
- imageUrl: URL of the product's icon image
Customer mailing list opt-in (subscribed)
When checking out, customers can select a checkbox to opt-in to future emails:
- When a customer completes a purchase with a new email address, FastSpring sends their email in the mailingListEntry.updated webhook.
- If the customer opted in to future emails, FastSpring marks the
list
andreason
properties assubscribed
.
This fires once per unique email; repeat opt-ins with the same email address are ignored.
Customer mailing list opt-out (unsubscribed)
If a subscribed customer opts out of the mailing list, FastSpring sends two webhook events in the following order:
- mailingListEntry.removed: Shows the
list
property assubscribed
. FastSpring will remove the email address from the mailing list. - mailingListEntry.updated: Shows the
list
and thereason
properties asunsubscribed
.
Note:For third-party remarketing services, see Extensions. These services help you receive webhook data, parse the information, and send remarketing messages to consumers with abandoned carts.