API Documentation

Base URL: https://pay.zannstore.com

Signature

Create & status signature:
sha256(merchant + secret_key + trx_id)

Create Transaction

POST
https://pay.zannstore.com/v1
Body (form-data / x-www-form-urlencoded):
merchant=... 
trx_id=...
request=new
payment=QRIS|QRIS2|QRIS3|BRIVA|BNIVA|...|ALFAMART|INDOMARET|PAYLINK
amount=10000
note=...
expired_time=30m
type_fee=user|merchant
callback_url=-
signature=sha256(merchant+secret_key+trx_id)

Response QRIS

{
  "status": true,
  "message": "Berhasil membuat transaksi",
  "data": {
    "trx_svr": "TRX_SERVER",
    "trx_id": "TRX_BUYER",
    "method_code": "QRIS|QRIS2|QRIS3",
    "method_name": "QRIS by ...",
    "status": "Pending",
    "amount": 10000,
    "unique_code": 123,
    "diterima": 10000,
    "fee": 100,
    "type_fee": "user",
    "qr_url": "https://.../qris/xxx.png",
    "qr_content": "....",
    "checkout_url": "https://pay.zannstore.com/invoice?reffID=TRX_SERVER&payRef=SIGN",
    "expired_at": "YYYY-MM-DD HH:mm:ss"
  }
}

Response Retail

{
  "status": true,
  "message": "Berhasil membuat transaksi",
  "data": {
    "trx_svr": "TRX_SERVER",
    "trx_id": "TRX_BUYER",
    "method_code": "ALFAMART|INDOMARET",
    "method_name": "RETAIL ...",
    "status": "Pending",
    "amount": 10000,
    "diterima": 10000,
    "fee": 2500,
    "type_fee": "user",
    "payment_code": "111544000000003",
    "checkout_url": "https://pay.zannstore.com/invoice?reffID=TRX_SERVER&payRef=SIGN",
    "expired_at": "YYYY-MM-DD HH:mm:ss"
  }
}

Response VA

{
  "status": true,
  "message": "Berhasil membuat transaksi",
  "data": {
    "trx_svr": "TRX_SERVER",
    "trx_id": "TRX_BUYER",
    "method_code": "BNIVA|BRIVA|...",
    "method_name": "BANK ... VA",
    "status": "Pending",
    "amount": 10000,
    "diterima": 6500,
    "fee": 3500,
    "type_fee": "merchant",
    "virtual_account": "1234567890",
    "checkout_url": "https://pay.zannstore.com/invoice?reffID=TRX_SERVER&payRef=SIGN",
    "expired_at": "YYYY-MM-DD HH:mm:ss"
  }
}

Check Status

POST
https://pay.zannstore.com/v1
Body:
merchant=...
trx_id=...
request=status
signature=sha256(merchant+secret_key+trx_id)
Response example:
{
  "status": true,
  "msg": "Yeay, detail transaksi berhasil diambil",
  "data": {
    "trx_svr": "TRX_SERVER",
    "trx_id": "TRX_BUYER",
    "metode_name": "QRIS2",
    "status": "Pending",
    "amount": 10000,
    "fee": 100,
    "unique_code": 4,
    "diterima": 10004,
    "note": "Catatan",
    "type_fee": "user",
    "issuer_bank": "-",
    "rrn": "-",
    "paid_at": "-",
    "created_at": "YYYY-MM-DD HH:mm:ss",
    "expired_at": "YYYY-MM-DD HH:mm:ss"
  }
}

Profile

POST
https://pay.zannstore.com/v1
Body:
merchant=...
pin=...
secret_key=...
request=profile
signature=sha256(merchant+secret_key+pin)
Response example:
{
  "status": true,
  "msg": "Yeay, data profile berhasil diambil",
  "data": {
    "nama_pemilik": "Anantha",
    "merchant": "MERCHANT123",
    "saldo_kliring": "Rp 50.000",
    "saldo_tersedia": "Rp 100.000",
    "whatsapp": "6285xxxxxxx",
    "email": "[email protected]",
    "created_at": "YYYY-MM-DD HH:mm:ss"
  }
}

Withdraw Auto

POST
https://pay.zannstore.com/v1
Body:
merchant=...
pin=...
signature=sha256(merchant+pin)
request=withdraw_auto
amount=10000
type_bank=bank|emoney
tujuan=1234567890
bank_code=BRI|BNI|DANABYZN|...
Response example:
{
  "status": true,
  "msg": "Withdraw berhasil diproses.",
  "trx_id": "ZNWD...",
  "nominal": 10000,
  "biaya": 3000,
  "total": 13000,
  "saldo_awal": 50000,
  "saldo_akhir": 37000,
  "tujuan": "1234567890",
  "jenis": "BANK",
  "bank_code": "BRI",
  "account_name": "NAMA",
  "bank_name": "BANK BRI"
}

Merchant Callback (sendMerchantCallback)

Sistem akan POST ke callback_url milik merchant setelah transaksi sukses.
Payload (JSON):
{
  "data": {
    "trx_svr": "TRX_SERVER",
    "trx_id": "TRX_BUYER",
    "status": "Success",
    "amount": "10000",
    "fee": "2500",
    "type_fee": "user",
    "issuer_bank": "BRI|BNI|ALFAMART|INDOMARET|QRIS",
    "rrn": "REF/VA/RETAIL",
    "diterima": "10000",
    "paid_at": "YYYY-MM-DD HH:mm:ss",
    "va_code": "BRIVA (opsional)",
    "va_number": "1234567890 (opsional)",
    "customer_name": "Nama (opsional)"
  }
}
Response yang diharapkan
HTTP 200 OK