Lewati ke konten
QRIS API untuk developer & UMKM

API QRIS Gratis, Pakai QRIS Anda Sendiri

Upload QRIS milik Anda, dapat API key, lalu buat QRIS dinamis untuk website, aplikasi, atau chatbot. Pembayaran dicek otomatis dan dana langsung masuk ke rekening Anda, tanpa fee dari kami.

  • 0% potongan dari APIQris
  • Dana tidak ditampung
  • Webhook real time
  • Tanpa dokumen PT

Hubungkan QRIS merchant dari bank dan e-wallet yang Anda pakai

BCABRIMandiriBNIBSICIMB NiagaPermataDanamonBTNGoPay MerchantShopeePayDANA BisnisOVO MerchantLinkAjaBank JagoSeaBank
Cek mutasi manualNominal salah transferMinta bukti transferDana ditahan gateway
Masalah yang sering muncul

Masih terima QRIS dengan cara manual?

Kalau Anda jualan lewat website, chatbot, atau marketplace sendiri, situasi ini mungkin terdengar akrab.

Cek mutasi dari banyak aplikasi

Admin membuka aplikasi merchant satu per satu untuk memastikan uang pembeli sudah masuk.

QRIS statis tidak sesuai nominal

Pembeli mengetik nominal sendiri, kurang atau lebih sedikit saja bikin rekap kacau.

Status bayar tidak masuk sistem

Pesanan tetap "menunggu" sampai admin mengubahnya, pembeli malam hari harus menunggu pagi.

Gateway menahan dana & memotong fee

Uang mengendap di pihak ketiga, dicairkan belakangan dengan potongan per transaksi.

Solusinya Satu QRIS API yang menyambungkan QRIS Anda sendiri langsung ke sistem Anda.
Apa itu API QRIS

API QRIS: QRIS yang bisa diajak bicara oleh sistem Anda

Jawaban singkatAPI QRIS adalah layanan yang membuat kode QRIS bernominal secara otomatis dan memberi tahu sistem Anda saat pembayaran masuk. Dengan APIQris, QRIS API itu memakai QRIS milik Anda sendiri, jadi dana tidak pernah lewat pihak ketiga.

QRIS statis yang biasa ditempel di kasir mengharuskan pembeli mengetik nominal dan penjual mengecek mutasi secara manual. Begitu penjualan pindah ke website atau WhatsApp, cara itu jadi lambat dan rawan salah.

APIQris menambahkan nominal ke QRIS Anda, memberi kode unik di setiap tagihan, lalu membaca notifikasi dana masuk dari aplikasi merchant di HP Anda. Hasilnya: pesanan berubah lunas sendiri, siang maupun malam.

Baca panduan lengkap QRIS API →

Cara kerja

Mulai pakai API QRIS dalam 4 langkah

Tidak perlu membuka akun payment gateway baru. Cukup QRIS yang sudah Anda punya dan satu HP Android. Lihat cara kerja lengkap →

  1. Daftar gratis

    Buat akun APIQris dengan email, tanpa biaya dan tanpa dokumen perusahaan.

  2. Upload QRIS Anda

    Unggah gambar QRIS merchant dari bank atau e-wallet Anda. Sistem membaca data QRIS secara otomatis.

  3. Pasang aplikasi pendamping

    Pasang aplikasi APIQris di HP Android yang menerima notifikasi dana masuk, lalu pindai kode pairing.

  4. Pakai API key

    Salin API key, buat tagihan QRIS dinamis dari website atau chatbot, dan terima webhook saat lunas.

Infografis cara kerja API QRIS APIQris Dana pembeli mengalir dari pembeli ke penyedia QRIS lalu langsung ke rekening Anda. Jalur data terpisah: notifikasi dari HP merchant Anda dibaca APIQris lalu dikirim sebagai webhook ke website atau bot Anda. Rp Rp bayar dana langsung notifikasi kirim mutasi webhook buat tagihan → tampilkan QRIS dinamis ke pembeli Pembeli Scan & bayar Penyedia QRISAnda Bank / e-wallet Rekening Anda Langsung ke Anda HP MerchantAnda Notif dana masuk APIQris Cocokkan tagihan Website /Bot Anda Webhook lunas APIQris tidak menyentuh dana
Jalur dana: pembeli → penyedia QRIS → rekening Anda Jalur data: notifikasi → APIQris → webhook ke sistem Anda
Cek kebutuhan

