← Agent Domain Search

API Documentation

Overview

Agent Domain Search is an agent-first domain registration and DNS management service. Check availability, register domains, and manage DNS — all via JSON API. Pay with USDC on Base via x402. No accounts, no API keys. Your Ethereum wallet is your identity.

Free Endpoints

No authentication or payment required.

GET /:domain

Check availability and price. Returns full details if you own the domain (with wallet auth).

curl https://agentdomainsearch.com/example.com
{"domain":"example.com","available":true,"price":16.0,"currency":"USDC"}

GET /suggest?q=keyword

Domain name suggestions based on a keyword.

curl https://agentdomainsearch.com/suggest?q=myproject

GET /:domain/price

Pricing for 1–10 year registrations.

curl https://agentdomainsearch.com/example.com/price

Paid Endpoints (x402)

These return 402 Payment Required with payment details. Your agent pays with USDC on Base, then retries.

POST /:domain

Register a domain. The wallet that pays becomes the owner. WHOIS privacy is always enabled.

POST /:domain/renew

Renew a domain you own.

Authentication

Sign the message agentdomainsearch.com:<unix-timestamp> using EIP-191 personal_sign. The token is the timestamp and signature joined with a dot. Tokens are valid for 5 minutes.

Token format

<unix-timestamp>.<130-hex-char-signature>

Signing (JavaScript / ethers.js)

const ts = Math.floor(Date.now() / 1000);
const sig = (await wallet.signMessage("agentdomainsearch.com:" + ts)).slice(2);
const token = ts + "." + sig;

Signing (Python / web3.py)

import time
from web3 import Web3
ts = int(time.time())
msg = f"agentdomainsearch.com:{ts}"
sig = w3.eth.account.sign_message(encode_defunct(text=msg), private_key=key).signature.hex()[2:]
token = f"{ts}.{sig}"

Sending

Authorization: Bearer <token>
# or
Authorization: Basic base64("0x:<token>")

Authenticated Endpoints

EndpointDescription
GET /domainsList domains owned by your wallet
PUT /:domain/nsUpdate nameservers
GET /:domain/dnsView DNS zone records
PUT /:domain/dnsSet DNS records
DELETE /:domain/dnsDelete DNS zone
PUT /:domain/lockLock or unlock domain
PUT /:domain/contactsUpdate registrant contacts
POST /:domain/verifyResend ICANN verification email
GET /:domain/transferGet EPP auth code for transfer out

Transferring a Domain Out

To transfer your domain to another registrar:

  1. Set up DNS at your new provider first. DNS zones hosted here become inaccessible after transfer. If your domain uses our nameservers (ns1.systemdns.com), it will stop resolving immediately after transfer unless you switch nameservers first.
  2. Update nameservers: PUT /:domain/ns
  3. Unlock the domain: PUT /:domain/lock with {"locked": false}
  4. Get the auth code: GET /:domain/transfer
  5. Give the auth code to your new registrar and approve the confirmation email.

Pricing & Domain Lifecycle

All prices are in USDC (1:1 with USD). WHOIS privacy is always included at no extra cost.

EventTimingAction Required
RegistrationImmediate~$16 USDC for .com (1 year term)
ICANN verificationWithin 15 daysClick email link or domain is suspended
Renewal windowBefore expiry datePOST /:domain/renew with x402 payment
Expiry + grace period0–40 days after expiryDomain stops resolving after 3 days. Can still renew.
Redemption period40–70 days after expiryRecovery possible but may incur additional fees.
Deletion~70 days after expiryDomain released to public. Cannot be recovered.
Transfer outAny time (60+ days after registration)GET /:domain/transfer for auth code. Set up DNS at new registrar first.

Identity

Your Ethereum wallet address is your identity. The address that pays for a domain owns it. Management endpoints verify ownership via EIP-191 signatures. No accounts, no passwords, no email/password auth.

Terms & Privacy