Skip to main content

New Features

1. Entitlements

Dodo Payments now ships with unified Entitlements — a single layer powering automatic delivery for every fulfilment integration. A single product can deliver multiple entitlements on every successful purchase or active subscription.
Entitlements dashboard with the list of entitlements on the left and grant activity on the right
Five new platform integrations Until now, Dodo Payments delivered license keys and digital files automatically on purchase. Entitlements extend that scope to five additional platforms — so paying customers can be granted access to your community, your code, or your content the moment payment succeeds, with no manual fulfilment on your side: These join the existing License Keys (unique keys with activation limits and expiry) and Digital Files (presigned download URLs for e-books, templates, media) integrations, all now managed through the same grant lifecycle. What you get out of the box Webhooks Four new lifecycle events fire for every grant:
For new integrations, listen to entitlement_grant.delivered rather than payment.succeeded. Payment success doesn’t mean delivery is finished, especially for OAuth-based integrations.
Learn more: Entitlements | Entitlement Grant Webhooks

2. Subscription Cancellation Reasons in the Customer Portal

When customers cancel a subscription from the Customer Portal, they’re now prompted to share why they’re cancelling before confirming. The captured reason is stored on the subscription as cancellation_feedback, surfaced in the API and webhook payloads, and available in the dashboard so you can spot churn patterns at a glance.
Customer Portal cancellation modal with the 'Why are you cancelling?' dropdown showing reasons like Too expensive, Missing features, and Other
Reason options Where it appears
  • Subscription object: New cancellation_feedback field (one of the values above) and cancellation_comment (optional free-text), populated when the customer cancels
  • subscription.cancelled webhook: Both fields are included in the payload
  • API: Pass cancellation_feedback and cancellation_comment to PATCH /subscriptions/{subscription_id} when scheduling or executing a cancellation programmatically
Combine cancellation_feedback with Subscription Dunning to tailor your win-back emails — e.g., send a discount code to too_expensive cancellers and a “what’s missing?” survey to missing_features cancellers.
Learn more: Customer Portal | Subscription Webhooks

3. Configurable Mandate Minimum Amount for INR E-Mandates

You can now configure the mandate floor for INR e-mandates on Indian-card recurring subscriptions. Previously, every Indian-card subscription below ₹15,000 used a fixed ₹15,000 on-demand mandate. Now you can override this floor at the merchant level — and per checkout session or subscription if needed. The mandate amount registered with the customer’s bank is max(mandate_min_amount_inr_paise, billing_amount), so this value acts as the customer-facing authorization ceiling whenever billing is lower than the floor.
Resolution priority
  1. Per-request override (mandate_min_amount_inr_paise on the checkout session, payment, or subscription)
  2. Merchant-level setting in business settings
  3. System default of ₹15,000 (1,500,000 paise)
This setting only affects e-mandates registered for Indian-issued cards (Visa, Mastercard, RuPay) on INR subscriptions. UPI subscriptions follow their own AutoPay flow and are unaffected.
Learn more: India Payment Methods | Subscriptions with RBI Mandates

4. Adaptive Currency Fees Inclusive Business Setting

Adaptive Currency is the feature that lets you charge customers in their local currency. By default, the 2–4% adaptive currency fee is borne by the customer and added on top of your displayed price. With the new Fees Inclusive setting, you can flip this: keep the displayed price unchanged for the customer and absorb the fee yourself. Where to configure Go to Settings → Business, ensure Adaptive Pricing is enabled, and toggle Fees Inclusive in the Adaptive Currency section. Per-request override You can also override the merchant default for individual payments, on-demand subscription charges, and plan changes using the adaptive_currency_fees_inclusive boolean:
INR → INR transactions are always treated as inclusive regardless of the business setting or per-request override.
Learn more: Adaptive Currency

5. Dodo Payments Desktop App

The official Dodo Payments Desktop app is now generally available for macOS, Windows, and Linux. Run your payments dashboard as a fast, native app — no browser tab required. What’s inside
  • Tiny native binary — built with Tauri on the system’s native webview, ~5 MB total (no bundled Chromium)
  • Signed and notarized — macOS builds are signed with Apple Developer ID and notarized, so no Gatekeeper warnings
  • Auto-update — checks every 4 hours and applies signed updates automatically from GitHub Releases (works on macOS, Windows, and Linux AppImage)
  • System tray + menu bar — hide-to-tray on macOS, full File/Edit/View/Help menus with keyboard shortcuts (⌘⇧H go to dashboard, ⌘L copy current URL, ⌘⌥I dev tools)
  • Deep-link support — magic-link authentication links open straight in the app
  • Multi-window — open multiple dashboards side by side
Grab the latest installer for your platform from the Desktop App Releases page. The repo is fully open source.

6. Stablecoin Payments (USDC, USDP, USDG)

Accept stablecoin payments globally with USD settlement. Customers pay from their preferred stablecoin wallet on the network of their choice; you receive fiat USD with no exposure to crypto volatility, no chargebacks, and no banking infrastructure required on the customer’s side. Supported currencies and networks Coverage Configuration Pass crypto_currency in allowed_payment_method_types when creating a checkout session:
The customer is shown a wallet address and QR code with the stablecoin amount calculated at the real-time exchange rate; once the blockchain confirms the transaction, your payment.succeeded webhook fires and the customer is redirected to your success page.
Stablecoin payments are irreversible by design — there are no chargebacks. We recommend always offering credit and debit as fallback methods for customers without a stablecoin wallet.
Learn more: Stablecoin Payments

7. Import Existing License Keys

You can now import license keys from another system into Dodo Payments using the Create License Key API. This unlocks zero-disruption migration from any external license-key provider, so your existing customers can continue activating, validating, and deactivating their keys against Dodo Payments without re-issuance.
Imported keys are tagged with source: "import" (vs. source: "auto" for keys generated automatically on payment), so you can distinguish migrated inventory from organically issued keys when querying GET /license_keys. The payment_id on imported keys is null because they aren’t tied to a Dodo Payments transaction.
License keys created or updated through the API do not trigger email notifications to customers. If you need to notify customers about an imported key, handle that separately in your application.
Migrating from Polar.sh or Lemon Squeezy? The dodo-migrate CLI automates bulk imports of products, customers, discounts, and license keys in a single command.
Learn more: License Keys | Create License Key API

8. require_phone_number for Checkout Sessions

Force customers to provide a phone number during checkout by setting feature_flags.require_phone_number: true when creating a checkout session. Phone number becomes a required field on the checkout form, with form validation surfacing “Phone number is required” if the customer leaves it blank.
require_phone_number: true requires allow_phone_number_collection: true. The API rejects sessions where require_phone_number is true while phone collection is disabled.
Useful for B2B SaaS, regulated industries, or any flow where you need a verified contact channel for support, fraud review, or compliance.
Learn more: Checkout Features | Create Checkout Session API

Bug Fixes & Improvements

  • Minor bug fixes and stability improvements across the platform
Last modified on August 12, 2026