Sistem Anda cocok pakai integrasi yang mana?

Pilih sistem yang Anda pakai, kami tunjukkan cara integrasi API QRIS yang paling pas.

Sistem apa yang Anda pakai?
Rekomendasi integrasi API penuh + webhook

Buat tagihan dari backend, tampilkan QR di halaman checkout Anda, terima webhook saat lunas.

Lihat panduannya →
Rekomendasi integrasi API + kirim gambar QR

Bot memanggil API, mengirim QR ke chat, lalu membalas otomatis saat webhook lunas masuk.

Lihat panduannya →
Rekomendasi integrasi Plugin gateway

Pasang plugin, isi API key. Pesanan berubah Processing otomatis setelah dibayar.

Lihat panduannya →
Rekomendasi integrasi Modul gateway WHMCS

Invoice dibayar QRIS dan layanan pelanggan aktif sendiri tanpa admin.

Lihat panduannya →
Rekomendasi integrasi API + polling status

Tampilkan QR bernominal di layar kasir, transaksi tertutup otomatis saat lunas.

Lihat panduannya →
Rekomendasi integrasi Link pembayaran

Buat link bayar dari dashboard, bagikan ke pembeli lewat chat atau media sosial.

Lihat panduannya →
Perbandingan

API QRIS APIQris vs payment gateway biasa

Keduanya bisa membuat QRIS dinamis. Bedanya ada di siapa yang memegang uang Anda.

AspekAPIQrisPayment gateway umum
Penerima danaQRIS & rekening Anda sendiriRekening payment gateway, lalu dicairkan
Potongan per transaksiRp0 dari APIQrisUmumnya 0,7% atau lebih + biaya tarik
Waktu dana tersediaSesuai penyedia QRIS AndaMenunggu jadwal pencairan
Syarat daftarEmail + QRIS merchantSering butuh dokumen badan usaha
QRIS dinamis via APIYaYa
Webhook otomatisYa, HMAC SHA-256Ya
Butuh HP Android pendeteksiYa, satu HP merchantTidak
Risiko dana tertahanTidak ada, dana tidak lewat kamiAda, bila akun ditinjau atau dibekukan
Aplikasi pendamping Android

HP Anda jadi pendeteksi pembayaran QRIS

Aplikasi pendamping APIQris membaca notifikasi dana masuk dari aplikasi merchant, lalu meneruskannya ke server kami untuk dicocokkan.

  • Ringan & jalan di latar belakangCukup HP Android lama, notifikasi dibaca otomatis 24 jam.
  • Antrean offlineSinyal hilang? Notifikasi disimpan lalu dikirim berurutan saat online.
  • Hanya baca notifikasi dana masukTidak butuh password bank, PIN, atau akses saldo Anda.
  • Bisa dua HP sekaligusNotifikasi ganda dari dua HP otomatis disaring agar tidak dobel.
Dashboard

Semua transaksi QRIS dalam satu layar

Pantau omzet, status tagihan, dan riwayat webhook dari semua toko dan QRIS Anda.

  • Grafik omzet harian
  • Filter per toko & QRIS
  • Ekspor CSV
  • Log webhook + kirim ulang
  • Pasangkan mutasi manual
  • Rotasi API key
Untuk developer

Buat QRIS dinamis dengan satu request

Kirim nominal dan order ID, terima string QRIS, URL gambar QR, dan total yang sudah ditambah kode unik. Tampilkan ke pembeli, selesai.

Buat tagihan QRIS
curl -X POST https://api.apiqris.com/v1/invoices \
  -H "Authorization: Bearer AQ_LIVE_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"amount":50000,"order_id":"INV-1024"}'
<?php
$ch = curl_init('https://api.apiqris.com/v1/invoices');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('APIQRIS_KEY'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'amount'   => 50000,
        'order_id' => 'INV-1024',
    ]),
]);
$qris = json_decode(curl_exec($ch), true);
echo $qris['qr_image_url']; // tampilkan ke pembeli
use Illuminate\Support\Facades\Http;

