> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# v1.70.0 (24 Desember 2025)

> Dukungan checkout inline, gunakan metode pembayaran yang ada untuk checkout instan, kelola rencana langganan dari dasbor, buat tautan pembayaran pendek, lewati halaman sukses dengan redirect_immediately, dan aktifkan langganan sesuai permintaan untuk semua bisnis

## Fitur Baru 🚀

1. **Checkout Inline - Pengalaman Checkout Terintegrasi Penuh (BETA)**

   Sematkan checkout Dodo Payments langsung ke situs web Anda untuk pengalaman pembayaran yang mulus dan bermerek. Berbeda dengan checkout overlay yang terbuka sebagai modal, checkout inline menyematkan formulir pembayaran langsung ke tata letak halaman Anda.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/HpxJAc8zNlxzewa_/images/inline-checkout/cover.png?fit=max&auto=format&n=HpxJAc8zNlxzewa_&q=85&s=99c1a92ef01680248a421d3f057b02cd" alt="Gambar Sampul Checkout Inline" style={{ maxHeight: '500px', width: 'auto' }} width="839" height="565" data-path="images/inline-checkout/cover.png" />
   </Frame>

   ### Manfaat

   * **Terintegrasi sepenuhnya**: Buat pengalaman checkout yang menyatu dengan situs web Anda
   * **Ringkasan pesanan kustom**: Bangun UI kustom yang disinkronkan dengan checkout secara real-time
   * **Kontrol maksimum**: Kontrol penuh atas tata letak dan desain checkout
   * **Mematuhi PCI**: Dodo Payments menangani semua informasi pembayaran sensitif dengan aman
   * **Sinkronisasi real-time**: Gunakan peristiwa SDK untuk menjaga UI Anda tetap sinkron dengan status checkout

   ### Cara Kerjanya

   Inisialisasi SDK dengan `displayType: 'inline'` dan sematkan checkout di elemen kontainer:

   ```typescript theme={null}
   import { DodoPayments } from "dodopayments-checkout";

   // Initialize the SDK for inline mode
   DodoPayments.Initialize({
     mode: "test",
     displayType: "inline",
     onEvent: (event) => {
       if (event.event_type === "checkout.breakdown") {
         // Update your UI with real-time tax and total calculations
         const breakdown = event.data?.message;
       }
     },
   });

   // Open checkout in a specific container
   DodoPayments.Checkout.open({
     checkoutUrl: "https://test.checkout.dodopayments.com/session/cks_123",
     elementId: "dodo-inline-checkout" // ID of the container element
   });
   ```

   ### Fitur Utama

   * **Real-time breakdown events**: Terima `checkout.breakdown` saat pelanggan memasukkan detail mereka
   * **Custom order summaries**: Bangun tampilan harga Anda sendiri yang diperbarui secara waktu nyata
   * **Seamless integration**: Frame checkout menangani pengumpulan pembayaran sementara Anda mengontrol tata letak
   * **SDK methods**: Gunakan `open()`, `close()`, dan `isOpen()` untuk mengontrol checkout secara programatik

   <Check>
     Hasil: Pengalaman checkout yang sepenuhnya terintegrasi sesuai dengan merek Anda dan memberikan kendali maksimal atas alur pembayaran.
   </Check>

   <Tip>
     Gunakan inline checkout ketika Anda menginginkan kendali maksimal terhadap desain checkout. Gunakan [overlay checkout](/developer-resources/overlay-checkout) untuk integrasi yang lebih cepat dengan perubahan minimal pada halaman yang sudah ada.
   </Tip>

   Pelajari lebih lanjut: [Panduan Checkout Inline](/developer-resources/inline-checkout)

2. **Create Payments, Subscriptions, and Checkouts Using Existing Payment Methods**\
   Permudah alur checkout dengan menggunakan metode pembayaran yang disimpan dari pelanggan yang sudah ada. Parameter baru `payment_method_id` memungkinkan Anda membuat pembayaran, langganan, atau sesi checkout menggunakan metode pembayaran yang sebelumnya disimpan pelanggan.

   ### Manfaat

   * **Checkout lebih cepat**: Lewati pengumpulan metode pembayaran untuk pelanggan yang kembali
   * **Pembelian satu klik**: Aktifkan pembelian instan dengan metode pembayaran yang disimpan
   * **Manajemen langganan**: Dengan mudah buat langganan menggunakan metode pembayaran yang ada
   * **Tingkat konversi yang lebih baik**: Kurangi gesekan checkout untuk pelanggan yang berulang

   ### Cara Kerjanya

   Gunakan `payment_method_id` saat membuat sesi checkout, pembayaran, atau langganan:

   <Tabs>
     <Tab title="Checkout Sessions">
       ```javascript theme={null}
       const session = await client.checkoutSessions.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         customer: {
           customer_id: 'cus_123'
         },
         payment_method_id: 'pm_abc123',
         confirm: true
       });
       ```
     </Tab>

     <Tab title="One-Time Payments">
       ```javascript theme={null}
       const payment = await client.payments.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         customer: { customer_id: 'cus_123' },
         billing: { country: 'US' },
         payment_method_id: 'pm_abc123'
       });
       ```
     </Tab>

     <Tab title="Subscriptions">
       ```javascript theme={null}
       const subscription = await client.subscriptions.create({
         customer: { customer_id: 'cus_123' },
         billing: { country: 'US' },
         product_id: 'pdt_subscription',
         quantity: 1,
         payment_method_id: 'pm_abc123'
       });
       ```
     </Tab>
   </Tabs>

   <Warning>
     Saat menggunakan `payment_method_id` dalam sesi checkout, `confirm` harus disetel ke `true`, dan `customer_id` yang sudah ada harus disertakan. Metode pembayaran akan divalidasi untuk kelayakan berdasarkan mata uang pembayaran.
   </Warning>

   <Info>
     Metode pembayaran harus milik pelanggan dan kompatibel dengan mata uang pembayaran. Jika validasi gagal, permintaan akan mengembalikan kesalahan.
   </Info>

