https://qris.caspersec.top/api
GET tanpa parameter menampilkan info service. Untuk generate, kirim amount + qris_statis (atau code). Tambah raw=1 untuk langsung menerima file PNG.
Satu endpoint HTTP + JSON untuk mengubah QRIS statis jadi QRIS dinamis. Kirim nominal dan payload, terima PNG base64. Tanpa API key, bisa dipakai dari stack apa pun.
https://qris.caspersec.top/api
GET tanpa parameter menampilkan info service. Untuk generate, kirim amount + qris_statis (atau code). Tambah raw=1 untuk langsung menerima file PNG.
{
"amount": "25000",
"qris_statis": "000201010211...6304ABCD"
}
Ganti qris_statis dengan "code": "qris1_..." dari generator kalau nggak mau mengirim payload panjang.
{
"status": "success",
"message": "QRIS dinamis berhasil dibuat.",
"method": "dynamic",
"amount": 25000,
"qris_base64": "iVBORw0KGgo...",
"qris_data_url": "data:image/png;base64,iVBOR...",
"qris_string": "000201010212...6304ABCD",
"code": "qris1_...",
"crc": "ABCD",
"merchant": {
"name": "CasperService ID",
"city": "KOTA SEMARANG",
"nmid": "ID1024353677700",
"acquirer": "GoPay"
},
"generated_at": "2026-11-05T07:00:00.000Z"
}
qris_base64 = PNG tanpa prefix. qris_data_url = siap dipasang di <img src>. qris_string = payload dinamis final.
amountWajib. Nominal bulat > 0, maks 100.000.000.000. Titik/spasi otomatis dibuang.qris_statisPayload QRIS statis (atau yang sudah dinamis). Alias: qris, payload, template.codeKode simpan qris1_... dari generator. Alternatif payload mentah.rawOpsional. true/1 = balikan PNG langsung, bukan JSON. Bisa lewat query GET.Body JSON atau form-urlencoded sama-sama diterima. GET juga bisa: /api?amount=25000&code=qris1_...
400BAD_AMOUNT — nominal kosong, 0, atau bukan angka.400NO_QRIS — payload dan kode sama-sama nggak dikirim.400BAD_CODE — kode qris1_... rusak atau bukan base64url valid.422QRIS_BAD_CRC / QRIS_NO_CRC — payload rusak, terpotong, atau CRC nggak cocok.422QRIS_NOT_QRIS / QRIS_TRUNCATED — bukan payload QRIS atau strukturnya nggak lengkap.Semua error balikin {"status":"error","code":"...","message":"..."} dengan HTTP status yang sesuai.
API ini cuma HTTP + JSON — nggak ada SDK khusus atau API key. Mau dari server Next.js, Node.js, Python, PHP/Laravel, Go, bot Telegram, cron, React Native, sampai Postman? Semua bisa.
const res = await fetch("https://qris.caspersec.top/api", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
amount: "25000",
qris_statis: process.env.QRIS_STATIS
})
});
const data = await res.json();
// data.qris_base64 → PNG base64
import requests
res = requests.post(
"https://qris.caspersec.top/api",
json={"amount": "25000", "qris_statis": QRIS_STATIS},
timeout=20,
)
data = res.json()
# data["qris_base64"] → PNG base64
$ch = curl_init("https://qris.caspersec.top/api");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ["Content-Type: application/json"],
CURLOPT_POSTFIELDS => json_encode([
"amount" => "25000",
"qris_statis" => $qrisStatis,
]),
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
Ya. Nggak ada langganan, registrasi, atau API key. Endpoint bisa langsung dipanggil.
PNG 900px dalam field qris_base64, plus qris_data_url yang siap dipasang di <img>.
Bisa. API ini HTTP + JSON biasa, jadi semua bahasa dan framework yang bisa mengirim request bisa memakainya.
Ya, Access-Control-Allow-Origin: *. Bisa dipanggil langsung dari browser tanpa proxy.
Upload QRIS statis, isi nominal, download PNG. Gratis, tanpa login, dan semua diproses di browser.