π Developer API Docs
Panduan integrasi QRIS Dinamis, Webhook & Payment API β FN CREATIVE Payment Gateway.
1. Kredensial API
Setiap request wajib menyertakan header berikut β nilai di bawah ini milik akun Anda setelah login:
id_merchant di bawah sudah valid.
x-api-keyβ login dulu βid_merchantβwebhook_secretβ
Base URL
https://pay.fncreative.org/api2. Create Transaction
/qris/createGenerate QRIS dinamis + kode unik. Gunakan total_amount dari response sebagai nominal wajib dibayar.
Kode unik kecil per tier: produk Rp 1β5 rb (+11β60), Rp 5β10 rb (+21β90), Rp 10β500 rb (+31β150). Contoh base Rp 10.000 β total sekitar Rp 10.021β10.090.
| Field | Keterangan |
|---|---|
order_id * | ID unik transaksi (INV-1001) |
amount * | Nominal dasar integer (min 1000) |
keterangan | Deskripsi opsional |
callback_url | Override webhook URL (opsional) |
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://pay.fncreative.org/api/qris/create',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => '{
"order_id": "INV-123",
"amount": 10000,
"keterangan": "Pembayaran Invoice #123"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'x-api-key: YOUR_API_KEY',
'id_merchant: YOUR_MERCHANT_ID'
),
));
total_amount, bukan nominal dasar amount.expired_at dan expired_menit di response β jangan hardcode 60 menit di UI merchant.Response (201)
{
"status": true,
"message": "Transaction Created Successfully",
"data": {
"order_id": "INV-123",
"amount": "10000.00",
"amount_uniq": "45.00",
"total_amount": "10045.00",
"status": "PENDING",
"expired_at": "2026-06-13 16:05:01",
"expired_menit": "5",
"signature": "...",
"keterangan": "Pembayaran Invoice #123",
"qris_image": "data:image/png;base64,...",
"qr_string": "00020101..."
}
}
3. Masa Berlaku QR & Kode Unik
Setiap transaksi QRIS dinamis memiliki batas waktu pembayaran. Nilai aktual platform saat ini (live dari GET /api/docs/meta):
| Parameter | Nilai | Arti |
|---|---|---|
unique_code.slot_minutes | 5 menit | QR PENDING mengunci slot kode unik selama ini |
unique_code.expire_minutes | 5 menit | QR otomatis EXPIRED jika belum dibayar |
unique_code.match_window_minutes | 180 menit | Transaksi SUCCESS tetap mengunci slot (anti bentrok) |
Alur merchant
- Panggil
POST /qris/createβ tampilkan QR +total_amount+ countdown dariexpired_at. - Customer bayar dalam waktu aktif β webhook PAID atau polling
GET /qris/status/{order_id}β SUCCESS. - Lewat waktu tanpa bayar β status EXPIRED β buat QR baru (disarankan
order_idbaru).
4. Webhook Callback
Server merchant harus merespon HTTP 200 OK. Callback dikirim saat pembayaran sukses β field status bernilai PAID (bukan SUCCESS seperti di API status/history).
callback_url di body /qris/create jika ingin notifikasi otomatis. Tanpa URL, gunakan polling GET /qris/status/{order_id}.Validasi Signature
Secret webhook akun Anda: β
signature = HMAC_SHA256( YOUR_WEBHOOK_SECRET, order_id + "|" + status + "|" + total_amount + "|" + payment_date )
{
"order_id": "INV-123",
"status": "PAID",
"amount": 10000,
"total_amount": 10045,
"payment_date": "2026-06-01 21:48:01",
"created_at": "2026-06-01 21:18:01",
"updated_at": "2026-06-01 21:48:01",
"keterangan": "Pembayaran Invoice #123",
"direct_url": null,
"signature": "..."
}
5. Check Status
/qris/status/{order_id}Header sama seperti create: x-api-key + id_merchant. Status di response API: PENDING, SUCCESS, atau EXPIRED.
6. Transaction History
/qris/history?page=17. Ringkasan Harian
/qris/summary?date=2026-06-01Menampilkan total transaksi sukses dan pendapatan per hari (zona Asia/Jakarta). Parameter date opsional β default hari ini.
| Field | Arti |
|---|---|
revenue.gross_amount | Total uang masuk (nominal dibayar customer, termasuk kode unik) |
revenue.base_amount | Total harga dasar produk (tanpa kode unik) |
revenue.success_count | Jumlah transaksi SUCCESS di tanggal tersebut |
activity.pending_today | QR dibuat hari itu yang masih PENDING |
8. Login & Dashboard
/merchants/loginDashboard web memakai session token (Bearer). API integrasi tetap memakai x-api-key.
{
"email": "dev@tokoabc.com",
"password": "password-anda"
}
Response berisi session_token. Kredensial API lihat via GET /merchants/me setelah login (bukan di body login).
/merchants/meHeader: Authorization: Bearer <session_token>
9. Dompet & Penarikan
Fee platform: 0,7% dari total pembayaran (termasuk kode unik) per transaksi SUCCESS. Di atas Rp 500.000: tambahan biaya admin 0,7% (total 1,4%). Penarikan minimum Rp 25.000.
Notifikasi Telegram untuk merchant diatur lewat dashboard web (menu Telegram). Admin platform tetap menerima semua alert operasional.
| Endpoint | Fungsi |
|---|---|
GET /merchants/wallet | Saldo, fee, rekening bank |
PUT /merchants/bank-account | Simpan rekening penarikan |
POST /merchants/withdraw | Ajukan penarikan (session) |
GET /merchants/withdrawals | Riwayat penarikan |
PUT /merchants/callback-url | Simpan/hapus webhook URL default (session) |
GET /merchants/telegram-notify | Status notifikasi Telegram merchant |
PUT /merchants/telegram-notify | Simpan Chat ID & aktif/nonaktif |
POST /merchants/telegram-notify/link | Buat link hubung bot Telegram |
POST /merchants/telegram-notify/test | Kirim pesan tes ke Telegram merchant |
GET /merchants/wallet/ledger | Mutasi saldo (session) |
callback_url harus HTTPS publik (bukan localhost/IP privat). Isi per transaksi di body /qris/create atau saat daftar.Best Practice Integrasi (Produksi)
- Tampilkan total_amount besar di checkout β bukan hanya
amount. - Countdown dari
expired_at(timezone server UTC/WIB sesuai field). - Satu
order_id= satu invoice. Jangan create ulang berkali-kali tanpa perlu. - Jika masih PENDING, API mengembalikan QR yang sama β cek status dulu sebelum create baru.
- Setelah EXPIRED, create dengan
order_idbaru atau hapus record expired (reuse order_id diperbolehkan setelah expired). - Validasi webhook dengan
webhook_secret+ HMAC β abaikan callback tanpa signature valid. - Fee platform (0,7% / 1,4% di atas Rp 500.000) hanya pada transaksi SUCCESS β EXPIRED tidak dikenai fee.
Status Types
| Status | Arti |
|---|---|
| PENDING | Menunggu pembayaran β QR masih aktif sampai expired_at |
| SUCCESS | Pembayaran berhasil β saldo merchant dikredit (setelah fee) |
| EXPIRED | QR kadaluarsa (Β±5 menit default) β buat QR baru untuk customer |
Onboarding Partner
User bisa daftar sendiri tanpa hubungi admin:
- Buka https://pay.fncreative.org/register/
- Isi nama, email, password, dan opsional
callback_urlwebhook HTTPS - Setujui Syarat & Ketentuan dan Kebijakan Privasi
- Sistem menampilkan
x-api-key,id_merchant, danwebhook_secret - Login kapan saja di /login/ β API key yang sama terlihat di dashboard
callback_url di body /qris/create.total_amount. Detail teknis: bagian Masa Berlaku QR.API Registrasi (opsional)
/merchants/register{
"name": "Toko ABC",
"email": "dev@tokoabc.com",
"password": "password-min-8",
"password_confirm": "password-min-8",
"store_name": "Toko ABC",
"callback_url": "https://tokoabc.com/webhook/fn-payment",
"terms_accepted": true
}