← Kembali ke Blog

Self-Host API Reseller — Versi Indonesia

Panduan jual API yang bukan punya lo, ke orang yang nggak ngerti, di atas infra yang bisa mati besok pagi.

API Reseller Self-Hosted TokenPanel AI Gateway Security

Ini laporan lapangan, bukan tutorial suci. Ditulis dari pengalaman beneran bikin satu platform dan ngeliatin sendiri di mana bagian yang bikin lo kaya dan mana yang bikin lo nangis. Isinya kasar, ada dark humor, dan beberapa bagian emang nggak nyaman dibaca.

0PART 0 — BACA DULU

Gue bukan pengacara, gue bukan vendor, gue bukan orang yang lo harus percaya. Gue cuma orang yang udah ngejalanin dan nulis apa yang terjadi.

Beberapa hal yang lo bakal baca di sini melanggar ToS pihak lain. Gue nggak ngajarin cara ngelesnya — gue jelasin bagaimana bentuknya, dan kenapa itu berisiko. Kalau abis baca ini lo tetep mau jalan, itu keputusan lo, dan lo yang tanggung jawabnya.

Yang gue tekankan dari awal, dan ini bukan basa-basi:

Bisnis model ini bukan dibunuh oleh kompetitor. Dibunuh oleh supply. Vendor bisa matiin akun lo malam ini tanpa email peringatan, dan katalog lo jadi kosong. Kalau lo nggak siap dengan itu, jangan mulai.

Oke. Lanjut.


1PART 1 — HOW THE HELL THIS WORK

Disclaimer: sampai sekarang gue juga nggak sepenuhnya paham. Yang gue tulis di bawah ini adalah hasil ngulik dan ngobrol dengan Hermes selama berhari-hari. Anggap ini peta sketsa dari orang yang pernah kesasar, bukan peta resmi dari dinas.

1.1 Rantai pasoknya

[BUYER] → [FRONTEND] → [BACKEND] → [SUMBER ROUTER/PROXY] → [ORIGIN: vendor asli]
              │             │                │                      │
         gampang       neraka          pool kunci            yang punya GPU

Dan yang di luar rantai tapi bikin lo nggak bisa tidur:

[BAYAR] ──▶ QRIS (nominal unik / listener HP)  ·  kripto (rate + konfirmasi)
              ↓
        [LEDGER] → [SALDO USER] → baru boleh dipakai

Satu per satu:

Hop Isi Tingkat kesusahan
BUYER Manusia yang mau bayar. Sayangnya jumlahnya selalu lebih sedikit dari yang lo kira Gampang cari kalau lo udah punya nama. Susah kalau belum
FRONTEND Landing page, dashboard, halaman top-up, tombol yang bikin orang merasa lo ini perusahaan serius Gampang banget. Minta AI bikin, 10 menit jadi, bagus lagi
BACKEND Yang ngitung token, validasi kunci, potong saldo, terusin request Ini neraka. Ini tempat mimpi lo ketemu kenyataan
SUMBER Kunci pool, router, proxy. Tempat lo numpuk hasil "panen" Sedang. Kelihatan gampang sampai kunci pertama mati
ORIGIN Vendor yang beneran punya modelnya dan beneran punya GPU Nggak bisa lo sentuh. Cuma bisa lo beli

1.2 Kenapa frontend gampang dan backend nggak

Frontend itu muka. AI bisa bikin muka. Nggak ada uang di situ — cuma kesan.

Backend itu yang ngitung uang. Dan yang ngitung uang nggak bisa dikarang-karang. Satu bug satuan, saldo user lo hilang atau saldo lo bocor. Ini bukan masalah estetika, ini masalah aritmatika.

Aturan besi: frontend, serahin ke AI. Backend, jangan bangun dari nol. Ambil yang udah ada, modif dikit, dan hormati kode orang. Lo nggak akan ngehabisin bug yang belum pernah ditulis orang lain — tapi lo akan ngehabisin bug yang lo tulis sendiri jam 3 pagi karena lo terlalu gengsi.

1.3 Dari mana uangnya datang (dan dari mana hilangnya)

uang masuk  = harga jual lo × token terjual
uang keluar = harga supply   × token terjual     ← INI YANG SERING DILUPAKAN
              + VPS
              + kunci mati yang tetap lo bayar
              + refund & pembayaran nyangkut
              + nyawa lo

Margin di atas kertas ≠ margin di dompet. Nanti gue balik ke sini di PART 5.


2PART 2 — BEDAH BACKEND: MANA YANG LAYAK DIPAKAI

Ini daftar yang orang kira "semuanya backend API gateway". Kenyataannya cuma sebagian yang ngerti artinya duit.

2.1 Ada dua kategori, dan orang selalu ketuker

