Skip to main content

Quick Start Guide

Get your first checkout session running in under 5 minutes

API Reference & Live Testing

Explore the full API documentation and interactively test Checkout Session requests and responses.

Preview Checkout

Calculate pricing, taxes, and totals before creating a session.
Session Validity: Checkout sessions are valid for 24 hours by default. If you pass confirm=true in your request, the session will only be valid for 15 minutes.
Single-Use Links: The checkout_url returned by the API is not reusable and expires within 24 hours (or 15 minutes when confirm=true). It is intended for a single customer to complete one payment. Generate a fresh checkout session for each customer and each payment attempt rather than sharing or reusing a link.

Prerequisites

1

Dodo Payments Account

You’ll need an active Dodo Payments merchant account with API access.
2

API Credentials

Generate your API credentials from the Dodo Payments dashboard:
3

Products Setup

Create your products in the Dodo Payments dashboard before implementing checkout sessions.

Creating Your First Checkout Session

API Response

All methods above return the same response structure:
Only session_id is guaranteed to be present. Two cases return additional or fewer fields:
  • payment_method_id was provided — the charge is processed immediately and checkout_url is null. Use the returned payment_id instead.
  • confirm: true created the payment at session-creation time — the response also includes payment_id, client_secret, and publishable_key for use with the Dodo Payments checkout SDK.
The generated checkout_url is single-use and expires within 24 hours. Don’t cache or reuse it across customers or payment attempts — create a new checkout session whenever you need a fresh link.
1

Get the checkout URL

Extract the checkout_url from the API response.
2

Redirect your customer

Direct your customer to the checkout URL to complete their purchase.
Alternative Integration Options: Instead of redirecting, you can embed the checkout directly in your page using Overlay Checkout (modal overlay) or Inline Checkout (fully embedded). In a native mobile app, hand the same URL to the Mobile Checkout SDKs for Android, iOS, React Native, or Flutter. All of these consume the same checkout session URL.
3

Handle the return

After payment, customers are redirected to your return_url with query parameters including payment/subscription ID, status, customer email, and any license keys. See the return_url parameter docs for the full list.

Request Body

Required Fields

Essential fields needed for every checkout session

Optional Fields

Additional configuration to customize your checkout experience

Required Fields

array
wajib
Array of products to include in the checkout session. Each product must have a valid product_id from your Dodo Payments dashboard.
Mixed Checkout: You can combine one-time payment products and subscription products in the same checkout session. This enables powerful use cases like setup fees with subscriptions, hardware bundles with SaaS, and more.
Find Your Product IDs: You can find product IDs in your Dodo Payments dashboard under Products → View Details, or by using the List Products API.

Optional Fields

Configure these fields to customize the checkout experience and add business logic to your payment flow.
object
Customer information. You can either attach an existing customer using their ID or create a new customer record during checkout.
Attach an existing customer to the checkout session using their ID.
object
Billing address information for accurate tax calculation, fraud prevention, and regulatory compliance.
When confirm is set to true, all billing address fields become required for successful session creation.
array
Control which payment methods are available to customers during checkout. This helps optimize for specific markets or business requirements.Opsi umum: credit, debit, upi_collect, apple_pay, google_pay, amazon_pay, klarna, affirm, afterpay_clearpay, cashapp, ach, multibanco, bancontact_card, eps, ideal, blik, paypal. Ini bukan kumpulan lengkap — lihat referensi API Create Checkout Session untuk setiap nilai yang diterima.
Critical: Always include credit and debit as fallback options to prevent checkout failures when preferred payment methods are unavailable.
Example:
string
Override the default currency selection with a fixed billing currency. Uses ISO 4217 currency codes.Supported Currencies: USD, EUR, GBP, CAD, AUD, INR, and moreExample: "USD" for US Dollars, "EUR" for Euros
This field is only effective when adaptive pricing is enabled. If adaptive pricing is disabled, the product’s default currency will be used.
boolean
default:"false"
Display previously saved payment methods for returning customers, improving checkout speed and user experience.
string
URL to redirect customers after payment completion. Dodo Payments appends the following query parameters to your URL on redirect:Example redirect URLs:
Use the license_key and email query parameters to display license keys or send a confirmation immediately on your return page, without needing an extra API call.
string
URL to redirect customers when they click the back button or cancel the checkout session. If not provided, the back button will not be displayed.
Set a cancel_url to give customers a clear way to return to your site without completing the purchase. This improves the checkout experience and reduces friction.
boolean
default:"false"
If true, finalizes all session details immediately. API will throw an error if required data is missing.
array
Terapkan satu atau beberapa kode diskon bertingkat ke sesi checkout. Kode diterapkan sesuai urutan dalam array (kode pertama mengurangi harga awal, kode kedua mengurangi harga yang sudah didiskon, dan seterusnya), hingga maksimum 20 kode per sesi. Jika Purchasing Power Parity diaktifkan, harga awal adalah jumlah yang disesuaikan dengan PPP, bukan harga dasar.
The singular discount_code field below is deprecated but still fully supported — existing integrations continue to work without changes. It cannot be combined with discount_codes in the same request. Migrate to discount_codes when convenient to take advantage of stacking.
string
usang
Deprecated — prefer discount_codes for new integrations. This field still works for backward compatibility, but cannot be combined with discount_codes in the same request.
object
Custom key-value pairs to store additional information about the session.
boolean
Override merchant default 3DS behaviour for this session.
boolean
default:"false"
Enable minimal address collection mode. When enabled, the checkout only collects:
  • Country: Always required for tax determination
  • ZIP/Postal code: Only in regions where it’s necessary for sales tax, VAT, or GST calculation
