Hoppa till huvudinnehåll

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.

Nya funktioner

1. Entitlements

Dodo Payments levereras nu med enhetliga Entitlements — ett enda lager som driver automatisk leverans för varje uppfyllelseintegration. En enda produkt kan leverera flera entitlements vid varje lyckad köp eller aktiv prenumeration.
Entitlements dashboard med listan på entitlements till vänster och beviljningsaktivitet till höger
Fem nya plattformsintegrationer Fram till nu har Dodo Payments levererat licensnycklar och digitala filer automatiskt vid köp. Entitlements utökar omfånget till fem ytterligare plattformar — så betalande kunder kan få tillgång till din community, kod eller ditt innehåll i samma ögonblick som betalningen lyckas, utan manuell uppfyllelse från din sida:
IntegrationVad den levererarÅterkallandebeteende
DiscordTilldelar en vald roll i din Discord-server efter att kunden slutför OAuthRoll tas bort vid avbokning/återbetalning
GitHubLägger till kunden som en medarbetare till ett privat arkiv med vald behörighetsnivåMedarbetare tas bort vid avbokning/återbetalning
TelegramUtfärdar en engångsinbjudan att gå med i en privat chatt eller kanal via din Telegram-botKunden sparkas ut från chatten vid avbokning/återbetalning
FramerLåser upp en Framer-mall remix-länk med åtkomstkodÅtkomstkod inaktiveras vid avbokning/återbetalning
NotionDuplicerar en Notion-mallsida till kundens arbetsyta efter att de godkänt via OAuthLevererad sida arkiveras vid avbokning/återbetalning
Dessa går ihop med befintliga Licensnycklar (unika nycklar med aktiveringsgränser och utgånget) och Digitala filer (försignerade nedladdnings-URL:er för e-böcker, mallar, media) integrationer, alla nu hanterade genom samma beviljningslivscykel. Vad du får ut ur lådan
FunktionBeskrivning
Återanvändbara mallarDefiniera en entitlement en gång (aktiveringsgränser, filpaket, Discord-roll, repo-behörigheter, etc.) och bifoga den till vilken produkt som helst
Automatiska beviljningarUtfärdas på payment.succeeded och subscription.active, idempotenta vid förnyelser och återaktiveringar
Livscykelmedvetet återkallandeÅterkallas på subscription.cancelled, subscription.on_hold, INLINE_CODE_PLACEHOLDER_5ef9d90e37561a1_END, refund.succeeded, subscription.plan_changed, eller manuell API/dashboard-återkallelse — med en befolkad revocation_reason
OAuth + plattformsdirekta flödenOAuth för Discord, GitHub och Notion prenumerantsamtycke; direkta plattformsanrop för Telegram, Framer och Digital Files
DriftavkänningUpptäcker när en Discord-roll, GitHub-medarbetare eller Notion-sida går ur synkronisering på plattformsnivå och återkallar med revocation_reason: platform_external
Kryptering i vilaAlla plattformstoken (OAuth, bot, appinstallationer) lagrade med AES-256-GCM
Webhooks Fyra nya livscykelhändelser utlöses för varje beviljning:
HändelseUtlöses när
entitlement_grant.createdEn ny beviljning skapas för en kund
entitlement_grant.deliveredKundåtkomst beviljad
entitlement_grant.failedLeverans kunde inte slutföras; inspektera error_code och error_message
entitlement_grant.revokedÅtkomst återkallad; inspektera revocation_reason
För nya integrationer, lyssna på entitlement_grant.delivered istället för payment.succeeded. Betalningsframgång betyder inte att leveransen är klar, särskilt för OAuth-baserade integrationer.
Läs mer: Entitlements | Entitlement Grant Webhooks

2. Prenumerationsavbokningsorsaker i Kundportalen

När kunder avbokar en prenumeration från Kundportalen uppmanas de nu att dela med sig av varför de avbokar innan de bekräftar. Den fångade orsaken lagras på prenumerationen som cancellation_feedback, visas i API- och webhook-payloads, och finns tillgänglig i instrumentpanelen så du kan upptäcka mönster för churn vid en blick.
Kundportal avbokningsmodal med 'Varför avbokar du?' dropdown som visar orsaker som För dyr, Saknar funktioner, och Annat
Orsaksval
VärdeKundmötesetikett
too_expensiveFör dyrt
missing_featuresSaknar funktioner
switched_serviceBytte till annan tjänst
unusedAnvänder det inte tillräckligt
customer_serviceDålig kundservice
low_qualityLåg kvalitet
too_complexFör komplext
otherAnnat
Var det visas
  • Prenumerationsobjekt: Ny cancellation_feedback fält (en av värdena ovan) och cancellation_comment (valfri fri text), fylld när kunden avbokar
  • subscription.cancelled webhook: Båda fälten ingår i payload
  • API: Förmedla cancellation_feedback och cancellation_comment till PATCH /subscriptions/{id} när du schemalägger eller utför en avbokning programmatiskt