Kategori Isi Ngerti "saldo user"?
A · LLM gateway + billing One API, New API, TokenPanel, gpt-load ✅ Iya. Ada kuota, harga, potong saldo
B · API gateway umum Kong, Apache ShenYu, Lura/KrakenD, Membrane, APIPark ❌ Nggak. Cuma numpang lewat
C · Beda kamar OpenConnector ❌ Ngurusin hal lain total

Kalau lo mau jual API per token, lo butuh Kategori A. Kategori B itu lapisan yang lo tambahin di depannya — setelah lo gede dan mulai repot urusan traffic, rate limit, observability. Bukan pondasi.

2.2 Kategori A — bahan baku reseller

🟢 ONE API

Kakek dari semuanya. Go, ringan, SQLite/MySQL, jalan di VPS receh.

Punya: kuota per user, grup, channel, voucher (kode isi ulang — ini MVP top-up manual yang sebenernya udah jadi), log pemakaian, retry otomatis, pembatasan per token.

Yang bikin nangis: pembayaran nggak ada. Built-in-nya cuma tombol "recharge" yang nembak ke URL luar, plus endpoint POST /api/topup yang lo sendiri yang harus panggil. Jadi lo beli mobil, tapi gasnya lo harus tandem.

Analogi: One API itu warung dengan rak lengkap dan stok rapi — cuma nggak ada kasir. Pelanggan mau bayar, dia harus teriak dulu.

🟢🟢 NEW API

Fork One API yang dikasih makan dan disuruh olahraga. Ini yang paling siap-pakai.

Tambahan yang bikin hidup gampang: - EPay (protokol agregator gaya 易支付 — MD5 sign, callback otomatis) - Stripe, Creem, Waffo — pilih sesuai neraka lo - Minimum top-up per metode - Diskon per nominal (user top-up 100rb, dapat potongan — bikin orang top-up lebih gede) - Nominal preset yang bisa diklik - Sistem ratio tiga lapis (model ratio × completion ratio × group ratio) - Pra-konsumsi + pasca-konsumsi: potong di depan pakai estimasi, koreksi di belakang pakai token asli

Analogi: ini One API yang dirukiah. Kalau lo males ngoding billing dari nol dan lo oke dengan panel orang, ini titik mulai paling waras.

🟡 TOKENPANEL

Yang gue pakai. Bukan yang paling ramah, tapi yang paling "engine".

Punya: plans, credits, rate limits per dimensi, admin API lengkap, harga per-entry provider, cost vs price terpisah (jadi lo bisa liat margin asli), usage records, balance adjustments.

Yang bikin nangis: semuanya micros.

1 Rupiah = 1.000.000 micros
Harga Rp 7.500 / 1 juta token  →  yang lo tulis: 7500000
Harga Rp 7.500        →  tulis 7500  →  harga lo jadi Rp 0,0075/1jt  →  lo jual rugi 1.000.000×

Gue salah ini dua kali. Dua kali. Dan gejalanya menipu: semua request tetep sukses, saldo user kelihatan nggak bergerak, dan lo mulai nuduh billing-nya rusak padahal lo sendiri yang salah nulis angka.

Analogi: micros itu kayak ngisi bensin pakai satuan mililiter. Secara teknis bener. Secara manusia: lo bakal salah, berkali-kali, dan nggak sadar sampai ada yang komplain.

⭐ GPT-LOAD (tbphp)

Ini yang paling menarik, dan sengaja gue taruh di sini.

Self-hosted AI gateway, Go, MIT, mendukung dua jenis kredensial sekaligus: kunci API DAN akun langganan. Ada channel bawaan untuk OpenAI, Anthropic, Gemini, xAI, Bedrock, Vertex, DeepSeek, OpenRouter, Groq, dll — plus channel Subscription: Codex, Claude, Antigravity, Grok.

Dan fitur yang bikin orang "panen" sayang sekali ada semua di sini: multi-kredensial dengan bobot, retry, cooldown, blacklist otomatis, session affinity, health check, log, estimasi biaya.

Kalau lo penasaran "kok bisa ada orang jual Claude per-token murah banget" — ini alatnya. Bukan gue yang nyuruh. Gue cuma nggak mau lo pura-pura nggak tau.

Catatan penting: GPT-Load 2.0 itu rewrite total, nggak bisa impor data 1.x. Kalau lo migrasi, deploy instance baru dengan database sendiri, dan jangan langsung cutover.

🟡 APIPARK

Kategori hybrid: API gateway plus LLM gateway plus developer portal. Apache 2.0. Lebih "enterprise", lebih banyak konsep yang harus lo pahami sebelum jalan.

Bagus kalau lo serius dan mau semua di satu tempat. Jelek kalau lo cuma mau jual API minggu depan.

2.3 Kategori B — jangan salah kamar

