CLIPKU+
Clipku Docs

API Voucher Reseller

Integrasi untuk aplikasi partner yang ingin menjual voucher premium Clipku.

Bearer API key

API key dibuat admin dan dikirim di header Authorization.

Saldo reseller

Voucher langsung memotong saldo reseller. Saldo kurang akan ditolak.

Idempotent

externalRef mencegah voucher dobel saat request diulang.

Otorisasi API

Endpoint reseller memakai Bearer API key. Endpoint admin untuk membuat reseller dan topup saldo memakai session admin.

# Reseller endpoint
Authorization: Bearer ckrs_live_xxxxxxxxx

# Admin endpoint
Cookie: clipku_session=ADMIN_SESSION_TOKEN

Endpoint

Base URL: https://drama.clipku.com

POST
/api/admin/resellersBuat reseller dan API key

Buat akun reseller baru. API key hanya tampil sekali pada response pembuatan.

PATCH
/api/admin/resellersTopup saldo reseller

Tambah saldo reseller melalui API admin. Endpoint ini membutuhkan session admin.

GET
/api/reseller/plansCek saldo dan paket

Ambil saldo reseller terbaru beserta daftar paket aktif.

POST
/api/reseller/vouchersBuat voucher

Buat satu atau beberapa voucher memakai saldo reseller.

GET
/api/reseller/vouchers/{externalRef}Cek order voucher

Ambil ulang status order dan daftar voucher berdasarkan externalRef.

Request buat reseller

Admin membuat reseller untuk owner yang sudah terdaftar. Simpan apiKey dari response karena hanya tampil sekali.

curl -X POST https://drama.clipku.com/api/admin/resellers \
  -H "Content-Type: application/json" \
  -H "Cookie: clipku_session=ADMIN_SESSION_TOKEN" \
  -d '{
    "name": "Partner Store",
    "ownerEmail": "partner@example.com",
    "initialBalance": 100000
  }'

Response buat reseller

initialBalance opsional. Jika diisi, saldo awal langsung masuk ke reseller baru.

{
  "message": "Reseller dibuat. Simpan API key karena tidak akan ditampilkan lagi.",
  "reseller": {
    "id": "clx_reseller_id",
    "name": "Partner Store",
    "keyPreview": "ckrs_live_...abcd12",
    "balance": "100000.00",
    "isActive": true
  },
  "apiKey": "ckrs_live_xxxxxxxxx"
}

Request topup saldo via API

Topup saldo dilakukan lewat API admin. Nilai addBalance bersifat increment, bukan mengganti saldo lama.

curl -X PATCH https://drama.clipku.com/api/admin/resellers \
  -H "Content-Type: application/json" \
  -H "Cookie: clipku_session=ADMIN_SESSION_TOKEN" \
  -d '{
    "id": "clx_reseller_id",
    "action": "UPDATE_RESELLER",
    "addBalance": 100000
  }'

Response topup saldo

Response mengembalikan saldo terbaru reseller dan update tercatat di audit admin.

{
  "message": "Reseller diperbarui.",
  "reseller": {
    "id": "clx_reseller_id",
    "name": "Partner Store",
    "keyPreview": "ckrs_live_...abcd12",
    "balance": "250000.00",
    "isActive": true,
    "updatedAt": "2026-07-11T08:10:00.000Z"
  }
}

Request cek saldo

Gunakan API key reseller untuk mengambil saldo terbaru dan daftar paket yang bisa dibuat voucher.

curl https://drama.clipku.com/api/reseller/plans \
  -H "Authorization: Bearer ckrs_live_xxxxxxxxx"

Response cek saldo

Nilai balance dan price dikembalikan sebagai decimal.

{
  "reseller": {
    "id": "clx_reseller_id",
    "name": "Partner Store",
    "balance": "150000.00"
  },
  "plans": [
    {
      "id": "clx_plan_id",
      "slug": "premium-30-hari",
      "name": "Premium 30 Hari",
      "price": "10000.00",
      "durationDays": 30
    }
  ]
}

Request buat voucher

Kirim planId atau planSlug, jumlah voucher, dan externalRef.

curl -X POST https://drama.clipku.com/api/reseller/vouchers \
  -H "Authorization: Bearer ckrs_live_xxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "planSlug": "premium-30-hari",
    "quantity": 5,
    "externalRef": "ORDER-APP-001"
  }'

Contoh response

Simpan externalRef dan kode voucher di sistem Anda.

{
  "success": true,
  "idempotent": false,
  "order": {
    "id": "clx_order_id",
    "externalRef": "ORDER-APP-001",
    "status": "COMPLETED",
    "quantity": 5,
    "amount": "50000"
  },
  "vouchers": [
    {
      "code": "CKAB-CDEF-1234-5678",
      "durationDays": 30
    }
  ]
}

Request cek status voucher

Pakai externalRef yang sama dengan request pembuatan voucher.

curl https://drama.clipku.com/api/reseller/vouchers/ORDER-APP-001 \
  -H "Authorization: Bearer ckrs_live_xxxxxxxxx"

Response status voucher

Status voucher menampilkan apakah kode masih tersedia atau sudah dipakai.

{
  "order": {
    "id": "clx_order_id",
    "externalRef": "ORDER-APP-001",
    "status": "COMPLETED",
    "quantity": 5,
    "amount": "50000.00",
    "createdAt": "2026-07-11T08:00:00.000Z"
  },
  "plan": {
    "slug": "premium-30-hari",
    "name": "Premium 30 Hari",
    "durationDays": 30
  },
  "vouchers": [
    {
      "code": "CKAB-CDEF-1234-5678",
      "codePreview": "CKAB...5678",
      "status": "AVAILABLE",
      "redeemedAt": null,
      "expiresAt": null
    }
  ]
}

Referensi status

Status order menunjukkan hasil pembuatan voucher. Status voucher menunjukkan apakah kode masih bisa dipakai.

Order status:
- COMPLETED: voucher berhasil dibuat dan saldo sudah terpotong.

Voucher status:
- AVAILABLE: kode belum digunakan.
- REDEEMED: kode sudah dipakai user.
- EXPIRED: kode sudah melewati expiresAt.

Format error

Semua error utama dikembalikan sebagai JSON dengan field message. Validasi input dapat menyertakan field issues.

{
  "message": "Saldo reseller tidak cukup."
}

Kode HTTP umum:
- 400: input tidak valid.
- 401: API key reseller salah atau tidak dikirim.
- 402: saldo reseller kurang.
- 403: session admin tidak valid.
- 404: paket, reseller, atau order tidak ditemukan.
- 422: request validasi bisnis ditolak.
- 429: terlalu banyak request.

Aturan penting

  • Simpan API key di serverJangan tanam API key di aplikasi mobile atau frontend publik.
  • Pakai externalRef unikGunakan satu externalRef untuk satu order agar retry tidak membuat voucher dobel.
  • Batasi jumlah voucherMaksimal membuat 50 voucher dalam satu request.
  • Simpan dan cek orderVoucher yang sudah dibuat bisa dicek ulang lewat endpoint status order.
  • Pisahkan akses topupTopup saldo memakai session admin, bukan API key reseller.