Payment Widget

Zero Pay

Add micropayment paywalls to any website with two lines of code.

Users click once to unlock content. AI agents pay automatically via x402. No accounts, no forms, no card numbers. Just value exchange at the speed of the web.

<!-- Add to any page -->
<script src="https://pay.zzero.net/widget.js"></script>
<div data-z-pay="5" data-z-to="zr_your_address"></div>
Live Demo

Click the pay button to unlock the article. This is exactly what your users will see.

Tech Analysis

How Block-Lattice Architecture Eliminates Bottlenecks

March 2026 • 8 min read • by Zero Research

Traditional blockchains force every transaction through a single chain, creating inherent throughput limitations. Block-lattice architecture takes a fundamentally different approach: each account maintains its own blockchain, enabling parallel transaction processing without global consensus bottlenecks.

The key insight is that most transactions are independent. When Alice sends to Bob, that transaction has no relationship to Carol sending to Dave. By giving each account its own chain, these transactions can be processed simultaneously across all available validators.

Zero takes this further with leaderless DAG-based asynchronous Byzantine Fault Tolerant consensus. Unlike leader-based systems where a single validator proposes blocks, every validator in Zero can process transactions concurrently. This eliminates the single point of failure and the throughput ceiling inherent in leader-based protocols.

The result is a network that scales with the number of validators rather than being bottlenecked by the slowest one. Each transaction is just 100 bytes — containing only the cryptographic essentials: sender, recipient, amount, and an Ed25519 signature. No smart contract bytecode, no state roots, no uncle blocks.

Combined with BLAKE3 hashing (which runs at 8 GB/s on modern hardware) and Ed25519 batch signature verification, Zero achieves sub-500ms finality while maintaining the security guarantees of traditional Byzantine consensus.

Unlock this article
5 Z
$0.05 USD
Secured by Zero Network • No account required
StatusConfirmed
Amount5.00 Z ($0.05)
Fee0.01 Z ($0.0001)
TX Hashzr_...
Finality
How It Works

Three steps. No signups, no redirects, no waiting.

1

Publisher Adds Widget

Two lines of HTML. Set the price and your Z address. The widget renders automatically — blurred content, pay button, and receipt.

2

User Clicks Pay

One click sends the Z payment. No account creation, no card entry, no email. The transaction confirms in under 500ms.

3

Content Unlocks

Payment is verified on-chain. The paywall drops, content is revealed, and a receipt is shown. Session tokens cache access for return visits.

Humans Click, Agents Auto-Pay

The same paywall works for browser users and AI agents. Different paths, same settlement.

Human Flow

Browser • Widget UI • One click
User visits paywalled page
Widget shows blurred preview + price
User clicks "Pay & Unlock"
Payment confirms in <500ms
Content revealed + receipt shown
Session token caches access for 24h

Agent Flow

x402 Protocol • Automatic • Zero UI
Agent sends HTTP request to API
Server returns HTTP 402 + payment details
Agent SDK auto-signs Z transfer
Agent retries request with payment proof
Server verifies + returns resource
Spending limits enforced per policy
Add to Your Stack

Copy-paste integration for any framework. Static HTML, Express, FastAPI, or MCP.

<!-- 1. Add the widget script -->
<script src="https://pay.zzero.net/widget.js"></script>

<!-- 2. Wrap paywalled content -->
<div data-z-pay="5"
     data-z-to="zr_a1b2c3d4e5f6..."
     data-z-label="Unlock this article">

  <!-- Your premium content here -->
  <p>This content is only visible after payment.</p>

</div>

<!-- Optional: customize appearance -->
<div data-z-pay="10"
     data-z-to="zr_a1b2c3d4e5f6..."
     data-z-button="Read Full Report"
     data-z-session="24h"
     data-z-preview="3">
  <!-- Shows first 3 paragraphs, blurs the rest -->
</div>
const express = require('express');
const { zeroPay } = require('@zero-network/express');

const app = express();

// Protect any route with a Z paywall
app.get('/premium-article', zeroPay({
  amount: 5,           // 5 Z ($0.05)
  to: 'zr_your_address',
  session: '24h',     // Cache access for 24 hours
}), (req, res) => {
  // Only runs after payment is confirmed
  res.json({
    title: 'Premium Article',
    content: 'The full article content...',
    receipt: req.zeroReceipt
  });
});

// x402: agents auto-pay, no widget needed
app.get('/api/data', zeroPay({
  amount: 1,
  to: 'zr_your_address',
  x402: true,         // Enable HTTP 402 for agents
}), (req, res) => {
  res.json({ data: 'premium API data' });
});

app.listen(3000);
from fastapi import FastAPI
from zero_sdk import ZeroPaywall

app = FastAPI()
paywall = ZeroPaywall(to="zr_your_address")

@app.get("/premium")
@paywall(amount=5, session="24h")
async def premium_content(request):
    return {
        "title": "Premium Analysis",
        "content": "Full content here...",
        "receipt": request.state.zero_receipt
    }

# API paywall with x402 for agents
@app.get("/api/v1/data")
@paywall(amount=1, x402=True)
async def api_data(request):
    return {"data": "premium data"}

