HPAY · Button Beta

Your website.
Clear checkout.

Add a Pay with HPAY button to any website. One script, no account, no fee. The money goes from your customer's wallet straight to yours.

Script: hpay.js · protocol 1

Quai Mainnet · Cyprus-1 · chain 9

Hartii holds nothing and takes no fee

Your request

Your shop's code uses the 0x address. A name can change hands.

A label for your own records. It is not written on the chain, so it cannot prove which order was paid. The tag in the amount does that.

Build one link for every order on your server, and write down when you made it. Never trust an amount that comes back from the browser.

Try it

No button yetFill in the form to get your button.

This is the real button. It opens the real pay page in a pop-up. Use a small amount. The order behind it is good for 15 minutes, and the page makes a fresh one before it runs out.

What this page hears

    The pop-up says ready. hpay.js answers hello, to the pay page's own address only. When the wallet has sent the payment, the pop-up posts the transaction id back to this page, and to nobody else. That message is a hint, not proof. It only arrives when the payer pays in the same browser, such as desktop Pelagus.

    Check the payment

    Once a payment is sent, the check runs here. In your shop the same check runs on your server, against the order you made there.

    Copy and paste

    1 · Add the button (HTML)
    Fill in the form to get your code.
    2 · Or open it from your code (JavaScript)
    Fill in the form to get your code.
    3 · Check the payment on your server (Node 18+)
    Fill in the form to get your code.
    4 · Price in dollars (optional)
    Fill in the form to get your code.

    What HPAY does and does not do

    • The message is a hint. The pop-up tells your page a transaction id. Only the check on your server proves a payment.
    • What the check proves. A payment of this order's exact tagged amount reached your address, after you made the order and before it expired, with enough confirmations. It does not prove who paid. The check refuses a request with no tag, no expiry or no creation time, because then an older payment of the same amount, or another customer's, could pass.
    • One payment, one order. Every order has its own tag. Keep every transaction id you accept, so the same payment cannot pay two orders.
    • A closed window proves nothing. If the payer closes the pop-up, a payment may still have been sent. Check the chain for that order before you treat it as unpaid.
    • Phones. When a payer continues in the Blip app on a phone, your page may hear nothing from the pop-up. Do not rely on the message alone: your server can look for the order's payment by its address, its tagged amount and its time window, the way the point of sale does.
    • No custody, no fee. The payer's wallet signs and the money goes straight to your address. Hartii never holds it and takes nothing. The payer pays the network fee.

    Beta. Start with small amounts. Nothing here is financial advice.