Tool Sebenernya buat apa Verdict untuk reseller
KONG Gateway kelas perusahaan. Plugin hub, AI Gateway multi-LLM, MCP, semantic routing, observability. Jalan di Kubernetes Nggak ada konsep saldo. Lo bayar tenaga belajar buat fitur yang nggak lo pakai. Pakai Kong buat jual API per-token itu kayak pakai forklift buat jualan gorengan — bisa, tapi nggak ada yang ngelakuin
APACHE SHENYU Gateway Java, plugin, proxy Dubbo/gRPC/Spring Cloud/MQTT. WAF plugin, OAuth2, JWT Nggak ada billing. Punya kurva belajar Java + konfigurasi XML. Kalau lo nggak benci diri sendiri, skip
LURA (KrakenD) Framework gateway Go, super cepat, fokus agregasi banyak sumber jadi satu endpoint Nggak ada billing. Ini alat optimasi latency, bukan alat jualan
MEMBRANE API gateway Java/Lua, transformasi & routing Nggak ada billing. Sama-sama salah kamar
OPENCONNECTOR Nyambungin 1.000+ SaaS (GitHub, Gmail, Notion, BigQuery) ke AI agent. Alternatif Pipedream/Composio, kelola OAuth kredensial Beda kamar total. Ini bukan alat jual LLM. Kalau lo pakai ini buat reseller API, lo bukan salah pilih — lo salah proyek

2.4 Kesimpulan bagian ini

Mau jual API per-token minggu depan          → One API / New API / TokenPanel
Mau alat panen kredensial (banyak akun)      → GPT-Load
Mau serius, satu atap, siap enterprise       → APIPark
Mau gateway umum di depan yang udah jalan    → Kong / ShenYu / Lura (setelah gede)
Nggak jelas mau ngapain                      → OpenConnector (eh, itu bukan buat lo)

Kalau harus pilih satu dan lo tanya gue jujur: New API kalau lo males ngoding billing, TokenPanel kalau lo mau kontrol penuh dan nggak takut micros.


3PART 3 — KERAN, SAUS RAHASIA, DAN BANSOS

Ini bagian yang bikin bisnisnya jalan, dan bagian yang bikin bisnisnya mati.

3.1 Bahasa kasar dulu, biar sama frekuensi

Istilah lapangan Artinya
Keran Sumber API. Tempat lo nyedot
Saus / bumbu Kredensial yang bikin kerannya ngalir
Panen / harvest Ngumpulin kunci dan akun sebanyak mungkin
Gasak Pakai semua sumber murah/gratis yang bisa dijangkau
Bansos Free tier, kredit subsidi, program gratisan vendor
Abuse Nganggar ToS pakai bansos buat jualan
Nganggur Sumber yang udah mati / kena ban, tapi tetep lo bayar (kalau self-host)

3.2 Peta tier — dari yang bikin tidur nyenyak sampai yang bikin jantungan

Tier Sumber Biaya Umur Risiko
A Provider resmi (OpenAI, Anthropic, DeepSeek direct) 100% harga list Panjang ✅ Aman. ToS umumnya boleh jual lagi asal jujur soal model
A Cloud AI (Bedrock, Vertex, Azure) ~100% Panjang ✅ Aman. Onboarding lama, tidur nyenyak
B Agregator (OpenRouter, Together, Groq) 95–105% Sedang ✅ Aman. Resale itu memang model bisnis mereka. Margin tipis, jual ke yang nggak ngerti
B GPU sewa sendiri (RunPod, Vast) + vLLM 20–40% untuk model open-weight Tergantung lo 🟡 GPU nganggur tetep nagih. Kayak mantan
B Reseller regional (kredit Claude/GPT markup 5–15%) 105–115% Sedang 🟡 Lo jadi lapis kedua. Margin makin tipis. Kalau dia mati, lo mati
C BANSOS — kredit program, startup grant, free tier, trial enterprise ~0% 🔥 Sampai vendor bangun tidur 🔴 Tinggi. Hampir semua ToS ngelarang dipakai buat layanan berbayar

3.3 Soal bansos — versi panjang, karena ini inti masalahnya

Bansos itu murah banget dan itu sebabnya semua orang mulai dari situ. Angka per token jadi nol. Lo jual Rp 500/1jt aja masih untung 100%.

Dan secara matematika, ini indah. Secara operasional, ini membangun katalog di atas pasir:

Hari 1:   panen 40 kunci bansos. Katalog jalan. Margin 100%. Lo ngerasa jenius.
Hari 12:  6 kunci mati. Lo masih tenang.
Hari 30:  18 kunci mati. Lo mulai jual pakai harga naik.
Hari 45:  vendor ganti kebijakan. 20 kunci mati dalam sehari.
          Katalog lo kosong. Customer lo nge-chat. Lo nggak bisa jawab apa pun.
Hari 46:  lo nge-refund atau lo ilang. Dua-duanya bikin reputasi lo sampah.

