x402 · LIVE ON BASE + PULSECHAIN

Notarization your agent can buy.

One HTTP call. Your agent sends a SHA-256 hash, pays $1.00 in USDC, and receives a permanent on-chain record plus a PDF Certificate of Existence. No API keys. No account. No human in the loop.

The document never leaves your system Verifiable by anyone, forever Gasless for the buyer

Quote. Pay. Sealed.

Immuta speaks x402 — the open protocol that lets software pay for HTTP resources with stablecoins. Any x402 client settles the whole flow in one call.

1
Hash locally
Compute the SHA-256 of your document on your side. Only the 64-character fingerprint is ever transmitted — the content stays with you.
2
POST the hash
The API answers HTTP 402 with payment terms: $1.00 USDC on Base. Your x402 client signs the payment automatically — no gas needed.
3
Receive proof
The hash is written to the Immuta contract on PulseChain. You get the transaction, a text receipt, and a link to a PDF certificate.

See the price tag

The paywall is the documentation. One curl shows you everything an agent needs.

Terminal — no auth, no signup
# Ask for a seal without paying — the 402 response carries the terms
curl -i https://api.immuta.app/seal \
  -X POST -H "Content-Type: application/json" \
  -d '{"sha256": "<64-hex-hash>", "label": "contract-v2"}'

# → HTTP/2 402 · PAYMENT-REQUIRED header: $1.00 USDC · eip155:8453 (Base)
Python — pays and seals in one call
# pip install "x402[evm]" eth-account
from eth_account import Account
from x402.client import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm.exact import register_exact_evm_client
import hashlib, os

client = x402ClientSync()
register_exact_evm_client(client, Account.from_key(os.environ["WALLET_KEY"]))
session = x402_requests(client)   # auto-pays any 402 it meets

h = hashlib.sha256(open("contract.pdf","rb").read()).hexdigest()
r = session.post("https://api.immuta.app/seal",
                 json={"sha256": h, "label": "contract-v2"})

print(r.json()["tx_hash"])          # PulseChain transaction
print(r.json()["receipt_pdf_url"])  # PDF Certificate of Existence
TypeScript agents: @x402/fetch wraps fetch() the same way. Wallet needs USDC on Base — no ETH, the facilitator pays gas.

What's for sale

Prices are quoted in the 402 response itself and settle in USDC on Base. Listed on the 402 Index and the x402 Bazaar.

POST
/seal
Notarize a document. Body: {"sha256", "label"?, "note"?}. Returns the PulseChain transaction, block, timestamp, submitter, a text receipt, and a PDF certificate link. Duplicate hashes return 409 with the existing record — never double-charged.
$1.00
GET
/receipt/{sha256}.pdf?tx={tx_hash}
Certificate of Existence as a PDF, rendered live from chain state. Regenerate anytime, forever. Transaction hashes are verified on-chain before they appear on the certificate.
Free
GET
/pulsechain/head
Latest PulseChain block number and Unix timestamp, served from live chain state.
$0.001
GET
/pulsechain/block-by-timestamp?ts={unix}&mode=before|after
Resolve any Unix timestamp to the exact PulseChain block at or nearest that moment. Precise to one block — built for tax lots, historical lookups, and event correlation.
$0.002

Verify it yourself

Every seal is independently checkable. Immuta could disappear tomorrow and your proof would still stand.

Three ways to check a seal — none of them require us.
  • 01Open the transaction on any PulseChain explorer: otter.pulsechain.com/tx/<tx_hash>
  • 02Call getRecord(sha256, submitter) on the Immuta contract — 0x0C2a0F6289D1Af62fc2C90301f8a0CadcD017e5c — from any RPC or the explorer's Read Contract tab. The returned timestamp is the proof.
  • 03Re-hash your document locally and confirm the SHA-256 matches the sealed fingerprint. If one byte changed, the hash won't.
.