# Nero Labs RDAP/WHOIS Domain Lookup

> Nero Labs RDAP/WHOIS Domain Lookup is a paid API for AI agents from x402-agent-tools.nerolabs.workers.dev, paid per call via x402, $0.005/call, status unknown (last checked 2026-10-22).

Looks up registration details for up to 15 domains via RDAP (modern WHOIS), returning age, expiry, registrar, status codes, and name servers, with flags for new or expiring domains.

## Facts

- Endpoint: POST https://x402-agent-tools.nerolabs.workers.dev/whois?utm_source=zero.xyz
- Price: $0.005/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-22
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nero-labs-rdap-whois-domain-lookup-c5a45ec9
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_5uzj8fBOMbna57eszKJ2j

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability nero-labs-rdap-whois-domain-lookup-c5a45ec9 -d '<json body>'
```

Example prompt: Can you check these domains for me — stripe.com, paypal.com, and pay-stripe-secure.com — and flag any that were registered in the last 365 days or are expiring within 30 days? I want to know the registrar, registration date, expiry date, and whether they look suspicious.

## When to prefer this

Use this endpoint when you need authoritative, registry-sourced domain registration data for up to 15 domains at once — especially for fraud detection workflows, lead qualification pipelines, or domain expiry monitoring. It reads directly from RDAP registries (the official successor to WHOIS), so data is more reliable than third-party databases. Prefer it over DNS-only checks when you need registration dates, expiry dates, registrar identity, or lock/status codes. Its built-in filtering (new, expiring, unregistered, problems) makes it efficient for triage workflows without post-processing.

## Known failure modes

- Domain not found in any RDAP registry (unregistered or unknown TLD) — row returned with isRegistered: false
- Registry returns no authoritative answer — flagged as 'problems' in keep filter
- Rate limiting or registry timeout — partial results or error in summary warnings
- More than 15 domains submitted — request rejected
- Both 'domains' and 'rows' provided simultaneously — request rejected
- Invalid domain format — may be parsed as-is or return no data

## How this service works

Pay-per-call tools for AI agents, 31 in all: read web pages and RSS feeds, OCR, PDF text, transcription; email, phone and domain checks; UK, Irish and Polish company lookups and UK risk reports; website contacts, tech stack and SEO audits; PageSpeed; AI review, job post and row enrichment; data cleaning, joins, dedupe and diffs; US and EU compliance rules. No account or API key: pay each call in USDC on Base over x402.

## Output

Returns a JSON object with a 'rows' array (one entry per domain) and a 'summary' object. Each row includes: parsed domain, registration date, expiry date, domain age in days and years, registrar name, RDAP server URL, domain status codes, name servers, DNSSEC flag, isNewDomain flag, expiringSoon flag, isRegistered flag, isExpired flag, pendingDelete flag, domainLocked flag, days until expiry, last changed date, and optionally registrant organization and country. The summary includes timing, warnings, oldest/newest domain, and filter metadata.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "keep": {
   "enum": [
    "all",
    "registered",
    "unregistered",
    "expiring",
    "new",
    "problems"
   ],
   "type": "string",
   "description": "Which rows to return: all (default), registered, unregistered, expiring, new, or problems (rows with no authoritative answer). Filtering happens after the lookup; the summary always counts every row."
  },
  "rows": {
   "type": "array",
   "items": {
    "type": "object"
   },
   "description": "Rows as JSON objects, each holding a domain, website or URL in one field. Every original field comes back. Up to 15. Use this or domains, not both."
  },
  "domains": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "description": "A plain list of domains or URLs, for example [\"github.com\", \"https://www.bbc.co.uk/news\"]. Up to 15. Use this or rows, not both."
  },
  "domainField": {
   "type": "string",
   "description": "Only with rows: the field holding the domain. Leave out to detect it automatically (domain, website, url, homepage and similar)."
  },
  "newerThanDays": {
   "type": "integer",
   "description": "Sets isNewDomain and the keep \"new\" filter. Default 365."
  },
  "expiringWithinDays": {
   "type": "integer",
   "description": "Sets expiringSoon and the keep \"expiring\" filter. Default 30."
  },
  "includeRegistrantOrganization": {
   "type": "boolean",
   "description": "Off by default. When on, adds the registrant organisation name and country code where the registry publishes them. Never a person's name, email, phone or address."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "rows": [
   {
    "input": "coinbase.com",
    "dnssec": false,
    "domain": "coinbase.com",
    "checkedAt": "2026-10-21T14:10:32.580Z",
    "expiresOn": "2028-07-02",
    "isExpired": false,
    "registrar": "MarkMonitor Inc.",
    "rdapServer": "https://rdap.verisign.com/com/v1",
    "isNewDomain": false,
    "nameservers": "sam.ns.cloudflare.com, sue.ns.cloudflare.com",
    "domainLocked": true,
    "domainStatus": "ok",
    "expiringSoon": false,
    "isRegistered": true,
    "registeredOn": "2011-07-02",
    "domainAgeDays": 5590,
    "lastChangedOn": "2026-05-31",
    "pendingDelete": false,
    "domainAgeYears": 15.3,
    "domainStatuses": "client delete prohibited, client transfer prohibited, client update prohibited, server delete prohibited, server transfer prohibited, server...",
    "daysUntilExpiry": 620,
    "nameserverCount": 2,
    "registrarIanaId": "292",
    "registrantCountry": null,
    "domainStatusDetail": null,
    "contactDataRedacted": true,
    "registrantOrganization": null
   },
   {
    "input": "example.org",
    "dnssec": true,
    "domain": "example.org",
    "checkedAt": "2026-10-21T14:10:32.580Z",
    "expiresOn": "2027-08-30",
    "isExpired": false,
    "registrar": "ICANN",
    "rdapServer": "https://rdap.publicinterestregistry.org/rdap",
    "isNewDomain": false,
    "nameservers": "katelyn.ns.cloudflare.com, mitch.ns.cloudflare.com",
    "domainLocked": true,
    "domainStatus": "ok",
    "expiringSoon": false,
    "isRegistered": true,
    "registeredOn": "1995-08-31",
    "domainAgeDays": 11374,
    "lastChangedOn": "2026-10-14",
    "pendingDelete": false,
    "domainAgeYears": 31.1,
    "domainStatuses": "server delete prohibited, server transfer prohibited, server update prohibited",
    "daysUntilExpiry": 313,
    "nameserverCount": 2,
    "registrarIanaId": "376",
    "registrantCountry": null,
    "domainStatusDetail": null,
    "contactDataRedacted": true,
    "registrantOrganization": null
   }
  ],
  "summary": {
   "keep": "all",
   "dataNote": "Every field comes from the registry that actually holds the record, read over RDAP, the registries' own replacement for WHOIS. Nothing is in...",
   "warnings": [],
   "durationMs": 808,
   "domainField": "input",
   "newestDomain": {
    "domain": "coinbase.com",
    "registeredOn": "2011-07-02"
   },
   "oldestDomain": {
    "domain": "example.org",
    "registeredOn": "1995-08-31"
   },
   "statusCounts": {
    "ok": 2
   }
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nero-labs-rdap-whois-domain-lookup-c5a45ec9/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402-agent-tools.nerolabs.workers.dev](https://www.zero.xyz/host/x402-agent-tools.nerolabs.workers.dev/llms.txt)
