Works with your agent stack
First-class integrations for ElizaOS and Coinbase AgentKit. Tool adapters for OpenAI SDK and Anthropic SDK. Any other framework can use the REST API or MCP server directly.
Coinbase AgentKit
@agentdomain/agentkit-pluginimport { AgentDomainActionProvider }
from '@agentdomain/agentkit-plugin';
const agentkit = await AgentKit.from({
walletProvider: cdpWalletProvider,
actionProviders: [
new AgentDomainActionProvider(),
],
});
// Agent calls:
// → register_agent_identity
// → quote_agent_registration
// → search_agentsNative action provider. Agents get register, quote, and search as first-class actions.
ElizaOS
@agentdomain/eliza-plugin// character.ts
import { agentDomainPlugin } from '@agentdomain/eliza-plugin';
const character: Character = {
name: 'HelpfulAgent',
plugins: [agentDomainPlugin],
};
// Agent says:
// "Register me as helpful-bot.ai with email"
// → REGISTER_IDENTITY action triggers
// → domain + basename + email provisionedDrop-in plugin. Your Eliza agent gets REGISTER_IDENTITY, SEARCH_AGENTS actions automatically.
OpenAI SDK
@agentdomain/sdkimport {
AgentDomain,
createOpenAITools,
runAgentDomainTool,
formatAgentDomainToolResult,
} from '@agentdomain/sdk';
const ad = new AgentDomain({
walletClient,
publicClient,
renewalVaultAddress: '0xRenewalVault...',
});
const tools = createOpenAITools();
const response = await openai.chat.completions
.create({
model: 'gpt-4',
messages: [...],
tools,
});
const toolCall = response.choices[0]
?.message?.tool_calls?.[0];
const result = await runAgentDomainTool(
ad,
toolCall.function.name,
JSON.parse(toolCall.function.arguments),
);
// → domain registered, NFT mintedTool definitions for Chat Completions API. Models call registration, search, renewal status, and enable_auto_renew as native tools.
Anthropic SDK
@agentdomain/sdkimport {
AgentDomain,
createAnthropicTools,
runAgentDomainTool,
formatAgentDomainToolResult,
} from '@agentdomain/sdk';
const ad = new AgentDomain({
walletClient,
publicClient,
renewalVaultAddress: '0xRenewalVault...',
});
const tools = createAnthropicTools();
const msg = await anthropic.messages.create({
model: 'claude-sonnet-4-20250514',
max_tokens: 1024,
messages: [...],
tools,
});
const toolUse = msg.content.find(
(b) => b.type === 'tool_use',
);
const result = await runAgentDomainTool(
ad, toolUse.name, toolUse.input,
);
// → domain registered, NFT mintedTool definitions for Messages API. Models call the same agent-domain tools with Anthropic-native input_schema format.
Getting Started
From UI, SDK, or any agent wallet — complete flow in one call.
TypeScript SDK
const quote = await agentDomain.quote({
preferredName: 'atlas',
tld: 'com',
years: 3,
registerBasename: false,
registerEns: false,
emailEnabled: true,
});
const identity = await agentDomain.register({
preferredName: 'atlas',
tld: 'com',
years: 3,
autoRenew: true,
registerBasename: false,
registerEns: false,
emailEnabled: true,
});The @agentdomain/sdk handles the 402 challenge, signs EIP-3009 from your wallet, and completes registration in one async call. Set optional flags to false when the agent should skip Basename, ENS, or email.
Pricing Rules
The quote endpoint is the source of truth for web checkout, SDK, MCP, and agent plugins.
API Reference
Every endpoint available to manage your agent’s identity. State-modifying endpoints require SIWE authentication (web dashboard) or API Keys (agents).
Registration & Pricing
/api/v1/domains/availability?name=atlas&tld=comChecks domain, Basename, and ENS availability independently.
/api/v1/agents/quote?preferredName=atlas&tld=com&years=3Returns live pricing for the identity bundle, including multi-year discounts.
/api/v1/agents/registerRequires x402 payment challenge. Provisions the complete identity bundle.
Agent Management
/api/v1/agents/:idReturns identity state, expiration dates, and metadata.
/api/v1/agents/:id/sslRebuilds the Cloudflare SaaS hostname and syncs Spaceship DNS validation records. Owner/API key only.
DNS Management
/api/v1/agents/:id/dnsReturns all DNS records for the agent's domain.
/api/v1/agents/:id/dnsAdd a new DNS record. Syncs instantly to Cloudflare.
/api/v1/agents/:id/dns/:recordIdModify an existing DNS record.
/api/v1/agents/:id/dns/:recordIdRemove a DNS record from the database and Cloudflare.
Email Infrastructure
/api/v1/agents/:id/emailRetrieve all inbound and outbound messages for the agent.
/api/v1/agents/:id/email/sendSend an outbound email from agent@yourdomain.com.
/api/v1/agents/:id/email/:messageIdMark an email message as read or unread.
/api/v1/agents/:id/email/blocklistRetrieve (GET) or add (POST) domains/emails to the agent's blocklist.
Renewal Vault
/api/v1/agents/:id/renewal/statusReturns exact next renewal amount, vault balance, auto-renew status, and dates.
/api/v1/agents/:id/renewal/fundDeposit USDC into that AgentID vault. Anyone can fund; only the owner can withdraw or enable auto-renew.
/api/v1/agents/:id/renewal/withdrawWithdraw USDC from the vault. Only the ownerAddress can withdraw.
Ownership & Vault
How ownership works, how to fund the vault, and how autonomous renewal keeps your identity alive forever.
Payer vs Owner
Specify a different ownerAddress from the paying wallet. The Payer pays USDC, but the Owner receives the NFT and full control.
Vault & Auto-Renew
RenewalVault holds USDC per AgentID. Keeper Bot checks every 5 minutes — when expiry nears and vault has funds, it renews the domain, SSL, and selected provisioned services such as email, Basename, and ENS.
enable_auto_renewAgent Autonomous Flow (SDK)
Full lifecycle — register, enable auto-renew with the owner wallet, fund vault, check status, withdraw.
import { AgentDomain } from '@agentdomain/sdk';
const ad = new AgentDomain({
walletClient, // funding wallet; owner wallet required for auto-renew/withdraw
publicClient,
renewalVaultAddress: '0xRenewalVault...',
});
// Register
const identity = await ad.register({
preferredName: 'atlas', tld: 'com',
years: 1,
registerBasename: true, registerEns: true,
emailEnabled: true,
});
// → atlas.com · atlas.base.eth · atlas.eth · agent@atlas.com
// Enable auto-renew on-chain (owner wallet only)
await ad.setAutoRenew(identity.agentId, true, {
waitForReceipt: true,
});
// Check exact renewal amount and dates
const status = await ad.getRenewalStatus(identity.agentId);
console.log(status.nextRenewalAmountUsdc, status.expiresAt);
// Fund only the missing amount
await ad.fundRenewalVault(identity.agentId, status.shortfallUsdc);
// Withdraw unused (owner only)
await ad.withdrawFromVault(identity.agentId, '24');Enable Auto-Renew from Web or MCP
Web dashboard
Open the agent detail page, connect the owner wallet, then use the Enable Auto-Renew switch in RenewalVault. Deposits can come from any wallet, but this switch is owner-only.
MCP agent
{
"AGENT_PRIVATE_KEY": "0xOwnerWalletPrivateKey",
"RENEWAL_VAULT_ADDRESS": "0xRenewalVault...",
"AGENTDOMAIN_NETWORK": "base"
}
// Agent tool call:
enable_auto_renew({ agentId })