> ## 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.75.0 (23 Januari 2026)

> Koleksi produk, metode pembayaran RevolutPay & Billie untuk pembayaran sekali pakai GBP, pratinjau sesi checkout, metadata dalam permintaan perubahan paket, bidang invoice_url, endpoint validasi diskon, dan peningkatan penyaringan dasbor

## Fitur Baru

### 1. **Produk Koleksi**

Kelompokkan produk terkait untuk pengalaman checkout yang terpadu, pemilihan paket, dan jalur peningkatan/penurunan yang mulus di dalam Portal Pelanggan.

<Frame>
  <img src="https://mintcdn.com/dodopayments/2YrxTqbaYgAm54C_/images/product-collection/checkout-page.png?fit=max&auto=format&n=2YrxTqbaYgAm54C_&q=85&s=1890932384bc32c8126c7993f3581855" alt="Halaman pembayaran Product Collection yang menunjukkan beberapa opsi paket" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/product-collection/checkout-page.png" />
</Frame>

**Manfaat Utama**

* **Checkout berbasis koleksi**: Tampilkan semua produk dari satu koleksi dalam tampilan checkout, memungkinkan pelanggan membandingkan dan memilih paket favorit mereka
* **Manajemen produk terorganisir**: Kelompokkan produk terkait (misalnya Starter, Pro, Enterprise) di bawah satu koleksi
* **Integrasi Portal Pelanggan**: Aktifkan pelanggan untuk meningkatkan atau menurunkan paket antar produk dalam koleksi yang sama
* **Kontrol pedagang**: Aktifkan, nonaktifkan, dan atur ulang produk di dalam setiap koleksi

**Cara Kerjanya**

Buat sesi checkout untuk sebuah koleksi:

```typescript theme={null}
const session = await client.checkoutSessions.create({
  product_collection_id: 'pdc_abc123',
  product_cart: [], // Required: pass an empty array for collection checkout
  return_url: 'https://yoursite.com/return'
});

// Redirect customer to the checkout
window.location.href = session.checkout_url;
```

<Check>
  Hasil: Pengalaman checkout terpadu di mana pelanggan dapat melihat dan memilih dari semua produk yang tersedia dalam koleksi Anda.
</Check>

<Info>
  Checkout koleksi ideal untuk bisnis langganan di mana Anda ingin pelanggan membandingkan paket berdampingan sebelum membeli.
</Info>

Pelajari lebih lanjut: [Panduan Produk Koleksi](/features/product-collections)

### 2. **Metode Pembayaran RevolutPay & Billie untuk Mata Uang GBP**

Opsi pembayaran yang diperluas dengan RevolutPay dan Billie kini tersedia secara global untuk transaksi pembayaran sekali pakai GBP, memberi pelanggan Anda fleksibilitas lebih dalam cara mereka membayar.

**Metode Pembayaran Baru**

| Metode Pembayaran | Negara yang Didukung | Mata Uang | Dukungan Langganan         |
| ----------------- | -------------------- | --------- | -------------------------- |
| **RevolutPay**    | Global               | GBP       | Tidak (hanya sekali pakai) |
| **Billie**        | Global               | GBP       | Tidak (hanya sekali pakai) |

* **RevolutPay** – Pembayaran cepat dan mulus untuk pengguna Revolut di seluruh dunia
* **Billie** – Solusi B2B Beli Sekarang Bayar Nanti yang memungkinkan bisnis menawarkan ketentuan pembayaran yang fleksibel kepada pelanggan mereka

<Info>
  Metode pembayaran ini otomatis tersedia untuk transaksi GBP. Tidak diperlukan konfigurasi tambahan.
</Info>

Pelajari lebih lanjut: [Metode Pembayaran](/features/payment-methods)

### 3. **Pratinjau Sesi Checkout**

Pratinjau sesi checkout sebelum membuatnya untuk menghitung harga, pajak, diskon, dan total secara akurat. Tampilkan harga sebenarnya kepada pelanggan sebelum mereka melanjutkan ke checkout.

**Cara Kerjanya**

