Dokumentasi API
Panduan lengkap integrasi semua layanan Dongtube - Payment, OTP, Prem, dan DongtubeDB.
Autentikasi
API Key dari halaman Profil
Semua endpoint memerlukan header X-API-Key atau query param apikey.
X-API-Key: DONGTUBE_xxxxxxxxxxxxxxxx
API Key tersedia di halaman Profil. Jaga kerahasiaan API Key Anda.
API Console (Live Test)
Dongtube Payment
Deposit, cek saldo, buat dan pantau invoice QRIS
Cek Saldo
GETMemuat...
{ "balance": 100000 }
Buat Invoice QRIS
GETMemuat...
{
"success": true,
"invoice_id": "INV2285c2c",
"amount": 10000,
"fee": 218,
"total": 10218,
"qris_image": "/img-cache/abc123.png",
"expired_at": "2026-06-05T12:00:00.000Z"
}
URL gambar QRIS selalu berupa URL internal /img-cache/... - tidak ada URL pihak ketiga.
QRIS Statis (Nominal Bebas)
GET
Satu QRIS reusable tanpa nominal tetap - pelanggan scan lalu mengisi nominal sendiri.
Setiap pembayaran otomatis masuk ke saldo dan tercatat di riwayat (tanpa perlu buat invoice per transaksi).
Tambahkan parameter source=static pada endpoint invoice.
GET /api/v1/invoice?source=static&apikey=API_KEY_ANDA
{
"success": true,
"type": "static",
"qr_content": "00020101021126...",
"qris_image": "/img-cache/qris-statis.png",
"note": "QRIS statis nominal bebas. Pembayaran otomatis masuk saldo (dipotong fee admin)."
}
- Pembayaran masuk realtime ke saldo (dipotong biaya admin); nominal kecil dikreditkan penuh.
- QR-nya tetap (bisa dicetak/dibagikan); satu QR untuk banyak pembayaran.
- Fitur ini khusus akun yang ditetapkan sebagai pemilik QRIS statis - akun lain mendapat
403.
Cek Status Invoice
GETMemuat...
{
"invoice_id": "INV2285c2c",
"amount": 10000,
"fee": 218,
"total": 10218,
"status": "pending",
"qris_image": "/img-cache/abc123.png",
"expired_at": "2026-06-05T12:00:00.000Z",
"created_at": "2026-06-05T10:00:00.000Z"
}
Status: pending - menunggu pembayaran, paid - lunas (saldo masuk), expired - kadaluarsa
Webhook Callback (Notifikasi Lunas)
POST
Atur Webhook URL di halaman Profil. Saat deposit Anda LUNAS, sistem mengirim POST JSON ke URL tersebut.
Verifikasi keaslian lewat header X-Signature = sha256=HMAC-SHA256(body, API Key Anda).
Body yang dikirim ke URL Anda:
POST (Webhook URL Anda)
Headers:
X-Webhook-Event: invoice.paid
X-Signature: sha256=<hmac>
{
"event": "invoice.paid",
"invoice_id": "INV2285c2c",
"amount": 10000,
"fee": 218,
"total": 10218,
"status": "paid",
"paid_at": "2026-06-12T16:00:00.000Z"
}
Contoh verifikasi (Node.js):
const crypto = require('crypto');
const expected = 'sha256=' + crypto
.createHmac('sha256', API_KEY)
.update(rawBody) // body MENTAH (string), bukan hasil parse
.digest('hex');
if (expected !== req.headers['x-signature']) return res.sendStatus(401);
Balas 2xx untuk konfirmasi terima. Gagal/timeout akan dicoba ulang 1×.
Top-up E-Wallet / Bank
Kirim saldo Anda ke e-wallet (DANA/GoPay/OVO/LinkAja/ShopeePay) atau rekening bank.
Alur 2 langkah: (1) panggil Inquiry untuk verifikasi nama pemilik tujuan, lalu
(2) panggil Top-up dengan account_name dari inquiry.
Saldo Anda dipotong nominal + biaya admin. Memindahkan uang nyata — pastikan tujuan benar.
Daftar Metode
GETGET /api/v1/topup/methods?apikey=API_KEY
{
"success": true,
"fee": 5000,
"ewallet": [{ "code": "DANA", "name": "DANA", "min": 20000, "max": 2000000 }, ...],
"bank": [{ "code": "014", "name": "BCA" }, ...],
"bank_min": 10000, "bank_max": 50000000
}
Pakai code dari daftar ini untuk inquiry & top-up.
Inquiry Tujuan (Cek Nama)
GETGET /api/v1/topup/inquiry?type=ewallet&code=DANA&account=08123456789&apikey=API_KEY
Param: type = ewallet | bank, code (kode e-wallet/bank), account (no. HP / rekening). Read-only, tidak memotong saldo.
{
"success": true,
"type": "ewallet",
"account_name": "BUDI SANTOSO",
"provider": "DANA"
}
Eksekusi Top-up
POSTPOST /api/v1/topup
Header: X-Api-Key: API_KEY · Body JSON:
{
"type": "ewallet", // "ewallet" | "bank"
"code": "DANA", // dari /methods
"account": "08123456789", // no. HP / rekening
"account_name": "BUDI SANTOSO", // dari /inquiry
"amount": 50000
}
Respons:
{
"success": true,
"status": "success", // "success" = terkirim, "pending" = diproses
"amount": 50000,
"fee": 5000,
"account_name": "BUDI SANTOSO"
}
- Saldo dipotong amount + fee. Jika gagal, saldo otomatis dikembalikan.
- Hanya dana yang sudah cair (settle) yang bisa di-top-up.
status: pending= sedang diproses provider; saldo sudah terpotong.
Dongtube Prem
Beli akun premium - Netflix, Capcut, Spotify, dll
- Saldo terpotong langsung saat order. Order yang sukses tidak bisa dibatalkan.
- Jika status pending, akun sedang diproses - gunakan endpoint Cek Status.
- Gambar produk menggunakan URL internal
/img-cache/...
Status Order
List Produk Premium
GETMemuat...
{
"success": true,
"products": [
{
"id": 5,
"name": "Alight Motion 1 Tahun",
"description": "Fitur premium unlocked.",
"price": 15000,
"status": "available",
"stock": 23,
"image": "/img-cache/abc.png"
}
]
}
status: available = bisa dipesan, unavailable = stok habis.
Order Produk Premium
POSTMemuat...
// Request Body (JSON)
{
"product_id": 5,
"qty": 1
}
// Response (objek order lengkap)
{
"success": true,
"order": {
"_id": "...",
"productId": 5,
"productName": "...",
"qty": 1,
"amount": 15000,
"status": "success",
"accounts": [
{ "username": "...", "password": "..." }
],
"providerInvoice": "API-...",
"createdAt": "2026-06-13T..."
}
}
Jika status pending → gunakan endpoint Cek Status dengan providerInvoice.
Cek Status Order Premium
GETMemuat...
{
"success": true,
"order": {
"_id": "...",
"productName": "...",
"amount": 15000,
"status": "success",
"accounts": [{ "username": "email@x.com", "password": "pass123" }],
"providerInvoice": "API-...",
"createdAt": "2026-06-13T..."
}
}
accounts hanya terisi saat status: success. Objek order berisi field tambahan lain juga.
DongtubeDB
Penyimpanan file online (CDN) + database SQL personal seperti Supabase
Semua endpoint DongtubeDB memerlukan header X-API-Key dan subscription aktif dari halaman DongtubeDB.
Kapasitas & Performa
- Tanpa batas request - query SELECT/INSERT/UPDATE/DELETE bebas dipakai sebanyak apapun. Tidak ada rate-limit; satu-satunya batas adalah kapasitas penyimpanan plan Anda.
- Selama kapasitas masih cukup, database bisa terus dipakai untuk trafik tinggi tanpa batasan waktu.
- Mesin database dituning untuk latensi rendah: mode WAL (baca & tulis paralel), page cache di RAM, memory-mapped I/O, dan koneksi yang di-pool per akun - minim delay walau trafik padat.
- Pemakaian = total file upload (CDN) + ukuran database SQL. Cek sisa kuota lewat
/db/api/storage.
Keamanan SQL
- Hanya: SELECT, INSERT, UPDATE, DELETE, CREATE TABLE / INDEX, DROP TABLE / INDEX, ALTER TABLE
- Diblokir: ATTACH, PRAGMA, LOAD_EXTENSION, sqlite_master, dan perintah berbahaya lainnya
- SELECT max 50.000 baris per query - tambahkan LIMIT untuk hasil besar
Info Storage
GETMemuat...
{
"plan": "basic", "planLabel": "Basic",
"storageLimit": 209715200,
"storageUsed": 1048576,
"storageAvailable": 208666624,
"expiresAt": "2026-07-04T00:00:00.000Z"
}
List File
GETMemuat...
Params: limit (default 20, max 100), offset
{
"success": true, "total": 5,
"data": [{
"id": "abc...", "originalName": "foto.png",
"mimeType": "image/png", "size": 102400,
"isPublic": 1, "downloads": 0,
"uploadedAt": "2026-06-13T...", "cdnUrl": "/cdn/abc..."
}]
}
Upload File
POSTMemuat...
fileFile yang diupload (multipart/form-data, wajib)public1 = publik, 0 = privat (default){ "success": true, "fileId": "abc...", "name": "foto.png", "size": 102400, "cdnUrl": "/cdn/abc..." }
Hapus File
DELETEMemuat...
{ "success": true }
Akses File CDN
GETMemuat...
File Publik - langsung diakses tanpa header, cocok untuk gambar di website
File Privat - wajib sertakan header X-API-Key
Paket Langganan
Basic
200 MB
Rp 10.000/bln
Standard
500 MB
Rp 20.000/bln
Pro
1 GB
Rp 30.000/bln
Contoh paket - daftar & harga terbaru ada di halaman DongtubeDB.
Execute SQL Query
POSTMemuat...
{ "sql": "SELECT * FROM users LIMIT 10" }
{
"success": true,
"rows": [{ "id": 1, "name": "Budi" }],
"count": 1
}
List Tables SQL
GETMemuat...
{ "success": true, "tables": [{ "name": "users", "rows": 150, "columns": 4 }], "count": 1 }
Data Table SQL
GETMemuat...
Params: limit (default 100, max 1000), offset
{
"success": true,
"table": "users",
"schema": [{ "cid": 0, "name": "id", "type": "INTEGER", "pk": 1 }],
"rows": [{ "id": 1, "name": "Budi" }],
"total": 150, "limit": 100, "offset": 0
}
Create Table SQL
POSTMemuat...
{
"name": "products",
"columns": [
{ "name": "id", "type": "INTEGER", "primaryKey": true },
{ "name": "name", "type": "TEXT", "notNull": true },
{ "name": "price", "type": "REAL" }
]
}
Export CSV / JSON
GETMemuat...
Tambahkan ?format=json untuk JSON. Default: file CSV. Max 100.000 baris.
Realtime Perubahan (SSE)
GETMemuat...
Aliran text/event-stream (Server-Sent Events). Kirim event: ready saat tersambung, lalu event: change setiap database kamu berubah - pakai untuk refresh data tanpa polling.
event: ready
data: {"seq": 1718000000000}
event: change
data: {}
Backup & Restore Database
Cadangkan seluruh database (semua tabel + data) jadi satu file .db, lalu pulihkan kapan saja -
di akun yang sama maupun akun berbeda. Alur: Export → simpan file → Import untuk restore.
Import bersifat ganti total: isi database tujuan akan diganti sepenuhnya oleh file backup.
Bisa juga lewat UI di SQL Studio → tab Import/Export.
Export Database
GETMemuat...
Mengunduh file dongtubedb-backup-YYYY-MM-DD.db. Simpan sebagai cadangan.
Import / Restore Database
POSTMemuat...
Kirim file backup sebagai multipart/form-data dengan field backup. File divalidasi (header SQLite + integrity check) & harus muat di kapasitas plan.
curl -X POST "/db/api/backup/import" \ -H "X-API-Key: DONGTUBE_xxxx" \ -F "backup=@dongtubedb-backup-2026-06-06.db"