QRIS for Freelancers: From a Static QR to an Exact-Amount Dynamic QR

QRIS is Bank Indonesia's national payment-QR standard (EMVCo-based): one QR payable from every licensed payment app (PJP) — GoPay, OVO, DANA, ShopeePay, and mobile banking. The static QR from your QRIS provider carries no amount, so clients type the figure themselves — which is exactly where typos and short payments happen. A dynamic QR embeds the exact amount inside the code (tag 54), so clients just scan and confirm. Tagihin converts your own static QRIS into a per-invoice dynamic QR: only the amount and the checksum change; the NMID and the money path stay the same — funds settle straight to your account via your PJP, and Tagihin never holds money. Micro-merchant MDR: 0% for transactions up to Rp500,000, 0.3% above, borne by the merchant.

Nearly every Indonesian freelancer already has a QRIS — a sticker from GoPay Merchant, DANA Bisnis, or mobile banking. The problem: that static QR makes clients type the amount themselves, and you bear the consequences when the figure is wrong. This guide covers QRIS end to end: the standard behind it, static vs dynamic, how exact-amount conversion works, MDR fees, and how to get a free QRIS if you do not have one yet.

By the Tagihin team · Updated 10 Jun 2026

Note: this article is general information, not financial or legal advice for a specific case. QRIS rules (transaction limits, MDR, merchant categories) are set by Bank Indonesia and can change — check the latest provisions at bi.go.id or with the PJP you registered with.

What QRIS is and why one QR is enough

QRIS (Quick Response Code Indonesian Standard) is the national payment-QR standard set by Bank Indonesia together with ASPI, built on the international EMVCo merchant-presented-mode specification. Before QRIS, every payment app had its own QR and merchants had to tape five different stickers to the counter. Since QRIS, a single QR code can be paid from every licensed payment-service provider (PJP) app: GoPay, OVO, DANA, ShopeePay, LinkAja, and mobile banking such as BCA mobile, Livin’ by Mandiri, and BRImo.

The scale is already huge: by end-2025 there were roughly 42.75 million QRIS merchants (over 90% of them micro and small businesses) and about 60 million users. In practice, nearly every local client already has at least one app that can scan QRIS — you never have to ask “which bank are you with?” again. The current QRIS limit is Rp10 million per transaction (check BI’s latest provisions); for invoices above that, a regular bank transfer remains the route.

NMID — the merchant identity inside the QR

Every QRIS carries an NMID (National Merchant ID), the national merchant identity number issued when you register with a PJP. The NMID lives inside the QR payload (tag 51, the ID.CO.QRIS.WWW template) along with the merchant name and city, and is usually printed on the sticker too. The NMID is what determines whose account the funds settle to — not the app the buyer uses. A key point for the conversion section below: as long as the NMID and the acquirer template are unchanged, the money path is unchanged too.

Static vs dynamic QRIS — and why the difference matters

The QRIS standard defines two initiation modes, marked by one field inside the payload (tag 01): value 11 for a static QR, 12 for a dynamic QR.

Static QR — the client types the amount

A static QR is the code your PJP gives you at registration: printed once, stuck up or re-sent endlessly, valid forever. There is no amount inside it, so the client must type the figure in. What tends to follow:

  • Typos — Rp1,500,000 becomes Rp150,000, and you only notice when you check your account history
  • “Accidental” short payments you have to chase — an awkward conversation with a client
  • Manual reconciliation: every client pays into the same QR, so you match which transfer belongs to which invoice by hand

Dynamic QR — the exact amount is embedded in the code

A dynamic QR is generated fresh for a single transaction and carries the amount inside the payload (tag 54). The client scans, the app immediately shows the figure due, and they just confirm — there is no number field to mistype. One QR = one invoice = one amount, so reconciliation becomes trivial.

Static QRIS (sticker) Dynamic QR (per invoice)
Payload marker Tag 01 = 11, no tag 54 Tag 01 = 12, tag 54 carries the amount
Amount Typed by the client — error-prone Embedded; appears automatically on scan
Reconciliation Manual — every payment lands on the same QR One QR = one invoice = one amount
Where funds settle Your account via your PJP Still your account — the NMID is unchanged

How static → dynamic conversion works (tag 54 + CRC)

A QRIS payload is really just structured text in EMVCo’s TLV (tag–length–value) format. Turning a static QR into an exact-amount dynamic QR touches exactly three things:

  1. Tag 01 (initiation mode) flips from 11 (static) to 12 (dynamic)
  2. Tag 54 (transaction amount) is inserted with the whole-rupiah figure — e.g. 1500000 for a Rp1,500,000 invoice
  3. The CRC checksum at the end of the payload (tag 63, CRC-16/CCITT-FALSE) is recomputed so the code stays valid

