Skip to main content
Python SDK menyediakan akses bertipe untuk aplikasi Python ke REST API Dodo Payments. SDK ini memiliki klien sinkron, DodoPayments, dan klien asinkron, AsyncDodoPayments, yang keduanya dibangun di atas httpx. Parameter request bersarang berupa typed dictionaries, sedangkan response berupa model Pydantic.

Instalasi

Instal SDK dengan pip:
Untuk menggunakan aiohttp sebagai backend HTTP bagi klien asinkron, instal extra aiohttp:
Untuk memverifikasi signature webhook dengan client.webhooks.unwrap(), instal juga extra webhooks: pip install "dodopayments[webhooks]".
SDK memerlukan Python 3.9 atau yang lebih baru. Gunakan rilis Python stabil terbaru untuk mendapatkan pembaruan keamanan.

Mulai Cepat

Klien Sinkron

Buat klien, lalu buat sesi checkout:
Jika Anda tidak menyertakan bearer_token, klien akan membaca environment variable DODO_PAYMENTS_API_KEY. Jika Anda tidak menyertakan environment, klien terhubung ke live mode. API key test mode hanya berfungsi dengan environment="test_mode".

Klien Asinkron

AsyncDodoPayments memiliki method yang sama dengan DodoPayments. Gunakan await pada setiap pemanggilan:
Simpan API key dalam environment variable atau secrets manager. Jangan pernah memasukkannya ke version control.

Fitur Inti

Pythonic Interface

Keyword arguments untuk parameter, tipe TypedDict untuk objek bersarang, dan model Pydantic untuk response.

Async/Await

AsyncDodoPayments untuk asyncio, dengan aiohttp sebagai backend HTTP opsional.

Type Hints

Type hints pada setiap method, untuk autocomplete editor dan pemeriksaan tipe dengan mypy.

Auto-Pagination

Method list mengembalikan iterator yang mengambil halaman berikutnya saat Anda melakukan loop.

Konfigurasi

Environment Variable

Simpan API key Anda dalam environment variable:
.env
Klien membaca variabel berikut saat Anda tidak memberikan argumen yang sesuai: Jika DODO_PAYMENTS_BASE_URL ditetapkan dan Anda juga meneruskan environment, constructor akan menghasilkan error “Ambiguous URL”. Untuk menggunakan environment dalam kondisi tersebut, teruskan base_url=None. Untuk memverifikasi webhook, teruskan request body mentah dan header ke client.webhooks.unwrap(payload, headers=headers). Method ini memeriksa signature dengan webhook key Anda dan mengembalikan event yang telah di-parse. client.webhooks.unsafe_unwrap(payload) mengurai body tanpa memverifikasinya, jadi gunakan hanya untuk pengujian. Lihat Webhooks.

Timeout

Request akan timeout setelah 1 menit secara default, dengan connection timeout 5 detik. Teruskan timeout dalam detik, atau httpx.Timeout untuk batas read, write, dan connect yang terpisah:
Saat request mengalami timeout, SDK menghasilkan APITimeoutError. Request yang timeout akan dicoba ulang, sehingga pemanggilan dapat memerlukan waktu lebih lama daripada timeout sebelum gagal.

Percobaan Ulang

Tetapkan max_retries pada klien, atau pada satu request dengan with_options():
SDK mencoba ulang connection error dan response dengan status 408, 409, 429, atau 500 ke atas. Secara default, SDK mencoba ulang dua kali dengan exponential backoff. Saat request tetap gagal, SDK menghasilkan subclass dari dodopayments.APIError: Status exception mewarisi dodopayments.APIStatusError, yang memiliki atribut status_code dan response. APITimeoutError adalah subclass dari APIConnectionError.

Operasi Umum

Contoh dalam bagian ini menggunakan client dari Mulai Cepat.

Membuat Sesi Checkout

Buat sesi checkout, lalu arahkan customer ke checkout_url yang dikembalikan:
Setiap checkout_url hanya dapat digunakan sekali dan kedaluwarsa setelah 24 jam. Untuk setiap opsi sesi, lihat Checkout Sessions.

Mengelola Customer

Buat customer dengan alamat email dan nama, lalu ambil berdasarkan ID:

Menangani Subscription

Buat subscription, kenakan biaya pada subscription on-demand, dan baca riwayat penggunaan subscription.
POST /subscriptions (method subscriptions.create milik SDK) deprecated. Method ini masih berfungsi untuk integrasi yang sudah ada, tetapi integrasi baru sebaiknya membuat subscription melalui Checkout Session.
billing hanya memerlukan country, yaitu kode negara ISO dua huruf. customer menerima {"customer_id": ...} untuk melampirkan customer yang sudah ada atau {"email": ..., "name": ...} untuk membuat customer. charge digunakan untuk subscription on-demand, sedangkan product_price menggunakan unit mata uang terkecil. retrieve_usage_history mengembalikan list berpaginasi yang dapat Anda iterasi seperti ditunjukkan dalam Pagination.

Penagihan Berbasis Penggunaan

Memasukkan Usage Event

Kirim usage event untuk customer:
event_id adalah idempotency key, jadi berikan nilai unik untuk setiap event. Jika event_id yang sama muncul dua kali dalam satu request, seluruh request akan ditolak. Jika event_id sudah pernah dimasukkan, event baru akan diabaikan. Satu request menerima hingga 1.000 event. timestamp secara default menggunakan waktu saat ini dan ditolak jika lebih dari 1 jam di masa lalu atau lebih dari 5 menit di masa depan.

Mencantumkan dan Mengambil Event

Ambil satu event berdasarkan event_id, atau cantumkan event yang difilter berdasarkan customer dan nama event:
usage_events.list juga menerima filter meter_id, start, dan end.

Pagination

Auto-Pagination

Method list mengembalikan iterator yang mengambil halaman berikutnya saat Anda melakukan loop:

Pagination Asinkron

Dengan klien asinkron, lakukan loop menggunakan async for:

Pagination Manual

Untuk bekerja dengan satu halaman pada satu waktu, baca items dan panggil has_next_page() serta get_next_page(). next_page_info() mengembalikan parameter untuk request berikutnya:

Konfigurasi HTTP Client

Untuk menambahkan proxy, transport khusus, atau pengaturan httpx lainnya, teruskan http_client milik Anda. DefaultHttpxClient mempertahankan batas koneksi, timeout, dan pengaturan redirect default SDK:
Untuk menggunakan HTTP client yang berbeda pada satu request, panggil client.with_options(http_client=...).

Async dengan AIOHTTP

Secara default, klien asinkron mengirim request dengan httpx. Untuk concurrency yang lebih baik, instal extra aiohttp dan teruskan DefaultAioHttpClient() sebagai http_client:

Logging

SDK melakukan logging dengan module logging dari standard library. Untuk mengaktifkan logging, tetapkan DODO_PAYMENTS_LOG ke info:
Untuk detail lebih lanjut, tetapkan ke debug:

Integrasi Framework

Contoh berikut membuat sesi checkout dari web endpoint dan mengembalikan URL-nya.

FastAPI

Endpoint ini menggunakan klien asinkron:

Django

View ini menggunakan klien sinkron:

Resource

GitHub Repository

Source code, rilis, dan daftar method lengkap.

API Reference

Setiap endpoint, parameter, dan response.

Discord Community

Ajukan pertanyaan dan berdiskusi dengan developer lain.

Report Issues

Laporkan bug atau ajukan fitur.

Dukungan

Untuk mendapatkan bantuan terkait Python SDK:

Kontribusi

Untuk berkontribusi, baca panduan kontribusi.
Terakhir diubah pada 26 September 2026