```typescript theme={null}
const preview = await client.checkoutSessions.preview({
  product_cart: [
    { product_id: 'prod_123', quantity: 1 }
  ],
  billing_address: {
    country: 'US',
    state: 'CA',
    zipcode: '94102'
  },
  discount_code: 'SAVE20'
});

console.log('Subtotal:', preview.subtotal);
console.log('Tax:', preview.tax);
console.log('Discount:', preview.discount);
console.log('Total:', preview.total);
```

**Kasus Penggunaan**

* **Tampilan harga khusus**: Tampilkan total yang akurat termasuk pajak sebelum checkout
* **Validasi diskon**: Verifikasi kode diskon dan tunjukkan penghematan kepada pelanggan
* **Dukungan multi-mata uang**: Pratinjau harga dalam berbagai mata uang
* **Ringkasan keranjang**: Bangun UI keranjang kustom dengan harga waktu nyata

<Card title="Preview API Reference" icon="code" href="/api-reference/checkout-sessions/preview">
  Lihat dokumentasi lengkap endpoint pratinjau.
</Card>

### 4. **Dukungan Metadata dalam Permintaan Perubahan Paket**

Kirim metadata khusus saat mengubah paket langganan, memungkinkan pelacakan dan integrasi yang lebih baik dengan sistem internal Anda selama transisi paket.

```javascript theme={null}
// Adding metadata when changing a subscription plan
await client.subscriptions.changePlan('sub_123', {
  product_id: 'prod_premium',
  proration_billing_mode: 'prorated_immediately',
  quantity: 1,
  metadata: {
    upgrade_reason: 'feature_request',
    previous_plan: 'basic',
    sales_rep: 'john@company.com'
  }
});
```

**Kasus Penggunaan**

* **Lacak alasan peningkatan/penurunan**: Simpan alasan pelanggan mengubah paket
* **Hubungkan dengan catatan CRM**: Kaitkan perubahan paket dengan aktivitas penjualan
* **Kategorisasi internal**: Tandai perubahan paket untuk pelaporan dan analitik
* **Jejak audit**: Pertahankan catatan siapa yang memulai perubahan paket

<Info>
  Metadata disertakan dalam event webhook, memudahkan pemrosesan perubahan paket dengan data kustom Anda.
</Info>

Pelajari lebih lanjut: [Panduan Metadata](/api-reference/metadata) | [API Ubah Paket](/api-reference/subscriptions/change-plan)

### 5. **`invoice_url` Field in Payment Response and Payment Link Response**

Payment Response dan Payment Link Response kini menyertakan field `invoice_url`, menyediakan akses langsung ke invoice yang terkait dengan setiap pembayaran.

```json theme={null}
{
  "payment_id": "pay_2IjeQm4hqU6RA4Z4kwDee",
  "status": "succeeded",
  "invoice_url": "https://dodopayments.com/invoices/inv_2IsUnWGtRKFLxk7xAQeyt",
  "amount": 9900,
  "currency": "USD",
  // ... other fields
}
```

**Kasus Penggunaan**

* **Komunikasi pelanggan**: Kirim tautan faktur langsung ke pelanggan
* **Integrasi akuntansi**: Kaitkan pembayaran dengan faktur di perangkat lunak akuntansi Anda
* **Portal swalayan**: Izinkan pelanggan mengakses faktur mereka dengan mudah
* **Pencatatan**: Pertahankan referensi langsung ke dokumen faktur

<Card title="Get Payment API" icon="code" href="/api-reference/payments/get-payments-1">
  Lihat skema Payment Response.
</Card>

### 6. **Validasi Diskon berdasarkan Nama Kode Endpoint**

Endpoint API baru untuk memvalidasi dan mengambil kode diskon berdasarkan nama kodenya (misalnya "SAVE20") alih-alih menggunakan ID diskon internal. Verifikasi kelayakan diskon sebelum menerapkannya di checkout.

```javascript theme={null}
// Validate a discount code before checkout
const discount = await client.discounts.retrieveByCode('SAVE20');

console.log('Discount type:', discount.type);
console.log('Discount value:', discount.amount);
console.log('Valid until:', discount.expires_at);
```

**Manfaat**

