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",
}
Navigate this webhook
The mailingListEntry.updated
, mailingListEntry.abandoned
, and mailingListEntry.removed
webhook payloads all share the same structure, with minor differences depending on the event type. Use the cards below to jump to a specific section of the property reference.
Payload properties
All fields below are included in the mailingListEntry.updated
, mailingListEntry.abandoned
, or mailingListEntry.removed
webhook payloads. Fields are grouped into categories for easier navigation.
Name | Type | Description |
---|---|---|
Event Fields | ||
id | string | Unique ID of this mailingListEntry event |
list | string | 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 |
string | Email address entered or updated | |
firstName | string | Customer first name, when provided |
lastName | string | Customer last name, when provided |
country | string | Two-letter ISO country code |
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 where the customer came from before checkout or abandonment |
optIn | boolean | Whether the customer opted in to communications via checkout |
Order Summary | ||
order.reference | string | Customer-facing order reference (may be 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 the customer visited immediately before checkout/cart |
order.session | string | Checkout session ID (expires after 24 hours) |
order.origin | string | Original storefront URL where checkout was initiated |
order.storefront | string | Storefront name/path used for the session |
Order Items | ||
order.items | array | Products in the cart when the email was captured |
order.items.product | string | Product path or ID |
order.items.path | string | Duplicate of order.items.product |
order.items.quantity | integer | Units the customer intended to purchase |
order.items.display | string | Customer-facing product name |
order.items.summary | string | Short product description |
order.items.imageUrl | string | Product image URL, when available |
order.items.isVirtual | boolean | Whether the product is virtual (non-physical) |
order.items.isSubscription | boolean | Whether the product is a subscription |
order.items.price | number | Unit price in transaction currency |
order.items.variation | string | Product variation ID, when applicable |
order.items.description | string | Detailed product description |
order.items.sku | string | Stock Keeping Unit (SKU) |
order.items.pricing | object | Price map by currency (e.g., values.USD ) |
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.