HPAY (formerly PayLink)
HPAY at hartiibiome.com/hpay is Hartii's payment page (called PayLink until Biome 1.10.0).
The workspace has three tabs, in this order:
- Your link (the default for a bare
/hpay;?mode=receivestill opens it): connect your wallet to get your own payment link and its QR code first. With a verified Hartii @handle the native QUAI link is the short?to=@handleone; without one it uses your checksummed Cyprus-1 address. A handle is optional. Request an amount updates the link and QR code. Payment asset for your receive link selects QUAI or qualified WQI; WQI uses an asset-bound v2 request. Your address and its own QR follow below. Account/network changes rebuild the view. Get a handle opens an in-page registration window: see get your @handle. - Create a link: make a payment link with an amount, a QUAI dollar price or an expiry.
- Send to @name: pay a Hartii @handle or a pasted Quai address from your wallet.
An Inbox side card shows up to five newest payments from the existing QUAI inbox reader for the connected wallet. It names incomplete or failed reads and links to the full inbox; it is not a combined QUAI/WQI total.
Links with ?to=, ?amount=, ?amt= or ?memo= open Send as before; ?mode=receive|send|create picks a tab.
HPAY holds no funds. Your wallet signs the transfer; there is no HPAY service fee. Network gas is charged in addition to the payment and shown as an estimate before signing.
Direct WQI payments
The 1.27.0 release adds WQI as a second payment asset. WQI is the reviewed ERC-20 token on Quai's account ledger, at the pinned WQI contract. It is not native Qi. A WQI payment is a direct token transfer to the recipient's wallet; the sender separately needs QUAI for network gas. HPAY does not approve a spender, wrap or unwrap Qi, swap assets, or connect to a utility biller. A bill reference is only a link label: the money goes to the address in the request, so confirm that recipient accepts WQI.
The amount is exact, up to 18 decimal places. WQI has no qualified dollar quote or dollar peg in HPAY; QUAI prices are never applied to it. Before the wallet can ask you to sign, HPAY checks the configured deployment identity and token metadata, the token balance, separate QUAI gas, and the exact transfer. Review the asset, recipient, amount and gas, then approve the transaction in your own wallet.
WQI links use asset-bound Request v2 fields (v=2, asset=WQI, the pinned token and a WQI: recipient marker). Existing v1 requests remain native QUAI. A v1-only reader must refuse a v2 WQI link rather than treat it as a QUAI payment; do not strip the marker or asset fields to make an old reader accept it. Details: HPAY Request v1 and v2.
Since Games/Biome 1.21.0 HPAY also has tools for shops and groups, all Beta (see HPAY tools); the inbox joined them in 1.24.0.
Send to @name
- Enter a handle (
@name) or a0x...address, an amount and an optional memo. Amounts are parsed exactly as decimal strings with at most 18 decimal places; invalid input is refused. - The handle is resolved on-chain, read-only.
HartiiProfiles.ownerOfNamesupplies the owner;profileOfchecks the displayed name at HartiiProfiles0x0015f71de1574c772B6815D25B233C065f42c896. Handles use 3-16 ASCII characters:a-z,0-9,_, with uppercase folded to lowercase. A mismatching profile is refused. An unavailable display-only profile read does not replace a verified owner address. - Check the full checksummed recipient address, name and amount. Unknown names, zero addresses, Qi-ledger addresses, addresses outside Cyprus-1 and ambiguous results are refused.
- Review the confirmation card and connect your wallet. Unknown or wrong network state cannot authorize a send. Account/network events update the wallet display and invalidate an unsent HPAY review when the selected payer or network changes.
- Press Send. After the gas estimate, HPAY re-reads the reviewed handle owner and checks the wallet's currently selected authorized account and mainnet chain again. A changed or unverifiable owner stops sending and requires a fresh review. The recipient is never silently replaced by a new owner. A changed or disconnected payer also stops the wallet request.
- Check the address, amount and network in the wallet prompt before approving. The transaction carries the reviewed payer and recipient, a gas limit and the available live gas price. HPAY checks that the wallet is on chain 9 right before the request and does not pass a chain id in it: Pelagus 1.0.62 otherwise signs at a network fee of 0 whenever its fee setting is not Auto, and the network refuses that transaction.
Pelagus uses a plain QUAI transfer. Blip and other supported injected wallets use QuaiRelay. The existing estimate adds 20% gas headroom; a fallback estimate is labelled when a live estimate is unavailable. Gas estimation and recipient checks do not send funds. A wallet-method namespace fallback repeats the final checks before making its request.
Wallet state and on-chain ownership can change after the last read. A plain transfer pays the explicit reviewed address, so the final wallet review remains necessary. HPAY does not automatically resend a rejected or uncertain payment, and a returned transaction hash makes the paid button single-use.
Submitted, pending and confirmed
Sent means the wallet returned a transaction hash. HPAY then waits for a receipt. On the Send to @name tab, a receipt with status 1 shows In a block. It counts as final after 12 confirmations; the transaction link shows how many it has. (Before Biome 1.21.0 this line said "Confirmed on-chain".) Missing, partial or unrecognized receipt status remains pending; it is neither confirmation nor proof of failure. Pending is not delivery. A status-0 receipt means the transfer failed; it can still consume network gas. If confirmation is delayed, check the transaction link before considering another payment.
The browser keeps a local safety record. A pending or unknown outcome stays blocked across reloads, and starting a new personal-payment intent does not clear it. If the wallet returned the original transaction hash, use it to check that attempt. If no unique hash came back, a manually supplied same-terms hash is only a read-only candidate: it cannot prove that it was this invocation or unlock another payment. Keep the hold and check the original wallet activity; do not send again blindly. After the node proves that the original fixed request failed with status 0, a still-valid bill request may be reviewed again with the same request identity. Confirmed, unknown or expired fixed requests do not become a new payment.
Recovery binds the original payment model as well as payer, recipient, asset and exact amount. It also requires the freshly read raw receipt's transaction and block identity to agree with the decoded payment and canonical block. A different plain/relay/token model or block hash cannot release the original hold. Wallet listener cleanup does not replace a returned hash or turn an uncertain wallet result into permission to resend.
The request page /pay counts confirmations itself. It says In a block with a count such as "3 of 12
confirmations" and says Confirmed on-chain only at 12. 12 confirmations is a placeholder until finality on
Quai has been measured on mainnet; it is not a proven safe depth.
Nothing was sent means the network refused the transaction before accepting it: the fee your wallet set was too low, the wallet does not hold enough QUAI for the amount plus the fee, or the gas limit was refused. A refused transaction was never broadcast and cannot confirm later, so it is safe to try again. If a fee refusal repeats, set the network fee in your wallet to Auto. Claim, OTC Link and Airdrop treat a refusal the same way. Any other error after the wallet was opened stays status unknown: check your wallet before sending again.
The legacy /pay.html page shows a submitted transaction link; use the explorer to establish its final
receipt status. It has the same final wallet checks and handle-owner refusal. If a handle changes, reload
that payment page and review its newly resolved address before paying.
Pre-fill and payment links
https://hartiibiome.com/hpay?to=@name&amount=5 fills the Send tab. Every field is validated; a link
never sends on its own. The visitor still reviews the payment and approves it in their wallet.
An amount typed or linked as text can be at most 100 characters. A longer one is refused with "That amount is
too long. Enter a number like 1.5." (Before Games/Biome 1.21.0 and Gallery 2.2.11 a crafted amount= of tens of
thousands of digits could freeze the page for seconds; the parser is now linear.) The newer amt field takes
exact units: QUAI wei in Request v1, or WQI base units in an explicit Request v2. See HPAY Request v1 and v2.
A handle link resolves the current owner when opened; it does not permanently bind that name to the original link creator. Use a checked address link when the recipient must remain fixed. A handle's name alone is not proof of the link creator's identity.
Privacy and network requests
The browser asks your injected wallet for accounts/network state and uses the Quai RPC for handle, contract, balance, gas and receipt reads. Quaiscan helps discover native QUAI history. The RPC, explorer, hosting site and wallet receive their normal request and network metadata; a shared payment URL can expose its address, amount, memo and reference. WQI history is read from the public node, and HPAY uses no historical price service for WQI. These notes are not a promise of zero collection by those services.
Since 1.26.0 the receipt page of a confirmed payment also makes one read to hartiigames.com for the payee's
account type: a plain GET that carries the payee's public address, with no cookie and no referrer, and nothing is
written. The inbox, the Statement and every PDF make no such call. See
PDF receipts and your account type.
A memo containing bidirectional-control or zero-width characters is rejected, a ?amount= of 1,000,000,000 QUAI or
more is not pre-filled (the page warns instead), and an invalid ?amt= is reported as ignored. If the wallet
account or chain changes while the signing popup is open, the confirm card and any receipt stay visible with a
warning to check your wallet before sending again; the single-send guard stays on. The wallet-method fallback is
used only on JSON-RPC -32601 or EIP-1193 4200, never after a free-text error that could follow a broadcast.
Recipient, amount, memo and reference can be encoded in a shared link, browser history or clipboard. Do not put private information in them. Memo and reference are link/display text and are not included in transaction calldata. Local activity and payment safety records stay in the browser; they are not private cloud bills. Submitted transactions expose payer, recipient, asset, amount and transaction details on the public chain; removing a link or local browser history cannot erase them. HPAY does not ask for a private key or mnemonic in the page.
Dedicated HPAY and existing Biome records
hartiipay.app serves the same reviewed HPAY behavior on its own origin. Biome's existing HPAY routes and shared links are retained. Saved sales, local activity/history markers and pending payment or registration safety records belong to the browser origin that created them: nothing is transferred automatically, and there is no cross-domain lock. Before switching domains, check outstanding payments in your original Biome workspace. An empty history or unblocked form on the new domain does not prove that an original payment failed. See the Hartii sites guide.
HPAY tools (Beta)
Games/Biome 1.21.0 adds tools for shops, groups and websites (the Inbox followed in 1.24.0). They are Beta: tested by the project's own test suites. Start with small amounts.
All of them are non-custodial. The payer's own wallet signs; native QUAI may use QuaiRelay, while WQI transfers directly. The money goes from the payer straight to the address in the request. Hartii holds no keys, funds or balances, takes no fee, runs no swap or ramp, and the tools add no smart contract. The payer pays the normal network fee.
| Tool | Where | What it does |
|---|---|---|
| Point of sale | /hpay/pos | QUAI dollar-priced sales or exact WQI requests, with no WQI dollar conversion. Details |
| Receipt | /hpay/receipt | Rebuilds QUAI or WQI payment evidence from the chain, including eligible PDFs. Details |
| Create a link | /hpay, Create a link | QUAI requests may be dollar-priced; WQI uses exact-unit requests. Details |
| Pay page | /pay/@name, /pay/0x... | Direct QUAI or reviewed WQI payments. Details |
| Split a bill | /hpay/split | QUAI dollar requests or exact WQI shares, with disclosed matching adjustments and a board of who has paid. Details |
| Statement | /hpay/statement | Incoming-only QUAI and WQI; it is not the two-sided Dashboard. Details |
| Inbox | /hpay/inbox | QUAI and WQI payments an address sent and received. Details |
| Dashboard | /hpay/dashboard | Planned selected-range QUAI or WQI sent/received totals, with CSV and two-sided PDF. Details |
| Pay with HPAY button | /hpay/button, hpay.js | A button for any website. Button |
| Check a payment | hpayVerify.mjs | verifyPayment for a shop's server. verifyPayment |
The link formats, dollar quote and payment matcher are in HPAY Request v1 and v2. For walkthroughs, see direct WQI payments, the Dashboard, HPAY: take payments in a shop and HPAY: read your inbox. The inbox is a list of payments, not of HPAY receipts: the chain cannot tell an HPAY payment from any other transfer.
Old PayLink URLs
/paylink and /paylink.html redirect permanently (301) to /hpay, preserving the query string.
Previously shared /pay.html?... payment links keep working. On
Hartii Gallery the payment-link feature is still called PayLink and
shares HPAY's wallet sender code (see Relay).