### Retail Response (ALFAMART / INDOMARET) Source: https://pay.zannstore.com/docs Example success response for retail payment transactions. Contains payment code and transaction details. ```APIDOC ## Retail Response (ALFAMART / INDOMARET) ### Description Example success response for retail payment transactions. Contains payment code and transaction details. ### Response #### Success Response (200) - **status** (boolean) - Indicates success. - **message** (string) - Success message. - **data** (object) - Transaction data. - **trx_svr** (string) - Server transaction reference. - **trx_id** (string) - Merchant transaction ID. - **method_code** (string) - Payment method code. - **method_name** (string) - Payment method name. - **status** (string) - Transaction status. - **amount** (number) - Transaction amount. - **diterima** (number) - Amount received. - **fee** (number) - Transaction fee. - **type_fee** (string) - Fee type. - **payment_code** (string) - Payment code. - **note** (string) - Payment note. - **checkout_url** (string) - Checkout URL. - **created_at** (string) - Creation timestamp. - **expired_at** (string) - Expiration timestamp. - **callback_url** (string) - Callback URL. #### Response Example ```json { "status": true, "message": "Berhasil membuat transaksi", "data": { "trx_svr": "ZP260727RET456", "trx_id": "INV-1003", "method_code": "ALFAMART", "method_name": "RETAIL ALFAMART", "status": "Pending", "amount": 100000, "diterima": 100000, "fee": 2500, "type_fee": "user", "payment_code": "895012345678", "note": "Pembayaran Tagihan INV-1003", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZP260727RET456&payRef=HASH", "created_at": "2026-07-27 20:00:00", "expired_at": "2026-07-27 20:30:00", "callback_url": "https://tokoanda.com/api/callback" } } ``` ``` -------------------------------- ### Retail Payment Success Response Source: https://pay.zannstore.com/docs Example JSON response for a successful Retail (ALFAMART / INDOMARET) transaction creation. ```json { "status": true, "message": "Berhasil membuat transaksi", "data": { "trx_svr": "ZP260727RET456", "trx_id": "INV-1003", "method_code": "ALFAMART", "method_name": "RETAIL ALFAMART", "status": "Pending", "amount": 100000, "diterima": 100000, "fee": 2500, "type_fee": "user", "payment_code": "895012345678", "note": "Pembayaran Tagihan INV-1003", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZP260727RET456&payRef=HASH", "created_at": "2026-07-27 20:00:00", "expired_at": "2026-07-27 20:30:00", "callback_url": "https://tokoanda.com/api/callback" } } ``` -------------------------------- ### Success response for merchant profile (200 OK) Source: https://pay.zannstore.com/docs Example JSON response for the profile request. Contains status, message, and data with nama_pemilik, merchant, saldo_kliring, saldo_tersedia, whatsapp, email, and created_at. ```json { "status": true, "msg": "Yeay, data profile berhasil diambil", "data": { "nama_pemilik": "John Doe", "merchant": "MERCHANT123", "saldo_kliring": "50000.00", "saldo_tersedia": "1500000.00", "whatsapp": "081234567890", "email": "user@example.com", "created_at": "2026-01-01 10:00:00" } } ``` -------------------------------- ### E-Wallet Response (SHOPEEPAY / OVO / LINKAJA) Source: https://pay.zannstore.com/docs Example success response for E-Wallet payment transactions. Contains payment URL and transaction details. ```APIDOC ## E-Wallet Response (SHOPEEPAY / OVO / LINKAJA) ### Description Example success response for E-Wallet payment transactions. Contains payment URL and transaction details. ### Response #### Success Response (200) - **status** (boolean) - Indicates success. - **msg** (string) - Success message. - **data** (object) - Transaction data. - **merchant** (string) - Merchant identifier. - **amount** (number) - Transaction amount. - **fee** (number) - Transaction fee. - **total_amount** (number) - Total amount including fee. - **total_amount_bayar** (number) - Total amount to pay. - **diterima** (number) - Amount received. - **type_fee** (string) - Fee type. - **prov_txid** (string) - Provider transaction ID. - **trx_id** (string) - Merchant transaction ID. - **method_code** (string) - Payment method code. - **method_name** (string) - Payment method name. - **checkout_url** (string) - Checkout URL. - **payment_url** (string) - Payment URL. - **status** (string) - Transaction status. - **expired_time** (string) - Expiration timestamp. - **created_at** (string) - Creation timestamp. #### Response Example ```json { "status": true, "msg": "Sukses membuat transaksi E-Wallet", "data": { "merchant": "ZN3UC49T", "amount": 25000, "fee": 625, "total_amount": 25625, "total_amount_bayar": 25625, "diterima": 25000, "type_fee": "user", "prov_txid": "ZN1788400844894", "trx_id": "INV-1004", "method_code": "SHOPEEPAY", "method_name": "SHOPEEPAY", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZN1788400844894&payRef=HASH", "payment_url": "https://pay.zannstore.com/invoice?reffID=ZN1788400844894&payRef=HASH", "status": "Pending", "expired_time": "2026-09-04 09:00:46", "created_at": "2026-09-03 09:00:46" } } ``` ``` -------------------------------- ### E-Wallet Payment Success Response Source: https://pay.zannstore.com/docs Example JSON response for a successful E-Wallet (SHOPEEPAY / OVO / LINKAJA) transaction creation. ```json { "status": true, "msg": "Sukses membuat transaksi E-Wallet", "data": { "merchant": "ZN3UC49T", "amount": 25000, "fee": 625, "total_amount": 25625, "total_amount_bayar": 25625, "diterima": 25000, "type_fee": "user", "prov_txid": "ZN1788400844894", "trx_id": "INV-1004", "method_code": "SHOPEEPAY", "method_name": "SHOPEEPAY", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZN1788400844894&payRef=HASH", "payment_url": "https://pay.zannstore.com/invoice?reffID=ZN1788400844894&payRef=HASH", "status": "Pending", "expired_time": "2026-09-04 09:00:46", "created_at": "2026-09-03 09:00:46" } } ``` -------------------------------- ### Webhook E-Wallet Payload Example Source: https://pay.zannstore.com/docs Example webhook notification payload for E-Wallet payment method (method: SHOPEEPAY). Note the different structure with top-level fields and abbreviated signature. ```json { "status": "Success", "merchant": "ZN3UC49T", "trx_id": "INV-1004", "prov_txid": "ZN1788400844894", "amount": 25000, "fee": 625, "diterima": 25000, "type_fee": "user", "paid_at": "2026-09-03 09:05:00", "method": "SHOPEEPAY", "rrn": "41233", "signature": "c89f5...d4b2" } ``` -------------------------------- ### Webhook QRIS Payload Example Source: https://pay.zannstore.com/docs Example webhook notification payload for QRIS payment method (method_code: QRISNB). Contains common fields and signature hash. ```json { "data": { "trx_svr": "ZP260727ABC123", "trx_id": "INV-1001", "method_code": "QRISNB", "status": "Success", "amount": "10000", "fee": "70", "type_fee": "user", "issuer_bank": "GOPAY", "rrn": "REF123456789", "diterima": "10000", "paid_at": "2026-07-27 19:40:12", "signature": "c3f7d0936d2b194aabf9de55aea53c21aba21daeebb263b9bffd7f7b3af0ffb0" } } ``` -------------------------------- ### Webhook Retail Store Payload Example Source: https://pay.zannstore.com/docs Example webhook notification payload for Retail Store payment method (va_code: ALFAMART). Includes va_number and customer_name fields. ```json { "data": { "trx_svr": "ZP260727RET456", "trx_id": "INV-1003", "status": "Success", "amount": "100000", "fee": "2500", "type_fee": "user", "issuer_bank": "ALFAMART", "rrn": "REF456789123", "diterima": "100000", "paid_at": "2026-07-27 20:10:00", "va_code": "ALFAMART", "va_number": "895012345678", "customer_name": "JOHN DOE", "signature": "7d9a8c2f10b3e5a6c4d7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9" } } ``` -------------------------------- ### Success response for payment methods (200 OK) Source: https://pay.zannstore.com/docs Example JSON response for the payment methods request. Contains status, message, and data array with payment method details including code, name, category, fee, fee_format, settlement, status, logo, and optional panduan instructions. ```json { "status": true, "message": "Berhasil mengambil daftar metode pembayaran",". "data": [". {". "code": "BCAVA",". "name": "BANK BCA VA",". "category": "Virtual Account",". "fee": 4500,". "fee_format": "Rp 4.500",". "settlement": "H+1",". "status": "aktif",". "logo": "https://cdn.zannstore.com/assets/project/pay.zannstore.com/methods/bcava_v3.webp",". "panduan": {". "judul": "Bank BCA Virtual Account",". "langkah": [". "1. Buka aplikasi BCA mobile atau KlikBCA",". "2. Pilih menu Transfer > BCA Virtual Account",". "3. Masukkan nomor Virtual Account yang tertera",". "4. Periksa nominal pembayaran lalu konfirmasi dengan PIN"". ],". "catatan": "Pembayaran akan diverifikasi secara otomatis dalam beberapa detik."". }". },". {". "code": "QRIS2",". "name": "QRIS Realtime (Fast)",". "category": "QRIS",". "fee": 0.7,". "fee_format": "0.7%",". "settlement": "Instant",". "status": "nonaktif",". "logo": "https://cdn.zannstore.com/assets/project/pay.zannstore.com/methods/qris_cdn.webp",". "panduan": null". }". ]".} ``` -------------------------------- ### QRIS Payment Success Response Source: https://pay.zannstore.com/docs Example JSON response for a successful QRIS (QRISNB / QRIS2) transaction creation. ```json { "status": true, "message": "Berhasil membuat transaksi", "data": { "trx_svr": "ZP260727ABC123", "trx_id": "INV-1001", "method_code": "QRISNB", "method_name": "QRIS by Nationalnobu", "status": "Pending", "amount": 10000, "unique_code": 0, "diterima": 9990, "fee": 10, "type_fee": "user", "qr_url": "https://cekid.zannstore.com/qris/render/ZP260727ABC123", "qr_content": "00020101021226670016ID.CO.QRIS.WWW.NOBU...", "note": "Pembayaran Tagihan INV-1001", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZP260727ABC123&payRef=HASH", "expired_at": "2026-07-27 20:30:00", "callback_url": "https://tokoanda.com/api/callback" } } ``` -------------------------------- ### Virtual Account Payment Success Response Source: https://pay.zannstore.com/docs Example JSON response for a successful Virtual Account (BRIVA / BNIVA) transaction creation. ```json { "status": true, "message": "Berhasil membuat transaksi", "data": { "trx_svr": "ZP260727VA987", "trx_id": "INV-1002", "method_code": "BRIVA", "method_name": "BANK RAKYAT INDONESIA VA", "status": "Pending", "amount": 50000, "diterima": 50000, "fee": 3500, "type_fee": "user", "virtual_account": "8881008123456789", "note": "Pembayaran Tagihan INV-1002", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZP260727VA987&payRef=HASH", "created_at": "2026-07-27 20:00:00", "expired_at": "2026-07-27 20:30:00", "callback_url": "https://tokoanda.com/api/callback" } } ``` -------------------------------- ### Webhook Virtual Account Payload Example Source: https://pay.zannstore.com/docs Example webhook notification payload for Virtual Account payment method (va_code: BRIVA). Includes va_number and customer_name fields. ```json { "data": { "trx_svr": "ZP260727VA987", "trx_id": "INV-1002", "status": "Success", "amount": "50000", "fee": "3500", "type_fee": "user", "issuer_bank": "BRI", "rrn": "REF987654321", "diterima": "50000", "paid_at": "2026-07-27 20:05:00", "va_code": "BRIVA", "va_number": "8881008123456789", "customer_name": "JOHN DOE", "signature": "01c617b2002f734df85204304e3816bd10f76491a36118e8cb1b57ad7782d635" } } ``` -------------------------------- ### QRIS Response (QRISNB / QRIS2) Source: https://pay.zannstore.com/docs Example success response for QRIS payment transactions. Contains transaction details including QR URL and content for payment. ```APIDOC ## QRIS Response (QRISNB / QRIS2) ### Description Example success response for QRIS payment transactions. Contains transaction details including QR URL and content for payment. ### Response #### Success Response (200) - **status** (boolean) - Indicates success. - **message** (string) - Success message. - **data** (object) - Transaction data. - **trx_svr** (string) - Server transaction reference. - **trx_id** (string) - Merchant transaction ID. - **method_code** (string) - Payment method code. - **method_name** (string) - Payment method name. - **status** (string) - Transaction status. - **amount** (number) - Transaction amount. - **unique_code** (number) - Unique code. - **diterima** (number) - Amount received. - **fee** (number) - Transaction fee. - **type_fee** (string) - Fee type. - **qr_url** (string) - URL to render QR code. - **qr_content** (string) - QR content string. - **note** (string) - Payment note. - **checkout_url** (string) - Checkout URL. - **expired_at** (string) - Expiration timestamp. - **callback_url** (string) - Callback URL. #### Response Example ```json { "status": true, "message": "Berhasil membuat transaksi", "data": { "trx_svr": "ZP260727ABC123", "trx_id": "INV-1001", "method_code": "QRISNB", "method_name": "QRIS by Nationalnobu", "status": "Pending", "amount": 10000, "unique_code": 0, "diterima": 9990, "fee": 10, "type_fee": "user", "qr_url": "https://cekid.zannstore.com/qris/render/ZP260727ABC123", "qr_content": "00020101021226670016ID.CO.QRIS.WWW.NOBU...", "note": "Pembayaran Tagihan INV-1001", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZP260727ABC123&payRef=HASH", "expired_at": "2026-07-27 20:30:00", "callback_url": "https://tokoanda.com/api/callback" } } ``` ``` -------------------------------- ### Virtual Account Response (BRIVA / BNIVA) Source: https://pay.zannstore.com/docs Example success response for Virtual Account payment transactions. Contains virtual account number and transaction details. ```APIDOC ## Virtual Account Response (BRIVA / BNIVA) ### Description Example success response for Virtual Account payment transactions. Contains virtual account number and transaction details. ### Response #### Success Response (200) - **status** (boolean) - Indicates success. - **message** (string) - Success message. - **data** (object) - Transaction data. - **trx_svr** (string) - Server transaction reference. - **trx_id** (string) - Merchant transaction ID. - **method_code** (string) - Payment method code. - **method_name** (string) - Payment method name. - **status** (string) - Transaction status. - **amount** (number) - Transaction amount. - **diterima** (number) - Amount received. - **fee** (number) - Transaction fee. - **type_fee** (string) - Fee type. - **virtual_account** (string) - Virtual account number. - **note** (string) - Payment note. - **checkout_url** (string) - Checkout URL. - **created_at** (string) - Creation timestamp. - **expired_at** (string) - Expiration timestamp. - **callback_url** (string) - Callback URL. #### Response Example ```json { "status": true, "message": "Berhasil membuat transaksi", "data": { "trx_svr": "ZP260727VA987", "trx_id": "INV-1002", "method_code": "BRIVA", "method_name": "BANK RAKYAT INDONESIA VA", "status": "Pending", "amount": 50000, "diterima": 50000, "fee": 3500, "type_fee": "user", "virtual_account": "8881008123456789", "note": "Pembayaran Tagihan INV-1002", "checkout_url": "https://pay.zannstore.com/invoice?reffID=ZP260727VA987&payRef=HASH", "created_at": "2026-07-27 20:00:00", "expired_at": "2026-07-27 20:30:00", "callback_url": "https://tokoanda.com/api/callback" } } ``` ``` -------------------------------- ### Check Transaction Status Response Source: https://pay.zannstore.com/docs Example JSON response returned when successfully querying the status of a transaction using request: "status". ```json { "status": true, "msg": "Yeay, detail transaksi berhasil diambil", "data": { "trx_svr": "ZP260727ABC123", "trx_id": "INV-1001", "metode_name": "QRISNB", "status": "Success", "amount": 10000, "fee": 70, "diterima": 9930, "note": "Pembayaran Tagihan INV-1001", "type_fee": "user", "issuer_bank": "QRIS", "rrn": "REF123456789", "paid_at": "2026-07-27 19:40:12", "created_at": "2026-07-27 19:35:00", "expired_at": "2026-07-27 20:05:00" } } ``` -------------------------------- ### cURL request for payment methods (request: "payment_methods") Source: https://pay.zannstore.com/docs POST to https://pay.zannstore.com/v1 with request="payment_methods" to list all payment methods. Requires merchant and signature (sha256(merchant + secret_key)). Optional panduan=true includes payment instructions. Rate limited to 1 request per 2 minutes per merchant ID. ```bash curl -X POST https://pay.zannstore.com/v1 \ -H "Content-Type: application/json" \ -d '{ "request": "payment_methods",". "merchant": "MERCHANT123",". "signature": "sha256(merchant + secret_key)",". "panduan": true". }' ``` -------------------------------- ### Membuat Transaksi Baru dengan Python Source: https://pay.zannstore.com/docs Implementasi Python menggunakan pustaka hashlib dan requests untuk integrasi API. ```python import hashlib import requests merchant = "MERCHANT123" secret_key = "your_secret_key_here" trx_id = "INV-1001" raw_str = merchant + secret_key + trx_id signature = hashlib.sha256(raw_str.encode('utf-8')).hexdigest() payload = { "request": "new", "merchant": merchant, "trx_id": trx_id, "payment": "QRISNB", "amount": 10000, "customer_name": "I Putu Anantha Saputra", "note": "Pembayaran Tagihan INV-1001", "expired_time": "30m", "type_fee": "user", "return_url": "https://tokoanda.com/sukses", "callback_url": "https://tokoanda.com/api/callback", "signature": signature } res = requests.post("https://pay.zannstore.com/v1", json=payload) print(res.json()) ``` -------------------------------- ### Membuat Transaksi Baru dengan Node.js Source: https://pay.zannstore.com/docs Implementasi Node.js menggunakan modul crypto untuk signature dan fetch API untuk pengiriman data. ```javascript const crypto = require('crypto'); const merchant = "MERCHANT123"; const secretKey = "your_secret_key_here"; const trxId = "INV-1001"; const signature = crypto .createHash('sha256') .update(merchant + secretKey + trxId) .digest('hex'); const payload = { request: "new", merchant: merchant, trx_id: trxId, payment: "QRISNB", amount: 10000, customer_name: "I Putu Anantha Saputra", note: "Pembayaran Tagihan INV-1001", expired_time: "30m", type_fee: "user", return_url: "https://tokoanda.com/sukses", callback_url: "https://tokoanda.com/api/callback", signature: signature }; fetch('https://pay.zannstore.com/v1', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }) .then(res => res.json()) .then(data => console.log(data)); ``` -------------------------------- ### Membuat Transaksi Baru dengan cURL Source: https://pay.zannstore.com/docs Contoh penggunaan cURL untuk mengirim data transaksi ke endpoint API Zannstore. ```bash curl -X POST https://pay.zannstore.com/v1 \ -H "Content-Type: application/json" \ -d '{ "request": "new", "merchant": "MERCHANT123", "trx_id": "INV-1001", "payment": "QRISNB", "amount": 10000, "customer_name": "I Putu Anantha Saputra", "note": "Pembayaran Tagihan INV-1001", "expired_time": "30m", "type_fee": "user", "return_url": "https://tokoanda.com/sukses", "callback_url": "https://tokoanda.com/api/callback", "signature": "HASIL_SHA256_SIGNATURE" }' ``` -------------------------------- ### cURL request for merchant profile (request: "profile") Source: https://pay.zannstore.com/docs POST to https://pay.zannstore.com/api/v1 with request="profile" to fetch merchant profile data. Requires merchant, pin, secret_key, and signature (sha256(merchant + secret_key + pin)). ```bash curl -X POST https://pay.zannstore.com/api/v1 \ -H "Content-Type: application/json" \ -d '{ "request": "profile", "merchant": "MERCHANT123", "pin": "123456", "secret_key": "YOUR_SECRET_KEY", "signature": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" }' ``` -------------------------------- ### POST /v1 - Create New Transaction Source: https://pay.zannstore.com/docs Creates a new payment transaction and returns a QRIS or payment link. Requires the request parameter set to 'new' and a valid signature. ```APIDOC ## POST /v1 ### Description Creates a new payment transaction and generates a QRIS or payment link for the customer. ### Method POST ### Endpoint https://pay.zannstore.com/v1 ### Parameters #### Request Body - **request** (string) - REQUIRED - Must be the string "new". - **merchant** (string) - REQUIRED - Your registered Merchant ID (e.g., MERCHANT123). - **trx_id** (string) - REQUIRED - Unique transaction ID from your store system (e.g., INV-1001). - **payment** (string) - REQUIRED - Payment code (e.g., QRISNB, BRIVA, ALFAMART). - **amount** (integer) - REQUIRED - Transaction amount in Rupiah (minimum 1000). - **note** (string) - REQUIRED - Order note (e.g., Pembayaran Invoice #1001). - **expired_time** (string) - REQUIRED - Transaction validity period (e.g., 30m, 1h, 24h). - **type_fee** (string) - REQUIRED - Fee bearer: "user" (customer) or "merchant". - **callback_url** (string) - REQUIRED - Merchant webhook URL to receive success status. - **customer_name** (string) - OPTIONAL - Buyer name (default: your store name). - **return_url** (string) - OPTIONAL - Auto redirect URL after successful payment (default: https://pay.zannstore.com). - **signature** (string) - REQUIRED - Hash sha256(merchant + secret_key + trx_id). ### Request Example { "request": "new", "merchant": "MERCHANT123", "trx_id": "INV-1001", "payment": "QRISNB", "amount": 10000, "customer_name": "I Putu Anantha Saputra", "note": "Pembayaran Tagihan INV-1001", "expired_time": "30m", "type_fee": "user", "return_url": "https://tokoanda.com/sukses", "callback_url": "https://tokoanda.com/api/callback", "signature": "HASIL_SHA256_SIGNATURE" } ### Response #### Success Response (200) No response schema is provided in the source documentation. #### Response Example No response example is provided in the source documentation. ``` -------------------------------- ### POST /v1 - List Payment Methods Source: https://pay.zannstore.com/docs Retrieves the full list of payment methods (active and inactive) including fees, settlement limits, availability status, official logo URLs, and optional payment instructions. Rate-limited to 1 request per 2 minutes per merchant ID. ```APIDOC ## POST /v1 ### Description Retrieves the full list of payment methods (active and inactive) including fees, settlement limits, availability status, official logo URLs, and optional payment instructions. Rate-limited to 1 request per 2 minutes per merchant ID. ### Method POST ### Endpoint https://pay.zannstore.com/v1 ### Parameters #### Request Body - **request** (string) - REQUIRED - Must be set to "payment_methods" or "methods" - **merchant** (string) - REQUIRED - Your registered merchant ID (e.g., MERCHANT123) - **signature** (string) - REQUIRED - Hash SHA256: sha256(merchant + secret_key) - **panduan** (boolean) - OPTIONAL - Set true to include full payment instructions ### Request Example { "request": "payment_methods", "merchant": "MERCHANT123", "signature": "sha256(merchant + secret_key)", "panduan": true } ### Response #### Success Response (200 OK) - **status** (boolean) - Indicates success - **message** (string) - Success message - **data** (array) - List of payment methods, each containing: - **code** (string) - Payment method code - **name** (string) - Payment method name - **category** (string) - Payment category (e.g., Virtual Account, QRIS) - **fee** (number) - Fee amount (flat or percentage) - **fee_format** (string) - Formatted fee string - **settlement** (string) - Settlement period (e.g., H+1, Instant) - **status** (string) - Availability status (aktif/nonaktif) - **logo** (string) - Official logo URL - **panduan** (object or null) - Payment instructions object with judul and langkah array, or null #### Response Example { "status": true, "message": "Berhasil mengambil daftar metode pembayaran", "data": [ { "code": "BCAVA", "name": "BANK BCA VA", "category": "Virtual Account", "fee": 4500, "fee_format": "Rp 4.500", "settlement": "H+1", "status": "aktif", "logo": "https://cdn.zannstore.com/assets/project/pay.zannstore.com/methods/bcava_v3.webp", "panduan": { "judul": "Bank BCA Virtual Account", "langkah": [ "1. Buka aplikasi BCA mobile atau KlikBCA", "2. Pilih menu Transfer > BCA Virtual Account", "3. Masukkan nomor Virtual Account yang tertera", "4. Periksa nominal pembayaran lalu konfirmasi dengan PIN" ], "catatan": "Pembayaran akan diverifikasi secara otomatis dalam beberapa detik." } }, { "code": "QRIS2", "name": "QRIS Realtime (Fast)", "category": "QRIS", "fee": 0.7, "fee_format": "0.7%", "settlement": "Instant", "status": "nonaktif", "logo": "https://cdn.zannstore.com/assets/project/pay.zannstore.com/methods/qris_cdn.webp", "panduan": null } ] } ### Error Handling - **429 Too Many Requests** - Returned when rate limit is exceeded. Response includes retry_after field indicating wait time. ``` -------------------------------- ### POST /v1 - Check Merchant Profile Source: https://pay.zannstore.com/docs Retrieves merchant profile information including clearing balance, available balance, email, and WhatsApp number in real time. Requires request, merchant, pin, secret_key, and signature parameters. ```APIDOC ## POST /v1 ### Description Retrieves merchant profile information including clearing balance, available balance, email, and WhatsApp number in real time. ### Method POST ### Endpoint https://pay.zannstore.com/api/v1 ### Parameters #### Request Body - **request** (string) - REQUIRED - Must be set to "profile" - **merchant** (string) - REQUIRED - Your registered merchant ID (e.g., MERCHANT123) - **pin** (string) - REQUIRED - Your 6-digit security PIN - **secret_key** (string) - REQUIRED - Your merchant API secret key - **signature** (string) - REQUIRED - Hash sha256(merchant + secret_key + pin) ### Request Example { "request": "profile", "merchant": "MERCHANT123", "pin": "123456", "secret_key": "YOUR_SECRET_KEY", "signature": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" } ### Response #### Success Response (200 OK) - **status** (boolean) - Indicates success - **msg** (string) - Success message - **data** (object) - Profile data containing: - **nama_pemilik** (string) - Owner name - **merchant** (string) - Merchant ID - **saldo_kliring** (string) - Clearing balance - **saldo_tersedia** (string) - Available balance - **whatsapp** (string) - WhatsApp number - **email** (string) - Email address - **created_at** (string) - Account creation timestamp #### Response Example { "status": true, "msg": "Yeay, data profile berhasil diambil", "data": { "nama_pemilik": "John Doe", "merchant": "MERCHANT123", "saldo_kliring": "50000.00", "saldo_tersedia": "1500000.00", "whatsapp": "081234567890", "email": "user@example.com", "created_at": "2026-01-01 10:00:00" } } ``` -------------------------------- ### Membuat Transaksi Baru dengan PHP Source: https://pay.zannstore.com/docs Implementasi PHP menggunakan cURL untuk membuat transaksi baru dengan signature SHA256. ```php "new", "merchant" => $merchant, "trx_id" => $trxId, "payment" => "QRISNB", "amount" => 10000, "customer_name" => "I Putu Anantha Saputra", "note" => "Pembayaran Tagihan INV-1001", "expired_time" => "30m", "type_fee" => "user", "return_url" => "https://tokoanda.com/sukses", "callback_url" => "https://tokoanda.com/api/callback", "signature" => $signature ]; $ch = curl_init("https://pay.zannstore.com/v1"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $response = curl_exec($ch); curl_close($ch); echo $response; ``` -------------------------------- ### SHA-256 Signature Formula for Profile Check (profile) Source: https://pay.zannstore.com/docs Formula for generating the signature for profile check requests. Concatenate merchant, secret_key, and pin without spaces, then compute the SHA-256 hash in lowercase. ```text signature = sha256(merchant + secret_key + pin) ``` -------------------------------- ### SHA-256 Signature Formula for Transactions (new, status, cancel) Source: https://pay.zannstore.com/docs Formula for generating the signature for transaction-related requests (new, status, cancel). Concatenate merchant, secret_key, and trx_id without spaces, then compute the SHA-256 hash in lowercase. ```text signature = sha256(merchant + secret_key + trx_id) ``` -------------------------------- ### POST /v1 - withdraw_auto Source: https://pay.zannstore.com/docs Endpoint to automatically withdraw merchant balance to a bank account or e-wallet. In sandbox mode (DEV), it validates PIN and signature and returns a success JSON response without deducting real funds. ```APIDOC ## [POST] /v1 ### Description Endpoint to automatically withdraw merchant balance to a bank account or e-wallet. In sandbox mode (DEV), it validates PIN and signature and returns a success JSON response without deducting real funds. ### Method POST ### Endpoint /v1 ### Parameters #### Request Body - **request** (string) - REQUIRED - Must be the string "withdraw_auto" - **merchant** (string) - REQUIRED - Your registered Merchant ID - **pin** (string) - REQUIRED - Your 6-digit security PIN - **amount** (integer) - REQUIRED - Withdrawal amount in Rupiah - **type_bank** (string) - REQUIRED - Destination type: "bank" or "emoney" - **tujuan** (string) - REQUIRED - Destination bank account number or e-wallet phone number - **bank_code** (string) - REQUIRED - Bank/e-wallet code (e.g., BRI, BCA, DANA) - **signature** (string) - REQUIRED - Hash sha256(merchant + pin) ``` -------------------------------- ### POST /v1 Source: https://pay.zannstore.com/docs Single endpoint for all ZANNPAY API operations. The action is determined by the 'request' field in the JSON body. ```APIDOC ## POST /v1 ### Description Single endpoint for all ZANNPAY API operations. The action is determined by the 'request' field in the JSON body. ### Method POST ### Endpoint https://pay.zannstore.com/v1 ### Parameters #### Request Body - **request** (string) - Required - Action type: 'new' for new transaction, 'status' for status check, 'cancel' for cancellation, 'profile' for profile check, 'withdraw_auto' for withdrawal. - **merchant** (string) - Required - Merchant ID. - **signature** (string) - Required - SHA-256 signature computed as per the formula for the specific action. ### Request Example { "request": "new", "merchant": "your_merchant_id", "signature": "04fd55bef60c37b2991a75831c97e6ce713e46745679151ad7fde5d79db6a359" } ### Response #### Success Response (200) - **status** (string) - Transaction status. - **trx_id** (string) - Transaction ID. - **message** (string) - Response message. #### Response Example { "status": "success", "trx_id": "TRX123", "message": "Transaction created" } ``` -------------------------------- ### SHA-256 Signature Formula for Withdrawal (withdraw_auto) Source: https://pay.zannstore.com/docs Formula for generating the signature for withdrawal requests. Concatenate merchant and pin without spaces, then compute the SHA-256 hash in lowercase. ```text signature = sha256(merchant + pin) ``` -------------------------------- ### POST /v1 - Check Transaction Status Source: https://pay.zannstore.com/docs Checks the real-time status of a previously created transaction. Requires request='status' and is rate-limited to 20 requests per minute per transaction ID. ```APIDOC ## POST /v1 ### Description Checks the real-time status of a transaction using the request parameter set to "status". ### Method POST ### Endpoint /v1 ### Parameters #### Request Body - **request** (string) - Required - Must be set to "status". - **merchant** (string) - Required - Your registered Merchant ID (e.g., MERCHANT123). - **trx_id** (string) - Required - The merchant's transaction ID (e.g., INV-1001). - **signature** (string) - Required - Hash sha256(merchant + secret_key + trx_id). ### Response #### Success Response (200) - **status** (boolean) - Indicates success. - **msg** (string) - Response message. - **data** (object) - Transaction details. - **trx_svr** (string) - Server transaction ID. - **trx_id** (string) - Merchant transaction ID. - **metode_name** (string) - Payment method name. - **status** (string) - Transaction status (e.g., Success). - **amount** (number) - Transaction amount. - **fee** (number) - Fee amount. - **diterima** (number) - Amount received. - **note** (string) - Transaction note. - **type_fee** (string) - Fee type. - **issuer_bank** (string) - Issuer bank. - **rrn** (string) - Reference number. - **paid_at** (string) - Payment timestamp. - **created_at** (string) - Creation timestamp. - **expired_at** (string) - Expiration timestamp. #### Response Example { "status": true, "msg": "Yeay, detail transaksi berhasil diambil", "data": { "trx_svr": "ZP260727ABC123", "trx_id": "INV-1001", "metode_name": "QRISNB", "status": "Success", "amount": 10000, "fee": 70, "diterima": 9930, "note": "Pembayaran Tagihan INV-1001", "type_fee": "user", "issuer_bank": "QRIS", "rrn": "REF123456789", "paid_at": "2026-07-27 19:40:12", "created_at": "2026-07-27 19:35:00", "expired_at": "2026-07-27 20:05:00" } } ### Error Handling - **429 Too Many Requests** - Returned when rate limit exceeded, includes retry_after parameter. ``` -------------------------------- ### POST /v1 - Cancel Transaction Source: https://pay.zannstore.com/docs Cancels a pending transaction using the request parameter set to "cancel". Only transactions with status 'Pending' can be canceled. ```APIDOC ## POST /v1 ### Description Cancels a transaction that is in 'Pending' status using the request parameter set to "cancel". ### Method POST ### Endpoint /v1 ### Parameters #### Request Body - **request** (string) - Required - Must be set to "cancel". - **merchant** (string) - Required - Your registered Merchant ID (e.g., MERCHANT123). - **trx_id** (string) - Required - The merchant's transaction ID (e.g., INV-1001). - **signature** (string) - Required - Hash sha256(merchant + secret_key + trx_id). ### Response #### Success Response (200) No response example provided in the source. ### Error Handling - Transactions that are already 'Success', 'Expired', or 'Canceled' cannot be canceled. ```