Quick Start
API Reference
Preview Endpoint
Session Validity: Checkout sessions expire after 24 hours by default, or 15 minutes when
confirm: true.Prerequisites
You need:- An active Dodo Payments merchant account
- API credentials from Developer → API Keys in the dashboard
- At least one product created in Products
Creating Your First Checkout Session
- Node.js SDK
- Python SDK
- REST API
API Response
All methods return:session_id is guaranteed to be present. When payment_method_id is provided, the charge processes immediately and checkout_url is null. Use the returned payment_id instead.
When confirm: true, the payment is created at session-creation time, and the response also includes payment_id, client_secret, and publishable_key for use with the Dodo Payments checkout SDK.
Redirect Your Customer
1
Extract the checkout URL
Get
checkout_url from the API response.2
Redirect to checkout
Send your customer to the URL:Alternatively, open in a new window:
3
Handle the return
After payment, customers are redirected to your
return_url with query parameters:Example redirect:
Kontrollera sessionsstatus
För att kontrollera en sessions status anropar du Get Checkout Session (GET /checkouts/{id}). Svaret innehåller sessionens id, created_at, customer_email och customer_name, samt payment_id och payment_status. Båda betalningsfälten är null medan kunden fortfarande anger sina uppgifter. När kunden har skickat in betalningen innehåller payment_status betalningens status, till exempel succeeded, failed eller processing. Använd webhooks som källa till sanning för leverans.
Request Body
Obligatoriska fält
array
obligatorisk
Array med produkter som ska inkluderas i checkout-sessionen. Varje produkt måste ha ett giltigt
product_id från din dashboard.Du kan kombinera engångsbetalningsprodukter med en prenumerationsprodukt i samma session. En varukorg kan också innehålla två eller fler prenumerationsprodukter, men då kan den inte innehålla engångsprodukter. Se Varukorg med flera prenumerationer. En varukorg rymmer högst 20 produkter.Valfria fält
Customer Information
Customer Information
object
Kundinformation. Du kan antingen koppla en befintlig kund med hjälp av kundens ID eller skapa en ny kundpost under checkout.
- Attach Existing Customer
- Create New Customer
object
Faktureringsadress för korrekt skatteberäkning, bedrägeriförebyggande och regelefterlevnad.När
confirm: true blir alla faktureringadressfält obligatoriska, såvida inte minimal_address är true.Payment Configuration
Payment Configuration
array
Styr vilka betalningsmetoder som är tillgängliga för kunder under checkout. Detta hjälper dig att optimera för specifika marknader eller affärskrav.Vanliga alternativ:
credit, debit, upi_collect, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, cashapp, ach, multibanco, bancontact_card, eps, ideal, blik, gcash, ali_pay_hk, fps, touch_n_go, paypalSe Create Checkout Session API reference för en fullständig lista.Exempel:string
Åsidosätt standardvalet av valuta med en fast faktureringsvaluta. Använder ISO 4217-valutakoder.Valutor som stöds:
USD, EUR, GBP, CAD, AUD, INR och flerExempel: "USD" för amerikanska dollar, "EUR" för euroDet här fältet är endast effektivt när adaptiv prissättning är aktiverad. Om adaptiv prissättning är inaktiverad ignorerar API:et det här fältet, och valutan hämtas från produktpriset eller faktureringslandet.boolean
standard:"false"
Visa tidigare sparade betalningsmetoder för återkommande kunder för snabbare checkout och bättre användarupplevelse.
Session Management
Session Management
string
URL dit kunder omdirigeras efter slutförd betalning. Dodo Payments lägger till query-parametrar i din URL vid omdirigeringen (se omdirigeringstabellen ovan).Exempel på omdirigerings-URL:er:Använd query-parametrarna
license_key och email för att visa licensnycklar eller skicka en bekräftelse direkt på retursidan utan att behöva göra ett extra API-anrop.string
URL dit kunder omdirigeras när de klickar på bakåtknappen eller avbryter checkout-sessionen. Om den inte anges visas ingen bakåtknapp.Ange en
cancel_url för att ge kunderna ett tydligt sätt att återvända till din webbplats utan att slutföra köpet.boolean
standard:"false"
Om true slutförs alla sessionsuppgifter omedelbart. API:et returnerar ett fel om obligatoriska uppgifter saknas.När
confirm: true:- Alla faktureringsadressfält blir obligatoriska (endast
countryochzipcodenärminimal_addressärtrue) payment_method_idkan anges för att behandla debiteringen omedelbart- Sessionen upphör efter 15 minuter i stället för 24 timmar
- En befintlig
customer_idkrävs ompayment_method_idanges
array
Tillämpa en eller flera staplade rabattkoder på checkout-sessionen. Koderna tillämpas i arrayordning (den första koden minskar startpriset, den andra minskar det redan rabatterade priset och så vidare), upp till högst 20 koder per session.När Purchasing Power Parity är aktiverat är startpriset det PPP-justerade beloppet, inte baspriset.Det enskilda
discount_code-fältet nedan är föråldrat men stöds fortfarande fullt ut. Det kan inte kombineras med discount_codes i samma request.string
föråldrad
Föråldrat — använd helst
discount_codes för nya integrationer. Det här fältet fungerar fortfarande av bakåtkompatibilitetsskäl, men kan inte kombineras med discount_codes i samma request.object
Anpassade nyckel-värde-par för att lagra ytterligare information om sessionen.
boolean
Åsidosätt handlarens standardbeteende för 3DS för den här sessionen.
boolean
standard:"false"
Aktivera läge för minimal adressinsamling. När det är aktiverat samlar checkout endast in:
- Land: Krävs alltid för skatteberäkning
- ZIP/postnummer: Endast i regioner där det behövs för beräkning av sales tax, VAT eller GST
confirm: true krävs endast zipcode (samt country); de övriga faktureringsadressfälten förblir valfria.string
En sparad betalningsmetod som tillhör den kopplade kunden. Kräver
confirm: true och en befintlig customer.customer_id. Betalningsmetoden valideras för behörighet med betalningens valuta. När den anges behandlas debiteringen omedelbart och checkout_url returneras som null. Använd den returnerade payment_id i stället.boolean
standard:"false"
Om true returneras en förkortad kassadress i stället för den fullständiga sessionsadressen.
string
Produktinsamlings-ID för den samlingsbaserade kassaflödesprocessen. När du anger det ska du skicka en tom
product_cart-array. Rabattkoder kan inte tillämpas i förväg när sessionen skapas. Se Produktkollektioner.string
Skatte-ID för kunden (till exempel ett momsregistreringsnummer). Kräver
billing_address med en country.string
Valfritt företags- eller juridiskt namn som är kopplat till skatte-ID:t, högst 250 tecken. När det anges tillsammans med en giltig
tax_id visas det på fakturan i stället för kundens personliga namn.integer
Åsidosätt handlarens mandattak (i INR-paise) för INR-e-mandat på indiska kort.Mandatbeloppet som skickas till betalningsförmedlaren är
max(this_floor, actual_billing_amount), så detta fungerar i praktiken som det kundvända auktoriseringstaket när faktureringen är lägre. När värdet inte anges används handlarinställningen; om inte heller den är angiven används systemets standardvärde på ₹15,000.UI Customization
UI Customization
object
Anpassa kassgränssnittets utseende och beteende.
Feature Flags
Feature Flags
object
Konfigurera specifika funktioner och beteenden för kassessionen.
Custom Fields
Custom Fields
array
Samla in ytterligare information från kunder under betalningen med anpassade formulärfält. Du kan definiera upp till 5 anpassade fält per kassession. Kundsvaren inkluderas i webhook-nyttolaster och är tillgängliga via API:et.
- Webhooks:
payment.succeeded,subscription.activeoch andra relevanta händelsenyttolaster innehållercustom_field_responses-arrayen - API-svar: Betalnings- och prenumerationsobjekt innehåller
custom_field_responses
Subscription Configuration
Subscription Configuration
object
Ytterligare konfiguration för kassessioner som innehåller prenumerationsprodukter.
Användningsexempel
Enkel betalning för en produkt
Varukorg med flera produkter
Varukorg med flera prenumerationer
För att sälja flera prenumerationsprodukter i en betalning lägger du till två eller fler prenumerationsprodukter iproduct_cart. Kunden betalar en gång och Dodo Payments skapar en betalning, en faktura och en prenumeration för varje produkt. Varje prenumeration har sin egen faktureringscykel och förnyas separat, så en månadsprodukt och en årsprodukt kan dela varukorg.
- Den kan inte innehålla engångsprodukter. API:et avvisar begäran med en
422. - Den rymmer högst 20 prenumerationsprodukter.
- Den kan inte innehålla samma produkt två gånger. Om du vill sälja mer än en enhet av en produkt anger du i stället
quantity. - Den kan inte använda on-demand-fakturering (
subscription_data.on_demand). - En rabattkod som tillämpas på varukorgen räknas som en inlösen.
subscription_data.trial_period_days gäller för varje prenumeration i varukorgen. Utan den använder varje prenumeration provperioden som angetts för den egna produkten. Om du inte anger den och Förhindra missbruk av provperioder är aktiverat startar en produkt som kunden redan har provat utan provperiod.
Den resulterande betalningen har is_multi_subscription: true och listar varje prenumeration som den startar i subscription_ids. Dess subscription_id är null eftersom ingen enskild prenumeration äger betalningen. Webhooken payment.succeeded innehåller samma fält. Läs is_multi_subscription för att hitta betalningstypen, inte längden på subscription_ids.
När betalningen lyckas får du en payment.succeeded-händelse för varukorgen och en subscription.active-händelse för varje prenumeration. Därefter förnyas, ändrar plan och avslutas varje prenumeration separat, med en egen faktura för varje förnyelse.
Alla prenumerationer från en varukorg delar betalningsmetoden som kunden använde i kassan. När du uppdaterar betalningsmetoden för en av dem flyttar Dodo Payments den nya betalningsmetoden till varje prenumeration från samma varukorg som har samma avräkningsvaluta och faktureringsvaluta och är active, on_hold, past_due eller paused. Alla prenumerationer från en varukorg startar med samma avräkningsvaluta och faktureringsvaluta, även när produkterna har olika prisvalutor. En senare ändring, till exempel ett planbyte, kan flytta en prenumeration till en annan avräkningsvaluta eller faktureringsvaluta. Den prenumerationen behåller sin gamla betalningsmetod, så uppdatera den separat. För en prenumeration av typen on_hold försöker uppdateringen endast på nytt debitera den prenumerationens obetalda faktura.
Prenumeration med provperiod
Förbekräftad betalning
Betalning med valutaöverskridning
Sparade betalningsmetoder för återkommande kunder
B2B-betalning med insamling av skatte-ID
Betalning med mörkt tema och staplade rabattkoder
Regionala betalningsmetoder (UPI för Indien)
Detaljerad information om UPI-konfiguration och testning finns på sidan Betalningsmetoder i Indien.BNPL-betalning (Köp nu, betala senare)
Detaljerad information om BNPL-konfiguration och testning finns på sidan Köp nu, betala senare (BNPL).Direktbetalning med befintlig betalningsmetod
Korta länkar för tydligare betalningsadresser
Hoppa över sidan för lyckad betalning med omedelbar omdirigering
Tvinga ett språk
Samla in anpassade fält
Förhandsgranska kassessioner
Använd slutpunkten Förhandsgranska kassession för att beräkna priser, skatter och totalbelopp innan du skapar en session. Detta är användbart när du vill visa korrekt prisinformation på din webbplats.Den förhandsgranskade
current_breakup.subtotal återspeglar redan Köpkraftsparitet och Charm Pricing där de gäller för produkten.När varukorgen innehåller en prenumerationsprodukt returnerar förhandsgranskningssvaret även en
next_billing_date – en förhandsvisning av det kommande faktureringsdatumet, så att du kan visa det innan prenumerationen skapas. Det beräknas i förhållande till nu: now + trial period när en provperiod gäller, annars now + one payment frequency. Fältet utelämnas för varukorgar som endast innehåller engångsprodukter. Detta är en uppskattning baserad på tidpunkten för förhandsgranskningen; det auktoritativa next_billing_date sätts när prenumerationen aktiveras.Förhandsgranskningen returnerar även
trial_period_days (den effektiva provperiodens längd, kostnadsfri eller betald) och trial_amount (provperiodens debitering per enhet efter rabatter, i prisvalutans minsta enheter). trial_amount finns endast för en betald provperiod och är null för en kostnadsfri provperiod eller ingen provperiod. Använd current_breakup för den skattebelagda totalsumman som faktiskt ska betalas idag.För en varukorg med flera prenumerationer returnerar svaret även en
subscriptions-array med en post per prenumeration: product_id, amount_due_now, tax_due_now, recurring_amount, recurring_tax, trial_period_days och next_billing_date. Det övergripande next_billing_date är det tidigaste datumet i varukorgen, och det övergripande trial_period_days och trial_amount är null. Läs belopp från subscriptions och current_breakup. recurring_breakup summerar förnyelsebeloppen för alla prenumerationer, även när de förnyas på olika datum, så läs varje förnyelse från subscriptions.- Node.js SDK
- Python SDK
- REST API
Migrera från Dynamic Links
Om du använder Dynamic Links erbjuder Checkout Sessions större flexibilitet. Med Dynamic Links var du tvungen att ange kundens fullständiga faktureringsadress. Med Checkout Sessions kan du skicka den information du har, så samlar kassaflödet in resten. Till exempel:- Ange endast kundens faktureringsland, så samlar kassan in de återstående uppgifterna.
- Eller ange all information och ställ in
confirm: trueför att gå direkt till betalningssidan.