This significantly reduces checkout friction by eliminating unnecessary form fields.
Enable minimal address for faster checkout completion. Full address collection remains available for businesses that require complete billing details.
string
A saved payment method belonging to the attached customer. Requires confirm: true and an existing customer.customer_id. When set, the charge is processed immediately and checkout_url is returned as null — use the returned payment_id instead.
If true, returns a shortened checkout URL instead of the full session URL.
string
Product collection ID for the collection-based checkout flow.
string
Tax ID for the customer (for example, a VAT number). Requires billing_address with a country.
string
Optional business or legal name associated with the tax ID. When provided together with a valid tax_id, it is rendered on the invoice instead of the customer’s personal name.
integer
Override the merchant-level mandate floor (in INR paise) for INR e-mandates on Indian cards.
object
Customize the appearance and behavior of the checkout interface.
object
Configure specific features and behaviors for the checkout session.
array
Collect additional information from customers during checkout with custom form fields. You can define up to 5 custom fields per checkout session. Customer responses are included in webhook payloads and available via the API.
Customer responses to custom fields are included in:
  • Webhooks: payment.succeeded, subscription.active, and other relevant event payloads contain the custom_field_responses array
  • API responses: Payment and subscription objects include custom_field_responses
object
Additional configuration for checkout sessions containing subscription products.

Usage Examples

Here are 10 comprehensive examples showcasing different checkout session configurations for various business scenarios:

1. Simple Single Product Checkout

2. Multi-Product Cart

3. Subscription with Trial Period

4. Pre-confirmed Checkout

When confirm is set to true, the customer will be taken directly to the checkout page, bypassing any confirmation steps.

5. Checkout with Currency Override

The billing_currency override only takes effect when adaptive currency is enabled in your account settings. If adaptive currency is disabled, this parameter will have no effect.

6. Saved Payment Methods for Returning Customers

7. B2B Checkout with Tax ID Collection

8. Dark Theme Checkout with Stacked Discount Codes

9. Regional Payment Methods (UPI for India)

For detailed information about UPI configuration and testing, see the India Payment Methods page.

10. BNPL (Buy Now Pay Later) Checkout

For detailed information about BNPL configuration and testing, see the Buy Now Pay Later (BNPL) page.

11. Using Existing Payment Methods for Instant Checkout

Use a customer’s saved payment method to create a checkout session that processes immediately, skipping payment method collection:
When using payment_method_id, confirm must be set to true and an existing customer_id must be provided. The payment method will be validated for eligibility with the payment’s currency. Because the charge is processed immediately, checkout_url is returned as null — use the returned payment_id instead.
The payment method must belong to the customer and be compatible with the payment currency. This enables one-click purchases for returning customers.
Generate shortened, shareable payment links with custom slugs:
Short links are perfect for SMS, email, or social media sharing. They’re easier to remember and build more customer trust than long URLs.

13. Skip Payment Success Page with Immediate Redirect

