{
  "$schema": "https://degreesofsatoshi.com/encyclopedia/schemas/article-v1.json",
  "schemaVersion": "1.0.0",
  "id": "bitcoin-payment-requests-qr-codes",
  "canonical": "https://degreesofsatoshi.com/encyclopedia/bitcoin-payment-requests-qr-codes/",
  "collection": "bitcoin",
  "title": "Bitcoin payment requests and QR codes: what a scan actually tells you",
  "description": "Understand Bitcoin payment QR codes and URI fields, including decimal BTC amounts, labels, alternative routes and recipient checks.",
  "aliases": [
    "bitcoin QR code payment",
    "bitcoin QR code payment explained"
  ],
  "dates": {
    "published": "2026-10-02",
    "modified": "2026-10-02",
    "verified": "2026-10-02T19:29:20.637Z",
    "dataAsOf": "2026-10-02"
  },
  "authorship": {
    "publisher": "Degrees of Satoshi editorial project",
    "process": "AI-assisted research and drafting with a separate automated source-verification pass; no external expert or named human review is implied."
  },
  "quickAnswer": {
    "text": "A Bitcoin payment QR code is an encoding of text, often a payment URI containing a destination, amount and optional instructions. Scanning helps transfer those fields; it does not prove who created the request or that payment has happened. Review the wallet’s decoded request before approval. BIP-321 updates the older BIP-21 URI scheme, but actual support depends on the wallet.",
    "claimId": "bitcoin-payment-requests-qr-codes-quick-answer",
    "sourceIds": [
      "x425-btc-bip321",
      "x425-btc-bip21",
      "x425-btc-trezor-display"
    ]
  },
  "keyFacts": [
    {
      "label": "Amount unit",
      "value": "The URI amount field uses decimal BTC",
      "sourceIds": [
        "x425-btc-bip321"
      ],
      "id": "amount-unit",
      "claimId": "bitcoin-payment-requests-qr-codes-fact-amount-unit"
    },
    {
      "label": "Authorization",
      "value": "A URI must not trigger payment without authorization",
      "sourceIds": [
        "x425-btc-bip321"
      ],
      "id": "authorization",
      "claimId": "bitcoin-payment-requests-qr-codes-fact-authorization"
    },
    {
      "label": "Identity",
      "value": "A label is not recipient authentication",
      "sourceIds": [
        "x425-btc-bip321",
        "x425-btc-trezor-display"
      ],
      "id": "identity",
      "claimId": "bitcoin-payment-requests-qr-codes-fact-identity"
    }
  ],
  "prerequisites": [
    "bitcoin-address-types",
    "lightning-network-explained"
  ],
  "sections": [
    {
      "id": "fields",
      "heading": "Read the decoded request",
      "sourceIds": [
        "x425-btc-bip321"
      ],
      "paragraphs": [
        "A request can provide an on-chain destination, a human-readable label and a message. Modern instructions can also describe a Lightning invoice or offer. The application decides which supported route to present; do not assume every scanned Bitcoin request necessarily means an on-chain payment.",
        "BIP-321 permits a URI without a normal on-chain address when it supplies another payment instruction. A wallet that cannot handle a required feature should not silently make a different payment."
      ]
    },
    {
      "id": "units",
      "heading": "A small decimal can still be misread",
      "sourceIds": [
        "x425-btc-bip321"
      ],
      "paragraphs": [
        "An illustrative amount of 0.0005 BTC equals 50,000 satoshis. The URI uses decimal BTC even if the wallet screen prefers sats. Its amount must not include a thousands-separating comma. Compare the normalized amount the wallet displays with the invoice you intend to pay.",
        "A label such as a shop name is merely supplied text. A malicious request can carry a convincing name alongside an attacker’s destination."
      ]
    },
    {
      "id": "verify",
      "heading": "Check both the request and the signing screen",
      "sourceIds": [
        "x425-btc-bip321",
        "x425-btc-trezor-display"
      ],
      "paragraphs": [
        "Obtain the request from the intended recipient and inspect its contents after scanning. For a hardware wallet, compare supported transaction details on the device with the intended payment. The device confirms the transaction it will sign, not the truth of the request’s business story.",
        "If a code is unreadable or unsupported, ask for a compatible request. Editing unfamiliar parameters by hand risks changing amount or payment semantics."
      ]
    }
  ],
  "faq": [
    {
      "question": "Is a QR code safer than copying an address?",
      "answer": "It can reduce typing errors, but the code can still encode a substituted destination or misleading amount. Both methods require you to check the decoded request against an authenticated source.",
      "sourceIds": [
        "x425-btc-bip321",
        "x425-btc-trezor-display"
      ]
    },
    {
      "question": "Does scanning the code send the bitcoin?",
      "answer": "Scanning usually imports instructions. BIP-321 requires user authorization before acting on a payment URI; the wallet should let you inspect and approve the payment rather than treating the scan as proof of consent.",
      "sourceIds": [
        "x425-btc-bip321"
      ]
    }
  ],
  "claims": [
    {
      "id": "bitcoin-payment-requests-qr-codes-quick-answer",
      "articleSlug": "bitcoin-payment-requests-qr-codes",
      "statement": "A Bitcoin payment QR code is an encoding of text, often a payment URI containing a destination, amount and optional instructions. Scanning helps transfer those fields; it does not prove who created the request or that payment has happened. Review the wallet’s decoded request before approval. BIP-321 updates the older BIP-21 URI scheme, but actual support depends on the wallet.",
      "sourceIds": [
        "source-8d372ef951aaea6c",
        "source-4a82ebda19174ffa",
        "source-6d1aa1923394141c"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-8d372ef951aaea6c",
          "locator": "General rules for handling (important!); General Format; Query Keys; Transfer amount; Forward compatibility; Backward compatibility"
        },
        {
          "sourceId": "source-4a82ebda19174ffa",
          "locator": "Superseded by BIP 321; Specification; Rationale; Forward compatibility"
        },
        {
          "sourceId": "source-6d1aa1923394141c",
          "locator": "Trusted display article: on-device verification steps and limits of what the device verifies"
        }
      ],
      "scope": {
        "collection": "bitcoin",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "Educational explanation. Product-specific behavior is scoped to the cited documentation, checked 2026-10-02.",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:29:20.637Z",
        "reviewer": "Independent automated verification — Codex /root/verify_ethereum_100, separate from the Bitcoin drafting agent",
        "notes": [
          "Read pinned BIP321 and superseded BIP21. Decimal BTC amount, required unknown fields, optional alternative payment route and user authorization are qualified to specification and wallet support;0.0005BTC=50,000sats checked."
        ]
      }
    },
    {
      "id": "bitcoin-payment-requests-qr-codes-fact-amount-unit",
      "articleSlug": "bitcoin-payment-requests-qr-codes",
      "statement": "Amount unit: The URI amount field uses decimal BTC",
      "sourceIds": [
        "source-8d372ef951aaea6c"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-8d372ef951aaea6c",
          "locator": "General rules for handling (important!); General Format; Query Keys; Transfer amount; Forward compatibility; Backward compatibility"
        }
      ],
      "scope": {
        "collection": "bitcoin",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:29:20.637Z",
        "reviewer": "Independent automated verification — Codex /root/verify_ethereum_100, separate from the Bitcoin drafting agent",
        "notes": [
          "Read pinned BIP321 and superseded BIP21. Decimal BTC amount, required unknown fields, optional alternative payment route and user authorization are qualified to specification and wallet support;0.0005BTC=50,000sats checked."
        ]
      }
    },
    {
      "id": "bitcoin-payment-requests-qr-codes-fact-authorization",
      "articleSlug": "bitcoin-payment-requests-qr-codes",
      "statement": "Authorization: A URI must not trigger payment without authorization",
      "sourceIds": [
        "source-8d372ef951aaea6c"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-8d372ef951aaea6c",
          "locator": "General rules for handling (important!); General Format; Query Keys; Transfer amount; Forward compatibility; Backward compatibility"
        }
      ],
      "scope": {
        "collection": "bitcoin",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:29:20.637Z",
        "reviewer": "Independent automated verification — Codex /root/verify_ethereum_100, separate from the Bitcoin drafting agent",
        "notes": [
          "Read pinned BIP321 and superseded BIP21. Decimal BTC amount, required unknown fields, optional alternative payment route and user authorization are qualified to specification and wallet support;0.0005BTC=50,000sats checked."
        ]
      }
    },
    {
      "id": "bitcoin-payment-requests-qr-codes-fact-identity",
      "articleSlug": "bitcoin-payment-requests-qr-codes",
      "statement": "Identity: A label is not recipient authentication",
      "sourceIds": [
        "source-8d372ef951aaea6c",
        "source-6d1aa1923394141c"
      ],
      "sourceLocators": [
        {
          "sourceId": "source-8d372ef951aaea6c",
          "locator": "General rules for handling (important!); General Format; Query Keys; Transfer amount; Forward compatibility; Backward compatibility"
        },
        {
          "sourceId": "source-6d1aa1923394141c",
          "locator": "Trusted display article: on-device verification steps and limits of what the device verifies"
        }
      ],
      "scope": {
        "collection": "bitcoin",
        "dataAsOf": "2026-10-02",
        "blockHeight": null
      },
      "qualification": "",
      "evidenceStatus": "documented",
      "verification": {
        "status": "verified",
        "method": "independent automated source review",
        "checkedAt": "2026-10-02T19:29:20.637Z",
        "reviewer": "Independent automated verification — Codex /root/verify_ethereum_100, separate from the Bitcoin drafting agent",
        "notes": [
          "Read pinned BIP321 and superseded BIP21. Decimal BTC amount, required unknown fields, optional alternative payment route and user authorization are qualified to specification and wallet support;0.0005BTC=50,000sats checked."
        ]
      }
    }
  ],
  "sources": [
    {
      "id": "x425-btc-bip321",
      "label": "URI Scheme",
      "publisher": "Bitcoin Improvement Proposals",
      "url": "https://raw.githubusercontent.com/bitcoin/bips/927b6de9915c9262615a6399de51b200f81e5aa4/bip-0321.mediawiki",
      "locator": "General rules for handling (important!); General Format; Query Keys; Transfer amount; Forward compatibility; Backward compatibility",
      "note": "Successor payment URI scheme and wallet-dependent payment instructions.",
      "version": "Pinned BIPs revision",
      "checkedAt": "2026-10-02T18:53:54.108Z",
      "contentSha256": "6fcb782620390c0a60958d983e0ca9ffbd67eadfba37169f94e1228028eee8c4",
      "recordId": "source-8d372ef951aaea6c"
    },
    {
      "id": "x425-btc-bip21",
      "label": "URI Scheme",
      "publisher": "Bitcoin Improvement Proposals",
      "url": "https://raw.githubusercontent.com/bitcoin/bips/927b6de9915c9262615a6399de51b200f81e5aa4/bip-0021.mediawiki",
      "locator": "Superseded by BIP 321; Specification; Rationale; Forward compatibility",
      "note": "Historical Bitcoin payment URI fields, amount units and required-parameter handling.",
      "version": "Pinned BIPs revision",
      "checkedAt": "2026-10-02T18:53:53.954Z",
      "contentSha256": "4505e28fb572ca8b336c7563b34670dfdb9cdf95e398ad5e7a5c350015bac962",
      "recordId": "source-4a82ebda19174ffa"
    },
    {
      "id": "x425-btc-trezor-display",
      "label": "Trezor’s Trusted Display",
      "publisher": "Trezor",
      "url": "https://trezor.io/guides/trezor-devices/trezor-fundamentals/trezor-s-trusted-display-verify-every-address-on-your-device",
      "locator": "Trusted display article: on-device verification steps and limits of what the device verifies",
      "note": "Manufacturer explanation of device display checks and the limits of a host-computer screen.",
      "checkedAt": "2026-10-02T18:53:56.900Z",
      "contentSha256": "b88fbc2dd8d7eb309d6c6aaba742dbedf7dec05e2ac57a230770e14bd2b2d14d",
      "recordId": "source-6d1aa1923394141c",
      "version": null
    }
  ],
  "related": {
    "articles": [
      "bitcoin-address-types",
      "lightning-network-explained",
      "how-to-receive-bitcoin",
      "how-to-send-bitcoin",
      "bitcoin-payment-refunds"
    ],
    "dossiers": [],
    "wallets": []
  },
  "revisionHistory": [
    {
      "date": "2026-10-02",
      "kind": "published",
      "summary": "First publication after primary-source research and separate automated verification."
    }
  ],
  "citation": "Degrees of Satoshi editorial project. “Bitcoin payment requests and QR codes: what a scan actually tells you.” Published 2026-10-02; updated 2026-10-02. https://degreesofsatoshi.com/encyclopedia/bitcoin-payment-requests-qr-codes/"
}