Yang bikin makin pahit: yang mati bukan cuma bansos-nya — reputasi lo yang kena. Customer nggak tau lo numpang kredit gratisan. Dia tau lo judulnya "platform API". Pas API-nya error, dia nyalahin lo. Dan dia bener.

Aturan yang gue pelajari dengan mahal: jangan bangun seluruh katalog di atas satu sumber Tier C. Minimal dua sumber independen untuk tiap model yang lo jual. Bukan karena lo moralis — tapi karena lo nggak mau mati hari Kamis sore.

3.4 Pola "langganan jadi API"

Ini trik yang paling terkenal dan paling sering bikin orang kaget:

Langganan flat $20/bulan, kuota gede
        │
        ▼
   Proxy/bridge — menerjemahkan format langganan jadi /v1/chat/completions
        │
        ▼
   Endpoint OpenAI-compatible → dijual per-token ke user

Secara ekonomi: jenius. Biaya per token mendekati nol. Secara ToS: duh.

Yang perlu lo tau sebelum lo jalan:

GPT-Load yang gue sebut di PART 2 punya channel langganan karena alatnya netral — dia juga dukung provider resmi. Alatnya bisa dipakai dua-duanya. Yang bikin lo kecelakaan atau nggak adalah keputusan lo, bukan alatnya.

3.5 Yang lebih tahan lama: tiering

   Jual tinggi ──▶ [Tier 1 · RESMI]       margin tipis, stabil, ada garansi
                    provider resmi / cloud AI
   Jual sedang ──▶ [Tier 2 · OPEN-WEIGHT]  margin tebal
                    GPU sewa + vLLM
   Jual murah  ──▶ [Tier 3 · AGREGATOR]    fallback cepat buat model eksotis
                    OpenRouter dkk
   Jual paling murah ──▶ [Tier 4 · BANSOS]  dipakai buat akuisisi, BUKAN tulang punggung
                             ↑ kalau ini jadi pondasi, lo bukan bisnis, lo perjudian

Aturan mainnya: - Harga jual ikut tier termahal yang lo siap sediakan. Kalau lo punya Tier 2 murah, jangan turunin harga sampai lo yakin pasokannya awet. - Deduksi saldo seragam — user nggak perlu tau lo lagi numpang tier mana. - Tier bansos cuma buat akuisisi. Buat bikin orang nyoba. Begitu dia bayar, dia harus dilayani dari tier yang lo berani janjiin.

3.6 Pola router: satu pintu, banyak keran

Kalau kunci lo udah puluhan, jangan tempel satu-satu ke billing engine. Taruh lapisan router di antaranya:

Billing Engine ──▶ [ROUTER: pool kunci + scheduling]
                       ├─ Sumber A · kunci ×20
                       ├─ Sumber B · akun ×8
                       └─ Combo (fallback otomatis)

Yang lo dapat: - Satu endpoint stabil buat billing engine, walau isi kerannya gonta-ganti tiap minggu. - Rotasi & fallback otomatis — kunci mati langsung dialihkan, user nggak ngeh. - Katalog bisa lo bersihin — satu model publik, banyak sumber di belakangnya. - Kunci nggak nyebar ke banyak config.

Harga yang lo bayar: kalau router-nya pindah (IP/URL berubah), semua model yang nunjuk ke sana mati serentak. Gue pernah kejadian: satu chat client error "tidak melayani chat completions API", panik, ternyata cuma perlu liat baseUrl provider-nya.

Refleks yang harus lo punya: sebelum nuduh vendor, baca dulu baseUrl provider lo. Kalau dia nunjuk ke router, masalahnya router — bukan vendor. Berhemat 3 jam tiap kali kejadian.

3.7 Aturan yang berlaku di semua tier

  1. Verifikasi katalog sebelum tempel kunci. GET <baseUrl>/models harus balas katalog nyata. Kalau lo tempel 20 kunci ke URL yang salah, lo punya 20 kegagalan yang nggak keliatan.
  2. Batasi radius ledakan. Satu sumber sering dipakai beberapa model. Tandai model mana yang ikut mati sebelum kejadiannya, bukan sesudahnya.
  3. Catat biaya upstream per model, bukan cuma harga jual. Model tanpa data cost bakal nampil margin 100% — itu bug data, bukan rezeki.
  4. Atribusi model jujur. Jual "GPT-4" padahal model open-weight bukan cuma soal ToS — itu penipuan konsumen. Bedanya lo dengan penipu cuma satu: lo nulis nama model yang bener.
  5. Punya satu jalur resmi. Sekalipun lo jalan di tier murah, satu sumber resmi bikin lo bisa jawab: "kalau layanan mati, apa jaminannya?"

4PART 4 — PRAKTIK: CARA MULAI (CHECKLIST KASAR)

Ini yang gue dan Hermes lakuin. Urutannya, bukan teorinya.

4.1 VPS

Ambil VPS biasa. Jangan NAT. Jangan RDP.

