Subscriptions let you sell ongoing access with automated renewals. Use flexible billing cycles, free trials, plan changes, and add‑ons to tailor pricing for each customer.
Upgrade & Downgrade
Control plan changes with proration and quantity updates.
On‑Demand Subscriptions
Authorize a mandate now and charge later with custom amounts.
Customer Portal
Let customers manage plans, billing, and cancellations.
Subscription Webhooks
React to lifecycle events like created, renewed, and canceled.
What Are Subscriptions?
Subscriptions are recurring products customers purchase on a schedule. They’re ideal for:- SaaS licenses: Apps, APIs, or platform access
- Memberships: Communities, programs, or clubs
- Digital content: Courses, media, or premium content
- Support plans: SLAs, success packages, or maintenance
Key Benefits
- Predictable revenue: Recurring billing with automated renewals
- Flexible cycles: Monthly, annual, custom intervals, and trials
- Plan agility: Proration for upgrades and downgrades
- Add‑ons and seats: Attach optional, quantifiable upgrades
- Seamless checkout: Hosted checkout and customer portal
- Developer-first: Clear APIs for creation, changes, and usage tracking
Creating Subscriptions
Create subscription products in your Dodo Payments dashboard, then sell them through checkout or your API. Separating products from active subscriptions lets you version pricing, attach add‑ons, and track performance independently.Subscription product creation
Configure the fields in the dashboard to define how your subscription sells, renews, and bills. The sections below map directly to what you see in the creation form.Product details
- Product Name (required): The display name shown in checkout, customer portal, and invoices.
- Product Description (required): A clear value statement that appears in checkout and invoices.
- Product Image (required): PNG/JPG/WebP up to 3 MB. Used on checkout and invoices.
- Brand: Associate the product with a specific brand for theming and emails.
- Tax Category (required): Choose the category (for example, SaaS) to determine tax rules.
Pricing
- Pricing Type: Choose Subscription (this guide). Alternatives are Single Payment and Usage Based Billing.
- Price (required): Base recurring price with currency.
- Discount Applicable (%): Optional percentage discount applied to the base price; reflected in checkout and invoices.
- Repeat payment every (required): Interval for renewals, e.g., every 1 Month. Select the cadence (months or years) and quantity.
- Subscription Period (required): Total term for which the subscription remains active (e.g., 10 Years). After this period ends, renewals stop unless extended.
- Trial Period Days (required): Set trial length in days. Use 0 to disable trials. The first charge occurs automatically when the trial ends.
- Select add‑on: Attach up to 10 add‑ons that customers can purchase alongside the base plan.
Add‑ons are ideal for quantifiable extras such as seats or storage. You can control allowed quantities and proration behavior when customers change them.
Advanced settings
- Tax Inclusive Pricing: Display prices inclusive of applicable taxes. Final tax calculation still varies by customer location.
- Generate license keys: Issue a unique key to each customer after purchase. See the License Keys guide.
- Digital Product Delivery: Deliver files or content automatically after purchase. Learn more in Digital Product Delivery.
- Metadata: Attach custom key–value pairs for internal tagging or client integrations. See Metadata.
Subscription Trials
Trials let customers access subscriptions without immediate payment. The first charge occurs automatically when the trial ends.Configuring Trials
Set Trial Period Days in the product pricing section (use0 to disable). You can override this when creating subscriptions:
Detecting Trial Status
To determine if a subscription is in trial, retrieve the list of payments for the subscription. If there is exactly one payment with amount 0, the subscription is in trial period:Updating Trial Period
Extend the trial by updatingnext_billing_date:
Subscription Plan Changes
Plan changes let you upgrade or downgrade subscriptions, adjust quantities, or migrate to different products. Depending on the proration mode you select, a change may trigger an immediate charge, create credit, or apply no billing adjustment.Product Collections
Group related products into collections to enable seamless upgrade/downgrade paths in the Customer Portal.
Proration Modes
Choose how customers are billed when changing plans:Quick comparison of the four proration modes:
prorated_immediately | difference_immediately | full_immediately | do_not_bill | |
|---|---|---|---|---|
| Uppgradering | Proraterad avgift för återstående dagar | Fulla prisskillnaden debiteras | Fullt nytt planpris debiteras | Ingen avgift — byt omedelbart |
| Nedgradering | Proraterad kredit för återstående dagar | Fulla prisskillnaden som kredit | Ingen kredit, fullt pris debiteras | Ingen kredit — byt omedelbart |
| Faktureringscykel | Börjar om från idag | Börjar om från idag | Börjar om från idag | Förblir densamma |
| Bäst för | Rättvis tidsbaserad fakturering | Enkla nivåändringar | Återställning av faktureringscykel | Kostnadsfria migreringar eller kostnadsfria byten |
prorated_immediately
Charges prorated amount based on remaining time in the current billing cycle. Best for fair billing that accounts for unused time.
difference_immediately
Charges the price difference immediately (upgrade) or adds credit for future renewals (downgrade). Best for simple upgrade/downgrade scenarios.
Credits from downgrades using
difference_immediately are subscription-scoped and auto-applied to future renewals. They’re distinct from Credit-Based Billing entitlements.difference_immediately, the unused value becomes a subscription-scoped credit that automatically offsets future renewals:
full_immediately
Charges full new plan amount immediately, ignoring remaining time. Best for resetting billing cycles.
do_not_bill
Switches to the new plan without any billing adjustment. No proration charges, no credits — the customer simply moves to the new plan. Best for courtesy migrations, free plan switches, or scenarios where you want to absorb the cost difference.
Example: Prorated upgrade calculation
Example: Prorated upgrade calculation
Scenario: Customer on Basic (80/month) on day 16 of a 30-day cycle using Nästa förnyelse den 15 februari (16 januari + 30 dagar): $80,00/månad.
prorated_immediately.Example: Downgrade credit calculation
Example: Downgrade credit calculation
Scenario: Customer on Pro (20/month) using The $60 credit auto-applies to future renewals:
difference_immediately.- Renewal 1: 20 (credit) = **40 credit remaining)
- Renewal 2: 20 (credit) = **20 credit remaining)
- Renewal 3: 20 (credit) = $0.00 (credit exhausted)
- Renewal 4: $20.00 (full price)
Learn more about how credits are managed in the Upgrade & Downgrade Guide.
Changing Plans with Add-ons
Modify add-ons when changing plans. Add-ons are included in proration calculations:Plan changes trigger immediate charges. Failed charges may move the subscription to
on_hold status. Track changes via subscription.plan_changed webhook events.Previewing Plan Changes
Before committing to a plan change, preview the exact charge and resulting subscription:Preview Change Plan API
Preview plan changes before committing to them.
Subscription States
Ett abonnemang går igenom en definierad uppsättning statusar under dess livslängd. Den här tabellen är referensen för varje status, vad som orsakar den och hur (eller om) du kan återställa den.| Status | Vad det betyder | Återställningsbart? | Återställningsväg / nästa steg |
|---|---|---|---|
pending | Abonnemanget skapas eller behandlas | — | Vänta på subscription.active (eller subscription.failed) |
active | Abonnemanget är aktivt och kommer att förnyas automatiskt | — | Ingen åtgärd behövs |
on_hold | En förnyelsebetalning (eller avgift för planändring) misslyckades; abonnemanget är pausat | Ja | Uppdatera betalningsmetoden för att återaktivera — automatiskt via Betalningsförsök och Dunning, eller manuellt via Uppdatera betalningsmetod API |
cancelled | Abonnemanget avbröts och kommer inte att förnyas | Endast återköp | Kunden måste starta ett nytt abonnemang; Dunning kan uppmana till ett återköp |
failed | Abonnemangsskapandet misslyckades (den initiala fullmakten eller betalningen lyckades inte) | Nej — terminal | Kunden måste skapa ett nytt abonnemang med en fungerande betalningsmetod |
expired | Abonnemanget nådde slutet av sin period | — | Kunden måste starta ett nytt abonnemang om så önskas |
Tillståndsmaskin
Pausat tillstånd
Ett abonnemang går in ion_hold tillstånd när:
- En förnyelsebetalning misslyckas (otillräckliga medel, utgången kort, etc.)
- En avgift för planändring misslyckas
- Betalningsmetodsautorisering misslyckas
Återaktivera från pausat läge
För att återaktivera ett abonnemang frånon_hold tillstånd, uppdatera betalningsmetoden. Detta gör automatiskt:
- Skapar en avgift för återstående fordringar
- Genererar en faktura
- Bearbetar betalningen med den nya betalningsmetoden
- Återaktiverar abonnemanget till
activetillstånd vid lyckad betalning
Efter att framgångsrikt ha uppdaterat betalningsmetoden för ett
on_hold abonnemang, får du payment.succeeded följt av subscription.active webhookhändelser.Webhookhändelser efter övergång
Varje övergång utlöser en webhook så att du kan styra rättighetslogik utan att behöva genomföra polling:| Övergång | Händelse |
|---|---|
| Abonnemang aktiverat | subscription.active |
| Förnyelse lyckas | subscription.renewed |
| Förnyelse misslyckas → pausad | subscription.on_hold |
| Skapelse misslyckas | subscription.failed |
| Plan uppgraderad/nedgraderad | subscription.plan_changed |
| Avbruten | subscription.cancelled |
| Period avslutad | subscription.expired |
| Ändringar i något fält | subscription.updated |
Subscription Webhook Payloads
Visa det fullständiga nyttolastschemat för abonnemangslivscykelhändelser.
API-hantering
Create subscriptions
Create subscriptions
Använd
POST /subscriptions för att skapa abonnemang programmatiskt från produkter, med valfria provperioder och tillägg.API Reference
Visa skapa abonnemangs-API.
Update subscriptions
Update subscriptions
Använd
PATCH /subscriptions/{id} för att uppdatera mängder, avbryta vid nästkommande fakturadatum eller ändra metadata.API Reference
Lär dig hur du uppdaterar abonnemangsdetaljer.
Change plans (proration)
Change plans (proration)
Ändra den aktiva produkten och mängder med pro-rata kontroller.
API Reference
Granska alternativ för planändringar.
On‑demand charges
On‑demand charges
För abonnemang på begäran, ta ut specifika belopp på begäran.
API Reference
Ta betalt för ett abonnemang på begäran.
List and retrieve
List and retrieve
Använd
GET /subscriptions för att lista alla abonnemang och GET /subscriptions/{id} för att hämta ett.API Reference
Bläddra i listnings- och hämt-API:er.
Usage history
Usage history
Hämta registrerad användning för mätad eller hybrid prissättning.
API Reference
Se API för användningshistorik.
Update payment method
Update payment method
Uppdatera betalningsmetoden för ett abonnemang. För aktiva abonnemang, uppdaterar detta betalningsmetoden för framtida förnyelser. För abonnemang i
on_hold tillstånd, återaktiveras abonnemanget genom att skapa en avgift för återstående fordringar.När du genererar en ny betalningsmetodlänk (typen New begäran), kan du skicka allowed_payment_method_types för att begränsa vilka betalningsmetoder kunden ser på den sidan. Kunder kommer aldrig att se en metod som inte finns med på listan, även om inkludering av en metod inte garanterar att den visas (tillgängligheten beror fortfarande på faktorer som kundens plats och dina företagspreferenser).API Reference
Lär dig hur du uppdaterar betalningsmetoder och återaktiverar abonnemang.
Vanliga användningsfall
- SaaS och API:er: Skiktad åtkomst med tillägg för platser eller användning
- Innehåll och media: Månatlig åtkomst med introduktionsprövningar
- B2B-supportplaner: Årliga kontrakt med premiumsupporttillägg
- Verktyg och plugins: Licensnycklar och versionerade utgåvor
Integrations-exempel
Utcheckningssessioner (abonnemang)
När du skapar utcheckningssessioner, inkludera din abonnemangsprodukt och eventuella tillägg:Planändringar med pro-rata
Uppgradera eller nedgradera ett abonnemang och kontrollera pro-ratabeteende:Avbryt vid nästa fakturadatum
Schemalägg en avbokning som träder i kraft i slutet av den aktuella faktureringsperioden:Abonnemang på begäran
Skapa ett abonnemang på begäran och debitera senare vid behov:Uppdatera betalningsmetod för aktivt abonnemang
Uppdatera betalningsmetoden för ett aktivt abonnemang:Återaktivera abonnemang från on_hold
Återaktivera ett abonnemang som pausades på grund av misslyckad betalning:Abonnemang med RBI-kompatibla mandat
UPI och indiska kortabonnemang fungerar under RBI (Reserve Bank of India) regler med specifika mandatkrav:Mandatgränser
Mandattyp och belopp beror på ditt abonnemangs återkommande avgift:- Avgifter under mandatgränsen (standard ₹15,000): Vi skapar ett on-demand-mandat för gränsbeloppet. Abonnemangsbeloppet debiteras periodiskt enligt din abonnemangsfrekvens, upp till mandatgränsen.
- Avgifter vid eller över mandatgränsen: Vi skapar ett abonnemangsmandat (eller on-demand-mandat) för det exakta abonnemangsbeloppet.
mandate_min_amount_inr_paise (INR paise). Beloppet som registreras hos banken är max(mandate_floor, billing_amount) — så gränsen blir i praktiken den kundsynliga auktorisationsgränsen när faktureringen är lägre.
För detaljerad information om RBI-kompatibla mandat och den konfigurerbara mandatgränsen för indiska betalningsmetoder, se sidan Indien Betalningsmetoder.
Överväganden vid upp- och nedgradering
Viktigt: Vid uppgradering eller nedgradering av abonnemang, överväg noggrant mandatgränserna:- Om en uppgradering/nedgradering resulterar i ett belopp som överstiger ₹15,000 och går förbi det befintliga on-demand-betalningsgränsen, kan transaktionsavgiften misslyckas.
- I sådana fall kan kunden behöva uppdatera sin betalningsmetod eller ändra abonnemanget igen för att upprätta ett nytt mandat med rätt gräns.
Auktorisering för högvärdesavgifter
För abonnemangsavgifter på ₹15,000 eller mer:- Kunden kommer att uppmanas av sin bank att auktorisera transaktionen.
- Om kunden misslyckas med att auktorisera transaktionen, kommer transaktionen att misslyckas och abonnemanget sätts på paus.
48-timmars bearbetningsfördröjning
Bearbetningstidplan: Återkommande avgifter på indiska kort och UPI-abonnemang följer ett unikt bearbetningsmönster:- Avgifter initieras på schemalagt datum enligt din abonnemangsfrekvens.
- Den faktiska avdrag från kundens konto sker endast efter 48 timmar från betalningsinitiering.
- Detta 48-timmarfönster kan förlängas med 2-3 ytterligare timmar beroende på bank-API-svar.
Mandat avbokningsfönster
Under 48-timmars bearbetningsfönster:- Kunder kan avbryta mandatet via sina bankappar.
- Om en kund avbryter mandatet under denna period, kommer abonnemanget att förbli aktivt (detta är ett specialfall specifikt för indiska kort och UPI AutoPay-abonnemang).
- Dock kan det faktiska avdraget misslyckas, och i så fall sätter vi abonnemanget på paus.
- Försena förmånsaktivering tills betalningsbekräftelse
- Implementera nådeperioder eller tillfällig åtkomst
- Övervaka abonnemangsstatus för mandatavbokningar
- Hantera abonnemangspauslägen i din applikationslogik
Bästa praxis
- Börja med tydliga nivåer: 2–3 planer med uppenbara skillnader
- Kommunicera prissättning: Visa totalsummor, pro-rata och nästa förnyelse
- Använd prova på ett klokt sätt: Konvertera med onboarding, inte bara tid
- Utnyttja tillägg: Håll grundplanerna enkla och sälj extratillbehör
- Testa ändringar: Validera planändringar och pro-rata i testläge
Abonnemang är en flexibel grund för återkommande intäkter. Börja enkelt, testa noggrant och iterera baserat på antagande, avhopp och expansionsmetrik.