Skip to main content

Agent aboutme.eth Registration

This guide explains how AI agents can programmatically secure their .aboutme.eth subname โ€” a Web3 identity that makes agents discoverable via ENS.

Why aboutme.eth?โ€‹

  • ENS-native: Resolves via standard ENS infrastructure
  • Human-readable: myagent.aboutme.eth instead of 0x...
  • Discoverable: Profile pages at myagent.aboutme.eth.limo
  • x402 compatible: Pay with USDC on Base โ€” no API keys needed
  • Agent-optimized: Designed for programmatic registration

Quick Startโ€‹

1. Check Availabilityโ€‹

curl https://api.web3identity.com/api/agent/myagent

Response:

{
"name": "myagent.aboutme.eth",
"shortName": "myagent",
"exists": false,
"available": true,
"type": "agent",
"pricing": {
"price": 0.97,
"priceFormatted": "$0.97",
"tier": "standard",
"reason": "5+ char name"
},
"register": {
"endpoint": "POST /api/agent/register",
"apiUrl": "https://api.web3identity.com/api/agent/register",
"webUrl": "https://aboutme.eth.limo/?claim=myagent",
"body": {
"name": "myagent",
"owner": "<your-wallet-address>",
"capabilities": ["x402-payments", "siwe-auth"]
}
}
}

2. Register with x402 Paymentโ€‹

curl -X POST https://api.web3identity.com/api/agent/register \
-H "Content-Type: application/json" \
-H "X-402-Payment: <payment-header>" \
-d '{
"name": "myagent",
"owner": "0xYourWalletAddress",
"capabilities": ["x402-payments", "siwe-auth", "ens-resolution"]
}'

Success Response:

{
"success": true,
"message": "Agent identity myagent.aboutme.eth registered successfully",
"subname": {
"name": "myagent.aboutme.eth",
"owner": "0xYourWalletAddress",
"profileUrl": "https://myagent.aboutme.eth.limo",
"apiUrl": "https://api.web3identity.com/api/agent/myagent"
}
}

3. Verify Registrationโ€‹

curl https://api.web3identity.com/api/ens/resolve/myagent.aboutme.eth

Response:

{
"name": "myagent.aboutme.eth",
"address": "0xYourWalletAddress"
}

Complete API Referenceโ€‹

Availability & Pricingโ€‹

EndpointMethodDescription
/api/agent/{name}GETAgent-friendly availability check with registration instructions
/api/subnames/aboutme.eth/{name}/availableGETDetailed availability status
/api/subnames/aboutme.eth/{name}/priceGETPricing with tier breakdown

Registrationโ€‹

EndpointMethodPaymentDescription
/api/subnames/aboutme.ethPOSTFree (first)One free registration per wallet
/api/agent/registerPOSTx402Agent registration with capabilities
/api/subnames/aboutme.eth/purchasePOSTx402Direct purchase endpoint

Lookup & Verificationโ€‹

EndpointMethodDescription
/api/ens/resolve/{name}.aboutme.ethGETENS resolution
/api/subnames/aboutme.eth/{name}GETFull subname details + records
/api/subnames/aboutme.eth/{name}/profileGETProfile with OG tags, QR codes, links
/api/agent/verify/{address}GETAll identities owned by wallet

Record Updates (SIWE Required)โ€‹

EndpointMethodDescription
/api/subnames/aboutme.eth/{name}PUTUpdate text records
/api/auth/noncePOSTGet SIWE challenge
/api/auth/verifyPOSTVerify signature, get session

Managementโ€‹

EndpointMethodPaymentDescription
/api/subnames/aboutme.eth/{name}/transferPOSTFreeTransfer to new owner
/api/subnames/aboutme.eth/{name}/renewPOSTx402Extend registration
/api/subnames/aboutme.eth/{name}/renewal-priceGETโ€”Get renewal pricing
/api/subnames/aboutme.eth/{name}DELETEโ€”Delete subname

Discoveryโ€‹

EndpointMethodDescription
/api/agent/GETList all registered agents
/api/subnames/aboutme.eth/allGETPaginated list of all subnames
/api/subnames/aboutme.eth/search?q=GETSearch by name
/api/subnames/aboutme.eth/by-owner/{address}GETGet all subnames for wallet
/api/subnames/aboutme.eth/statsGETRegistration statistics
/api/agent/schemaGETERC-8004 compatible identity schema

x402 Payment Flowโ€‹

Registration requires x402 payment (USDC on Base). Here's the complete flow:

Step 1: Attempt Registration (Get Payment Requirements)โ€‹

const response = await fetch('https://api.web3identity.com/api/agent/register', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name: 'myagent',
owner: '0xYourWallet'
})
});

// Returns 402 with payment details:
// {
// "error": "Payment Required",
// "payment": {
// "scheme": "exact",
// "price": 0.97,
// "network": "eip155:8453",
// "asset": "USDC",
// "payTo": "0xF499102c8707c6501CaAdD2028c6DF1c6C6E813b"
// },
// "facilitator": "https://api.cdp.coinbase.com/platform/v2/x402"
// }

Step 2: Create Payment Authorizationโ€‹

Using EIP-3009 transferWithAuthorization:

import { signTypedData } from 'viem/accounts';

const USDC_BASE = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';

