Dokumen & Invoice
Tujuh jenis dokumen siap pakai dengan preview real-time, diskon persen dan/atau nominal, pajak per item, PDF & cetak thermal.
- Link + PIN untuk penerima
- Status dibaca & pembayaran bertahap
- Logo & tanda tangan berupa gambar
Satu platform untuk dokumen transaksi (invoice, penawaran, PO/DO, nota, kwitansi, slip gaji), pembayaran QRIS bernominal, verifikasi LessOTP WhatsApp tanpa biaya SMS, dan Single Sign-On untuk aplikasi Anda.
Tanpa login untuk membuat & membagikan dokumen. Login hanya jika ingin dashboard, API key, webhook, dan laporan.
Dipakai langsung dari browser, atau ditanam ke produk Anda lewat REST API dan webhook.
Tujuh jenis dokumen siap pakai dengan preview real-time, diskon persen dan/atau nominal, pajak per item, PDF & cetak thermal.
Ubah QRIS statis merchant menjadi QRIS dinamis dengan nominal terkunci. Konversi EMVCo TLV + CRC16 dilakukan di sisi klien.
Verifikasi nomor tanpa biaya SMS: sistem membuat link/QR wa.me berisi kode, user tinggal menekan kirim ke nomor admin.
lessotp.verifiedJadikan KirimInvoice sebagai penyedia identitas: Authorization Code + PKCE, JWT bertanda tangan, sesi cookie httpOnly.
/authorize, /token, /userinfoOTP konvensional mengirim SMS ke user dan Anda membayar tiap pesan. LessOTP membalik alurnya: user mengirim kode ke nomor admin lewat WhatsApp. Biaya per verifikasi nol, dan nomor otomatis terbukti aktif.
Aplikasi Anda memanggil /api/v1/lessotp/start dan menerima waLink, QR, serta requestId.
WhatsApp terbuka dengan pesan VERIFY <ref> <kode> yang sudah terisi. User hanya menekan tombol kirim.
Nomor admin (WAHA di VPS Anda) menerima pesan dan meneruskannya ke webhook KirimInvoice.
Kami cocokkan kode + pengirim, lalu kirim event lessotp.verified ke webhook aplikasi Anda.
POST /api/v1/lessotp/start
Authorization: Bearer ki_live_xxx
Content-Type: application/json
{
"phone": "628123456789",
"purpose": "signup",
"ttl": 300
}
โ 200 OK
{
"requestId": "lo_7QK2",
"code": "418702",
"waLink": "https://wa.me/62812...?text=VERIFY%20lo_7QK2%20418702",
"qr": "data:image/png;base64,...",
"expiresAt": "2026-08-27T07:05:00Z"
}
POST /api/v1/lessotp/verify
{ "requestId": "lo_7QK2", "code": "418702" }
โ { "verified": true, "phone": "628123456789" }
// Webhook ke aplikasi Anda
POST https://app.anda.com/hooks/ki
X-KI-Event: lessotp.verified
X-KI-Signature: sha512=9f2c...
{
"event": "lessotp.verified",
"requestId": "lo_7QK2",
"phone": "628123456789",
"verifiedAt": "2026-08-27T07:02:11Z"
}
JSON.parse.Tempel payload QRIS statis atau pindai gambarnya. Kami set tag 01 menjadi 12, menyisipkan tag 54 (nominal), opsional tag 55โ57 (biaya layanan) dan label tagihan pada tag 62, lalu menghitung ulang CRC pada tag 63.
POST /api/v1/qris/dynamic
Authorization: Bearer ki_live_xxx
{
"staticPayload": "000201010211...",
"amount": 150000,
"label": "INV-2026-A1B2",
"fee": { "type": "rupiah", "value": 1000 }
}
โ {
"payload": "000201010212...6304AB12",
"merchant": "TOKO BERKAH JAYA",
"nmid": "ID1024xxxxxxx",
"amount": 150000
}
Pengguna login sekali dengan nomor WhatsApp + password (opsional dikuatkan LessOTP), lalu dapat mengakses seluruh aplikasi Anda. Alur mengikuti OAuth2 Authorization Code + PKCE sehingga kompatibel dengan library OIDC populer.
GET /api/v1/sso/authorize
?client_id=app_kasir
&redirect_uri=https://kasir.anda.com/cb
&response_type=code
&scope=openid%20profile%20phone
&code_challenge=E9Me...
&code_challenge_method=S256
&state=xyz
POST /api/v1/sso/token
{ "grant_type":"authorization_code",
"code":"...", "code_verifier":"...",
"client_id":"app_kasir" }
โ { "access_token":"...", "id_token":"...",
"token_type":"Bearer", "expires_in":900 }
Kelola API key, endpoint webhook, percobaan ulang, dan log pengiriman langsung dari dashboard.
lessotp.verifiedNomor terverifikasilessotp.expiredPermintaan kedaluwarsasso.loginLogin berhasilqris.generatedQR dinamis dibuatinvoice.sentDokumen dikiriminvoice.readDibuka penerimainvoice.paidDinyatakan lunasconst raw = await request.text(); // WAJIB raw
const sig = request.headers.get('X-KI-Signature');
const key = await crypto.subtle.importKey(
'raw', new TextEncoder().encode(env.KI_WEBHOOK_SECRET),
{ name: 'HMAC', hash: 'SHA-512' }, false, ['sign']);
const mac = await crypto.subtle.sign('HMAC', key,
new TextEncoder().encode(raw));
const hex = [...new Uint8Array(mac)]
.map(b => b.toString(16).padStart(2, '0')).join('');
if (!timingSafeEqual(`sha512=${hex}`, sig))
return new Response('invalid signature', { status: 401 });
const event = JSON.parse(raw); // baru parse
Tidak. Halaman utama dan pembuat dokumen bisa dipakai tanpa login โ dokumen tersimpan di perangkat dan dibagikan lewat link + PIN. Login diperlukan untuk dashboard, API key, webhook, laporan, dan sinkronisasi antar perangkat.
Ya. Tidak ada gateway SMS. User mengirim pesan WhatsApp berisi kode ke nomor admin, sehingga biayanya hanya kuota data user dan hosting WAHA di VPS Anda.
Tidak, jika Anda memakai alat di browser โ seluruh konversi TLV dan CRC16 dijalankan di perangkat. Endpoint API tersedia untuk otomatisasi server-to-server dan tidak menyimpan payload statis.
Rekber menyangkut penguasaan dana pihak ketiga dan mediasi sengketa, sehingga kami kelola secara internal dengan verifikasi manual. Membuka API rekber berarti membuka risiko penyalahgunaan yang tidak sepadan.
Penyimpanan edge: D1 (data transaksional), KV (sesi & kode sekali pakai), dan R2 (logo, tanda tangan, lampiran). Semua berjalan di edge tanpa server tradisional.
Gratis untuk pemakaian pribadi. Tanpa kartu kredit, tanpa instalasi.