x402 / identity hub
Ethereum mainnet · live
Permanent onchain identity

Identity for x402 agents, issued on ENS.

Permanent ENS subnames under 402bot.eth, 402api.eth and 402mcp.eth — issued once, owned forever, resolvable on every chain.

Example agent names
treasury.402bot.eth inference.402api.eth github.402mcp.eth
0.005 ETH per name No renewals · no expiry NameWrapper-locked Built for the x402 ecosystem
02 — The protocol

The x402 protocol

x402 turns HTTP 402 “Payment Required” into a real settlement rail — agents pay for APIs, data and tools per request, in stablecoins, with no accounts. We add the layer it was missing: identity.

Coinbase
01 — Created
Coinbase
Authored the x402 protocol, putting the dormant HTTP 402 status code to work as an open payment standard for machines.
The Linux Foundation
02 — Stewarded
Linux Foundation
Now governs x402 as a neutral, vendor-independent open standard — the same home as Linux, Kubernetes and Node.js.
ENS
03 — Named
ENS · x402 Identity Hub
x402 Identity Hub adds the identity layer — a permanent, verifiable ENS name for every agent in the stack.
03 — Why a name

The missing layer

x402 lets agents pay. But a raw address can’t be discovered, verified, or extended — an ENS name turns identity into addressable, programmable infrastructure.

01

Raw addresses

An agent is a 0x71C7…976F string — not human-readable, not memorable, impossible to brand or trust on sight.

02

Cross-chain discovery

One name resolves and is searchable across most block explorers and wallets, on every chain — no per-provider directory to query.

03

Programmable records

The name carries onchain records that travel with it — API endpoints, a contenthash for a decentralized site, keys and metadata — composable with all of ENS.

04 — The primitive

ENS subnames

alice.402bot.eth
label namespace root

One mint issues a permanent ENS subname, stored in the NameWrapper contract — transferable, resolvable, and composable with all of ENS.

0.005 ETH mint fee No renewals No expiry NameWrapper-locked Batch up to 10
05 — Namespaces

Three namespaces, one tree

Mapped to the three places autonomous software ships today: agents, paid services, and MCP servers.

.402bot.eth
Agents
Autonomous agents that hold wallets, sign, negotiate and transact on a principal’s behalf.
treasury.402bot.eth
scheduler.402bot.eth
trader-7.402bot.eth
.402api.eth
Services
Paid HTTP services that return data, run inference, or settle the 402 response in real time.
prices.402api.eth
inference.402api.eth
geocode.402api.eth
.402mcp.eth
MCP servers
Model Context Protocol tool servers — the surface assistants attach to, resolvable by name not URL.
github.402mcp.eth
slack.402mcp.eth
analytics.402mcp.eth
06 — Cross-chain

One name, every chain.

Issued once on Ethereum L1. CCIP-Read (EIP-3668) resolves the same name across every major L2 and non-EVM chain — no re-issuance, no per-chain registry, no bridging.

Resolves via CCIP-Read · EIP-3668
Issued on Ethereum L1
alice.402bot.eth
Resolves natively on
Base
Arbitrum
Optimism
Polygon
Linea
Solana
Bitcoin
+ many more
07 — Architecture

Onchain architecture

One transaction. One source of truth. No off-chain registrar.

Agent
alice.402bot.eth
Holds the wallet, signs the mint.
register()
x402 Registrar
X402SubnameRegistrar
0xeb9e…9633
Fee · label validation · burns fuses.
setSubnodeRecord()
ENS NameWrapper
NameWrapper
0xD441…6401
Issues the permanent wrapped subname.
resolve()
Resolver
PublicResolver
addr · text · contenthash. CCIP-Read enabled.
08 — Permanence

Permanence guarantees

Immutability is enforced at the protocol level — then the only remaining failure mode, parent expiry, is removed.

NameWrapper fuses · burned at mint
CANNOT_UNWRAP
The wrap can never be removed or reset.
PARENT_CANNOT_CONTROL
The parent owner — including us — cannot reclaim it.
CANNOT_BURN_FUSES
No further permissions can be set. The set is final.
CANNOT_SET_RESOLVER
Resolver control stays with the holder, not the parent.
Parent expiry — 402bot.eth
3226 CE
+1,200 years over a 10-year commitment. From Jun 1 2026, each parent’s expiry extends 10 years every month — adding 120 years annually. A name minted today resolves with no required action from the holder.
09 — Monetize

The platform widget

Drop the x402id widget into any site, set your own platform fee, and earn on every registration — paid atomically alongside the protocol fee, in one transaction.

Protocol fee
Set on-chain by the registrar
0.005 ETH
+
Your platform fee
You choose · capped at 0.05 ETH
you set
=
Settlement
Split by the forwarder · no backend, no relayer
1 tx
Drop-in · any site
<!-- mount point -->
<div data-x402id
     treasury="0xYourTreasury"
     platform-fee-wei="1000000000000000"
     parents="402bot.eth,402api.eth"
     theme="light"></div>

<!-- loader -->
<script src="https://x402id.eth.link/embed.js" async></script>
10 — Integrate

Integration

One contract, two calls, no SDK. Anything that speaks the ABI works — cast, wagmi, viem, ethers.

X402SubnameRegistrar · Ethereum mainnet 0xeb9e9ea385fe28b51a3f9a7d93fb893e0a1f9633
Check availability · cast
# is 'alice' free under 402bot.eth?
cast call \
  0xeb9e…9633 \
  "isAvailable(bytes32,string)" \
  $(cast namehash 402bot.eth) \
  "alice"
Register · wagmi
writeContract({
  address: '0xeb9e…9633',
  abi: registrarAbi,
  functionName: 'register',
  args: [namehash('402bot.eth'),
         'alice', owner],
  value: parseEther('0.005'),
})
register() batchRegister() isAvailable()
x402 / identity hub
Ethereum mainnet · live

Mint a name.

Permanent onchain identity for AI agents — under 402bot.eth, 402api.eth and 402mcp.eth.

treasury.402bot.eth inference.402api.eth github.402mcp.eth