$qris = Http::withToken(config('services.apiqris.key'))
    ->post('https://api.apiqris.com/v1/invoices', [
        'amount'   => $order->total,
        'order_id' => $order->number,
    ])
    ->throw()
    ->json();

return view('checkout.qris', ['qris' => $qris]);
const res = await fetch('https://api.apiqris.com/v1/invoices', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.APIQRIS_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ amount: 50000, order_id: 'INV-1024' }),
});
const qris = await res.json();
console.log(qris.total_amount, qris.qr_image_url);
import os, requests

r = requests.post(
    "https://api.apiqris.com/v1/invoices",
    headers={"Authorization": f"Bearer {os.environ['APIQRIS_KEY']}"},
    json={"amount": 50000, "order_id": "INV-1024"},
    timeout=15,
)
r.raise_for_status()
qris = r.json()
print(qris["total_amount"], qris["qr_image_url"])
body := strings.NewReader(`{"amount":50000,"order_id":"INV-1024"}`)
req, _ := http.NewRequest("POST", "https://api.apiqris.com/v1/invoices", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("APIQRIS_KEY"))
req.Header.Set("Content-Type", "application/json")

res, err := http.DefaultClient.Do(req)
if err != nil {
    log.Fatal(err)
}
defer res.Body.Close()

Dokumentasi API QRIS lengkap →

Webhook

Terima kabar lunas secara aman

Setiap callback membawa tanda tangan HMAC SHA-256. Verifikasi, tandai pesanan lunas, balas 200. Gagal? Kami kirim ulang otomatis.

Verifikasi webhook
<?php
$body = file_get_contents('php://input');
parse_str(str_replace(',', '&', $_SERVER['HTTP_X_APIQRIS_SIGNATURE'] ?? ''), $sig);
$expected = hash_hmac('sha256', $sig['t'] . '.' . $body, getenv('APIQRIS_SECRET'));

if (!hash_equals($expected, $sig['v1'] ?? '') || abs(time() - (int) $sig['t']) > 300) {
    http_response_code(401);
    exit;
}
$event = json_decode($body, true);
if ($event['event'] === 'invoice.paid') {
    tandai_lunas($event['order_id']); // fungsi milik aplikasi Anda
}
http_response_code(200);
import crypto from 'node:crypto';
import express from 'express';

const app = express();
app.post('/webhook/qris', express.raw({ type: 'application/json' }), (req, res) => {
  const sig = Object.fromEntries(req.get('X-APIQris-Signature').split(',').map((p) => p.split('=')));
  const expected = crypto.createHmac('sha256', process.env.APIQRIS_SECRET)
    .update(`${sig.t}.${req.body}`).digest('hex');
  if (!crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig.v1 ?? ''))) return res.sendStatus(401);

  const event = JSON.parse(req.body);
  if (event.event === 'invoice.paid') markPaid(event.order_id);
  res.sendStatus(200);
});
import hmac, hashlib, os
from flask import Flask, request, abort

app = Flask(__name__)

