Python client for AgentNS - wallet-based ICANN domain registrar for AI agents
Project description
AgentNS Python Client
Python client library for AgentNS - a wallet-based ICANN domain registrar for AI agents.
Features
- Multi-Chain Support: EVM (Base) and Solana wallets
- Wallet Authentication: SIWE (Ethereum) and SIWS (Solana) authentication
- Domain Registration: Full x402 payment protocol support with USDC
- DNS Management: Create, update, delete DNS records
- Nameserver Management: Configure custom nameservers
- Type Safety: Full Pydantic models for all API types
Installation
pip install agentns-client
For Solana support:
pip install agentns-client[solana]
Or install from source:
git clone https://github.com/vibrant/agentns_client.git
cd agentns_client
pip install -e ".[solana]"
Quick Start
EVM (Base) Wallet
from agentns_client import AgentNSClient, load_or_create_wallet
# Create or load EVM wallet
account = load_or_create_wallet()
print(f"Wallet: {account.address}")
# Create client
client = AgentNSClient(account=account)
# Check domain availability (no auth required)
result = client.check_domain("myagent.xyz")
print(f"Available: {result.available}, Price: ${result.price_usdc} USDC")
# Search across TLDs
results = client.search_domains("myagent")
for r in results:
if r.available:
print(f"{r.domain}: ${r.price_usdc}")
Solana Wallet
from agentns_client import AgentNSClient, load_or_create_solana_wallet
# Create or load Solana wallet
keypair = load_or_create_solana_wallet()
print(f"Wallet: {keypair.pubkey()}")
# Create client (auto-detects Solana)
client = AgentNSClient(account=keypair)
# Same API as EVM
result = client.check_domain("myagent.xyz")
print(f"Available: {result.available}, Price: ${result.price_usdc} USDC")
Full Registration Flow
from agentns_client import AgentNSClient, load_or_create_wallet
account = load_or_create_wallet()
with AgentNSClient(account=account) as client:
# 1. Check availability
check = client.check_domain("myagent.xyz")
if not check.available:
print("Domain not available")
exit(1)
# 2. Authenticate (SIWE for EVM, SIWS for Solana)
client.login()
# 3. Create registrant profile (required by ICANN)
client.create_registrant({
"name": "Agent Smith",
"street_address": "123 AI Street",
"city": "San Francisco",
"state_province": "CA",
"postal_code": "94102",
"country_code": "US",
"email": "agent@example.com",
"phone": "+14155551234",
"whois_privacy": True,
})
# 4. Register domain (handles x402 payment automatically)
domain = client.register_domain("myagent.xyz", years=1)
print(f"Registered: {domain.domain}")
print(f"Expires: {domain.expires_at}")
DNS Management
# List DNS records
records = client.list_dns("myagent.xyz")
# Add A record
client.add_dns("myagent.xyz", type="A", host="@", value="192.0.2.1")
# Add CNAME
client.add_dns("myagent.xyz", type="CNAME", host="www", value="myagent.xyz")
# Add MX record
client.add_dns("myagent.xyz", type="MX", host="@", value="mail.example.com", distance=10)
# Update record
client.update_dns("myagent.xyz", record_id="12345", value="192.0.2.2")
# Delete record
client.delete_dns("myagent.xyz", record_id="12345")
Nameserver Management
# Get current nameservers
ns = client.get_nameservers("myagent.xyz")
print(ns) # ['ns1.namesilo.com', 'ns2.namesilo.com']
# Change to Cloudflare
client.set_nameservers("myagent.xyz", [
"ns1.cloudflare.com",
"ns2.cloudflare.com"
])
API Reference
AgentNSClient
# EVM wallet
from eth_account import Account
client = AgentNSClient(
base_url="https://agentns.xyz", # API base URL
account=account, # eth_account.Account
timeout=60.0, # HTTP timeout
)
# Solana wallet
from solders.keypair import Keypair
client = AgentNSClient(
base_url="https://agentns.xyz",
account=keypair, # solders.Keypair
timeout=60.0,
)
Public Methods (No Auth Required)
| Method | Description |
|---|---|
check_domain(domain) |
Check availability and price |
search_domains(name) |
Search across 20 TLDs |
Authenticated Methods
| Method | Description |
|---|---|
login() |
Authenticate with SIWE/SIWS |
get_registrant() |
Get registrant profile |
create_registrant(data) |
Create registrant profile |
update_registrant(data) |
Update registrant profile |
list_domains() |
List owned domains |
register_domain(domain, years) |
Register with x402 payment |
list_dns(domain) |
List DNS records |
add_dns(domain, **kwargs) |
Add DNS record |
update_dns(domain, record_id, **kwargs) |
Update DNS record |
delete_dns(domain, record_id) |
Delete DNS record |
get_nameservers(domain) |
Get nameservers |
set_nameservers(domain, nameservers) |
Change nameservers |
Exceptions
from agentns_client import (
AgentNSError, # Base exception
AuthenticationError, # 401 - Auth failed
PaymentRequiredError, # 402 - Payment needed
NotFoundError, # 404 - Resource not found
ConflictError, # 409 - Already exists
ValidationError, # 400 - Invalid input
RateLimitError, # 429 - Too many requests
RegistrationFailedError # Registration failed after payment
)
Wallet Utilities
# EVM wallets
from agentns_client import load_wallet, load_or_create_wallet
account = load_wallet("path/to/wallet.json") # Load existing
account = load_or_create_wallet("path/to/wallet.json") # Load or create
# Solana wallets
from agentns_client import load_solana_wallet, load_or_create_solana_wallet
keypair = load_solana_wallet("path/to/wallet.json") # Load existing
keypair = load_or_create_solana_wallet("path/to/wallet.json") # Load or create
Payment Details
AgentNS uses the x402 protocol for payments:
EVM (Base)
- Network: Base (Chain ID: 8453)
- Currency: USDC
- Contract:
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 - Method: EIP-3009
transferWithAuthorization
Solana
- Network: Solana Mainnet
- Currency: USDC
- Mint:
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v - Method: SPL Token
TransferChecked
The client handles the full payment flow automatically:
- Request returns 402 with payment requirement
- Client signs authorization (EIP-3009 for EVM, SPL transfer for Solana)
- Client resubmits with X-PAYMENT header
- Domain is registered atomically with payment
Environment Variables
| Variable | Description | Default |
|---|---|---|
AGENTNS_API |
API base URL | https://agentns.xyz |
License
MIT License - see LICENSE for details.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentns_client-0.2.1.tar.gz.
File metadata
- Download URL: agentns_client-0.2.1.tar.gz
- Upload date:
- Size: 23.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fae2a45e5843a0945e7e06e7e38428b7aa660c82ef78ead4b0cbdc47fed2fc94
|
|
| MD5 |
7699c18d32ed9692808d95b61e147914
|
|
| BLAKE2b-256 |
bac0469fbafdb4c130d9d83d4fe8219dcdc60d0c9922324f52a0ccbb0588772f
|
File details
Details for the file agentns_client-0.2.1-py3-none-any.whl.
File metadata
- Download URL: agentns_client-0.2.1-py3-none-any.whl
- Upload date:
- Size: 27.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c66cdf4c928961d844ff16e6b8b3fedd50ac704541be6f80515f50fe4a679d5c
|
|
| MD5 |
fe2fafd283722478f4a7374b2f640e1a
|
|
| BLAKE2b-256 |
c483f27f4ad6f4142da3039aa6b1021e06b6c644f85f776c2c1f105d0f78d6b4
|