3. **Perubahan Rencana Langganan di Dasbor dengan Pembaruan Tanggal Penagihan Berikutnya**

   Kelola rencana langganan langsung dari dasbor dengan kontrol yang ditingkatkan. Anda sekarang dapat mengubah rencana langganan dan memperbarui tanggal penagihan berikutnya dalam satu tindakan, memberikan Anda fleksibilitas penuh atas manajemen langganan.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/vqwKWj9TjLp0w5lS/images/changelog/subscription-plan-changes.png?fit=max&auto=format&n=vqwKWj9TjLp0w5lS&q=85&s=23d2cf888e9d70316e3a110c10bb77c6" alt="Perubahan paket langganan di dashboard" style={{ maxHeight: '500px', width: 'auto' }} width="1909" height="962" data-path="images/changelog/subscription-plan-changes.png" />
   </Frame>

   ### Fitur Dasbor

   * **Perubahan rencana**: Tingkatkan atau turunkan langganan dengan satu klik
   * **Kontrol tanggal penagihan**: Perbarui tanggal penagihan berikutnya saat mengubah rencana
   * **Opsi prorata**: Pilih cara menangani prorata saat mengubah rencana
   * **Prabaca visual**: Lihat dengan tepat bagaimana perubahan rencana mempengaruhi penagihan sebelum mengonfirmasi

   ### Kasus Penggunaan

   * **Dukungan pelanggan**: Sesuaikan rencana langganan dengan cepat untuk permintaan pelanggan
   * **Peningkatan promosi**: Tingkatkan pelanggan sementara dengan tanggal penagihan tertentu
   * **Migrasi rencana**: Transisi pelanggan dengan mulus antara tingkat langganan
   * **Penyelarasan penagihan**: Sesuaikan tanggal penagihan di seluruh langganan yang berbeda

   <Check>
     Hasil: Kontrol manajemen langganan lengkap dari dasbor, mengurangi kebutuhan panggilan API untuk penyesuaian langganan umum.
   </Check>

   <Tip>
     Gunakan dasbor untuk perubahan paket langganan yang cepat, dan API untuk manajemen langganan secara programatik dalam aplikasi Anda.
   </Tip>

4. **Tautan Pendek untuk URL Pembayaran**\
   Hasilkan tautan pembayaran yang lebih bersih dan lebih mudah dibagikan dengan fitur tautan pendek baru kami. Tautan pendek menyediakan URL checkout yang dipersingkat dengan slug kustom, membuatnya lebih mudah untuk dibagikan dengan pelanggan atau disematkan di situs web Anda.

   <Frame>
     <img src="https://mintcdn.com/dodopayments/vqwKWj9TjLp0w5lS/images/changelog/short-links.png?fit=max&auto=format&n=vqwKWj9TjLp0w5lS&q=85&s=c5361cb37520128513ed5e3b1111fbb1" alt="Fitur tautan pendek untuk URL pembayaran" style={{ maxHeight: '500px', width: 'auto' }} width="1915" height="962" data-path="images/changelog/short-links.png" />
   </Frame>

   ### Manfaat

   * **URL yang lebih bersih**: Ganti URL pembayaran yang panjang dengan tautan pendek yang bermerek
   * **Kepercayaan yang lebih baik**: Tautan yang terlihat profesional yang membangun kepercayaan pelanggan
   * **Berbagi yang lebih mudah**: URL yang disederhanakan sempurna untuk SMS, email, atau media sosial
   * **Slug kustom**: Buat tautan pendek yang mudah diingat dan bermerek untuk produk Anda

   ### Cara Kerjanya

   Aktifkan tautan pendek saat membuat sesi checkout atau tautan pembayaran:

   <Tabs>
     <Tab title="Checkout Sessions">
       ```javascript theme={null}
       const session = await client.checkoutSessions.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         short_link: true,
         return_url: 'https://yourapp.com/success'
       });
       ```
     </Tab>

     <Tab title="Payment Links">
       ```javascript theme={null}
       const payment = await client.payments.create({
         product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
         short_link: true,
         return_url: 'https://yourapp.com/success'
       });
       ```
     </Tab>
   </Tabs>

   <Check>
     Hasil: Tautan pembayaran yang dipersingkat lebih mudah dibagikan dan tampak lebih profesional, meningkatkan tingkat konversi dan kepercayaan pelanggan.
   </Check>

   <Info>
     Tautan pendek dikelola di dasbor Anda dan dapat dilihat melalui [List Short Links API](/api-reference/products/get-products-short-links).
   </Info>