@app.post("/webhook/qris")
def webhook():
    sig = dict(p.split("=", 1) for p in request.headers["X-APIQris-Signature"].split(","))
    msg = f"{sig['t']}.".encode() + request.get_data()
    expected = hmac.new(os.environ["APIQRIS_SECRET"].encode(), msg, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(expected, sig.get("v1", "")):
        abort(401)
    event = request.get_json()
    if event["event"] == "invoice.paid":
        mark_paid(event["order_id"])
    return "", 200
Route::post('/webhook/qris', function (Request $request) {
    parse_str(str_replace(',', '&', $request->header('X-APIQris-Signature')), $sig);
    $expected = hash_hmac('sha256', $sig['t'].'.'.$request->getContent(), config('services.apiqris.secret'));
    abort_unless(hash_equals($expected, $sig['v1'] ?? ''), 401);

    if ($request->input('event') === 'invoice.paid') {
        Order::where('number', $request->input('order_id'))->update(['status' => 'paid']);
    }
    return response()->noContent();
});
func webhook(w http.ResponseWriter, r *http.Request) {
    body, _ := io.ReadAll(r.Body)
    sig := map[string]string{}
    for _, p := range strings.Split(r.Header.Get("X-APIQris-Signature"), ",") {
        if k, v, ok := strings.Cut(p, "="); ok {
            sig[k] = v
        }
    }
    mac := hmac.New(sha256.New, []byte(os.Getenv("APIQRIS_SECRET")))
    mac.Write([]byte(sig["t"] + "." + string(body)))
    if !hmac.Equal([]byte(hex.EncodeToString(mac.Sum(nil))), []byte(sig["v1"])) {
        http.Error(w, "invalid signature", http.StatusUnauthorized)
        return
    }
    w.WriteHeader(http.StatusOK)
}
# Header yang dikirim APIQris ke callback_url Anda
X-APIQris-Signature: t=1760670000,v1=5f2b...e9
Content-Type: application/json

{"event":"invoice.paid","id":"qr_9KX2T7","order_id":"INV-1024","total_amount":50123,"status":"paid"}
Harga

Rp0 potongan per transaksi dari APIQris

Daftar gratis, fitur inti gratis. Kami tidak menampung dana, jadi tidak ada alasan memotong persentase dari omzet Anda. Rincian harga & simulasi →

  • API key live & mode uji
  • QRIS dinamis + kode unik
  • Webhook dengan kirim ulang otomatis
  • Dashboard transaksi & ekspor CSV
  • Link pembayaran tanpa coding

MDR dari bank atau e-wallet penerbit QRIS Anda (bila ada) tetap mengikuti ketentuan penyedia tersebut.

Simulasi omzet Rp30 juta / bulan

Ilustrasi potongan biaya perantara

Gateway 1%
Rp300.000
Gateway 0,7%
Rp210.000
APIQris
Rp0
Angka gateway adalah contoh tarif umum, bukan tarif penyedia tertentu.
0%potongan dari APIQris
24/7konfirmasi otomatis
6contoh bahasa pemrograman
1API key untuk semua kanal
Keamanan

Dirancang aman, dana tetap di tangan Anda

APIQris tidak pernah meminta password bank, PIN, atau OTP Anda.

HTTPS di semua endpoint

Data tagihan dan API key selalu terenkripsi saat dikirim.

API key bisa dirotasi

Kunci bocor? Buat kunci baru dari dashboard, kunci lama langsung mati.

Webhook HMAC SHA-256

Setiap callback ditandatangani agar server Anda bisa menolak yang palsu.

Dana tidak lewat kami

Tidak ada saldo yang bisa dibekukan, karena uang langsung ke QRIS Anda.

Untuk siapa

API QRIS untuk usaha apa saja

Developer & pembuat produk digital

Tambahkan QRIS ke aplikasi tanpa membangun sistem verifikasi manual.

  • Buat tagihan lewat API
  • Webhook saat pembayaran sukses
  • Mode uji untuk development
Dokumentasi API →

Komunitas, kelas & panitia acara

Kumpulkan iuran, biaya kelas, atau registrasi dengan status yang rapi.

  • Satu link bayar per peserta
  • Pantau siapa yang sudah lunas
  • Tidak perlu tagih di grup WA
Link pembayaran →

Penjual online & UMKM

Terima pesanan tanpa cek rekening atau minta screenshot bukti bayar.

  • Nominal terkunci otomatis
  • Status menunggu, lunas, kedaluwarsa
  • Dana langsung ke QRIS sendiri
API QRIS UMKM →
Panduan

Panduan API QRIS sesuai kebutuhan Anda

Pilih bahasa pemrograman, platform, atau penyedia QRIS yang Anda pakai.

API QRIS per Penyedia

16 panduan
GP API QRIS GoPay MerchantSudah punya QRIS dari GoPay Merchant? Jadikan otomatis tanpa pindah penyedia. SP API QRIS ShopeePayJadikan QRIS ShopeePay merchant Anda siap untuk website dan chatbot. DN API QRIS DANA BisnisQRIS DANA Bisnis Anda bisa langsung dipakai untuk pembayaran otomatis. BRI API QRIS BRIQRIS dari BRI bisa dipakai untuk checkout online dengan konfirmasi otomatis. BCA API QRIS BCAHubungkan QRIS BCA Anda ke website, aplikasi, dan bot. MDR API QRIS MandiriQRIS dari Livin’ Merchant siap dipakai untuk penjualan online otomatis. OVO API QRIS OVO MerchantSudah punya QRIS dari OVO Merchant? Jadikan otomatis untuk website, aplikasi,… LA API QRIS LinkAjaSudah punya QRIS dari LinkAja? Jadikan otomatis untuk website, aplikasi, dan… BNI API QRIS BNISudah punya QRIS dari BNI? Jadikan otomatis untuk website, aplikasi, dan… BSI API QRIS BSISudah punya QRIS dari BSI? Jadikan otomatis untuk website, aplikasi, dan… CIMB API QRIS CIMB NiagaSudah punya QRIS dari CIMB Niaga? Jadikan otomatis untuk website, aplikasi, dan… PB API QRIS PermataSudah punya QRIS dari Permata? Jadikan otomatis untuk website, aplikasi, dan… DNM API QRIS DanamonSudah punya QRIS dari Danamon? Jadikan otomatis untuk website, aplikasi, dan… BTN API QRIS BTNSudah punya QRIS dari BTN? Jadikan otomatis untuk website, aplikasi, dan… JG API QRIS Bank JagoSudah punya QRIS dari Bank Jago? Jadikan otomatis untuk website, aplikasi, dan… SEA API QRIS SeaBankSudah punya QRIS dari SeaBank? Jadikan otomatis untuk website, aplikasi, dan…
FAQ

Pertanyaan seputar API QRIS

Apa itu API QRIS?

API QRIS adalah antarmuka pemrograman yang memungkinkan website, aplikasi, atau chatbot membuat QRIS bernominal secara otomatis dan menerima kabar ketika QRIS tersebut sudah dibayar.

Apa bedanya QRIS API APIQris dengan payment gateway?

Payment gateway menampung dana lalu mencairkannya dengan potongan biaya. APIQris memakai QRIS milik Anda sendiri sehingga dana langsung masuk ke rekening Anda, dan APIQris tidak memotong fee per transaksi.

Apakah API QRIS ini benar-benar gratis?

Ya, daftar gratis dan APIQris tidak memotong persentase transaksi. Potongan MDR dari bank atau e-wallet penerbit QRIS Anda (bila ada) tetap mengikuti ketentuan penyedia tersebut.

QRIS apa saja yang bisa dipakai?

QRIS merchant resmi dari bank atau e-wallet, seperti GoPay Merchant, ShopeePay, DANA Bisnis, BRI, BCA, Mandiri Livin’ Merchant, dan lainnya, selama aplikasinya menampilkan notifikasi dana masuk berisi nominal.

Bagaimana sistem tahu pembayaran sudah masuk?

Aplikasi pendamping APIQris di HP Android Anda membaca notifikasi dana masuk dari aplikasi merchant, lalu mengirim nominalnya ke server kami untuk dicocokkan dengan tagihan yang menunggu.

Apakah saya perlu memberikan password bank?

Tidak. APIQris tidak pernah meminta password internet banking, PIN, atau OTP Anda.

Apakah bisa untuk chatbot WhatsApp dan Telegram?

Bisa. Bot cukup memanggil API untuk membuat tagihan, mengirim gambar QR ke pengguna, lalu menerima webhook saat pembayaran lunas.

Bahasa pemrograman apa yang didukung?

Semua bahasa yang bisa melakukan HTTP request. Contoh kode tersedia untuk cURL, PHP, Laravel, Node.js, Python, dan Go.

Bagaimana jika dua pembeli membayar nominal yang sama?

Setiap tagihan diberi kode unik kecil sehingga totalnya berbeda, misalnya Rp50.123 dan Rp50.481, dan pembayaran bisa dicocokkan tepat.

Apakah aman?

Komunikasi memakai HTTPS, API key bisa dirotasi, dan setiap webhook ditandatangani HMAC SHA-256 agar server Anda bisa memastikan keasliannya.

Lihat semua FAQ API QRIS →

Siap otomatiskan QRIS Anda?

Daftar gratis, upload QRIS, dan buat tagihan pertama lewat API QRIS dalam hitungan menit.