Authoritative domain availability and expiry intel via RDAP — keyless, live, per lookup. No API key, no subscription: agents pay $0.001 per check, in USDC, on Base or Solana.
| Route | Price | What lands in the 200 body |
|---|---|---|
GET /check/:domain | $0.001 | Availability, registrar + IANA ID, created / updated / expiry dates, nameservers, EPP status flags, DNSSEC delegation — live from the TLD's authoritative RDAP server |
POST /bulk | $0.005 | The same record for up to 50 domains, plus registered / available / unknown counts |
GET / · /health · /skill.md · /.well-known/x402 · /openapi.json | free | Service card, health, agent skill file, discovery manifest, OpenAPI 3.1 |
base-sepolia / baseexact · EIP-3009 transferWithAuthorization0x40252CFDF8B20Ed757D61ff157719F33Ec332402solana / solana-devnetexact · SPL transferChecked, fee sponsoredWwwuGbqHrwF5RG89KhUbmRWEvjnRH9k5kVM5p7T3WwWBoth rails appear in the accepts array of every 402. Settlement runs through
the x402 facilitator, and the 200 carries an
X-PAYMENT-RESPONSE receipt naming the rail and the transaction.
# 1. run it — the suite's default payTo addresses are already in .env.example
npm install && npm run dev # http://localhost:4021
# 2. ask without paying → the dual-rail challenge
curl -s localhost:4021/check/example.com | jq '.accepts[] | {network, payTo, maxAmountRequired}'
# { "network": "base-sepolia", "payTo": "0x40252CF…2402", "maxAmountRequired": "1000" }
# { "network": "solana", "payTo": "WwwuGbqH…T3WwW", "maxAmountRequired": "1000" }
# 3. pay and get the record (EVM rail via x402-fetch)
import { wrapFetchWithPayment } from "x402-fetch";
const pay = wrapFetchWithPayment(fetch, wallet);
const res = await pay("http://localhost:4021/check/example.com");
console.log(await res.json());
// { domain: "example.com", status: "registered", registrar: "…",
// expiresAt: "2025-08-13T04:00:00Z", nameservers: [...], dnssecSigned: true }
RDAP (RFC 9082/9083) is the IANA-standard replacement for WHOIS. This service resolves the authoritative RDAP server for a TLD through the IANA bootstrap registry (cached for a day) and queries it live on every call. Nothing is scraped, nothing is cached between requests, and there is no fixture mode — the answer comes from the registry that issued the domain.
status: "registered" — the registry returned a record. available: false.status: "available" — the registry returned 404: no registration on file. Registry-level reservations and premium lists can still block it.status: "unknown" — the RDAP server was unreachable, rate-limited, or the TLD does not implement RDAP. available is null and note explains. Never read this as available.An agent naming a startup checks forty candidates once and never comes back. A subscription and an API key are the wrong shape for that: they front-load cost, add signup, and make the agent a key custodian. x402 prices the question at $0.001 and settles it from a wallet the agent already has. Fifty checks in one POST /bulk cost half a cent.