# Tiered pricing
@app.get("/api/v1/report")
@paywall(amount=25, x402=True)  # 25 Z ($0.25) — max tx
async def full_report(request):
    return {"report": "comprehensive analysis..."}
from mcp.server import FastMCP
from zero_sdk import require_payment, verify_payment

server = FastMCP("My Paid Tools")

@server.tool()
async def web_search(query: str, payment_proof: str = None):
    """Search the web. Costs 0.10 Z ($0.001) per query."""

    # Check payment
    if not payment_proof:
        return require_payment(
            amount=0.10,
            to="zr_your_address",
            description="Web search query"
        )

    # Verify and execute
    if not verify_payment(payment_proof, amount=0.10):
        return {"error": "Invalid payment"}

    results = await do_search(query)
    return {"results": results}

# Agent auto-pays via spending policy:
# { "max_per_call": "1 Z", "max_per_session": "25 Z" }
Widget Options

Configure pricing, sessions, appearance, and callbacks via data attributes.

Price & Address

Set the amount in Z (1 Z = $0.01) and your receiving address.

data-z-pay="5" data-z-to="zr_..."

Session Caching

Let users return without re-paying. Sessions are stored locally.

data-z-session="24h"

Preview Lines

Show the first N paragraphs before the paywall. Default is 1.

data-z-preview="3"

Button Text

Customize the pay button label for your content type.

data-z-button="Read Full Report"

Callback URL

Webhook your server when a payment is confirmed.

data-z-callback="/api/verify"

Theme

Match the widget to your site. Light, dark, or minimal.

data-z-theme="dark"
Why Not Stripe?

Traditional payment processors weren't built for $0.05 transactions.

Feature Zero Pay Stripe Lightning Solana Pay
Min viable payment $0.0002 (0.02 Z) $0.50 (fees eat it) $0.001 $0.01
Fee on $0.05 tx $0.0001 (0.2%) $0.32 (640%) ~$0.001 (2%) $0.002 (4%)
Settlement time <500ms 2-7 days ~1 second ~400ms
User account required No Yes (card + email) Wallet required Wallet required
AI agent compatible Native (x402) No Partial Partial
Price stability 1 Z = $0.01 (fixed) USD BTC (volatile) SOL (volatile)
Integration effort 2 lines of HTML Backend + frontend Lightning node SDK + wallet adapter
Chargebacks Impossible Yes (costly) No No
Revenue Calculator

See what micropayments could earn you.

Daily paying users 50
Daily revenue 250 Z ($2.50)
Monthly revenue 7,500 Z ($75.00)
Annual revenue 91,250 Z ($912.50)
Total fees paid $0.50/mo (0.01 Z per tx)
vs. Stripe equivalent Not viable ($0.30+$0.02 min)
Frequently Asked Questions

Everything you need to know about accepting Zero payments.

How do users get Z tokens?+
Users bridge USDC or USDT to Z at a 1:1 rate ($0.01 per Z) through the Zero bridge. The process takes about 30 seconds. AI agents fund their wallets the same way, typically with automated top-ups when balance is low.
What if a user doesn't have Z tokens?+
The widget detects if the user has no Z balance and shows a "Get Z" link to the bridge. Future versions will support inline USDC-to-Z conversion, so users can pay with USDC directly and the widget handles the bridge automatically.
What's the maximum transaction amount?+
25 Z ($0.25) per transaction. Zero is designed for microtransactions. For larger amounts, use multiple transactions or traditional payment rails. The fee is always flat: 0.01 Z ($0.0001) per transaction regardless of amount.
Can users get refunds?+
Zero transactions are final — there are no chargebacks. This is a feature, not a bug. For publishers, it eliminates chargeback fraud entirely. If you want to offer refunds, you can send Z back to the user's address programmatically from your server.
How do I withdraw earnings to USD?+
Bridge your Z back to USDC/USDT via the Zero bridge (same 1:1 rate, minus a 0.5 Z bridge-out fee), then convert to USD through any exchange or on-ramp that supports USDC. The bridge process takes about 30 seconds.
Is the widget open source?+
Yes. The widget, SDKs, and server middleware are all open source under the MIT license. You can self-host the widget script, modify the UI, or build your own payment flow using the SDK directly.
How does session caching work?+
After a successful payment, the widget stores a signed session token in the user's browser (localStorage). On return visits within the session window (configurable via data-z-session), the content is automatically unlocked without re-payment. The token is cryptographically signed so it can't be forged or transferred.
What about ad blockers?+
The widget is not an ad — it's a payment mechanism. It's not on any blocklists. If you self-host the widget script from your own domain, it's indistinguishable from your own JavaScript. For server-side paywalls (Express/FastAPI), the content is never sent to the browser until payment is verified, so there's nothing to block.
Can I use this for API endpoints?+
Yes. The Express and FastAPI middleware returns HTTP 402 for unpaid requests. AI agents using the Zero SDK or any x402-compatible client will automatically detect the 402, pay, and retry — no human interaction needed. This is the primary use case for agent-to-service payments.
What happens if the Zero network goes down?+
The widget has a configurable fallback. You can set data-z-fallback="open" to show content for free during outages, or data-z-fallback="closed" to keep it locked. Session tokens still work offline since they're verified locally.