Redirect customers immediately after payment completion, bypassing the default success page:
Use redirect_immediately: true when you have a custom success page that provides better user experience than the default payment success page. This is especially useful for mobile apps and embedded checkout flows.
When redirect_immediately is enabled, customers are redirected to your return_url immediately after payment completion, skipping the default success page entirely.

14. Forcing a Language

Force the checkout to display in a specific language, overriding the customer’s browser language detection:
Use force_language when you know your customer’s preferred language (e.g., from their account settings) or when targeting specific regional markets.
Supported languages: Arabic (ar), Catalan (ca), Chinese (zh), Dutch (nl), English (en), French (fr), German (de), Hebrew (he), Indonesian (id), Italian (it), Japanese (ja), Korean (ko), Malay (ms), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Spanish (es), Swedish (sv), Thai (th), Turkish (tr)

15. Collecting Custom Fields

Collect additional information from customers during checkout using custom fields:
Custom field responses are automatically included in webhook payloads (payment.succeeded, subscription.active, etc.) and can be retrieved via the API. Use them to enrich your CRM, trigger onboarding flows, or customize the customer experience.
Available field types: text, number, email, url, date, dropdown, boolean

Previewing Checkout Sessions

Before creating a checkout session, you can preview the pricing breakdown including taxes, discounts, and totals. This is useful for displaying accurate pricing to customers before they proceed to checkout.
current_breakup.subtotal yang dipratinjau sudah mencerminkan Purchasing Power Parity dan Charm Pricing jika berlaku untuk produk tersebut.
Jika keranjang berisi produk langganan, respons pratinjau juga mengembalikan next_billing_date — pratinjau tanggal penagihan berikutnya, sehingga Anda dapat menampilkannya sebelum langganan dibuat. Nilai ini dihitung relatif terhadap waktu sekarang: now + trial period jika uji coba berlaku, atau now + one payment frequency jika tidak. Field ini tidak disertakan untuk keranjang yang hanya berisi pembelian satu kali. Ini adalah perkiraan yang didasarkan pada waktu pratinjau; next_billing_date yang menjadi acuan ditetapkan saat langganan diaktifkan.
Pratinjau juga mengembalikan trial_period_days (durasi uji coba efektif, baik gratis maupun berbayar) dan trial_amount (biaya uji coba per unit setelah diskon, dalam unit terkecil mata uang harga). trial_amount hanya tersedia untuk uji coba berbayar dan bernilai null untuk uji coba gratis atau tanpa uji coba. Gunakan current_breakup untuk total setelah pajak yang benar-benar harus dibayar hari ini.

Preview API Reference

Lihat dokumentasi lengkap endpoint pratinjau.

Perbedaan Utama

Sebelumnya, saat membuat payment link dengan Dynamic Links, Anda diwajibkan memberikan alamat penagihan lengkap pelanggan. Dengan Checkout Sessions, hal ini tidak lagi diperlukan. Anda cukup mengirimkan informasi apa pun yang Anda miliki, dan kami akan menangani sisanya. Contoh:
  • Jika Anda hanya mengetahui negara penagihan pelanggan, cukup berikan informasi tersebut.
  • Alur checkout akan secara otomatis mengumpulkan detail yang belum tersedia sebelum mengarahkan pelanggan ke halaman pembayaran.
  • Sebaliknya, jika Anda sudah memiliki semua informasi yang diperlukan dan ingin langsung menuju halaman pembayaran, Anda dapat mengirimkan seluruh kumpulan data dan menyertakan confirm=true dalam body permintaan Anda.

Proses Migrasi

Migrasi dari Dynamic Links ke Checkout Sessions sangat mudah:
1

Update your integration

Perbarui integrasi Anda agar menggunakan metode API atau SDK yang baru.
2

Adjust request payload

Sesuaikan payload permintaan berdasarkan format Checkout Sessions.
3

That's it!

Ya. Tidak diperlukan penanganan tambahan atau langkah migrasi khusus di pihak Anda.

Referensi API Terkait

Create Checkout Session

Referensi API lengkap untuk membuat sesi checkout dengan semua parameter dan opsi yang tersedia

Preview Checkout Session

Referensi API untuk mempratinjau harga, pajak, dan total sebelum membuat sesi
Terakhir diubah pada 26 Agustus 2026