* **Validasi sebelum checkout**: Verifikasi kode diskon sebelum membuat sesi checkout
* **Umpan balik waktu nyata**: Tunjukkan kepada pelanggan apakah kode mereka valid
* **Penanganan kesalahan**: Tangkap kode yang tidak valid atau kedaluwarsa lebih awal
* **UI diskon khusus**: Bangun bidang input kode diskon dengan validasi instan

<Card title="Get Discount by Code API" icon="code" href="/api-reference/discounts/get-discount-by-code">
  Lihat dokumentasi endpoint lengkap.
</Card>

### 7. **Kemampuan Penyaringan yang Ditingkatkan untuk Pelanggan, Diskon, dan Kunci Lisensi**

Filter API baru untuk mendaftar Pelanggan, Diskon, dan Kunci Lisensi, membuatnya lebih mudah untuk menemukan dan mengelola data Anda secara programatik.

**Filter API Pelanggan**

| Filter           | Description                                                                          |
| ---------------- | ------------------------------------------------------------------------------------ |
| `email`          | Filter berdasarkan email pelanggan                                                   |
| `name`           | Filter berdasarkan nama pelanggan (cocok sebagian, tidak sensitif huruf besar/kecil) |
| `created_at_gte` | Filter pelanggan yang dibuat pada atau setelah cap waktu ini                         |
| `created_at_lte` | Filter pelanggan yang dibuat pada atau sebelum cap waktu ini                         |

```javascript theme={null}
// Find customers by name created in the last 30 days
const customers = await client.customers.list({
  name: 'John',
  created_at_gte: '2026-01-01T00:00:00Z'
});
```

**Filter API Diskon**

| Filter          | Description                                                                       |
| --------------- | --------------------------------------------------------------------------------- |
| `code`          | Filter berdasarkan kode diskon (cocok sebagian, tidak sensitif huruf besar/kecil) |
| `discount_type` | Filter berdasarkan jenis diskon (persentase)                                      |
| `active`        | Filter berdasarkan status aktif (true = belum kedaluwarsa, false = kedaluwarsa)   |
| `product_id`    | Filter berdasarkan pembatasan produk (hanya diskon yang berlaku untuk produk ini) |

```javascript theme={null}
// Find active percentage discounts for a specific product
const discounts = await client.discounts.list({
  active: true,
  discount_type: 'percentage',
  product_id: 'prod_123'
});
```

**Filter API Kunci Lisensi**

| Filter           | Description                                                             |
| ---------------- | ----------------------------------------------------------------------- |
| `customer_id`    | Filter berdasarkan ID pelanggan                                         |
| `status`         | Filter berdasarkan status license key (`active`, `expired`, `disabled`) |
| `product_id`     | Filter berdasarkan ID produk                                            |
| `created_at_gte` | Filter license key yang dibuat pada atau setelah cap waktu ini          |
| `created_at_lte` | Filter license key yang dibuat pada atau sebelum cap waktu ini          |

```javascript theme={null}
// Find active license keys for a specific product
const licenseKeys = await client.licenseKeys.list({
  status: 'active',
  product_id: 'prod_123'
});
```

<CardGroup cols={3}>
  <Card title="List Customers API" icon="users" href="/api-reference/customers/get-customers">
    Lihat dokumentasi lengkap API Customers.
  </Card>

  <Card title="List Discounts API" icon="percent" href="/api-reference/discounts/list-discounts">
    Lihat dokumentasi lengkap API Discounts.
  </Card>

  <Card title="List License Keys API" icon="key" href="/api-reference/licenses/list-license-keys">
    Lihat dokumentasi lengkap API License Keys.
  </Card>
</CardGroup>

### 8. **Peningkatan UI/UX di Dasbor**

Rilis ini mencakup berbagai peningkatan UI/UX di seluruh dasbor untuk pengalaman yang lebih intuitif dan halus.

**Sorotan**

* Navigasi dan konsistensi tata letak yang ditingkatkan
* Interaksi tabel data yang lebih baik
* Status pemuatan dan umpan balik yang ditingkatkan
* Elemen desain visual yang diperhalus
* Responsivitas seluler yang lebih baik