5. **`redirect_immediately` Flag - Lewati Halaman Keberhasilan Pembayaran**\
   Kendalikan alur checkout dengan flag `redirect_immediately` yang baru. Saat diaktifkan, pelanggan akan langsung diarahkan setelah pembayaran selesai, melewati halaman keberhasilan default untuk pengalaman yang lebih cepat dan lebih ramping.

   ### Kasus Penggunaan

   * **Alur checkout lebih cepat**: Kurangi gesekan dengan melewati halaman perantara
   * **Halaman sukses kustom**: Arahkan langsung ke halaman sukses bermerek Anda
   * **Optimisasi seluler**: Tingkatkan pengalaman checkout seluler dengan pengalihan segera
   * **Checkout yang disematkan**: Integrasikan dengan mulus dengan alur checkout overlay atau disematkan

   ### Cara Kerjanya

   Aktifkan pengalihan segera dalam sesi checkout, pembayaran, atau langganan:

<Tabs>
  <Tab title="Checkout Sessions">
    ```javascript theme={null}
    const session = await client.checkoutSessions.create({
      product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
      feature_flags: {
        redirect_immediately: true
      },
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>

  <Tab title="One-Time Payments">
    ```javascript theme={null}
    const payment = await client.payments.create({
      product_cart: [{ product_id: 'pdt_123', quantity: 1 }],
      redirect_immediately: true,
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>

  <Tab title="Subscriptions">
    ```javascript theme={null}
    const subscription = await client.subscriptions.create({
      customer: { customer_id: 'cus_123' },
      billing: { country: 'US' },
      product_id: 'pdt_subscription',
      quantity: 1,
      redirect_immediately: true,
      return_url: 'https://yourapp.com/success'
    });
    ```
  </Tab>
</Tabs>

<Tip>
  Gunakan `redirect_immediately: true` ketika Anda memiliki halaman keberhasilan kustom yang memberikan pengalaman pengguna lebih baik daripada halaman keberhasilan pembayaran default.
</Tip>

<Note>
  Saat `redirect_immediately` diaktifkan, pelanggan akan diarahkan ke `return_url` Anda segera setelah pembayaran selesai, melewatkan halaman keberhasilan default sepenuhnya.
</Note>

6. **Langganan Sesuai Permintaan - Tersedia untuk Semua Bisnis**\
   Langganan sesuai permintaan sekarang diaktifkan untuk semua bisnis, memberikan Anda kontrol penagihan yang fleksibel untuk layanan berbasis penggunaan dan terukur.

   ### Apa yang Ini Aktifkan

   * **Penagihan berbasis penggunaan**: Buat langganan dan kenakan biaya kepada pelanggan berdasarkan penggunaan aktual
   * **Siklus penagihan yang fleksibel**: Kenakan biaya kepada pelanggan sesuai permintaan daripada interval tetap
   * **Layanan terukur**: Sempurna untuk penggunaan API, penyimpanan, waktu komputasi, dan sumber daya terukur lainnya
   * **Kontrol biaya manual**: Buat biaya secara manual saat diperlukan, memberikan Anda kontrol penuh atas waktu penagihan

   ### Cara Kerjanya

   Buat langganan sesuai permintaan dan kenakan biaya kepada pelanggan sesuai kebutuhan:

   ```javascript theme={null}
   // Create an on-demand subscription
   const subscription = await client.subscriptions.create({
     customer: { customer_id: 'cus_123' },
     billing: { country: 'US' },
     product_id: 'pdt_api_access',
     quantity: 1,
     on_demand: { mandate_only: true }
   });

   // Charge the customer when usage occurs
   await client.subscriptions.charge(subscription.subscription_id, {
     product_price: 4900,
     product_currency: 'USD',
     product_description: 'API usage for September: 1,000 requests'
   });
   ```

   <Check>
     Hasil: Kendali penuh atas kapan dan berapa banyak yang dibebankan kepada pelanggan, sempurna untuk model bisnis berbasis penggunaan.
   </Check>

   Pelajari lebih lanjut: [Langganan Sesuai Permintaan](/developer-resources/ondemand-subscriptions)

7. **Perbaikan dan Peningkatan Umum**\
   Rilis ini mencakup peningkatan kinerja, penyempurnaan UI, dan menyelesaikan bug kecil untuk pengalaman yang lebih andal dan terintegrasi.
