Nya funktioner
1. Produktnivåanalyser
Varje produkt har nu sin egen dedikerade analysinstrumentpanel. Navigera till Products > [Select a Product] för att komma åt detaljerade mätvärden som är specifika för den produkten, organiserade över fem flikar:
| Flik | Vad du får |
|---|
| Overview | Totala intäkter, antal lyckade betalningar, intäktstrenddiagram för 30 dagar (dagligen eller kumulativt) och en filtrerbar transaktionstabell |
| Customers | Topp 3-kunder rankade efter spendering med podiumvy, plus en fullständig kunduppdelningstabell |
| Retention | Kund- och intäktsomsättningsgrad samt ett tvålinjigt trenddiagram för att upptäcka mönster |
| Subscribers | Alla prenumerationer för produkten med status, startdatum, nästa faktureringsdatum och belopp |
| MRR | Staplat stapeldiagram för Monthly Recurring Revenue med uppdelning i New MRR, Expansion MRR, Churned MRR och Net New MRR |
Alla flikar stöder ett datumfilter (standardinställning är All Time) så att du kan gräva ner i valfri tidsperiod.
Använd fliken Retention för att tidigt identifiera produkter med hög churn, och fliken MRR för att följa om expansionsintäkter växer snabbare än churnade intäkter månad för månad.
Läs mer: Produktnivåanalyser
2. Verifi RDR-stöd i Dodo Payments
Dodo Payments stöder nu Visa Rapid Dispute Resolution (RDR) via Verifi – ett automatiserat verktyg för tvistförebyggande som löser berättigade Visa-tvister innan de blir formella chargebacks. När en kortinnehavare initierar en tvist fångar RDR upp den och utfärdar automatiskt en återbetalning om transaktionen ligger under din konfigurerade USD-gräns.
Varför det spelar roll
| Fördel | Påverkan |
|---|
| Lägre tvistfrekvens | RDR-lösta tvister räknas inte mot Visas 0,9 %-gräns |
| Inga tvistavgifter | Undvik icke återbetalningsbara avgifter på 15–25 USD per tvist |
| Ingen operativ börda | Ingen bevisinsamling eller svarstid att hålla |
| Bättre kundupplevelse | Kortinnehavare får omedelbara återbetalningar |
| Kontoskydd | Håll dig utanför Visas Dispute Monitoring Program (VDMP) |
Att överskrida Visas 0,9 %-iga tvistfrekvens eller 100 tvister/månad triggar VDMP, med stigande böter upp till över 50 000 USD/månad. RDR hjälper dig hålla dig långt under dessa tröskelvärden.
Så fungerar det
- Kortinnehavaren initierar en tvist med sin bank
- RDR fångar upp tvisten innan den blir ett formellt chargeback
- Om transaktionsbeloppet är lika med eller under din gräns utfärdas en återbetalning automatiskt
- Tvisten löses omedelbart och räknas inte mot din tvistfrekvens
Transaktioner som automatiskt återbetalas via RDR visas som en förlorad tvist i din Dodo Payments-instrumentpanel. Det är väntat – återbetalningen skickades automatiskt för att förebygga ett formellt chargeback.
För att aktivera Verifi RDR på ditt konto, kontakta support@dodopayments.com för att konfigurera din gräns.
Läs mer: Visa RDR-dokumentation
3. DodoPayments CLI
Vi introducerar helt nya DodoPayments CLI (dodopayments-cli) – hantera hela ditt Dodo Payments-arbetsflöde direkt från terminalen. Byggd för utvecklare som föredrar kommandoraden låter CLI dig hantera produkter, betalningar, kunder, rabatter, licenser, tillägg, återbetalningar och till och med skapa checkout-sessioner utan att lämna din redigerare.
Installation
npm install -g dodopayments-cli
Viktiga kommandon
| Kommando | Beskrivning |
|---|
dodo login | Autentisera med din API-nyckel (öppnar webbläsare) |
dodo products list | Lista alla produkter |
dodo payments list | Lista alla betalningar |
dodo customers create | Skapa en ny kund |
dodo checkout new | Skapa en checkout-session och få URL:en |
dodo wh listen | Skicka vidare live-testwebhooks till din lokala server via WebSocket |
dodo wh trigger | Skicka falska webhook-payloads till valfri endpoint |
Webhook-testning
CLI:et innehåller två kraftfulla verktyg för utveckling:
dodo wh listen — Öppnar en WebSocket-anslutning för att vidarebefordra realtids-testwebhooks till din lokala server, samtidigt som ursprungliga headers bevaras för signaturverifieringstestning
dodo wh trigger — Skickar mock webhook-payloads interaktivt, med stöd för alla 22 händelsetyper inom prenumerationer, betalningar, återbetalningar, tvister och licenser
Webhook-lyssnaren fungerar endast med en API-nyckel för testläge. Se till att du är inloggad med en testnyckel innan du använder dodo wh listen.
Läs mer: CLI-dokumentation
4. Omgjort gränssnitt för kundportalen
Kundportalen har helt byggts om med ett rent, enhetligt gränssnitt. Den nya portalen har navigering i en vänster sidomeny och organiserade sektioner, vilket ger kunderna en mer intuitiv självbetjäningsupplevelse.
Nyheter
| Sektion | Funktioner |
|---|
| Active Subscriptions | Visa alla aktiva prenumerationer med planinformation, faktureringscykel och nästa betalningsdatum |
| Payment Methods | Hantera sparade betalsätt, lägg till nya kort och uppdatera betalningsuppgifter |
| Billing History | Visa tidigare fakturor med nedladdningsbara PDF-kvitton |
| Billing Information | Redigera namn, e-post, telefonnummer och faktureringsadress |
| Subscription Details | Visa detaljerad prenumerationsinfo med alternativ att säga upp eller byta plan |
| Plan Changes | Uppgradera eller nedgradera via Produktkollektioner direkt i portalen |
Kunder kan också uppdatera betalsätt för aktiva prenumerationer eller återaktivera prenumerationer som pausats på grund av misslyckade betalningar – allt från den omgjorda portalen.
Det omgjorda portalen finns på https://customer.dodopayments.com/login/{business_id} för live-läge och https://test.customer.dodopayments.com/login/{business_id} för testläge.
Läs mer: Kundportal
5. Uppdatera betalsätt i inline checkout
inline checkout stöder nu uppdateringar av betalsätt för prenumerationer. När en kund behöver uppdatera sitt betalsätt (för en aktiv prenumeration eller för att återaktivera en pausad prenumeration) kan flödet för att uppdatera betalsättet nu renderas direkt i din sidlayout med inline checkout – vilket ger en sömlös, inbäddad upplevelse.
Så fungerar det
- Anropa Update Payment Method API för att få en
payment_link:
const response = await client.subscriptions.updatePaymentMethod('sub_123', {
type: 'new',
return_url: 'https://example.com/return'
});
- Använd den returnerade
payment_link som checkoutUrl i inline checkout:
DodoPayments.Checkout.open({
checkoutUrl: response.payment_link,
elementId: "dodo-inline-checkout"
});
Iframe:en renderar endast formuläret för insamling av betalsätt, så att kunder kan ange nya kortuppgifter eller välja ett sparat betalsätt utan att lämna din sida.
För pausade prenumerationer skapar flödet för att uppdatera betalsätt automatiskt en avgift för kvarstående belopp. Övervaka payment.succeeded och subscription.active webhooks för att bekräfta återaktivering.
Läs mer: Inline Checkout | Uppdateringar av prenumerationsbetalsätt
6. Stöd för förifyllt skatte-ID i checkout-sessioner
Du kan nu förifylla Tax ID (t.ex. VAT-nummer, GST-nummer) när du skapar en checkout-session med parametern tax_id. Detta är idealiskt för B2B-transaktioner där du redan känner till kundens skatteidentifikationsnummer. När ett Tax ID förifylls är fältet förifyllt och låst i checkout-formuläret.
const session = await client.checkoutSessions.create({
product_cart: [{ product_id: 'prod_123', quantity: 1 }],
customer: { customer_id: 'cus_123' },
billing_address: { country: 'DE' },
tax_id: 'DE999999999',
return_url: 'https://yoursite.com/return'
});
Parametern tax_id kräver en billing_address med minst ett country-fält. Skattebehörighet valideras i realtid och omvänd skattskyldighet tillämpas automatiskt för kvalificerade B2B-transaktioner.
Använd feature-flaggan allow_customer_editing_tax_id för att styra om kunder kan ändra det förifyllda Tax ID, och allow_tax_id för att växla Tax ID:s synlighet i checkout.
Läs mer: Checkout Sessions - Tax ID | B2B Payments
7. Licensnyckel och e-post i retur-URL-omdirigering
Efter att en kund slutfört checkout lägger Dodo Payments nu till license_key och email som frågeparametrar till din return_url-omdirigering, utöver de redan befintliga payment_id/subscription_id och status-parametrarna.
Tillagda frågeparametrar
| Parameter | Typ | Villkor |
|---|
payment_id | string | Alltid närvarande för engångsbetalningar |
subscription_id | string | Alltid närvarande för prenumerationsbetalningar |
status | string | Alltid närvarande |
license_key | string | Närvarande om produkten har licensnycklar aktiverade (kommaseparerade vid flera) |
email | string | Närvarande om kunden har en registrerad e-postadress |
Exempel på omdirigerings-URL:er:
# One-time payment with license key
https://yoursite.com/return?payment_id=pay_xxx&status=succeeded&license_key=LK-001&email=customer%40example.com
# Subscription with multiple license keys
https://yoursite.com/return?subscription_id=sub_xxx&status=active&license_key=LK-001,LK-002&email=customer%40example.com
Använd dessa frågeparametrar för att visa licensnycklar eller skicka ett bekräftelsemail direkt på din retur-sida utan att behöva ett extra API-anrop.
Läs mer: Checkout Sessions - Return URL | License Keys in Return URL
8. API för att uppdatera kundens e-post
Endpointen PATCH /customers/{customer_id} stöder nu att uppdatera kundens e-postadresser programmässigt. Uppdatera e-post tillsammans med namn, telefonnummer och metadata i ett enda API-anrop.
await client.customers.update('cus_123', {
email: 'newemail@example.com',
name: 'Updated Name'
});
Uppdaterbara fält
| Fält | Typ | Beskrivning |
|---|
email | string | null | Kundens e-postadress |
name | string | null | Kundens visningsnamn |
phone_number | string | null | Telefonnummer i internationellt format |
metadata | object | null | Egna nyckel-värde-par |
Kundens e-postuppdateringar finns också tillgängliga via Kundportalen (självbetjäning), instrumentpanelen och CLI via dodo customers update.
Läs mer: Customer Update API | Kundhantering
9. Lansering av Bun-adapter
Vi presenterar @dodopayments/bun – en dedikerad ramverksadapter för Bun:s inbyggda server (Bun.serve()). Integrera checkout, kundportalen och webhooks med Bun med bara några rader kod.
Installation
bun add @dodopayments/bun
Snabb konfiguration
import { Checkout, CustomerPortal, Webhooks } from "@dodopayments/bun";
Bun.serve({
routes: {
"/api/checkout": Checkout({
bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
returnUrl: process.env.DODO_PAYMENTS_RETURN_URL!,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT!,
}),
"/api/customer-portal": CustomerPortal({
bearerToken: process.env.DODO_PAYMENTS_API_KEY!,
environment: process.env.DODO_PAYMENTS_ENVIRONMENT!,
}),
"/api/webhooks": Webhooks({
webhookKey: process.env.DODO_PAYMENTS_WEBHOOK_KEY!,
onPaymentSucceeded: async (payload) => {
console.log("Payment succeeded:", payload.data.payment_id);
},
onSubscriptionActive: async (payload) => {
console.log("Subscription active:", payload.data.subscription_id);
},
}),
},
});
Bun-adaptern stöder alla tre checkout-flöden (statisk, dynamisk och sessionsbaserad), generering av kundportal-sessioner och säker webhook-hantering med signaturverifiering och Zod-validering för 22 händelsetyper.
Bun-adaptern går med i vår familj av 11 ramverksadaptrar inklusive Next.js, Nuxt, Express, Fastify, Hono, Astro, SvelteKit, Remix, TanStack Start, Better Auth och Convex.
Läs mer: Bun Adapter Documentation | Översikt över ramverksadaptrar