Skip to main content

Prerequisites

To integrate the Dodo Payments API, you’ll need:
  • A Dodo Payments merchant account
  • API Credentials (API key and webhook secret key) from dashboard

Dashboard Setup

  1. Navigate to the Dodo Payments Dashboard
  2. Buat produk (pembayaran satu kali atau subscription). Produk subscription harus diberi harga minimal $1 (atau nilai setara dalam mata uang yang Anda pilih); jumlah di bawah minimum ini tidak didukung.
  3. Buat kunci API Anda:
    • Buka Developer > API
    • Panduan Terperinci
    • Salin kunci API di env bernama DODO_PAYMENTS_API_KEY
  4. Configure webhooks:
    • Go to Developer > Webhooks
    • Create a webhook URL for payment notifications
    • Copy the webhook secret key in env

Integration

Pilih jalur integrasi yang sesuai dengan kasus penggunaan Anda:
  • Checkout Sessions (direkomendasikan): Terbaik untuk sebagian besar integrasi. Buat session di server Anda lalu arahkan pelanggan ke checkout yang aman dan di-host.
  • Overlay Checkout: Gunakan jika Anda memerlukan pengalaman dalam halaman yang membuka checkout sebagai overlay modal di situs Anda.
  • Inline Checkout: Sematkan checkout langsung ke tata letak halaman Anda untuk pengalaman checkout yang sepenuhnya terintegrasi dan bermerek.
  • Static Payment Links: URL yang dapat langsung dibagikan tanpa kode untuk mengumpulkan pembayaran dengan cepat.
  • Dynamic Payment Links: Link yang dibuat secara terprogram. Namun, Checkout Sessions direkomendasikan karena menyediakan fleksibilitas yang lebih besar.
  • Mobile Checkout SDKs: Untuk aplikasi Android, iOS, React Native, dan Flutter native. Buat session di server Anda seperti di atas, lalu teruskan checkout_url ke SDK.
Overlay dan Inline Checkout hanya tersedia di browser — keduanya menyematkan checkout ke dalam halaman web. Jika Anda sedang membuat aplikasi mobile native, buat checkout session di server Anda dan buka dengan Mobile Checkout SDKs.

1. Checkout Sessions

Gunakan Checkout Sessions untuk membuat pengalaman checkout yang aman dan di-host untuk pembayaran satu kali atau subscription. Anda membuat session di server, lalu mengarahkan pelanggan ke checkout_url yang dikembalikan.
Checkout sessions berlaku selama 24 jam secara default. Jika Anda meneruskan confirm=true, sessions berlaku selama 15 menit dan semua field wajib harus disediakan.
1

Create a checkout session

Pilih SDK pilihan Anda atau panggil REST API.
2

Redirect customer to checkout

Setelah session dibuat, arahkan ke checkout_url untuk memulai alur yang di-host.
Gunakan Checkout Sessions untuk cara tercepat dan paling andal dalam mulai menerima pembayaran. Untuk kustomisasi lanjutan, lihat panduan Checkout Sessions lengkap dan API Reference.

2. Overlay Checkout

Untuk pengalaman checkout dalam halaman yang mulus, lihat integrasi Overlay Checkout kami yang memungkinkan pelanggan menyelesaikan pembayaran tanpa meninggalkan situs Anda.

3. Inline Checkout

Untuk pengalaman checkout yang sepenuhnya terintegrasi dan disematkan langsung di halaman Anda, gunakan integrasi Inline Checkout kami. Dengan ini, Anda dapat membuat ringkasan pesanan kustom dan mengendalikan sepenuhnya tata letak checkout, sementara Dodo Payments menangani pengumpulan pembayaran dengan aman. Static payment links memungkinkan Anda menerima pembayaran dengan cepat melalui URL sederhana. Anda dapat menyesuaikan pengalaman checkout dengan meneruskan query parameters untuk mengisi detail pelanggan terlebih dahulu, mengontrol field formulir, dan menambahkan metadata kustom.
1

Construct your payment link

Mulai dengan base URL dan tambahkan ID produk:
2

Add core parameters

Sertakan query parameters penting:
  • integer
    default:"1"
    Jumlah item yang dibeli.
  • string
    wajib
    URL untuk mengarahkan pengguna setelah pembayaran selesai.
URL pengalihan akan menyertakan detail pembayaran sebagai query parameters, misalnya:
https://example.com/?payment_id=pay_ts2ySpzg07phGeBZqePbH&status=succeeded&email=customer%40example.com

Jika produk mengaktifkan license keys, parameter license_key juga ditambahkan (dipisahkan koma untuk beberapa key):
https://example.com/?payment_id=pay_xxx&status=succeeded&license_key=LK-001&email=customer%40example.com
3

Pre-fill customer information (optional)

Tambahkan field pelanggan atau billing sebagai query parameters untuk menyederhanakan checkout.
  • string
    Nama lengkap pelanggan (diabaikan jika firstName atau lastName diberikan).
  • string
    Nama depan pelanggan.
  • string
    Nama belakang pelanggan.
  • string
    Alamat email pelanggan.
  • string
    Negara pelanggan.
  • string
    Alamat jalan.
  • string
    Kota.
  • string
    Provinsi atau negara bagian.
  • string
    Kode pos/ZIP.
  • boolean
    true atau false
4

Control form fields (optional)

