# QRIS Static → Dynamic — Zapi reference > Convert QRIS Static ke Dynamic (set nominal + biaya layanan). Input via paste string atau upload gambar QR. EMVCo TLV + CRC16. **Base URL:** `https://api.zpi.web.id` **Auth:** Send `x-api-key: YOUR_KEY` header on every request. Get a free key at https://zpi.web.id/dashboard/keys. **Response envelope:** `{ status, message, content }` **Rate limit:** 60 req/min on free tier. **Related:** - Detail page: https://zpi.web.id/api/finance/qris - Endpoint catalog: https://zpi.web.id/category/finance - Concise index: https://zpi.web.id/llms.txt - Full reference: https://zpi.web.id/llms-full.txt --- ## QRIS Static → Dynamic **Category:** finance · **Slug:** `qris` **Detail page:** https://zpi.web.id/api/finance/qris Convert QRIS Static ke Dynamic (set nominal + biaya layanan). Input via paste string atau upload gambar QR. EMVCo TLV + CRC16. **Tags:** qris, qr, qris dinamis, dynamic qris, pembayaran, payment, emvco, indonesia ### Convert Convert dari QRIS string (paste). - **Method:** `GET` - **Endpoint:** `https://api.zpi.web.id/v1/finance:qris/convert` **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `qris` | string | query | yes | QRIS Static string (paste). Otomatis di-convert ke dynamic. | | `amount` | number | query | yes | Nominal transaksi (Rupiah, tanpa titik/desimal). | | `feeType` | enum(none|fixed|percent) | query | no | Biaya layanan: none (default), fixed (rupiah), percent (persen). | | `feeValue` | number | query | no | Nilai fee — rupiah kalau fixed, persen kalau percent. Wajib kalau feeType != none. | | `withImage` | enum(true|false) | query | no | Sertakan QR image (base64 data URL) di response. | **cURL:** ```bash curl "https://api.zpi.web.id/v1/finance:qris/convert?qris=00020101021126180014ID.CO.QRIS.WWW52045999530336054054000005802ID5910TOKO%20SAYUR6007JAKARTA6304ABCD&amount=15000&feeType=none&feeValue=1000&withImage=true" \ -H "x-api-key: YOUR_API_KEY" ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:qris/convert?qris=00020101021126180014ID.CO.QRIS.WWW52045999530336054054000005802ID5910TOKO%20SAYUR6007JAKARTA6304ABCD&amount=15000&feeType=none&feeValue=1000&withImage=true", { headers: { "x-api-key": process.env.ZAPI_KEY } }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.get("https://api.zpi.web.id/v1/finance:qris/convert?qris=00020101021126180014ID.CO.QRIS.WWW52045999530336054054000005802ID5910TOKO%20SAYUR6007JAKARTA6304ABCD&amount=15000&feeType=none&feeValue=1000&withImage=true", headers={"x-api-key": "YOUR_API_KEY"}) data = r.json() ``` **Example response:** ```json { "fee": null, "amount": 15000, "static": "00020101021126180014ID.CO.QRIS.WWW52045999530336054054000005802ID5910TOKO SAYUR6007JAKARTA6304ABCD", "dynamic": "00020101021226180014ID.CO.QRIS.WWW52045999530336054054000005405150005802ID5910TOKO SAYUR6007JAKARTA63044ABA", "qrImage": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS...(truncated base64 PNG)", "merchant": { "name": "TOKO SAYUR", "location": "JAKARTA" }, "inputType": "string" } ``` --- ### Scan Convert dari upload gambar QR. - **Method:** `POST` - **Endpoint:** `https://api.zpi.web.id/v1/finance:qris/scan` **Parameters:** | Name | Type | Location | Required | Description | |------|------|----------|----------|-------------| | `image` | file | form | yes | Upload gambar QRIS Static (jpg/png/webp). Max 5MB. | | `amount` | number | form | yes | Nominal transaksi (Rupiah, tanpa titik/desimal). | | `feeType` | enum(none|fixed|percent) | form | no | Biaya layanan: none (default), fixed (rupiah), percent (persen). | | `feeValue` | number | form | no | Nilai fee — rupiah kalau fixed, persen kalau percent. Wajib kalau feeType != none. | | `withImage` | enum(true|false) | form | no | Sertakan QR image (base64 data URL) di response. | **cURL:** ```bash curl -X POST "https://api.zpi.web.id/v1/finance:qris/scan" \ -H "x-api-key: YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "image": "qris.png", "amount": "15000", "feeType": "none", "feeValue": "1000", "withImage": "true" }' ``` **JavaScript / TypeScript:** ```javascript const res = await fetch("https://api.zpi.web.id/v1/finance:qris/scan", { method: "POST", headers: { "x-api-key": process.env.ZAPI_KEY, "Content-Type": "application/json" }, body: JSON.stringify({ "image": "qris.png", "amount": "15000", "feeType": "none", "feeValue": "1000", "withImage": "true" }) }); const data = await res.json(); ``` **Python:** ```python import requests r = requests.post("https://api.zpi.web.id/v1/finance:qris/scan", headers={"x-api-key": "YOUR_API_KEY"}, json={ "image": "qris.png", "amount": "15000", "feeType": "none", "feeValue": "1000", "withImage": "true" }) data = r.json() ``` **Example response:** ```json { "fee": null, "amount": 50000, "static": "00020101021126180014ID.CO.QRIS.WWW52045999530336054054000005802ID5910TOKO SAYUR6007JAKARTA6304ABCD", "dynamic": "00020101021226180014ID.CO.QRIS.WWW52045999530336054054000005405500005802ID5910TOKO SAYUR6007JAKARTA63047C4B", "qrImage": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAS...(truncated base64 PNG)", "merchant": { "name": "TOKO SAYUR", "location": "JAKARTA" }, "inputType": "image" } ``` --- _Generated: 2026-08-02T14:23:52.555Z_