New Features
1. Abandoned Cart Recovery
Automatically detect incomplete or failed checkouts and send targeted email sequences to bring customers back. ACR monitors payments that haven’t succeeded after 60 minutes and classifies them as either payment failed or checkout incomplete, then sends up to 3 configurable recovery emails per sequence.
Key capabilities:
- Two email sequences — Payment Failed and Checkout Incomplete, each with up to 3 emails
- Recovery discounts — Optionally auto-generate single-use discount codes to incentivize recovery
- Customer recovery page — Unique recovery links take customers to a dedicated page to complete their purchase
- Recovery analytics — Track abandoned checkout counts, recovery rates, recovered revenue, and per-email/per-product breakdowns
Start with the default email timing (1 hour, 24 hours, 72 hours) and iterate based on your recovery analytics data.
Learn more: Abandoned Cart Recovery
2. Subscription Dunning
Automatically send email sequences to recover lapsed or cancelled subscriptions. Dunning is triggered when a subscription enters on hold (payment failure) or is cancelled by the customer from the customer portal.
Key capabilities:
- Two email sequences — On Hold and Cancelled, each with up to 4 emails
- Automatic charging — When a customer updates their payment method, outstanding dues are charged automatically
- Configurable timing — Default intervals at 1, 3, 5, and 7 days, fully customizable per email
Learn more: Subscription Dunning
You can now attach metadata (key-value pairs) to discounts when creating or updating them via the API. Use metadata to tag discounts by campaign, source, or internal reference for tracking and reconciliation.
const discount = await client.discounts.create({
type: 'percentage',
amount: 1500, // 15%
code: 'SUMMER2025',
metadata: {
campaign: 'summer_promo',
source: 'email_blast'
}
});
Learn more: Discount Codes | Metadata Guide
4. Recovery Webhooks
New webhook events to track the recovery lifecycle:
| Event | Description |
|---|
abandoned_checkout.detected | An abandoned checkout has been detected |
abandoned_checkout.recovered | Customer completed payment through a recovery link |
dunning.started | A dunning attempt has been started for a subscription |
dunning.recovered | Customer updated payment method and payment succeeded |
Learn more: Recovery Webhooks