A normal SaaS or ecommerce Terms of Service assumes a company that can undo things. It can refund a charge, reverse a shipment, or roll back a database change if something goes wrong. A Web3 or NFT platform cannot make most of those promises, because the transaction itself does not live on the company’s own servers. It lives on a public blockchain that nobody, including the platform operator, can edit after the fact. That single fact changes what a Terms of Service has to disclose: it needs to explain that on-chain transactions are final, that connecting a wallet is not the same as handing the platform custody of anything, and that the tokens or NFTs involved may carry regulatory risk a generic ecommerce clause never has to address.

On-Chain Transactions Are Final, and the Refund Clause Has to Say So

A standard refund policy assumes the merchant can reverse a charge through its payment processor. Once a transaction is confirmed on a blockchain, the platform has no equivalent lever to pull. A minted NFT, a token swap, or a transfer to the wrong wallet address cannot be undone by the platform issuing a credit, because the platform was never the custodian of the funds in the first place; it only facilitated a transaction between the user’s wallet and a smart contract. Writing “all sales are final” without explaining why invites disputes and chargeback attempts from users who assume the usual ecommerce remedies apply. Explaining the mechanism, that the transaction settles on a public ledger the platform cannot alter, gives users a reason to double-check wallet addresses and network fees before they confirm, and gives the platform language it can actually point to when a support request asks for a reversal that is not technically possible.

Vague no-refund clause
  • All sales are final
  • We are not responsible for lost funds
Specific finality clause
  • Confirmed blockchain transactions cannot be reversed, refunded, or canceled by us
  • Verify the recipient address and network before confirming any transaction
  • Gas fees go to the network, not to us, and are non-refundable

The clause should also separate two situations that users often conflate: a transaction that failed or reverted on-chain (where gas was spent but the intended action did not complete, a normal and disclosed risk of the network itself) from a transaction that succeeded exactly as submitted but produced a result the user regrets, like minting at a price they later consider too high. The first is worth explaining so users understand why a failed transaction still cost gas. The second is not a platform error at all, and the Terms of Service should say plainly that a completed transaction is not eligible for reversal just because the user changed their mind afterward.

Most Web3 platforms never hold a user’s private keys or funds directly. Instead, the user connects a self-custodial wallet (MetaMask, a hardware wallet, or similar) and approves individual transactions the platform’s interface proposes. That distinction, between a platform that custodies assets and one that only proposes transactions for a user’s own wallet to sign, needs to be stated explicitly, not left implied by the “Connect Wallet” button. A user who has only used custodial platforms like a bank or a centralized exchange may not intuitively understand that the platform cannot recover their funds if they lose their seed phrase, because the platform never had access to those funds to begin with.

Custodial Platform vs Non-Custodial Wallet-Connect Platform

Custodial exchangeNon-custodial wallet
Who holds the private keysThe platformThe user, in their own wallet
Can the platform recover a lost password or seed phrase
Can the platform reverse a completed transactionSometimes, internallyNo, it is final on-chain
Platform sees wallet balance before consent

The wallet-connect consent language should cover three things: what permissions the connection actually grants (typically read access to a public wallet address and the ability to propose transactions for the user to approve, not blanket access to funds), that the user remains solely responsible for securing their own private keys and seed phrase, and that the platform is not liable for losses caused by the user approving a malicious transaction, using a compromised device, or connecting to a phishing site that impersonates the platform’s interface. None of that is implied by a wallet-connect prompt on its own; a user clicking “Connect” through their browser extension is not shown any of it unless the Terms of Service says it directly.

Smart Contract Risk and Token Status Need Their Own Disclosures

If the platform deploys or relies on smart contracts, the Terms of Service should disclose that smart contract code, even when audited, can contain bugs or be exploited, and that the platform does not guarantee the contracts are error-free or immune to attack. If an audit has actually been performed, naming the audit firm adds credibility; claiming an audit that was never done, or implying an audit makes the contract risk-free, creates a liability the platform does not want. A “no guarantee of error-free code” disclosure is standard practice across the industry precisely because smart contract exploits, once a transaction executes, are as irreversible as any other on-chain action.

If the platform has a native token, the Terms of Service typically needs a plain statement that the token is not being offered as a security or investment product, and that nothing in the platform’s marketing or documentation should be read as financial advice or a promise of future value. Whether a given token actually qualifies as a security is a legal determination that depends on the specific facts (in the US, courts have generally applied the Howey test, asking whether there is an investment of money in a common enterprise with an expectation of profit from others’ efforts), and a Terms of Service disclosure does not settle that question on its own. What the clause can do is make the platform’s position clear to users and reduce the chance that ordinary marketing language gets read as an investment promise. Platforms operating in multiple jurisdictions also commonly list prohibited or restricted jurisdictions (places where local law restricts token sales, DeFi access, or NFT trading) and, where relevant, a sanctions clause confirming the platform will not knowingly serve wallets or users on government sanctions lists.

Matching Disclosures to What the Platform Actually Does

Not every Web3 platform needs every disclosure at full strength. An NFT marketplace, a DeFi lending protocol, a DAO governance tool, and a wallet application carry different combinations of the risks above, so the right approach is to work through what the platform actually does before deciding which clauses need the most weight.

An NFT marketplace that never issues its own token can skip the token-status language entirely but still needs the wallet-connect and on-chain finality clauses in full, since every mint and every sale is exactly the kind of irreversible transaction those clauses exist to cover. A DeFi protocol with a governance token needs all four categories at once: smart contract risk, because user funds are locked into contract logic; token status, because a governance token invites securities scrutiny; wallet consent, because users are approving transactions against protocol contracts; and jurisdiction restrictions, because DeFi access is legally contested in more places than NFT trading is. A closed, invite-only DAO tool serving a single known jurisdiction can reasonably keep the jurisdiction clause short while still giving full weight to the smart contract and token disclosures.

Putting It Together

A Web3 or NFT Terms of Service earns its keep by explaining the mechanics a generic template does not anticipate: why a confirmed transaction cannot be refunded, what a wallet connection does and does not grant the platform, and where the project’s own token or contract risk actually sits. Getting the wording right on all four areas, and skipping the ones that do not apply to a specific project type, is what the Web3 Terms of Service Generator is built for, walking through project type, chains, smart contracts, and token status so the disclosures match what the platform actually does instead of a one-size-fits-all crypto template.

If the platform also charges for premium features or subscription access on top of its on-chain functionality, Refund Policy for Digital Products and Subscriptions covers the off-chain half of that billing relationship, which the on-chain finality language above does not touch. And if user-submitted content, like uploaded NFT artwork or project descriptions, is part of the platform, How to Write an Acceptable Use Policy for a SaaS Platform covers the conduct and content rules a Web3 platform still needs even though its core transactions happen on-chain.