QR payments
QR Payments provide a merchant-managed public payment point with a default fiat or crypto currency, optional currency switching, expiry, theme, and an authoritative Payment Intent list.
Create and configure
From Merchant → QR Payments, create a page with name, default_currency (fiat:CODE or crypto:asset_public_id), allow_currency_switch, locale, theme, and expiry_seconds. Supported expiry values are 60, 120, 300, 600, 900, 1800, 3600, 7200, 21600, 43200, 86400, 172800, and 604800 seconds. Currency values are validated against the merchant’s active options.
Public QR endpoint
GET /qr/{qr_public_id} renders the public payment page. GET /api/v1/qr/{qr_public_id} returns the page configuration and available currencies for the public client. The QR page creates or displays payment requests through the existing Payment Intent authority; a QR scan alone is never proof of payment.
Payment QR for a Payment Intent
An authenticated merchant can open GET /merchant/{merchant}/payment-intents/{payment_intent}/qr to render a signed presentation payload. The payload uses exzix://pay/v1/, includes environment, payment reference, network, asset, atomic amount, destination and expiry, and is HMAC-protected. The server must compare decoded values with the authoritative Payment Intent before accepting a payment.
Currency and lifecycle
The merchant can enable or disable a QR page and update its currency, theme, locale, switch policy and expiry. QR pages do not alter a Payment Intent after creation. Expired or disabled presentation data must not be treated as payable.
Secret policy
Never encode an API key, webhook secret, wallet private key, seed phrase or unlock password in a QR code, URL, image, browser storage value or support screenshot.