Upsells and downsells let you offer additional products or plan changes to customers using their saved payment methods. This enables one-click purchases that skip payment collection, dramatically improving conversion rates.
Post-Purchase Upsells
Offer complementary products immediately after checkout with one-click purchasing.
Subscription Upgrades
Move customers to higher tiers with automatic proration and instant billing.
Cross-Sells
Add related products to existing customers without re-entering payment details.
Overview
Upsells and downsells are powerful revenue optimization strategies:- Upsells: Offer a higher-value product or upgrade (e.g., Pro plan instead of Basic)
- Downsells: Offer a lower-priced alternative when a customer declines or downgrades
- Cross-sells: Suggest complementary products (e.g., add-ons, related items)
payment_method_id parameter, which lets you charge a customer’s saved payment method without requiring them to re-enter card details.
Key Benefits
How It Works
Prerequisites
Before implementing upsells and downsells, ensure you have:- Customers with saved payment methods (automatically saved after their first purchase)
- Upsell products configured in the dashboard (one-time payments, subscriptions, or add-ons)
- A webhook endpoint configured to handle
payment.succeeded,payment.failed, andsubscription.plan_changedevents
Getting Customer Payment Methods
Before offering an upsell, retrieve the customer’s saved payment methods:- TypeScript
- Python
- Go
Payment methods are automatically saved when customers complete checkout. You don’t need to explicitly save them.
Post-Purchase One-Click Upsells
Offer additional products immediately after a successful purchase. The customer can accept with a single click since their payment method is already saved.Implementation
- TypeScript
- Python
- Go
Subscription Upgrades
Move customers to higher-tier subscription plans with automatic proration handling.Preview Before Committing
Always preview plan changes to show customers exactly what they’ll be charged:- TypeScript
- Python
- Go
Execute the Upgrade
- TypeScript
- Python
- Go
Proration Modes
Choose how customers are billed when upgrading:difference_immediately
Charges price difference instantly ($30→$80 = $50). Best for simple upgrades.
prorated_immediately
Credits unused time on the old plan, then charges a full cycle of the new one. Best for crediting unused time.
full_immediately
Charges full new plan price, ignores remaining time. Best for billing cycle resets.
do_not_bill
Applies the plan change with no immediate charge; the new plan is billed at the next renewal and the original billing date is preserved. Best for courtesy upgrades and free migrations.
Cross-Sells
Add complementary products for existing customers without requiring them to re-enter payment details.Implementation
- TypeScript
- Python
- Go
Subscription Downgrades
When customers want to move to a lower-tier plan, handle the transition gracefully with automatic credits.How Downgrades Work
- Customer requests downgrade (Pro → Basic)
- System calculates remaining value on current plan
- Credit is added to subscription for future renewals
- Customer moves to new plan immediately
The preview’s
immediate_charge.summary.customer_credits is in the currency of the customer’s credit wallet, given by customer_credits_currency. It can differ from the summary’s currency, for example when the customer pays in INR on a USD subscription.- TypeScript
- Python
- Go
Credits from downgrades using
difference_immediately are subscription-scoped and automatically applied to future renewals. They’re distinct from Credit-Based Billing entitlements.Complete Example: Post-Purchase Upsell Flow
Here’s a complete implementation showing how to offer an upsell after a successful purchase:- TypeScript
- Python
Best Practices
- Time strategically: Offer upsells immediately after a successful purchase when customers are in a buying mindset. Other effective moments: after feature usage milestones, when approaching plan limits, during onboarding completion.
- Validate payment methods: Before attempting a one-click charge, verify the payment method is compatible with the product’s currency, hasn’t expired, and belongs to the customer.
- Handle failures gracefully: When one-click charges fail, fall back to standard checkout flow, notify the customer with clear messaging, and offer to update payment method.
- Provide clear value: Show what customers are getting vs. their current plan, highlight the price difference (not total price), and use social proof.
- Respect customer choice: Always provide an easy way to decline, don’t show the same upsell repeatedly after decline, and track which upsells convert to optimize offers.
Webhooks to Monitor
Track these webhook events for upsell and downgrade flows:Webhook Integration Guide
Learn how to set up and verify webhook endpoints.
Related Resources
Subscription Upgrade Guide
Detailed guide on plan changes, proration modes, and handling failures.
Checkout Sessions
Complete reference for creating checkout sessions with all options.
Customer Payment Methods API
API reference for listing customer payment methods.
Add-ons
Enhance subscriptions with flexible add-ons for additional revenue.