> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# v1.94.0 (April 8, 2026)

> Abandoned Cart Recovery, Subscription Dunning, discount metadata, recovery webhooks, Pix payments for Brazil, and WeChat Pay for Chinese customers

## 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.

<Frame>
  <img src="https://mintcdn.com/dodopayments/B3-0kuKcZDP1TiJD/images/recovery/recovery-analytics.png?fit=max&auto=format&n=B3-0kuKcZDP1TiJD&q=85&s=d3bf0c7474818bc4584b75654423e14c" alt="Recovery analytics dashboard showing abandoned checkout counts, recovery rates, and recovered revenue" style={{ maxHeight: '500px', width: 'auto' }} width="2548" height="2190" data-path="images/recovery/recovery-analytics.png" />
</Frame>

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

<Tip>
  Start with the default email timing (1 hour, 24 hours, 72 hours) and iterate based on your recovery analytics data.
</Tip>

Learn more: [Abandoned Cart Recovery](/features/recovery/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](/features/recovery/subscription-dunning)

### 3. **Discount Metadata**

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.

```typescript theme={null}
const discount = await client.discounts.create({
  type: 'percentage',
  amount: 1500, // 15%
  code: 'SUMMER2025',
  metadata: {
    campaign: 'summer_promo',
    source: 'email_blast'
  }
});
```

Learn more: [Discount Codes](/features/discount-codes) | [Metadata Guide](/api-reference/metadata)

### 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](/developer-resources/webhooks/intents/recovery)

### 5. **Pix Payments for Brazil**

Accept **Pix** — Brazil's instant payment system created by the Central Bank of Brazil — in your Dodo Payments checkout. Pix is now the most-used payment method in Brazil, surpassing both credit cards and boleto, and confirms in seconds 24/7/365.

**Coverage**

| Detail              | Value                                  |
| ------------------- | -------------------------------------- |
| Billing currency    | BRL                                    |
| Supported countries | Brazil                                 |
| Subscriptions       | Not supported (one-time payments only) |
| Minimum amount      | \$0.50                                 |
| Settlement          | Instant                                |

**Configuration**

Pass `pix` in `allowed_payment_method_types` and set the billing currency to `BRL`:

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['pix', 'credit', 'debit'],
  billing_currency: 'BRL',
  return_url: 'https://example.com/success'
});
```

The customer is shown a Pix QR code and a copy-paste key on checkout. They open their banking app, scan or paste, and the payment confirms instantly.

<Tip>
  Pix QR codes expire after a set window — design your checkout flow to allow customers to regenerate the code if needed. Always include card fallbacks for customers who prefer to pay by card.
</Tip>

Learn more: [Pix Payments](/features/payment-methods/pix)

### 6. **WeChat Pay for Chinese Customers**

Accept **WeChat Pay** — used by over a billion people across China — directly in your Dodo Payments checkout. Customers scan a QR code with their WeChat app and confirm the payment in seconds, all without leaving the WeChat ecosystem.

**Coverage**

| Detail             | Value                                  |
| ------------------ | -------------------------------------- |
| Billing currencies | USD, CNY                               |
| Subscriptions      | Not supported (one-time payments only) |
| Minimum amount     | \$0.50 / ¥1.00                         |
| Settlement         | USD                                    |

**Configuration**

Pass `wechat_pay` in `allowed_payment_method_types` when creating a checkout session:

```javascript theme={null}
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['wechat_pay', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
```

WeChat Pay supports both **USD** (for cross-border merchants targeting Chinese customers) and **CNY** (for domestic Chinese transactions). Settlement to merchants is in USD regardless of the billing currency.

<Tip>
  Display the checkout on a desktop or tablet so customers can scan the QR code with their phone — this is the most familiar flow for WeChat Pay users.
</Tip>

Learn more: [WeChat Pay](/features/payment-methods/wechat)