// Reading the captured feedback
const subscription = await client.subscriptions.retrieve('sub_123');
console.log(subscription.cancellation_feedback); // e.g., "too_expensive"
console.log(subscription.cancellation_comment);  // e.g., "Switching to a competitor"
Kombinera cancellation_feedback med Prenumerationsdrift för att skräddarsy dina vinna tillbaka-mejl — t.ex. skicka en rabattkod till too_expensive avbeställare och en “vad saknas?”-undersökning till missing_features avbeställare.
Läs mer: Kundportalen | Prenumerationswebhooks

3. Konfigurerbar Mandat Minsta Belopp för INR E-mandat

Du kan nu konfigurera mandatgolvet för INR e-mandat på indiska kort återkommande prenumerationer. Tidigare använde varje indiskt kort prenumeration under ₹15,000 ett fast ₹15,000 påbegäran mandat. Nu kan du åsidosätta detta golv på handlarens nivå — och per checkout-session eller prenumeration om det behövs. Mandatbeloppet registrerat hos kundens bank är max(mandate_min_amount_inr_paise, billing_amount), så detta värde fungerar som kundmötes auktoriseringtak när faktureringen är lägre än golvet.
// Per-subscription override
const subscription = await client.subscriptions.create({
  product_id: 'prod_inr_monthly',
  customer: { email: 'customer@example.in' },
  billing: { country: 'IN' /* ... */ },
  mandate_min_amount_inr_paise: 2_000_000 // ₹20,000 ceiling for this subscription
});

// Or via a checkout session
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_inr_monthly', quantity: 1 }],
  mandate_min_amount_inr_paise: 2_000_000,
  return_url: 'https://yoursite.com/return'
});
Upplösningsprioritet
  1. Per förfrågan överskrivning (mandate_min_amount_inr_paise på checkout-sessionen, betalningen eller prenumerationen)
  2. Handlarnivåinställning i affärsinställningar
  3. Systemstandard på ₹15,000 (1,500,000 paise)
FältTypOmrådeGäller för
mandate_min_amount_inr_paiseinteger (INR paise)>= 1Indiska kort INR prenumerationer på icke-Airwallex kontakter
Denna inställning påverkar endast e-mandat som registrerats för indiska utfärdade kort (Visa, Mastercard, RuPay) på INR prenumerationer. UPI prenumerationer följer sitt eget AutoPay-flöde och påverkas inte.
Läs mer: Indiska Betalningsmetoder | Prenumerationer med RBI Mandates

4. Adaptive Currency Fees Inclusive Business Setting

Adaptive Currency är funktionen som låter dig debitera kunder i deras lokala valuta. Som standard bär kunden 2–4% adaptive currency fee som läggs på ditt visade pris. Med den nya Avgifter Inkluderad inställningen kan du vända på detta: hålla det visade priset oförändrat för kunden och stå för avgiften själv. Var man kan konfigurera Gå till Inställningar → Affärs, se till att Adaptiv Prissättning är aktiverad och aktivera Avgifter Inkluderad i sektionen Adaptiv Valuta. Per förfrågan överskrivning Du kan också åsidosätta handelsstandard för enskilda checkout, betalningar och on demand prenumerationer med hjälp av adaptive_currency_fees_inclusive boolean:
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  adaptive_currency_fees_inclusive: true, // override business default
  return_url: 'https://yoursite.com/return'
});
ModeKund serHandlaren avvecklar
Exklusiv (standard)Lokal pris + 2–4% avgift på toppenFullt grundpris
InkluderandeLokal pris (oförändrat)Grundpris minus 2–4% avgift
INR → INR transaktioner behandlas alltid som inkluderande oavsett affärsinställning eller per förfrågan överskrivning.
Läs mer: Adaptive Currency

5. Dodo Payments Desktop App

Den officiella Dodo Payments Desktop appen är nu allmänt tillgänglig för macOS, Windows, och Linux. Kör din betalningsdashboard som en snabb, inhemsk app — ingen webbläsarflik krävs.
PlattformLadda ner
macOS (Apple Silicon)Dodo.Payments_<version>_aarch64.dmg
macOS (Intel)Dodo.Payments_<version>_x64.dmg
WindowsDodo.Payments_<version>_x64-setup.exe (eller .msi)
Linux (Debian/Ubuntu)Dodo.Payments_<version>_amd64.deb
Linux (Fedora/RHEL)Dodo.Payments-<version>-1.x86_64.rpm
Linux (AppImage, auto-uppdatera)Dodo.Payments_<version>_amd64.AppImage
Vad finns inuti
  • Liten inhemsk binär — byggd med Tauri på systemets inhemska webbvy, ~5 MB totalt (ingen inbäddad Chromium)
  • Signerad och godkänd — macOS-byggnader är signerade med Apple Developer ID och godkända, så inga Gatekeeper varningar
  • Auto-uppdatering — kontrollerar var 4:e timme och tillämpar signerade uppdateringar automatiskt från GitHub Releases (fungerar på macOS, Windows och Linux AppImage)
  • System tray + menyfält — göm till tray på macOS, fulla Fil/Redigera/Vy/Hjälp-menyer med kortkommandon (⌘⇧H gå till dashboard, ⌘L kopiera aktuell URL, ⌘⌥I utvecklingsverktyg)
  • Djup-länkstöd — magiska-länk autentiseringslänkar öppnas direkt i appen
  • Multi-fönster — öppna flera dashboards sida vid sida
