cart.removed

Packages one change removed, after its cart.updated.

CODE
next.on('cart.removed', (data, event) => {});

Data

Present: always; optional when it may be missing; campaign once the campaign is loaded; priced once the server priced the cart.

FieldTypePresent
linesCartItem[]alwaysEvery line in the cart, the same package's lines merged.
couponsstring[]alwaysThe codes the shopper applied, uppercase. A bundle card's own codes are not listed.
currencystringcampaignISO 4217, such as USD.
shipping_methodShippingMethodoptionalThe selected shipping method, and what shipping costs.
subtotalnumberpricedThe products before discounts, without shipping.
total_discountnumberpricedThe discounts on the products, without shipping's: the sum of discounts.
totalnumberpricedWhat the shopper pays.
discountsDiscount[]pricedThe discounts on the products, one per offer.
discount_percentagenumberpricedtotal_discount ÷ subtotal × 100, to two decimals; 0 without a discount.
quantitynumberalwaysUnits in the cart: each line's quantity.
changesCartChange[]alwaysWhat the change removed.

CartItem

A line of the cart. Its prices are there once the server priced the cart.

FieldTypePresent
package_idnumberalwaysThe package's ref_id in the campaign.
quantitynumberalwaysPackage quantity.
is_upsellbooleanoptionaltrue for a line added after the order.
propertiesRecord<string, string>optionalLine properties, such as a variant picked in a bundle slot.
product_idnumbercampaignThe product in the store.
product_titlestringcampaignThe product's name as customers see it, as on an order line; the package's name for a package without one.
variant_idnumbercampaignThe product variant, for a product with variants.
variant_titlestringcampaignThe variant's name, such as Black / M, for a product with variants.
skustringcampaignThe product's Stock Keeping Unit.
imagestringcampaignThe package's image URL.
pricenumberpricedWhat one package costs after discounts.
original_pricenumberpricedWhat one package costs before discounts; equal to price when nothing is taken off.
total_discountnumberpricedThe discount on the line.
totalnumberpricedprice × quantity.
subtotalnumberpricedThe line before discounts: total = subtotal − total_discount.
discount_percentagenumberpricedtotal_discount ÷ subtotal × 100, to two decimals; 0 without a discount.
discountsDiscount[]pricedThe discounts on the line.
subscriptionSubscriptioncampaignFor a package billed again every interval.

ShippingMethod

The selected shipping method, and what shipping costs.

FieldTypePresent
idnumberalwaysThe method's ref_id.
codestringcampaignSuch as standard.
namestringpricedThe method's name.
pricenumberpricedWhat shipping costs after discounts; 0 is free shipping.
original_pricenumberpricedWhat shipping costs before discounts.
discountsDiscount[]pricedThe discounts on shipping, such as a free-shipping offer.

Discount

A discount on the cart's products or on its shipping. Amounts are in the cart's currency.

FieldTypePresent
namestringalwaysThe offer's name.
amountnumberalwaysThe amount taken off.
source"offer" | "coupon"alwayscoupon for a code the shopper entered (it is in coupons); offer for an automatic offer or a bundle card's own code.
codestringoptionalThe code, for a coupon.
offer_idnumberalwaysThe offer that gave it.
percentagenumberoptionalThe percentage the offer is set to take off, as the API reports it, such as 20. Its configured value, for a label such as “20% off”; the amount actually taken off is amount.

CartChange

A package added to or removed from the cart by one change.

FieldTypePresent
package_idnumberalwaysThe package's ref_id in the campaign.
product_idnumbercampaignThe product in the store.
variant_idnumbercampaignThe product variant.
quantitynumberalwaysHow many packages were added or removed.
fromnumberalwaysThe package's quantity in the cart before the change.
tonumberalwaysThe package's quantity in the cart after the change.
pricenumberpricedWhat one package costs, when the server has already priced it.

Subscription

A package billed again every interval.

FieldTypePresent
interval"day" | "month"alwaysThe unit of the renewal interval.
interval_countnumberalwaysHow many intervals between renewals.
pricenumberpricedWhat each renewal charges, after discounts.
original_pricenumberpricedWhat each renewal charges before discounts.

Example

The second argument, with data inside. See Events for the envelope's fields.

CODE
{
  "event_id": "3f2b8c1d9e7a4b6c8d5e2f1a0b9c8d7e",
  "event_type": "cart.removed",
  "object": "cart",
  "data": {
    "lines": [
      {
        "package_id": 1,
        "quantity": 1,
        "product_id": 400,
        "product_title": "Olympus Earbuds",
        "variant_id": 4001,
        "variant_title": "Black",
        "image": "https://cdn.test/1.png"
      }
    ],
    "coupons": [],
    "quantity": 1,
    "currency": "USD",
    "changes": [
      {
        "package_id": 2,
        "product_id": 400,
        "variant_id": 4002,
        "quantity": 1,
        "from": 1,
        "to": 0,
        "price": 89
      }
    ]
  },
  "created_at": "2026-11-04T08:30:00.000Z",
  "session_id": "0b8f3c2d1e4a4f6b9c7d5e3f2a1b0c9d",
  "sdk_version": "0.5.0"
}