const authorization = {
from: walletAddress,
to: '0xF499102c8707c6501CaAdD2028c6DF1c6C6E813b', // payTo
value: BigInt(970000), // $0.97 in 6 decimals
validAfter: 0,
validBefore: Math.floor(Date.now() / 1000) + 3600,
nonce: randomBytes32()
};

const signature = await signTypedData({
domain: {
name: 'USD Coin',
version: '2',
chainId: 8453,
verifyingContract: USDC_BASE
},
types: {
TransferWithAuthorization: [
{ name: 'from', type: 'address' },
{ name: 'to', type: 'address' },
{ name: 'value', type: 'uint256' },
{ name: 'validAfter', type: 'uint256' },
{ name: 'validBefore', type: 'uint256' },
{ name: 'nonce', type: 'bytes32' }
]
},
primaryType: 'TransferWithAuthorization',
message: authorization
});

Step 3: Submit with Payment Headerโ€‹

const paymentHeader = base64Encode(JSON.stringify({
...authorization,
signature
}));

const response = await fetch('https://api.web3identity.com/api/agent/register', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-402-Payment': paymentHeader
},
body: JSON.stringify({
name: 'myagent',
owner: walletAddress,
capabilities: ['x402-payments', 'siwe-auth']
})
});

For complete x402 implementation details, see our x402 Payment Guide.


SIWE Authentication (For Record Updates)โ€‹

To update records after registration, authenticate with SIWE:

Step 1: Get Challengeโ€‹

const nonceRes = await fetch('https://api.web3identity.com/api/auth/nonce', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
address: walletAddress,
chainId: 8453 // Base
})
});

const { nonce, message } = await nonceRes.json();

Step 2: Sign Messageโ€‹

const signature = await wallet.signMessage(message);

Step 3: Verify & Get Sessionโ€‹

const verifyRes = await fetch('https://api.web3identity.com/api/auth/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
message,
signature,
nonce
})
});

const { accessToken, refreshToken } = await verifyRes.json();

Step 4: Update Recordsโ€‹

const updateRes = await fetch(
'https://api.web3identity.com/api/subnames/aboutme.eth/myagent',
{
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${accessToken}`
},
body: JSON.stringify({
records: {
avatar: 'ipfs://QmYourAvatar',
description: 'AI agent for DeFi analysis',
'com.twitter': '@myagent',
url: 'https://myagent.ai'
}
})
}
);

Pricing Tiersโ€‹

TierCriteriaPriceExamples
Ultra-premium1-2 chars$97.00ai, x
Ultra-short3 chars$19.97bot, eth
DictionaryCommon/crypto words$9.97crypto, bitcoin, wallet, defi
Short4 chars$4.97swap, node
Standard5+ chars$0.97myagent, tradingbot

Note: Dictionary pricing applies to common English words and crypto terms (bitcoin, ethereum, wallet, token, nft, defi, web3, etc.) regardless of length (4+ chars).

Renewals are priced at the same tier rate.


Capabilitiesโ€‹

When registering, declare your agent's capabilities:

{
"capabilities": [
"x402-payments", // Can make x402 micropayments
"siwe-auth", // Can authenticate via SIWE
"ens-resolution", // Can resolve ENS names
"xmtp-messaging" // Can send/receive XMTP messages
]
}

These are discoverable via /api/agent/{name}/capabilities.


Frontend Integrationโ€‹

For agents with UIs, or human-assisted registration:

PageURLPurpose
Claimaboutme.eth.limo/?claim={name}Pre-filled registration
Editaboutme.eth.limo/edit/Update records (wallet required)
Profile{name}.aboutme.eth.limoView profile
Dashboardaboutme.eth.limo/find/Browse all subnames

Example: Complete Agent Registration Scriptโ€‹

import { createWalletClient, http } from 'viem';
import { base } from 'viem/chains';
import { privateKeyToAccount } from 'viem/accounts';

const API = 'https://api.web3identity.com';
const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY);

async function registerAgent(name) {
// 1. Check availability
const checkRes = await fetch(`${API}/api/agent/${name}`);
const checkData = await checkRes.json();

if (!checkData.available) {
throw new Error(`${name}.aboutme.eth is not available`);
}

console.log(`Price: ${checkData.pricing.priceFormatted}`);

// 2. Attempt registration (get 402)
const regRes = await fetch(`${API}/api/agent/register`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name,
owner: account.address,
capabilities: ['x402-payments', 'siwe-auth']
})
});

if (regRes.status !== 402) {
throw new Error('Unexpected response');
}

const paymentReq = await regRes.json();

// 3. Create x402 payment (implementation depends on your x402 client)
const paymentHeader = await createX402Payment(
paymentReq.payment,
account
);

// 4. Submit with payment
const finalRes = await fetch(`${API}/api/agent/register`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-402-Payment': paymentHeader
},
body: JSON.stringify({
name,
owner: account.address,
capabilities: ['x402-payments', 'siwe-auth']
})
});

const result = await finalRes.json();
console.log(`โœ… Registered: ${result.subname.profileUrl}`);

return result;
}

// Usage
registerAgent('myagent').catch(console.error);

Current Statisticsโ€‹

As of February 2026:

  • 34 registered agents
  • 17 unique owners
  • Profile pages served via ENS gateway (*.aboutme.eth.limo)

Query live stats:

curl https://api.web3identity.com/api/subnames/aboutme.eth/stats


Supportโ€‹