> ## 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.

# Produk

> Buat produk satu kali, langganan, atau berbasis penggunaan dalam hitungan menit. Kelola harga, media, bidang, dan hak otomatis - semuanya dalam satu tempat.

<Info>
  Produk adalah dasar dari Dodo Payments. Apakah Anda menjual unduhan sekali pakai, langganan berulang, atau akses berbasis pemakaian, Anda memulainya dengan membuat sebuah produk. Setiap produk menentukan cara penetapan harganya, penyajiannya di halaman checkout, dan pemenuhannya setelah pembelian.
</Info>

<CardGroup cols={3}>
  <Card title="One‑Time" icon="credit-card" href="/features/one-time-payment-products">
    Kenakan biaya sekali untuk akses seumur hidup atau barang tunggal.
  </Card>

  <Card title="Subscriptions" icon="repeat" href="/features/subscription">
    Tagih sesuai jadwal dengan uji coba, prorata, dan tambahan.
  </Card>

  <Card title="Usage‑Based" icon="arrow-trend-up" href="/features/usage-based-billing/introduction">
    Mengukur konsumsi dan tagihan berdasarkan penggunaan sebenarnya.
  </Card>
</CardGroup>

## Buat produk

Anda dapat membuat produk dari dasbor atau melalui API. Pilih model harga di awal, Satu Kali, Langganan, atau Berbasis Penggunaan dan kemudian konfigurasikan detailnya. Model harga tidak dapat diubah setelahnya; buat produk baru jika Anda memerlukan model yang berbeda.

<Steps>
  <Step title="Name & description">
    Berikan judul yang jelas dan deskripsi bernilai singkat. Deskripsi mendukung Markdown.

    <Tip>
      Jaga agar kalimat pertama ditujukan kepada pelanggan dan berorientasi pada hasil; kalimat ini muncul secara menonjol di checkout.
    </Tip>

    <Frame>
      <img src="https://mintcdn.com/dodopayments/r-ndtvzx3WhKqwER/images/products.png?fit=max&auto=format&n=r-ndtvzx3WhKqwER&q=85&s=fb41221c4f2af4de0155e71de1ac6904" alt="Produk" style={{ maxHeight: '500px', width: 'auto' }} width="1911" height="927" data-path="images/products.png" />
    </Frame>
  </Step>

  <Step title="Pricing model & price">
    Pilih model harga:

    * **Satu Kali**: Harga tetap dibayar sekali.
    * **Langganan**: Harga berulang dengan interval dan percobaan opsional.
    * **Berbasis Penggunaan**: Harga berasal dari peristiwa yang diukur.

    Kemudian atur harga:

    * **Harga**: Jumlah dasar dan mata uang.
    * **Diskon (%)**: Diskon opsional yang ditampilkan saat checkout dan pada faktur.
    * Untuk langganan, atur **Ulangi setiap** (misalnya, 1 bulan atau 1 tahun) dan **Hari percobaan** jika diperlukan. Harga langganan harus setidaknya **\$1** (atau setara dalam mata uang yang Anda pilih); jumlah di bawah minimum ini tidak didukung dan langganan tidak akan berfungsi.

    <Tip>
      Ingin harga tetap per mata uang atau negara daripada konversi FX langsung? Tetapkan `pricing_mode` pada produk dan lampirkan aturan [Localized Pricing](/features/localized-pricing) — contoh €9.99 dalam EUR atau ₹999 di India.
    </Tip>

    <Warning>
      Perubahan harga hanya memengaruhi pembelian baru. Langganan yang ada mengikuti aturan perubahan paket.
    </Warning>
  </Step>

  <Step title="Product media">
    Unggah gambar untuk menampilkan produk pada pembayaran dan faktur. Mendukung PNG/JPG/WebP hingga 3 MB. Atur ulang atau ganti kapan saja.
  </Step>

  <Step title="Automated entitlements (Under Advanced Settings)">
    Lampirkan pemenuhan yang aktif secara otomatis setelah pembayaran:

    * **License Keys**: Terbitkan dan validasi kunci unik
    * **File Downloads**: Berikan akses file yang aman
    * **Custom**: Aktifkan logika hak Anda sendiri melalui webhooks

    Tambahkan atau hapus manfaat saat penawaran Anda berkembang. Pelanggan yang ada mendapatkan atau kehilangan akses sesuai.
  </Step>
</Steps>

## Varian dan opsi harga