Murah juga nggak apa-apa. Yang penting: IPv4 publik, root akses, dan lo nggak berbagi IP sama 200 orang lain.

4.2 Domain

.my.id atau .web.id kalau lagi hemat. .id kalau lagi cuan.

Yang sering dilupakan: DNS dulu, nginx belakangan. Arahkan subdomain sebelum pasang TLS, kalau nggak sertifikat lo bakal ngambek.

4.3 Dirty job-nya serahin ke Hermes

Ini bagian yang lo tulis sendiri dan gue setuju 100%.

Sisa-sisa kerjaan yang bikin kepala pecah — install Docker, patch compose, nginx, TLS, hardening, debug log, hitung micros, bikin endpoint admin — itu bukan kerjaan manusia. Itu kerjaan agent yang nggak capek dan nggak ngeluh.

Dan ini yang paling penting, yang bikin beda antara 2 jam dan 2 minggu:

Pakai model SOTA untuk kerjaan ini. Jangan yang murah.

Debugging satu masalah quoting di dalam SSH heredoc bisa makan setengah hari pakai model kacangan, dan 5 menit pakai model bagus. Gue pernah kebakar token banyak banget di satu sesi karena terlalu hemat di model — hemat di tempat yang salah itu namanya rugi, bukan hemat.

Jadi: beli kopi americano yang mahal, kasih ke model yang bener, dan tidur. Pagi-pagi kerjaan udah kelar.

4.4 Frontend vs Backend, sekali lagi

Bagian Cara
Landing page, dashboard, halaman top-up Bikin dengan AI. Cepat, bagus, nggak ada uang di situ
Billing, validasi kunci, potong saldo, ledger Jangan bikin dari nol. Ambil One API / New API / TokenPanel / GPT-Load, modif dikit
Admin panel Bangun tipis di atas API admin yang udah ada. Jangan pakai engine baru

Alasan psikologis kenapa orang ngeyel bangun sendiri: karena bikin dari nol rasanya lebih "punya". Itu egosentris dan mahal. Lo nggak punya karena lo nulis barisnya — lo punya karena lo ngerti kenapa baris itu ada.


5PART 5 — REALITA YANG BAKAL BIKIN LO NANGIS

Bagian yang nggak ada di thread Twitter orang.

5.1 Pembayaran itu neraka — tapi bukan neraka yang lo kira

Nih kabar bagusnya dulu, biar lo nggak salah siapin mental:

Kalau lo main di QRIS + kripto, lo udah otomatis lewat dari mimpi buruk terbesar payment gateway: chargeback. Dua-duanya push payment — pelanggan lo yang inisiatif bayar, bukan lo yang narik dari kartu dia.

Nggak ada kartu berarti nggak ada "card not present". Nggak ada chargeback berarti nggak ada program denda Visa/Mastercard, nggak ada rolling reserve, dan nggak ada rasio dispute yang bisa matiin akun lo. Pendekatan lo lebih tepat dari 90% orang yang nulis thread soal payment.

Jadi soal itu beres. Yang tersisa adalah lima neraka yang lain, dan semuanya khas QRIS + kripto. Nggak ada satu pun yang bisa lo selesaikan dengan "pilih gateway yang bagus".

5.1.1 Anatomi masalah QRIS: tiga model, tiga jenis sakit

QRIS punya tiga cara dipasang ke platform lo, dan orang keder milih karena nggak ada yang bilang konsekuensinya:

Model Cara kerja Sakit di mana
A · PG resmi (Midtrans, Xendit, DOKU, iPaymu, Winpay) API bikin QR dinamis per order → callback Butuh legalitas (KTP/NPWP, atau akta+NIB kalau PT). Kategori usaha lo bakal disaring, dan "reseller akses pihak ketiga" itu red flag buat mereka. KYC bisa lama, dan bisa ditolak
B · PG pinggiran / QRIS-as-a-service (banyak, kualitas campur) Lo daftar, dapet QRIS atas nama merchant orang lain, API topup sederhana Syarat enteng, jalan dalam hitungan menit. Tapi lo nitip duit di orang yang lo nggak kenal. Kalau mereka tutup/ilang, uang lo di situ. Dana juga bukan atas nama lo
C · QRIS statis punya sendiri + listener Lo pakai QRIS merchant yang lo punya, bikin QR dinamis sendiri, dan deteksi uang masuk Nggak butuh approval siapa pun. Tapi uang masuk lewat HP lo, bukan lewat server. Bergantung pada HP, sinyal, dan notifikasi yang nggak boleh mati

💸 Kenyataan pahit model A: makin gede dan makin resmi PG-nya, makin pinter dia nyaring merchant. Bukan karena lo haram — tapi karena kategori lo (digital prabayar + reseller pihak ketiga) memang di daftar merah mereka. Jadi ada paradoks: orang yang paling butuh PG resmi justru yang paling susah dapat.

