Platsbaserad fakturering debiterar kunder baserat på antalet användare på deras konto. Dodo Payments implementerar detta med hjälp av add-on-systemet: en basprenumerationsprodukt plus ett add-on per plats vars kvantitet motsvarar antalet platser.
Implementation Tutorial
Add-ons Documentation
Subscription Management
Webhooks
Vad är platsbaserad fakturering?
Platsbaserad fakturering debiterar kunder baserat på antalet användare som har åtkomst till produkten. I stället för en fast avgift skalas priset efter teamets storlek.Vanliga användningsområden
Fördelar med platsbaserad prissättning
För ditt företag:- Intäkterna ökar när kunderna växer
- Kunderna kan budgetera förutsägbart
- Tydlig uppgraderingsväg från individuell nivå till team och företag
- Högre livstidsvärde när teamen växer
- Betala bara för de användare de har
- Enkelt att förstå och prognostisera kostnader
- Lägg till eller ta bort användare efter behov
- Rättvis prissättning som motsvarar teamets storlek
Så fungerar det
Dodo Payments implementerar platsbaserad fakturering med hjälp av systemet Add-ons. En platsbaserad prenumeration består av två delar:
Kundens månadsbelopp är:
Prisstrategier
Välj den platsbaserade prisstrategi som passar ditt företag:Strategi 1: Bas + add-on per plats
Inkludera ett bestämt antal platser i basplanen och ta betalt för ytterligare platser.Strategi 2: Ren prissättning per plats
Ta ut ett fast pris per plats utan basavgift.Strategi 3: Nivåbaserad platsprissättning
Olika basplaner med olika priser per plats.Strategi 4: Platsbundtar
Sälj platser i paket i stället för individuellt.Konfigurera platsbaserad fakturering
Steg 1: Planera din prissättning
Definiera din prisstruktur före implementeringen:1
Define Base Plan
Bestäm vad som ingår i basprenumerationen:
- Baspris (kan vara $0 vid ren prissättning per plats)
- Antal inkluderade platser
- Funktioner som är tillgängliga på denna nivå
2
Set Seat Pricing
Fastställ kostnaden för add-on per plats:
- Pris per ytterligare plats
- Eventuella volymrabatter (via flera add-ons)
- Maximalt antal platser (om tillämpligt)
3
Consider Billing Frequency
Anpassa platspriset efter din faktureringscykel:
- Månadsprenumerationer → månatliga platsavgifter
- Årsprenumerationer → årliga platsavgifter (ofta rabatterade)
Steg 2: Skapa plats-add-onet
I din Dodo Payments-dashboard:- Gå till Products → Add-Ons
- Klicka på Create Add-On
- Konfigurera add-onet:
Steg 3: Skapa basprenumerationen
Skapa din prenumerationsprodukt:- Gå till Products → Create Product
- Välj Subscription
- Konfigurera pris och information
- Bifoga ditt plats-add-on i avsnittet Add-Ons
Steg 4: Bifoga add-onet till produkten
Länka plats-add-onet till din prenumeration:- Redigera din prenumerationsprodukt
- Bläddra till avsnittet Add-Ons
- Klicka på Add Add-Ons
- Välj ditt plats-add-on
- Spara ändringarna
Din prenumerationsprodukt stöder nu platsbaserad prissättning. Kunder kan köpa valfritt antal extra platser under checkout.
Hantera platser
Lägga till platser i nya prenumerationer
Ange platskvantiteten när du skapar en checkout-session:Ändra platsantalet i befintliga prenumerationer
Använd Change Plan API för att justera platser. Arrayenaddons anger det nya totala platsantalet (inte förändringen).
Ta bort platser
Minska platsantalet genom att ange den lägre kvantiteten:Ta bort alla extra platser
Skicka en tomaddons-array för att ta bort alla add-ons:
Proportionell debitering vid platsändringar
När en platsändring tillämpas mitt i cykeln beräknar Dodo Payments den omedelbara debiteringen i tre steg:Så krediterar varje läge
Med
difference_immediately betalar kunden endast skillnaden mellan det gamla och det nya planpriset. Det är därifrån namnet kommer, och därför är beloppet detsamma oavsett när i cykeln ändringen görs.
Om krediten är större än debiteringen för den nya cykeln sparas mellanskillnaden som prenumerationsbunden kredit och tillämpas automatiskt på framtida förnyelser.
Genomräknat exempel: Lägga till 5 platser
Ett scenario som körs genom alla fyra lägen, så att siffrorna kan jämföras direkt.
I alla tre omedelbara lägen får kunden en hel ny månad för $130 i utbyte mot det som betalas idag.
Varför tidpunkten spelar roll för prorated_immediately
Samma ändring kostar mer ju senare i cykeln den görs, eftersom mindre av den aktuella cykeln återstår att kreditera.
Kunden får en hel ny månad i varje rad. Endast fördelningen mellan “redan betalat” och “betalar nu” ändras.
Använd
difference_immediately om du vill att en platsändring ska kosta lika mycket oavsett när den görs.
Genomräknat exempel: Den “överraskande debiteringen”
Detta är det fall som oftast överraskar merchants. Om ett litet plats-add-on läggs till sent i cykeln kan debiteringen bli mycket större än add-onets pris.
Att lägga till en plats för $10/månad kostar $55.00 med
prorated_immediately. Kunden debiteras för en hel ny månad på $60 och krediteras de $5 som återstod av den gamla månaden, och förnyelsedatumet återställs.
Om du vill att små tillägg mitt i cykeln endast ska kosta platspriset använder du difference_immediately.
Genomräknat exempel: Ta bort platser (nedgradering)
När den nya planen kostar mindre än krediten sparas överskottet som prenumerationskredit och tillämpas automatiskt på framtida förnyelser av denna prenumeration. Den läggs inte till i Customer Wallet och är inte en credit entitlement.Krediten täcker hela prenumerationen, basplanen och alla add-ons, inte bara platserna som tas bort.
Läsa förhandsgranskningssvaret
previewChangePlan returnerar de exakta radposter som kommer att debiteras. Varje radpost har en proration_factor:
Prorering beräknas på sekunden utifrån den exakta tidpunkten för ändringen, inte avrundat till närmaste dag. De genomräknade exemplen ovan använder avrundade värden vid dagens gränser för tydlighetens skull.
Förhandsgranska innan ändring
Förhandsgranska alltid proreringen innan du gör ändringar:Spåra platser med webhooks
Övervaka platsändringar genom att lyssna på subscription-webhooks:Relevanta händelser
Exempel på webhook-handler
Tillämpa platsgränser
Din applikation måste tillämpa platsgränser. Dodo Payments spårar faktureringen, men du styr åtkomsten.- Hard Limit
- Soft Limit with Warning
- Auto-Upgrade
Förhindra strikt att användare läggs till utöver platsantalet.
Avancerade mönster
Olika platstyper
Erbjud olika platstyper med olika prissättning:Årliga platsrabatter
Erbjud rabatterade årliga platspriser:Krav på minsta platsantal
Kräv ett minsta antal platser för vissa planer:Bästa praxis
Bästa praxis för prissättning
- Tydlig kommunikation: Visa priset per plats tydligt på din prissida
- Inkluderade platser: Överväg att inkludera några platser i baspriset för att minska tröskeln
- Volymrabatter: Erbjud lägre priser per plats för större team för att vinna företagsaffärer
- Årliga incitament: Rabattera årsplaner för att förbättra kassaflöde och kundbehållning
Teknisk bästa praxis
- Cacha platsantal: Cacha prenumerationens platsantal lokalt för att undvika API-anrop vid varje begäran
- Synkronisera regelbundet: Synkronisera med jämna mellanrum ditt lokala platsantal med Dodo Payments via API
- Hantera fel: Visa tydliga felmeddelanden och alternativ för nytt försök om en platsändring misslyckas
- Revisionsspår: Logga alla platsändringar för faktureringstvister och efterlevnad
Bästa praxis för användarupplevelse
- Feedback i realtid: Visa kostnadseffekten omedelbart när platser justeras
- Bekräftelsesteg: Kräv bekräftelse innan faktureringsändringar
- Transparens kring prorering: Förklara proportionella avgifter tydligt innan de tillämpas
- Enkla nedgraderingar: Gör det inte svårt att minska antalet platser (det skapar förtroende)
Felsökning
Seat count mismatch between app and billing
Seat count mismatch between app and billing
Symtom: Din app visar ett annat platsantal än prenumerationen.Orsaker:
- Webhooken togs inte emot eller bearbetades inte
- Race condition under platsändringen
- Cachad data har inte uppdaterats
- Implementera webhook-handlers för
subscription.plan_changed - Lägg till en knapp för “Synkronisera med fakturering” som hämtar den aktuella prenumerationen
- Ange en cache-TTL för att säkerställa regelbunden uppdatering
Unexpected mid-cycle charge amount
Unexpected mid-cycle charge amount
Symtom: Kunden är förvirrad över debiteringsbeloppet mitt i cykeln.Orsak:
prorated_immediately används sent i faktureringscykeln (se exemplet Den överraskande debiteringen ovan).Lösningar:- Använd alltid
previewChangePlaninnan du gör ändringar - Visa en tydlig uppdelning: “Att lägga till X platser kostar $Y idag”
- Byt till
difference_immediatelyom du vill att debiteringen alltid ska motsvara prisskillnaden
Add-on not appearing in checkout
Add-on not appearing in checkout
Symtom: Plats-add-onet är inte tillgängligt under checkout.Orsaker:
- Add-onet är inte kopplat till produkten
- Add-onet har arkiverats eller tagits bort
- Valutorna skiljer sig mellan produkten och add-onet
- Kontrollera att add-onet är kopplat i produktinställningarna
- Kontrollera add-onets status i Add-Ons-dashboarden
- Säkerställ att valutorna matchar exakt
Cannot reduce seats below current usage
Cannot reduce seats below current usage
Symtom: Kunden vill minska antalet platser men har tilldelade användare.Lösningar:
- Visa vilka användare som måste tas bort innan platserna minskas
- Implementera ett arbetsflöde: Ta bort användare → Minska platser
- Överväg en respitstid innan platsminskningen tillämpas