Alih-alih varian di bawah satu produk, buat produk terpisah untuk setiap opsi harga (contohnya, Bulanan dan Tahunan). Kemudian kelompokan mereka ke dalam **Product Collection** untuk menampilkan semua opsi dalam satu checkout dan memungkinkan penggantian paket di 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="Product Collections" style={{ maxHeight: '500px', width: 'auto' }} width="1440" height="960" data-path="images/product-collection/checkout-page.png" />
</Frame>

### Mengapa pendekatan ini?

* **Model harga yang jelas**: Setiap produk memiliki model harga tunggal yang jelas (sekali bayar, berlangganan, atau berdasarkan penggunaan)
* **API yang dapat diprediksi**: Integrasi lebih sederhana tanpa logika varian bersarang
* **Pelaporan lebih mudah**: Melacak pendapatan dan metrik per produk tanpa penggabungan varian
* **Checkout fleksibel**: Menampilkan beberapa produk bersebelahan, membiarkan pelanggan membandingkan dan memilih

### Cara kerja Product Collections

1. **Buat produk**: Siapkan produk individual untuk setiap paket (misalnya, Starter Monthly, Starter Annual, Pro Monthly, Pro Annual)
2. **Kelompokkan ke dalam koleksi**: Tambahkan produk terkait ke dalam Product Collection
3. **Checkout terpadu**: Pelanggan melihat semua opsi dalam satu checkout dan memilih paket yang mereka inginkan
4. **Penggantian paket**: Pelanggan dapat meningkatkan atau menurunkan antara produk dalam koleksi yang sama melalui Customer Portal

<Card title="Product Collections" icon="layer-group" href="/features/product-collections">
  Kelompokkan produk terkait untuk pengalaman checkout terpadu dan jalur upgrade/downgrade yang mulus.
</Card>

## Mengelola produk

Anda dapat mengelola produk melalui dashboard atau secara terprogram melalui API. API menyediakan kontrol penuh atas pembuatan produk, pembaruan, pengambilan, unggahan gambar, dan pengarsipan.

### Manajemen Dashboard

* **Perbarui**: Edit nama, deskripsi, gambar, harga, bidang, dan manfaat kapan saja (model harga tidak dapat diubah).
* **Arsipkan**: Sembunyikan produk dari pembelian baru tanpa mengganggu pelanggan yang ada. Anda dapat membatalkan pengarsipan nanti.

### Manajemen API

Instruksi berikut memungkinkan Anda untuk membuat, memperbarui, mengelola, dan mengambil produk, termasuk mengunggah gambar.