5.1.2 Kalau lo jalan pakai listener (model C) — bagian teknis yang bikin orang gila

Ini pola paling umum, dan ada empat jebakan yang nggak ada di tutorial mana pun:

1. Nominal unik itu wajib, bukan pilihan. Kalau QRIS lo statis, dua orang top-up Rp 50.000 di menit yang sama = lo nggak bisa bedain duit siapa. Solusinya: tiap order dapat nominal base + kode unik (misal 50.000 jadi 50.217). Pelanggan harus bayar pas nominal itu.

Order #A1 → Rp 50.217 → cocok HANYA ke order A1
Order #B2 → Rp 50.318 → cocok HANYA ke order B2

Masalahnya: kode unik cuma punya ruang terbatas (biasanya 1–999). Kalau lo punya ratusan order pending bersamaan, tabrakan itu nyata. Lo butuh pengecekan collision, bukan random() lalu berdoa.

2. Uang masuk bisa dari siapa saja, dan bisa bukan untuk lo. Notifikasi mutasi itu nggak ada identitas pengirimnya. Lo cuma tau nominal dan waktu. Artinya: - Orang iseng bisa nembak nominal kode unik orang lain → order orang itu ke-credit padahal dia nggak bayar. - Duit dari transaksi lain (bukan top-up API lo) bisa kebetulan pas nominalnya. - Nominal yang sama bisa muncul dua kali.

Mitigasi yang realistis: cocokkan nominal + jendela waktu + status order, jamak nominal yang sama → tandai untuk review manual, jangan auto-credit dua-duanya. Kedengarannya ribet, tapi ini beda antara lo punya uang dan lo punya cerita.

3. Signature dari listener itu lemah, dan webhook-nya telanjang. Listener notifikasi Android umumnya cuma kirim hash sederhana (misal MD5 dari nominal + secret). Itu: - Lemah secara kriptografi — nggak ada timestamp, nggak ada nonce, rawan replay. - URL webhook-nya wajib publik → siapa pun yang tau bisa kirim "pembayaran masuk".

Mitigasi wajib: secret yang panjang dan acak, hash, tambahkan timestamp ke payload, tolak request yang lebih tua dari beberapa menit, dan rate-limit endpoint-nya. Ini bukan paranoid — ini karena URL lo ada di internet.

4. Dia beneran bisa berhenti, dan lo baru tau pas ada yang komplain. - HP kena optimasi baterai → app listener dibunuh sistem → nggak ada notifikasi masuk → nggak ada webhook → top-up user ngambang. - HP restart → app nggak auto-start. - Notifikasi disenyapkan (mode DND, notif dimatikan) → tetap nggak ada event. - Sinyal putus / HP di-charge di kabel rusak.

Heartbeat itu wajib. Listener harus kirim sinyal "gue masih hidup" setiap beberapa menit. Kalau hilang lebih dari N menit: matikan kanal QRIS, tampilkan ke user "pembayaran otomatis sedang gangguan, pakai manual", dan bangunin lo.

🚨 Aturan yang nggak boleh dilanggar: listener cuma boleh auto-credit kalau dia sehat (heartbeat segar). Plus selalu ada tombol manual: user kirim bukti transfer → admin approve. Kanal otomatis dan kanal manual bukan pilihan, dua-duanya wajib. Bukan karena lo nggak yakin — tapi karena HP itu mati.

5.1.3 Anatomi masalah kripto

Kripto kelihatan seperti jalan keluar: tanpa chargeback, lintas negara, tanpa KYC berat. Benar. Tapi dia tukar satu set masalah dengan set masalah lain:

Masalah Kenapa berbahaya
Rate harus dikunci per order Harga kripto gerak tiap detik. Kalau lo kunci "Rp 1.000 = 1 USDT" saat order dibuat, dan pembeli baru bayar 20 menit kemudian, lo bisa rugi beberapa persen. Kunci rate + expiry pendek (10–30 menit), dan tolak pembayaran di luar itu
Nominal coin nggak persis Wallet lo terima 9,97 USDT padahal order-nya 10 USDT — sisa potong fee jaringan. Kalau logika lo butuh pas, semua order bakal ngambang. Butuh toleransi (misal ±1–2%) dan aturan eksplisit: ulang bawah = tolak, ulang atas = kredit tanpa lebihan
Alamat unik vs alamat bersama Alamat unik per order paling bersih, tapi butuh gateway yang generate-nya. Kalau lo pakai satu alamat buat semua orang, lo balik ke masalah nominal unik + harus baca memo/tag
Konfirmasi blokir bukan final Deposit masih bisa reorg sebelum beberapa konfirmasi. Kalau lo kredit di 0 konfirmasi, lo kredit atas dasar harapan. Untuk stablecoin: tunggu minimal 1–3 konfirmasi (TRC20 cepat, ERC20 lebih lama)
Jaringan yang salah = duit hilang Kirim USDT ke alamat TRC20 lewat BEP20 → duit ngambang, nggak bisa ditarik sendiri. Tampilkan jaringan dengan berani, jangan cuma alamatnya
Arah konversi harus jelas di muka Lo jual saldo dalam Rupiah, tapi terima USDT. Siapa yang nanggung selisih kurs? Tulis di depan: "dikredit Rp X berdasarkan rate saat settlement", bukan saat order
Jejak audit & pajak Dompet kripto lo itu dompet bisnis. Kalau lo nggak catat siapa bayar berapa untuk order apa, lo nggak punya pembukuan — dan nggak bisa jawab kalau ada yang nanya
Regulasi aset kripto di Indonesia Aset kripto di Indonesia bukan alat pembayaran yang sah — dia diperlakukan sebagai komoditas, dan transaksinya harus lewat penyedia yang terdaftar. Menerima kripto sebagai pembayaran itu area abu-abu; pastikan lo ngerti posisinya sebelum jadikan itu kanal utama, bukan cuma tambahan

