API Validasi Stempel (v2)
API Validasi Stempel digunakan untuk memeriksa apakah stempel berada dalam kondisi valid sebelum menambah, mengurangi, atau memproses penggunaan reward.
Memverifikasi stamp IDX, periode berlaku, status aktif, serta apakah reward sudah digunakan dalam satu permintaan.
Selain validasi, API ini juga mengembalikan status akumulasi dan informasi kartu, sehingga dapat digunakan untuk membangun tampilan stempel bagi pengguna.
API ini tersedia mulai dari paket Personal ke atas.
/api/stamp/v2/validate?stampIdx={stampIdx}
GET /api/stamp/v2/validate
?stampIdx=274
&processStoreIdx=22
Request Parameters
- stampIdx integer required
- IDX stempel.
- 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": {
"stampIdx": 16,
"domain": "https://vvd.bz",
"cardIdx": 1,
"cardNm": "Accumulate 10 Americanos",
"cardTtl": "Collect 10 stamps to get one free Americano.",
"stamps": 10,
"maxStamps": 12,
"stampUrl": "https://vvd.bz/stamp/274",
"url": "https://myshopping.com",
"strtYmd": "2025-01-01",
"endYmd": "2026-12-31",
"onsiteYn": "Y",
"onsiteToken": "QsBkV0ryiCkxiV4KUNJBSWQcR8MzSlvez4ntLh2Tt2M",
"onsiteTokenExpiresIn": 180,
"memo": null,
"activeYn": "Y",
"userId": "NKkDu9X4p4mQ",
"userNm": null,
"userPhnno": null,
"userEml": null,
"userEtc1": null,
"userEtc2": null,
"stampImgUrl": "https://cdn.vivoldi.com/www/image/icon/stamp/icon.stamp.1.webp",
"regYmdt": "2025-10-30 05:11:35",
"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
-
Jika verifikasi berhasil, respons akan berisi informasi stempel.
Jika gagal, nilai respons akan menjadinulldan pesan kesalahan akan menunjukkan penyebabnya. - stampIdx integer
- Stamp IDX.
- domain string
- Domain cap.
- cardIdx integer
- Card IDX.
- cardNm string
- Nama kartu.
- cardTtl string
- Judul kartu.
- stamps integer
- Jumlah cap yang telah dikumpulkan sejauh ini.
- maxStamps integer
- Jumlah maksimum cap pada kartu.
- stampUrl string
- URL halaman cap.
- url string
- URL tujuan yang akan dibuka saat tombol di halaman cap diklik.
- strtYmd date
- Tanggal mulai masa berlaku cap.
- endYmd date
- Tanggal berakhirnya masa berlaku cap.
- onsiteYn string
-
Enum:
YN
-
Menunjukkan apakah penambahan cap di lokasi diaktifkan.
Jika nilainyaY, staf toko dapat menambahkan cap langsung di tempat. - 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.
- memo string
- Catatan internal untuk referensi.
- activeYn string
-
Enum:
YN
-
Menunjukkan apakah cap aktif.
Jika dinonaktifkan, pelanggan tidak dapat menggunakan cap tersebut. - userId string
-
ID pengguna. Digunakan untuk mengelola penerima cap.
Biasanya ini adalah ID login anggota situs web.
Jika tidak diatur, sistem akan membuat ID pengguna secara otomatis. - userNm string
- Nama pengguna. Hanya untuk keperluan internal.
- userPhnno string
- Nomor telepon pengguna. Hanya untuk keperluan internal.
- userEml string
- Alamat email pengguna. Hanya untuk keperluan internal.
- userEtc1 string
- Kolom tambahan untuk manajemen internal.
- userEtc2 string
- Kolom tambahan untuk manajemen internal.
- stampImgUrl string
- URL gambar cap.
- regYmdt datetime
- Tanggal pembuatan cap. 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.
Validasi parameter numerik
Jika parameter numerik menerima nilai bukan angka, atau angka di luar rentang yang dapat diproses server, permintaan langsung ditolak dengan 400 (kode kesalahan 653).
Dalam kasus itu data stempel dan riwayat perolehan sama sekali tidak berubah, dan tidak ada catatan event maupun pengiriman Webhook. Jika Anda menerima respons gagal, tidak ada yang tersimpan.
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 peran validasi stempel?
API Validasi Stempel bukan hanya pengecekan validitas.
API ini digunakan untuk menentukan langkah berikutnya berdasarkan status akumulasi saat ini.
- Menentukan apakah stempel dapat ditambahkan
- Memeriksa apakah syarat reward sudah terpenuhi
- Memastikan status partisipasi kampanye
- Melihat progres per pengguna
Intinya, API ini adalah endpoint utama untuk membaca progres kampanye.
Apa yang bisa ditentukan dari hasil validasi
Response (result) berisi semua data yang diperlukan untuk mengevaluasi progres stempel.
Dengan data ini, Anda dapat:
- Membandingkan
stampsdenganmaxStamps - Menentukan apakah akumulasi masih memungkinkan
- Memeriksa apakah syarat reward terpenuhi
- Memastikan status aktif (
activeYn) - Menilai konteks penggunaan (
onsiteYn) - Menerapkan personalisasi berbasis data pengguna
Inti: “API validasi = status + input untuk logika keputusan”
Cara menggunakan data response
Response dari API validasi digunakan langsung dalam logika aplikasi.
Contoh:
- Tampilkan progres: Menampilkan progres secara real-time di frontend
- Kontrol aksi: Mengaktifkan atau menonaktifkan tombol berdasarkan status
- Tampilkan reward: Menampilkan reward saat target tercapai
- Kelola kondisi pengguna: Menyesuaikan logika berdasarkan progres
Intinya, API ini adalah sumber data utama yang menghubungkan UI dan logika bisnis.
Perbedaan dengan API validasi kupon
Kedua API mengembalikan data validasi, tetapi jenis informasinya berbeda.
Validasi kupon berisi data transaksi seperti jenis diskon, nilai, dan batas penggunaan.
Validasi stempel berisi data progres seperti stamps, maxStamps, nama kartu, judul, dan URL gambar.
Validasi kupon digunakan untuk menghitung “berapa diskon saat ini”,
sementara validasi stempel menunjukkan “berapa yang sudah dikumpulkan dan berapa yang tersisa”.
Pentingnya dalam operasional
API Validasi Stempel berada di pusat alur event.
- Mencegah akumulasi stempel yang tidak valid
- Memblokir aksi jika syarat tidak terpenuhi
- Meningkatkan pengalaman pengguna
- Menjaga stabilitas logika event
Tanpa validasi, dapat terjadi inkonsistensi data dan kesalahan pada event.
Hal yang perlu diperhatikan
- Status dapat berubah antara proses validasi dan eksekusi aktual
- Sebaiknya langsung memanggil API akumulasi setelah validasi
- Tidak disarankan hanya mengandalkan validasi di sisi klien
- Pada lingkungan trafik tinggi, optimalkan pemanggilan dan siapkan mekanisme retry