# Static vs dynamic PIX QR codes — which one your business needs

> A static PIX QR carries your key and optionally an amount, costs nothing, and can be reused forever — point of initiation field 01 is 11. A dynamic PIX QR is generated per transaction by a PSP, sets field 01 to 12, carries a resolvable URL, expires, and confirms payment by webhook.

Source: https://useqr.app/docs/payments/pix-static-vs-dynamic-qr · Last reviewed 2026-08-21 · UseQR is free forever, MIT licensed, no signup.

---

## The distinction lives in one field

Both kinds are [EMV BR Codes](/docs/payments/pix-qr-code-format). Field `01`, the point of
initiation method, tells them apart:

| | Static (`01` = `11`) | Dynamic (`01` = `12`) |
|---|---|---|
| Contains | PIX key, name, city, optional amount | A URL in field `26.25` |
| Who generates it | Anyone, free | Your bank or PSP, via API |
| Reusable | Forever | One transaction, then expires |
| Amount | Fixed in the code or typed by payer | Set server-side per charge |
| Payment confirmation | You check your statement | Webhook to your system |
| Can change after printing | No | The URL resolves fresh data each scan |
| Needs an integration | No | Yes |

This is PIX's version of the general [static vs dynamic
split](/docs/basics/static-vs-dynamic-qr-codes), with one twist: a dynamic PIX code is not a
redirecting link. The URL in `26.25` is fetched by the *payer's banking app*, which retrieves
a signed charge — amount, payer restrictions, expiry — from the PSP before the customer
confirms.

## What static gets you

A static code is self-contained. Everything the payment needs is in the string, ending in the
[CRC16 checksum](/docs/payments/pix-crc16-checksum). You can generate one in the
[PIX builder](/pix), print it once, and take payments on it for years at zero cost.

Its limits are equally clear:

- **Reconciliation is manual.** The `txid` in a static code defaults to `***`; you can set a
  1–25 character alphanumeric reference, but every scan of the same print carries the same
  one. Matching payments to orders means reading your bank or PSP statement.
- **No expiry, no per-charge control.** You cannot cap, expire or restrict who pays.
- **Amount is take-it-or-leave-it.** Either fixed in field `54` or typed by the customer.

For a counter, a market stall, a donation box or an invoice with the amount printed on it,
none of these limits matter. That is why the
[small-shop setup](/docs/payments/pix-qr-for-small-business) is a static code.

## What dynamic gets you

Dynamic codes exist for software, not counters. An e-commerce checkout generates one code
per order: exact amount, order id as `txid`, a 15-minute expiry, and a webhook the moment
the payment lands — so the order flips to "paid" without anyone reading a statement.

The costs: you need a PSP or bank API integration, each code is single-use, and if the PSP's
endpoint is down the code cannot be paid — the payload alone is not enough. A printed
dynamic code is a contradiction; by the time it is on paper it has usually expired.

## Decision table

| Your situation | Use |
|---|---|
| Counter or stall, customer types the amount | Static, no amount |
| Fixed-price product or service | Static, amount in field `54` |
| Printed invoice with the total on it | Static with amount, invoice number as `txid` |
| E-commerce checkout | Dynamic via your PSP |
| Recurring billing with per-charge tracking | Dynamic via your PSP |
| Donations | Static, no amount |

## What UseQR generates

UseQR builds **static** codes only, [entirely in your
browser](/docs/security/client-side-vs-server-side-qr-generation) — the key never touches a
server. Dynamic codes are inherently a PSP product because they require the PSP's
charge-resolution endpoint; no standalone generator can honestly offer them. If a "free
dynamic PIX" tool is not your PSP, ask what URL it is putting in field `26.25` and what
happens [when that service shuts down](/vs/what-happens-when-a-qr-service-shuts-down).

Whichever you deploy, scan it with a real banking app before printing, and check the
displayed name — or decode it with [/validate](/validate) to inspect the fields.

## FAQ

### How do I tell if a PIX QR code is static or dynamic?
Decode it and read field 01: 11 means static, 12 means dynamic. Dynamic codes also carry a
URL in field 26.25 that the banking app resolves; static codes contain the key and data
directly.

### Do static PIX codes expire?
No. A static code works for as long as the PIX key in it remains registered. Delete or
rotate the key and every print of that code stops routing — which is also how you retire one.

### Can I get paid notifications with a static PIX code?
Not from the code itself. Payment confirmation for static codes comes from your bank or PSP
statement or app notification. Per-transaction webhooks are a dynamic-code feature, because
they require a PSP integration.

### Is a dynamic PIX code the same as a dynamic QR link?
No. A marketing dynamic QR redirects a browser through a short URL. A dynamic PIX code's URL
is fetched by the payer's banking app to retrieve a signed charge with amount and expiry —
it is a payments API mechanism, not a redirect.

## Try it

- https://useqr.app/pix
- https://useqr.app/validate