Praktisnya: pakai gateway kripto yang udah beres (bikin invoice, generate alamat, callback, konversi) daripada bikin sendiri. Yang lo tulis sendiri itu: pencatatan rate, toleransi, dan ledger-nya.

5.1.4 Dan sekarang balik ke yang emang ngeri

Sisi baiknya QRIS dan kripto sudah dijelaskan. Tapi ini tetap berlaku, dan ini bagian di mana lo bisa kehilangan uang beneran:

Kalau lo kredit saldo user berdasarkan callback/webhook yang nggak lo verifikasi, lo baru saja bikin mesin cetak uang gratis. Siapa pun yang tau URL webhook lo bisa kirim "pembayaran sukses" palsu. Satu request = satu saldo gratis.

Dan di kripto ini lebih gila lagi: orang bisa bikin transaksi on-chain beneran, biarkan lo kredit saldo, lalu membatalkannya lewat reorg / double-spend sebelum konfirmasi selesai. Bukan hacker jenius — cuma orang yang tau lo kredit tanpa nunggu konfirmasi.

Yang wajib ada, tanpa pengecualian, di kanal mana pun: 1. Verifikasi signature/hash sebelum nyentuh database 2. Idempotensi — event yang sama datang dua kali = saldo naik sekali 3. Ledger terpisah: uang masuk vs saldo user 4. Toleransi nominal eksplisit (kripto: fee jaringan; QRIS: pembulatan) 5. Rekonsiliasi berkala buat nangkep webhook yang ilang dan pembayaran nyangkut 6. Kanal manual sebagai jaring pengaman — selalu ada jalur approve admin

Urutan mulai yang jujur: kanal manual dulu (transfer + approve admin). Pasang QRIS otomatis setelah lo siap ngurus listener/nya. Pasang kripto setelah lo ngerti rate + konfirmasi + ledger-nya. Bukan karena takut — karena QRIS dan kripto itu kanal yang nggak bisa lo rollback, jadi lo mau ngerti dulu sebelum nyala.

5.2 Uang lewat, tapi bukan punya lo

Saldo user itu utang, bukan pendapatan. Uang yang lo pegang adalah kewajiban ngasih layanan. Kalau layanan lo mati dan lo nggak bisa lanjut, itu bukan "bisnis gagal", itu utang yang harus lo balikin.

5.3 Vendor mati, dan customer nyalahin lo

Lo nggak punya kendali atas vendor. Vendor bisa ganti harga, rate limit, atau matiin akun. Satu sumber mati = semua model lo mati. Dan di mata customer, itu kesalahan lo.

5.4 Mikros dan angka nol yang nggak keliatan

Ingat jebakan satuan di PART 2. Sekarang tambahin satu lagi: pembayaran. Rupiah → micros, di tempat kedua, dengan uang nyata.

Rp 50.000  →  50.000.000.000 micros

Cara ngetes yang bener: jangan pakai angka bulat. Angka bulat nyembunyiin bug. Rp 50.000 bisa jadi bener kebetulan. Tes pakai Rp 137 — jumlah aneh yang nggak mungkin bener secara nggak sengaja.

5.5 Berapa lama lo bakal ngurus sampah

Kira-kira: - 10% bikin platform - 20% mikir harga - 70% ngurus supply yang mati, kunci yang kena ban, dan customer yang nanya "kok error?"

Kalau lo nggak siap dengan 70% itu, model bisnis ini bukan buat lo. Bukan masalah skill — masalah selera.


6PART 6 — YANG WAJIB LO SIMPAN (JANGAN DIHAPUS)

Ini bukan fitur. Ini asuransi.

Log usage dan log akses adalah bukti saat ada sengketa.