<AccordionGroup>
  <Accordion title="Creating a Product">
    Sebuah produk bisa berupa item sekali pakai atau layanan berbasis langganan. Untuk membuat produk baru, kirimkan permintaan `POST` ke titik akhir `/products` dengan detail seperti nama, deskripsi, harga, mata uang, dan apakah itu produk berulang.

    Untuk produk berulang, atur objek `price` ke harga berulang (`type: recurring_price`) dan tentukan `payment_frequency_interval` dan `subscription_period_interval` (`Day`, `Week`, `Month`, atau `Year`) bersamaan dengan jumlah yang sesuai.

    <Card title="Create Product API" icon="code" href="/api-reference/products/post-products">
      Lihat struktur permintaan dan respons yang terperinci dalam dokumentasi API Create Product.
    </Card>
  </Accordion>

  <Accordion title="Updating a Product">
    Untuk memodifikasi produk yang ada, kirimkan permintaan `PATCH` ke endpoint `/products/{product_id}`. Anda dapat memperbarui properti seperti nama, harga, dan deskripsi sambil menjaga detail lainnya tetap tidak berubah.

    Pastikan bahwa `product_id` dalam endpoint sesuai dengan produk yang ada.

    <Card title="Update Product API" icon="code" href="/api-reference/products/patch-products">
      Lihat struktur permintaan dan respons yang terperinci dalam dokumentasi API Update Product.
    </Card>
  </Accordion>

  <Accordion title="Retrieving Products">
    Anda dapat mengambil daftar produk yang disimpan di akun Anda menggunakan permintaan `GET` ke endpoint `/products`. Ini memungkinkan Anda untuk mengambil detail produk, termasuk produk aktif dan diarsipkan.

    <Card title="Retrieve Products API" icon="code" href="/api-reference/products/get-products">
      Lihat struktur permintaan dan respons yang terperinci dalam dokumentasi API Retrieve Products.
    </Card>
  </Accordion>

  <Accordion title="Uploading Product Images">
    Anda dapat mengaitkan gambar dengan produk dengan mengunggahnya ke AWS S3 menggunakan URL pre-signed yang disediakan oleh API. Pertama, minta URL unggahan gambar dari endpoint `/products/{product_id}/images`, kemudian gunakan URL yang diberikan untuk mengunggah gambar dalam waktu 60 detik.

    <Warning>
      URL pre-signed kedaluwarsa dalam 60 detik, jadi gambar harus diunggah dalam rentang waktu tersebut.
    </Warning>

    Setelah URL pre-signed diterima dari API, unggah gambar menggunakan metode `PUT`. Ini memastikan akses yang aman dan sementara ke AWS S3 untuk mengunggah gambar.

    **Perpustakaan yang didukung untuk mengunggah ke S3:**

    * **Node.js**: `axios`, `node-fetch`
    * **Python**: `requests`, `boto3`
    * **Go**: `net/http`
    * **PHP**: `GuzzleHttp`
    * **Ruby**: `rest-client`

    Jika unggahan berhasil, AWS S3 akan mengembalikan status `200 OK`, menunjukkan bahwa gambar telah disimpan dengan sukses.

    <Card title="Upload Product Image API" icon="code" href="/api-reference/products/put-products-images">
      Lihat struktur permintaan dan respons yang terperinci dalam dokumentasi API Upload Product Image.
    </Card>
  </Accordion>

  <Accordion title="Archiving a Product">
    Jika Anda tidak lagi ingin menampilkan atau menggunakan produk, Anda dapat mengarsipkannya menggunakan permintaan `DELETE` ke endpoint `/products/{id}`. Tindakan ini menyembunyikan produk tetapi tidak menghapusnya secara permanen.

    <Card title="Archive Product API" icon="code" href="/api-reference/products/archive-product">
      Lihat struktur permintaan dan respons yang terperinci dalam dokumentasi API Archive Product.
    </Card>
  </Accordion>

  <Accordion title="Unarchiving a Product">
    Jika Anda perlu memulihkan produk yang diarsipkan, kirimkan permintaan `POST` ke endpoint `/products/{product_id}/unarchive`. Ini akan mengaktifkan kembali produk dan membuatnya tersedia untuk digunakan kembali.

    <Card title="Unarchive Product API" icon="code" href="/api-reference/products/unarchive-product">
      Lihat struktur permintaan dan respons yang terperinci dalam dokumentasi API Unarchive Product.
    </Card>
  </Accordion>

  <Accordion title="Checkout & fulfillment">
    Buat alur pembayaran atau langganan dari produk, dan penuhi secara otomatis melalui manfaat dan webhook.

    <CardGroup cols={3}>
      <Card title="Checkout Sessions" icon="code" href="/developer-resources/checkout-session">
        Buat sesi checkout untuk pembelian sekali atau berlangganan.
      </Card>

      <Card title="Payment Webhooks" icon="code" href="/developer-resources/webhooks/intents/payment">
        Tanggapi peristiwa siklus hidup pembayaran.
      </Card>

      <Card title="Subscription Webhooks" icon="code" href="/developer-resources/webhooks/intents/subscription">
        Tangani peristiwa langganan yang dibuat, diperbarui, dan dibatalkan.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Praktik terbaik

* **Mulailah dengan kejelasan**: Pisahkan produk untuk setiap opsi harga (Bulanan vs Tahunan)
* **Gunakan uji coba dengan bijak**: Pasangkan uji coba dengan onboarding untuk mendorong aktivasi
* **Otomatiskan pemenuhan**: Gunakan manfaat dan webhooks untuk pengiriman instan
* **Tandai dengan metadata**: Simpan ID sistem Anda untuk rekonsiliasi

<Check>
  Anda siap membuat produk dan mulai menjual - sekali, berulang, atau berdasarkan penggunaan.
</Check>

## Terkait

<CardGroup cols={2}>
  <Card title="Product Analytics" icon="chart-mixed" href="/features/analytics-and-reporting#product-level-analytics">
    Lacak pendapatan, pelanggan, retensi, pelanggan, dan MRR untuk setiap produk individual.
  </Card>

  <Card title="Localized Pricing" icon="earth-americas" href="/features/localized-pricing">
    Tetapkan harga tetap per mata uang atau per negara pada sebuah produk alih-alih mengandalkan kurs nilai tukar langsung.
  </Card>
</CardGroup>
