ZettaPay lets a merchant accept Bitcoin and USDC / USDT on Base straight into their own wallet. No custody, no transaction fee, no wallet connection. It watches the chain and tells your backend, with a signed webhook, the moment a payment has confirmed.
An address on a checkout page is not a payment system. Someone has to give every order its own address or amount, watch the chain, wait for enough confirmations and tell the backend that this order is paid. The usual shortcut is a gateway that receives the money on your behalf and pays you out later — which means handing over custody and a share of every sale.
You give ZettaPay public material only: a BIP-84 xpub for Bitcoin, and an xpub or a fixed receive
address for Base. It derives where each invoice should be paid, watches the chain, and delivers an
HMAC-signed webhook on confirmation. The funds go
straight to your wallet. ZettaPay never holds keys or funds, and never signs anything.
The constraints that define ZettaPay — not preferences, but hard rules.
Merchants supply an xpub or a receive address — nothing that can move money. No wallet connection, no private key, no seed phrase, no signature prompt.
Funds move directly from payer to merchant on-chain, self-hosted or Cloud. ZettaPay holds no float, no escrow and no settlement pool, so there is nothing for us to freeze, lose or claw back.
Confirmation is read from the chain and delivered as an HMAC-signed webhook. Every payment is a transaction you can look up on-chain yourself; you never have to take our word for it.
Self-hosting needs no account with us. Cloud asks for an e-mail, a shop name, your public key or address and a webhook URL. No identity documents, ever.
The listener is MIT-licensed on GitHub: read it, run it, fork it. Cloud runs the same core, so you can leave for self-hosting whenever you want.
Install the open-source listener, or start free on Cloud. Either way the funds land in your wallet.