Kalau lo pakai kartu, ini bukti resmi yang diakui jaringan kartu saat chargeback. Kalau lo pakai QRIS atau kripto, sengketa tetap ada — cuma bentuknya beda: pelanggan bilang "gue udah transfer kok saldo gue nggak masuk", atau "ini bukan transaksi gue". Dan bukti yang bisa lo tunjuk tetap sama:

📌 Konsekuensi langsung buat kanal QRIS dan kripto: karena lo nggak punya sistem "dispute" yang rapi, log-lah pengadilan lo. Kalau user ngaku udah bayar dan lo nggak punya catatan nominal unik + waktu + ID order-nya, lo nggak bisa membuktikan apa pun — dan pilihan lo cuma dua: kredit dia (rugi) atau tolak dia (dia kecewa dan ngomong di mana-mana). Dua-duanya gara-gara lo nggak nyatet.

Artinya tabel usage_records yang lo bangun buat billing ternyata fungsi ganda sebagai pertahanan. Simpan lebih lama dari yang lo kira perlu. Jangan pernah "bersihin database biar ringan".


7PART 7 — CHECKLIST SEBELUM LO BILANG "SIAP JUALAN"

SUPPLY
[ ] Minimal 2 sumber independen buat tiap model yang dijual
[ ] Biaya upstream per model tercatat (bukan cuma harga jual)
[ ] Tau model mana yang mati kalau sumber X mati
[ ] Verifikasi katalog tiap kunci sebelum dipakai

BACKEND
[ ] Pakai engine yang ada, bukan bikin dari nol
[ ] Harga diuji baca-ulang: angka tersimpan ≈ Rp × 1000
[ ] Saldo diuji: potongan == catatan usage == rumus dari token asli
[ ] Request gagal TIDAK motong saldo

PEMBAYARAN
[ ] Kanal manual (transfer + approve admin) SELALU ada sebagai jaring pengaman
[ ] QRIS: kode unik dicek tabrakan, bukan random
[ ] QRIS: listener punya HEARTBEAT + auto-credit dimatikan kalau heartbeat basi
[ ] QRIS: webhook pakai secret acak panjang + timestamp + rate-limit
[ ] Kripto: rate dikunci per order + expiry pendek
[ ] Kripto: toleransi nominal fee jaringan ditulis eksplisit (kelebihan/kurang)
[ ] Kripto: tunggu N konfirmasi sebelum kredit (jangan 0)
[ ] Kripto: jaringan ditampilkan jelas (TRC20/BEP20/ERC20)
[ ] Signature webhook diverifikasi (QRIS maupun kripto)
[ ] Webhook dikirim 2× → saldo naik 1× (INI GERBANG RILIS)
[ ] Rekonsiliasi berkala + alert kalau kanal otomatis mati
[ ] ToS: refund, kadaluarsa saldo, batas tanggung jawab, kebijakan reversal

OPERASIONAL
[ ] Log usage disimpan jangka panjang
[ ] Backup rutin + DIVERIFIKASI (bukan cuma ada filenya)
[ ] Tau siapa yang harus dihubungi kalau supply mati jam 2 pagi

8PART 8 — PENUTUP

Model bisnis ini menarik karena bisa dijalanin satu orang dan marginnya bisa gila — kelihatan gila, sampai lo hitung tier bansos-nya.

Yang bikin orang bertahan bukan skill teknis. Bukan juga backup atau hardening. Tapi sabar ngurus supply yang mati terus, dan jujur soal apa yang lo jual.

Bisnis ini bukan scam. Tapi gampang banget jadi scam kalau lo males mikir — jual model yang bukan model, hutang saldo yang nggak bisa lo layani, dan ilang pas orang komplain.

Selisih antara "reseller" dan "penipu" itu dua hal: atribusi yang jujur, dan layanan yang dihormati.

Kalau lo punya dua itu, lo bisa jalan di tier murah dan tetep tidur nyenyak. Kalau nggak punya dua itu, tier resmi pun nggak bakal nyelametin lo.

Dan penutup soal duit: lo bakal nerima bayaran lewat QRIS dan kripto, dan kedua kanal itu nggak bisa lo batalkan. Nggak ada chargeback artinya nggak ada yang bisa nyabut duit lo balik — tapi artinya juga nggak ada yang bisa nolongin lo kalau lo salah kredit. Di sistem kartu, salah kredit bisa disengketakan. Di QRIS dan kripto, salah kredit itu selesai — duit user nambah, lo tinggal ikhlas.

Makanya nilai tukar sebenarnya bukan "kanal mana yang paling murah". Nilainya adalah berapa disiplin lo di dua tempat: pencatatan order, dan gerbang verifikasi. Dua itu doang yang misahin platform dari tempat pembuangan uang.


Ditulis dari pengalaman nyata. Semua identitas — IP, domain internal, email, kredensial, ID customer, prefix API key — sudah dihapus. Bebas dibagikan.

Code by Sena