API Validasi Kupon (v2)
API Validasi Kupon Vivoldi memungkinkan Anda memeriksa apakah kupon valid sebelum diproses penggunaannya.
Selain memeriksa ketersediaan, API ini juga mengembalikan informasi diskon, syarat penggunaan, dan data pengguna untuk mendukung logika bisnis yang fleksibel.
API ini tersedia mulai dari paket Personal.
/api/coupon/v2/validate?cpnNo={cpnNo}
GET /api/coupon/v2/validate
?cpnNo=ZJLF0399WQBEQZJM
&processStoreIdx=22
Request Parameters
- cpnNostringrequired
- Nomor kupon.
- processStoreIdx integer
-
IDX toko tempat permintaan ini benar-benar diproses. Jika dikirim, server memverifikasi kepemilikan organisasi, status aktif, dan izin sebelum mencatatnya dalam riwayat pemrosesan.
Cabang pemrosesan tidak diambil dari permintaan; server menentukannya dari toko ini. Nilai ini berbeda dari toko penerbit (storeIdx).
{
"code": 0,
"message": "",
"result": {
"cpnNo": "ZJLF0399WQBEQZJM",
"domain": "https://vvd.bz",
"nm": "$100 off cake coupon",
"grpIdx": 271,
"grpNm": "Birthday coupon",
"discTypeIdx": 457,
"discCurrency": "USD",
"formatDiscCurrency": "$60",
"disc": 60.0,
"strtYmd": "2025-01-01",
"endYmd": "2025-12-31",
"useLimit": 1,
"imgUrl": "https://file.vivoldi.com/coupon/2024/11/08/lmTFkqLQdCzeBuPdONKG.webp",
"onsiteYn": "Y",
"onsiteToken": "QsBkV0ryiCkxiV4KUNJBSWQcR8MzSlvez4ntLh2Tt2M",
"onsiteTokenExpiresIn": 180,
"memo": "60% off cake with coupon at the venue",
"url": "",
"userId": "user08",
"userNm": "Emily",
"userPhnno": "202-555-0173",
"userEml": "test@gmail.com",
"userEtc1": "",
"userEtc2": "",
"useCnt": 0,
"regYmdt": "2024-11-17 17:29:25",
"branchIdx": 11,
"branchNm": "Gangnam Branch",
"storeIdx": 22,
"storeNm": "Gangnam Station Store",
"issueScope": "BRANCH",
"useScope": "BRANCH",
"useBranchIdx": 11,
"useBranchNm": "Gangnam Branch"
}
}
Response Parameters
- codeinteger
- Kode respons: 0 = Berhasil, nilai lain = Error
- messagestring
- Pesan respons. Jika kode tidak sama dengan 0, pesan kesalahan akan dikembalikan.
- resultobject
-
Berhasil diverifikasi: Respons mengembalikan informasi kupon.
Gagal diverifikasi: Respons bernilai null dan dapat dilihat melalui pesan kesalahan. - cpnNostring
- Nomor kupon.
- domain string
- Domain kupon.
- nmstring
- Nama kupon.
- discTypeIdxinteger
- Jenis diskon. (457: diskon persentase %, 458: diskon nominal)
- discdouble
- Untuk persentase (457): rentang 1–100%. Untuk nominal (458): masukkan jumlah.
- discCurrencystring
- Mata uang. Wajib diisi jika menggunakan diskon nominal (discTypeIdx:458).
- formatDiscCurrencystring
- Simbol mata uang.
- strtYmddate
- Tanggal mulai berlaku kupon.
- endYmddate
- Tanggal kedaluwarsa kupon.
- useLimitinteger
- Batas penggunaan kupon. (0: tanpa batas, 1–5: jumlah penggunaan terbatas)
- imgUrlstring
- URL gambar kupon.
- onsiteYnstring
-
Kupon di lokasi. Menentukan apakah tombol
“Gunakan Kupon”ditampilkan di halaman kupon.
Dibutuhkan saat kupon digunakan di toko offline. - onsiteToken string
-
Token pertukaran berjangka pendek untuk pemrosesan di lokasi.
Menggantikan teks biasaonsitePwdyang dikembalikan v1. Ini bukan faktor autentikasi tambahan; tujuannya agar kata sandi jangka panjang tidak tersimpan di respons dan log integrasi.
Kedaluwarsa setelah 180 detik, hanya dapat dipakai sekali, dan tidak dapat digunakan ulang untuk organisasi, sumber daya, tindakan, atau toko pemroses lain. Tidak diterbitkan jika sumber daya tidak memakai autentikasi di lokasi (onsiteYn = N). - onsiteTokenExpiresIn integer
- Masa berlaku token dalam detik. Tidak ada jika token tidak diterbitkan.
- memostring
- Catatan referensi internal.
- urlstring
-
Jika URL dimasukkan, tombol
“Pergi Gunakan Kupon”akan ditampilkan di halaman kupon.
Mengklik tombol atau gambar kupon akan mengarahkan ke URL tersebut. - userIdstring
-
Digunakan untuk mengelola penerima kupon.
Wajib diisi jika batas penggunaan kupon diatur 2–5 kali.
Biasanya diisi dengan ID login anggota situs atau nama dalam bahasa Inggris. - userNmstring
- Nama pengguna kupon. Untuk penggunaan internal.
- userPhnnostring
- Nomor telepon pengguna kupon. Untuk penggunaan internal.
- userEmlstring
- Email pengguna kupon. Untuk penggunaan internal.
- userEtc1string
- Bidang tambahan untuk penggunaan internal.
- userEtc2string
- Bidang tambahan untuk penggunaan internal.
- useCntinteger
- Jumlah penggunaan kupon.
- regYmdtdatetime
- Tanggal pembuatan kupon. Contoh: 2025-07-21 11:50:20
- branchIdx integer
-
IDX cabang penerbit.
nulljika diterbitkan kantor pusat. Ini adalah lokasi penerbitan, bukan cabang tempat permintaan ini diproses. - branchNm string
-
Nama cabang penerbit.
nulljika diterbitkan kantor pusat. Nama tetap dikembalikan meskipun cabang dinonaktifkan. - storeIdx integer
-
IDX toko penerbit.
nulljika tidak ditentukan. Berbeda dari toko pemroses. - storeNm string
-
Nama toko penerbit.
nulljika toko penerbit tidak ditentukan. Nama tetap dikembalikan meskipun toko dinonaktifkan. - issueScope string
-
Jenis penerbitan.
HEAD_OFFICE(diterbitkan kantor pusat) atauBRANCH(diterbitkan cabang). BernilaiHEAD_OFFICEjikabranchIdxadalahnull. - useScope string
-
Cakupan penggunaan.
ALL(semua toko) atauBRANCH(cabang tertentu). - useBranchIdx integer
-
IDX cabang tempat penggunaan. Hanya berisi nilai saat
useScope = BRANCH;nulljikaALL. - useBranchNm string
-
Nama cabang tempat penggunaan. Hanya berisi nilai saat
useScope = BRANCH;nulljikaALL. Nama tetap dikembalikan meskipun cabang dinonaktifkan.
Token verifikasi di toko (onsiteToken)
Respons API Validasi v2 tidak menyertakan kata sandi toko dalam bentuk teks biasa
(onsitePwd). Sebagai gantinya, API mengembalikan onsiteToken yang berlaku selama 180 detik.
Tujuannya adalah meminimalkan paparan kata sandi dalam teks biasa, bukan memperkuat autentikasi. API Validasi tidak memverifikasi kata sandi itu sendiri, sehingga token ini tidak menambahkan faktor autentikasi baru. Masa berlaku yang singkat, penggunaan satu kali, dan pengikatan konteks membatasi penggunaan ulang token.
| Item | Nilai |
|---|---|
| Masa berlaku | 180 detik. Masa berlaku juga dikembalikan melalui onsiteTokenExpiresIn. |
| Jumlah penggunaan | Satu kali. Setelah token digunakan, hanya percobaan ulang dengan Idempotency-Key yang sama yang mengembalikan hasil awal. |
| Pengikatan | Organisasi, akun kunci API, sumber daya, tindakan, dan toko pemroses yang dikonfirmasi saat validasi |
| Digunakan untuk | Penukaran kupon, penukaran hadiah stempel, dan pembaruan stempel dengan useYn = Y |
Token tidak diterbitkan untuk sumber daya yang tidak menggunakan verifikasi di toko (onsiteYn = N).
API Validasi v1 tetap mengembalikan onsitePwd dalam bentuk teks biasa.
Menentukan toko pemroses
| Parameter | Arti | Deskripsi |
|---|---|---|
processStoreIdx |
Toko pemroses | Toko tempat permintaan ini benar-benar diproses. Opsional; jika dikirim, server memverifikasi kepemilikan organisasi, status aktif, dan izin sebelum mencatatnya dalam riwayat pemrosesan. |
Cabang pemroses tidak diterima dari permintaan. Server menentukannya dari toko yang Anda tentukan dan mencatatnya.
Jika cakupan penggunaan adalah BRANCH, permintaan hanya diproses bila cabang toko pemroses yang terverifikasi sama dengan cabang penggunaan,
atau bila Anda melakukan autentikasi dengan kata sandi di tempat cabang tersebut. Tanpa keduanya, permintaan ditolak.
Parameter yang tidak dapat digunakan — branchIdx (cabang penerbit),
storeIdx (toko penerbit), useScope (cakupan penggunaan), dan
useBranchIdx (cabang penggunaan) adalah kebijakan penerbitan yang sudah tersimpan dan tidak dapat diubah melalui API ini.
Jika dikirim, akan ditolak dengan 400 (kode kesalahan 1227).
Apa yang dapat ditentukan dari hasil validasi?
API ini tidak hanya sekadar memeriksa “valid / tidak valid”.
Dirancang agar developer dapat membangun logika keputusan sendiri berdasarkan data kupon yang detail.
Dengan respons (result), Anda dapat menentukan:
- Apakah diskon dapat diterapkan dan menghitung nilainya
- Apakah kupon hanya berlaku untuk pengguna tertentu (userId, userEml)
- Apakah batas penggunaan telah terlampaui (useCnt, useLimit)
- Apakah kupon sudah kedaluwarsa atau belum aktif (strtYmd, endYmd)
- Apakah kondisi tertentu terpenuhi (online/offline, dll.) (onsiteYn)
- URL tujuan setelah kupon diterapkan (url)
Artinya, ini bukan sekadar hasil sederhana,
melainkan API berbasis data untuk logika fleksibel di level aplikasi.
Metode validasi
Validasi dilakukan berdasarkan kode kupon (cpNo) dengan mempertimbangkan berbagai kriteria.
- Ketersediaan
- Masa berlaku
- Batas penggunaan
- Syarat pengguna
- Lingkungan penggunaan
Hasil dikembalikan dalam bentuk data terstruktur, bukan hanya nilai boolean sederhana.
Cara menggunakan data respons
Objek result berisi semua informasi utama kupon.
Developer dapat menggunakan data ini untuk:
- Menghitung dan menampilkan diskon secara real-time di frontend
- Membatasi penggunaan kupon hanya untuk pengguna tertentu
- Menerapkan logika berdasarkan jumlah pembayaran
- Menampilkan pesan UI sesuai status kupon (kedaluwarsa, sudah digunakan, dll.)
Contoh penggunaan
- Validasi sebelum pembayaran: Validasi kupon terlebih dahulu dan terapkan hanya jika valid
- Pesan pengguna: Tampilkan pesan sesuai hasil validasi (kedaluwarsa atau sudah digunakan)
- Perhitungan diskon: Gunakan (
disc, discType) untuk menghitung total pembayaran
Kode kupon yang sama dapat digunakan kembali setelah dihapus.
Hal yang perlu diperhatikan
- Hasil validasi mencerminkan kondisi saat permintaan dan dapat berubah sebelum digunakan.
- Selalu gunakan alur: validasi → penggunaan (Redeem).
- Mengandalkan hanya validasi di sisi klien berisiko terhadap keamanan.
- Lakukan verifikasi ulang perhitungan diskon di server untuk memastikan akurasi dan keamanan.