Hämta den senaste installatören för din plattform från Desktop App Releases sida. Repon är helt öppen källkod.

6. Stabila kryptovaluta betalningar (USDC, USDP, USDG)

Acceptera stabila kryptovalutabetalningar globalt med USD-avräkning. Kunder betalar från sin valda stabila kryptovaluta plånbok på nätverket av deras val; du får fiat USD utan exponering för kryptovolatilitet, inga chargebacks och ingen bankinfrastruktur som krävs på kundens sida. Stödda valutor och nätverk
Stabil kryptovalutaNätverk
USDCEthereum, Solana, Polygon, Base
USDPEthereum, Solana
USDGEthereum
Täckning
DetaljVärde
FaktureringsvalutaUSD
Stödda länderGlobal (utom Indien)
PrenumerationerEj stödda (endast engångsbetalningar)
Minsta belopp$0.50
AvräkningUSD
Konfiguration Förmedla crypto i allowed_payment_method_types när du skapar en checkout-session:
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_123', quantity: 1 }],
  allowed_payment_method_types: ['crypto', 'credit', 'debit'],
  return_url: 'https://example.com/success'
});
Kunden visas en plånboksadress och QR-kod med stabil kryptovalutabeloppet beräknat vid realtidsväxelkursen; när blockkedjan bekräftar transaktionen, utlöses din payment.succeeded webhook och kunden omdirigeras till din framgångssida.
Stabila kryptovalutabetalningar är irreversibla av design — det finns inga chargebacks. Vi rekommenderar alltid att erbjuda credit och debit som reservmetoder för kunder utan stabil kryptovaluta plånbok.
Läs mer: Stabila kryptovalutabetalningar

7. Importera befintliga licensnycklar

Du kan nu importera licensnycklar från ett annat system till Dodo Payments med hjälp av Create License Key API. Detta låser upp störningsfri migrering från vilken extern licensnyckelleverantör som helst, så att dina befintliga kunder kan fortsätta aktivera, validera, och avaktivera sina nycklar mot Dodo Payments utan nyutgivning.
const licenseKey = await client.licenseKeys.create({
  customer_id: 'cus_abc123',
  product_id: 'prod_456',
  key: 'YOUR-EXISTING-LICENSE-KEY',
  activations_limit: 5,
  expires_at: '2026-12-31T23:59:59Z',
});
Importerade nycklar är taggade med source: "import" (vs. source: "auto" för nycklar som genereras automatiskt vid betalning), så att du kan skilja migrerat lager från organiskt utfärdade nycklar när du frågar GET /license_keys. payment_id på importerade nycklar är null eftersom de inte är knutna till en Dodo Payments-transaktion.
Licensnycklar som skapas eller uppdateras genom API utlöser inte e-postmeddelanden till kunderna. Om du behöver meddela kunder om en importerad nyckel, hantera det separat i din applikation.
Migrera från Polar.sh eller Lemon Squeezy? dodo-migrate CLI automatiserar bulkimporter av produkter, kunder, rabatter och licensnycklar i ett enda kommando.
Läs mer: Licensnycklar | Create License Key API

8. require_phone_number för checkout-sessioner

Tvinga kunder att ange ett telefonnummer under utcheckningen genom att ställa in feature_flags.require_phone_number: true när du skapar en checkout-session. Telefonnummer blir ett obligatoriskt fält i utcheckningsformuläret, med validering som visar “Telefonnummer är obligatoriskt” om kunden lämnar det tomt.
const session = await client.checkoutSessions.create({
  product_cart: [{ product_id: 'prod_abc', quantity: 1 }],
  feature_flags: {
    allow_phone_number_collection: true,
    require_phone_number: true
  },
  return_url: 'https://yoursite.com/return'
});
FlaggaStandardBeteende
allow_phone_number_collectiontrueVisar telefonnummerfältet i utcheckningen
require_phone_numberfalseGör telefonnummerfältet obligatoriskt
require_phone_number: true kräver allow_phone_number_collection: true. API avvisar sessioner där require_phone_number är true medan telefoninsamling är inaktiverad.
Användbar för B2B SaaS, reglerade industrier eller något flöde där du behöver en verifierad kontaktkanal för support, bedrägerigranskning eller efterlevnad.
Läs mer: Utcheckningsfunktioner | Create Checkout Session API

Buggfixar & Förbättringar

  • Mindre buggfixar och stabilitetsförbättringar över plattformen
Last modified on May 22, 2026