Anda dapat menonaktifkan field tertentu agar menjadi hanya-baca bagi pelanggan. Ini berguna jika Anda sudah memiliki detail pelanggan, misalnya untuk pengguna yang sudah login.
Untuk menonaktifkan field, berikan nilainya dan atur flag disable… yang sesuai ke true:
Menonaktifkan field membantu mencegah perubahan yang tidak disengaja dan memastikan konsistensi data.
Mengatur showDiscounts=false akan menonaktifkan dan menyembunyikan bagian diskon dalam formulir checkout. Gunakan ini jika Anda ingin mencegah pelanggan memasukkan kode kupon atau promosi selama checkout.
5

Add advanced controls (optional)

  • string
    Menentukan mata uang pembayaran. Secara default menggunakan mata uang negara penagihan.
  • boolean
    default:"true"
    Menampilkan atau menyembunyikan pemilih mata uang.
  • number
    Menetapkan jumlah yang dibebankan dalam unit mata uang utama (misalnya, 12.5 untuk $12.50). Hanya untuk produk Pay What You Want. Nilai ini diabaikan jika berada di bawah harga minimum produk.
  • string
    Kolom metadata khusus (misalnya, metadata_orderId=123).
paymentAmount pada payment link bukan unit yang sama dengan kolom amount di Checkout Sessions API. Parameter link menggunakan unit mata uang utama (12.5 = 12.50),sedangkanproductcart[].amountmilikAPImenggunakandenominasiterkecil(1250=12.50), sedangkan `product_cart[].amount` milik API menggunakan denominasi terkecil (`1250` = 12.50). Lihat Dynamic Pricing untuk kolom API tersebut.
6

Share the link

Kirim payment link yang telah selesai kepada pelanggan Anda. Saat mereka mengunjunginya, semua parameter query dikumpulkan dan disimpan bersama ID sesi. URL kemudian disederhanakan sehingga hanya menyertakan parameter sesi (misalnya, ?session=sess_1a2b3c4d). Informasi yang disimpan tetap ada setelah halaman dimuat ulang dan dapat diakses selama proses checkout.
Pengalaman checkout pelanggan kini lebih sederhana dan dipersonalisasi berdasarkan parameter Anda.
Gunakan Checkout Sessions untuk sebagian besar kasus penggunaan karena menawarkan fleksibilitas dan kontrol yang lebih besar.
Dibuat melalui panggilan API atau SDK kami dengan detail pelanggan. Berikut contohnya: Ada dua API untuk membuat dynamic payment links:
Kedua endpoint pembuatan link tersebut sudah deprecated. POST /payments dan POST /subscriptions tetap berfungsi untuk integrasi yang sudah ada, tetapi integrasi baru sebaiknya menggunakan Checkout Sessions (POST /checkouts).
Panduan di bawah ini ditujukan untuk pembuatan one-time payment link. Untuk petunjuk terperinci tentang mengintegrasikan subscription, lihat Panduan Integrasi Subscription ini.
Pastikan Anda meneruskan payment_link = true untuk mendapatkan payment link
Setelah membuat payment link, arahkan pelanggan Anda untuk menyelesaikan pembayaran mereka.

Menerapkan Webhooks

Siapkan endpoint API untuk menerima notifikasi pembayaran. Berikut contohnya menggunakan Next.js:
Implementasi webhook kami mengikuti spesifikasi Standard Webhooks. Untuk definisi jenis webhook, lihat Panduan Event Webhook kami.

Event yang Perlu Didengarkan

Aktifkan payload.type dan tangani event yang relevan dengan alur one-time payment. Minimal, dengarkan:
Selalu penuhi pesanan berdasarkan payment.succeeded dari webhook, bukan berdasarkan redirect browser — redirect dapat terlewat jika pelanggan menutup tab, sedangkan webhook akan dicoba ulang hingga diakui.
Jika Anda menjual produk digital dengan license key, tangani juga license_key.created. Untuk daftar lengkap event — termasuk event subscription, entitlement, credit, recovery, dan dunning — lihat Panduan Event Webhook. Anda dapat merujuk ke project ini yang memiliki implementasi demo di GitHub menggunakan Next.js dan TypeScript. Anda dapat melihat implementasi live di sini.

Hal Penting yang Perlu Diketahui tentang Checkout & Mata Uang

Jumlah Dynamic (Pay-What-You-Want) menggunakan mata uang dasar produk — bukan mata uang lokal sembarang — dan mata uang dasar terbatas pada USD, INR, GBP, dan EUR. Untuk menagih jumlah tetap dalam mata uang lain (misalnya, PHP), Anda tidak dapat meneruskannya secara langsung: gunakan Adaptive Pricing (mengonversi jumlah dasar Anda berdasarkan FX live) atau Localized Pricing (harga tetap per mata uang, tetapi tidak kompatibel dengan Pay-What-You-Want).
Tetapkan mata uang secara eksplisit. Teruskan billing_currency dan billing_address.country pada checkout session. Jika tidak disertakan, mata uang dan negara akan dideteksi dari IP pelanggan (Adaptive Currency) dan mungkin tidak sesuai dengan yang ingin Anda tagihkan.
Checkout sessions kedaluwarsa dalam 24 jam (15 menit ketika confirm: true), dan setiap checkout_url hanya dapat digunakan satu kali — buat session baru untuk setiap pelanggan dan setiap upaya pembayaran, bukan menggunakan kembali link.
Pembelian ulang sekali klik. Untuk pelanggan lama dengan metode pembayaran tersimpan, teruskan payment_method_id bersama confirm: true untuk melakukan penagihan secara instan tanpa memilih metode.

Referensi API Terkait

Create Checkout Session

Referensi API untuk membuat checkout sessions yang aman dan di-hosting untuk pembayaran satu kali dan subscription

Create Payment Link

Referensi API untuk membuat dynamic payment links secara terprogram
Terakhir diubah pada 21 Agustus 2026