Every other tag — the NMID, merchant name, city, and your PJP’s acquirer template — is copied byte for byte, untouched. Because the merchant identity is untouched, the money path does not change either: funds still settle to your own PJP account, exactly as when a client scans your static sticker. The technique is established practice in Indonesia (many open-source “QRIS dinamis” converters work the same way), and Tagihin does it automatically per invoice — from your own static QRIS, never someone else’s.

One thing Tagihin deliberately NEVER does: add tags 55–57 (tip or convenience fees) to the QR. Passing the MDR or any surcharge on to the buyer is prohibited by Bank Indonesia rules (PBI 23/6/PBI/2021 Article 52) — the amount in a Tagihin dynamic QR always equals the invoice total exactly.

Want to try it without signing up? Paste your static QRIS payload into our free tool: Dynamic QRIS generator.

QRIS MDR fees: who pays, and how much

The MDR (Merchant Discount Rate) is the per-transaction QRIS fee set by Bank Indonesia and deducted automatically by your PJP before settlement. Under the rules effective March 2025, regular-transaction rates are:

Merchant category MDR per transaction
Micro merchant — transactions up to Rp500,0000%
Micro merchant — transactions above Rp500,0000,3%
Small, medium, and large merchants0,7%

Two things are commonly misunderstood. First, the MDR is borne by the merchant — your PJP deducts it from incoming funds, and you may not pass it on to buyers as a “QRIS fee” (PBI 23/6/PBI/2021 Article 52). Second, most freelancers and micro businesses are registered as micro merchants, so small payments up to Rp500,000 are genuinely fee-free. On a Rp2,000,000 invoice at 0.3% MDR, the deduction is Rp6,000 — compare that with typical payment-gateway cuts, which run far higher. Your merchant category is set via your PJP; see BI’s official simulation for details.

On Tagihin’s side: we charge no per-invoice or per-transaction fee and take no percentage of your sales. Tagihin is an invoicing and QR tool — all money flows from the client straight to your account via your PJP. You only pay your monthly Tagihin plan.

How to get a static QRIS (free, no company needed)

No QRIS yet? Registration is free, available to individuals — no PT or CV required — and usually completes within 1–3 working days. The three most common routes:

  1. GoPay Merchant — download the app, register with your KTP + a selfie + business details + the bank account for settlement, then download your static QRIS from the app
  2. DANA Bisnis — register from the DANA Bisnis app; verification often clears within hours, and the static QRIS can be downloaded right away
  3. Your bank’s mobile app — many banks (BCA, BRI, Mandiri, and others) offer QRIS merchant registration in-app, settling to your account at that bank

Whichever route you take, the end result is the same: one static QRIS with your own NMID. To use it with Tagihin, you paste that static QR’s contents (the payload) once into your business settings — after that, every invoice automatically gets a derived dynamic QR. Pick a PJP that settles into the account you actually use for your business, so your bookkeeping and tax records stay clean.

Security: why exact-amount QRs kill payment disputes

Most freelancer payment disputes are not sophisticated fraud — just wrong numbers. A client drops a zero, or “rounds down”, then sends a convincing-looking transfer screenshot. With a static QR you have nothing to anchor on: the amount that “should” have been paid exists only in your head and in the chat.

A dynamic QR flips the situation. The amount is locked inside the code before the client pays, the PJP app displays that figure verbatim, and your invoice holds the expected amount on record. “Did the money in match the invoice?” goes from an argument to matching one number in your account history. And remember: a transfer-proof image is not proof of money received — your account mutation is what counts. Tagihin helps by checking every payment proof a client uploads against a platform-wide duplicate ledger (the same screenshot used twice gets flagged), but final confirmation is always yours, after you see the funds actually land.

How to scrutinise a transfer proof — including edited and AI-generated fakes — is covered separately in the guide on checking whether a transfer proof is real, and Tagihin’s full payment-verification flow in the guide on payment verification.

How Tagihin uses QRIS end to end

  1. Paste your static QRIS payload once in business settings (from GoPay Merchant, DANA Bisnis, or mobile banking)
  2. Create an invoice — add your line items, PPN if you are PKP, and PPh withholding where relevant; the total is computed for you
  3. Tagihin derives an exact-amount dynamic QR from your static QRIS for that invoice (tag 54 + CRC, every other tag intact)
  4. Share the payment link via WhatsApp or email — the client scans from any PJP app and the amount appears automatically
  5. Funds settle straight to your account via your PJP; once you confirm payment, the kwitansi is issued automatically

Honest fee and fund-flow disclosure

  • Money never passes through Tagihin — clients pay your QRIS and funds settle to your account via your own PJP
  • No per-invoice or per-transaction fee from Tagihin — only the monthly plan
  • The QRIS MDR follows Bank Indonesia rules, is deducted by your PJP, is merchant-borne — and may not be passed to buyers
  • Tagihin is not a PJP, not a payment gateway, and not an e-wallet — it is an invoicing and document tool
Start free — no card

Start sending invoices + exact-amount QRIS QRs with automatic kwitansi (free plan available).

Read next

References / Sources