Developer · Gratis

API QRIS dinamis

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.

POST / GET JSON CORS * Tanpa API key PNG 900px
Live test
Endpoint https://qris.caspersec.top/api
POST GET JSON CORS * Tanpa API key

GET tanpa parameter menampilkan info service. Untuk generate, kirim amount + qris_statis (atau code). Tambah raw=1 untuk langsung menerima file PNG.

Request body
POST · application/json
{
  "amount": "25000",
  "qris_statis": "000201010211...6304ABCD"
}

Ganti qris_statis dengan "code": "qris1_..." dari generator kalau nggak mau mengirim payload panjang.

Response
200 OK · application/json
{
  "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.

Parameter
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_...

Error
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.

Kompatibel

Satu endpoint, semua stack.

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.

Gratis 100%
Next.js Node.js Python PHP / Laravel Go React Native Flutter Postman cURL
Next.js / Node.js
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
Python
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
PHP / Laravel
$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);

FAQ API

Apakah API ini gratis?

Ya. Nggak ada langganan, registrasi, atau API key. Endpoint bisa langsung dipanggil.

Format gambar apa yang dikembalikan?

PNG 900px dalam field qris_base64, plus qris_data_url yang siap dipasang di <img>.

Bisa dipakai dari Next.js, Node.js, atau Python?

Bisa. API ini HTTP + JSON biasa, jadi semua bahasa dan framework yang bisa mengirim request bisa memakainya.

Apakah CORS terbuka?

Ya, Access-Control-Allow-Origin: *. Bisa dipanggil langsung dari browser tanpa proxy.

Nggak butuh API? Generator-nya langsung pakai.

Upload QRIS statis, isi nominal, download PNG. Gratis, tanpa login, dan semua diproses di browser.