# ICANN Lookup API

> ICANN Lookup returns domain registration details and is available as a workflow and API.

ICANN Lookup returns registrar, registration, expiry, status, name server, and DNSSEC details for a domain name or website link. It also returns publicly available registrant and abuse details; registrant information may be redacted, and some registries omit fields.

- Page: https://fous.com/tools/icann-lookup
- Handle: `@icann-lookup`
- Category: [Security](https://fous.com/tools/category/security)
- Source website: https://lookup.icann.org
- Last verified: Sep 29, 2026

## Methods

### Get domain registration

Operation `get_domain_registration`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a domain’s registrar, registration and expiry dates, statuses, name servers, DNSSEC and publicly available registrant and abuse details. Registrant information may be redacted; some registries do not publish every field.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `domain` | string | yes | `"google.com"` | Domain name or pasted website link, for example google.com or https://www.google.com/about. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "domain"
  ],
  "properties": {
    "domain": {
      "type": "string",
      "minLength": 3,
      "description": "Domain name or pasted website link, for example google.com or https://www.google.com/about.",
      "examples": [
        "google.com",
        "https://www.cloudflare.com/about/",
        "example.org"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "domain": "google.com"
    },
    {
      "domain": "https://www.cloudflare.com/about/"
    },
    {
      "domain": "example.org"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `domain` | string | `"google.com"` | Registered domain name. |
| `created` | string or null | `"1997-09-15"` | Registration date. |
| `statuses` | array |  | Registration statuses in words. |
| `expiry_date` | string or null | `"2028-09-14"` | Registry expiration date. |
| `lookup_link` | string | `"https://lookup.icann.org/"` | ICANN Lookup website for searching the domain. |
| `last_updated` | string or null | `"2019-09-09"` | Date registration was last changed. |
| `name_servers` | array |  | Published name servers. |
| `dnssec_enabled` | boolean or null | `false` | Whether DNSSEC delegation is signed, or null when unpublished. |
| `registrar_name` | string or null | `"MarkMonitor Inc."` | Name of the sponsoring registrar. |
| `days_until_expiry` | integer or null | `716` | Days from today until registry expiration. |
| `registrar_website` | string or null | `"http://www.markmonitor.com"` | Registrar website when published. |
| `registrant_country` | string or null | `"United States"` | Public registrant country; null if redacted or absent. |
| `abuse_contact_email` | string or null | `"abusecomplaints@markmonitor.com"` | Published registrar abuse email. |
| `registrant_organization` | string or null | `"Google LLC"` | Public registrant organization; null if redacted or absent. |

**Example input**

```json
{
  "domain": "google.com"
}
```

**Example output**

```json
{
  "domain": "google.com",
  "created": "1997-09-15",
  "statuses": [
    "client delete prohibited",
    "client transfer prohibited",
    "client update prohibited"
  ],
  "expiry_date": "2028-09-14",
  "lookup_link": "https://lookup.icann.org/",
  "last_updated": "2019-09-09",
  "name_servers": [
    "ns1.google.com",
    "ns2.google.com",
    "ns3.google.com"
  ],
  "dnssec_enabled": false,
  "registrar_name": "MarkMonitor Inc.",
  "days_until_expiry": 716,
  "registrar_website": "http://www.markmonitor.com",
  "registrant_country": "United States",
  "abuse_contact_email": "abusecomplaints@markmonitor.com",
  "registrant_organization": "Google LLC"
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@icann-lookup",
  "visibility": "public",
  "operation": "get_domain_registration",
  "version": 1,
  "input": {
    "domain": "google.com"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@icann-lookup\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_domain_registration\",\n  \"version\": 1,\n  \"input\": {\n    \"domain\": \"google.com\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@icann-lookup",
  "visibility": "public",
  "operation": "get_domain_registration",
  "version": 1,
  "input": {
    "domain": "google.com"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/icann-lookup`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_domain_registration`: Get domain registration. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-icann-lookup https://api.fous.com/mcp/tools/icann-lookup --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Check a domain’s registrar and registration dates
- Review domain statuses and upcoming expiry
- Find published name servers and DNSSEC status
- Check publicly available registrant and abuse details

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this ICANN Lookup tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a ICANN Lookup account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from lookup.icann.org when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### When does a domain expire?

Get domain registration returns the registry expiration date and days until expiry.

### Who is the domain’s registrar?

Get domain registration returns the sponsoring registrar’s name and, when published, its website.

### Which name servers does a domain use?

Get domain registration returns the published name servers.

## Related

- [Google Public DNS API](https://fous.com/tools/google-public-dns.md): Public DNS lookups and DNS-over-HTTPS from Google.
- [ipinfo.io API](https://fous.com/tools/ipinfo-io.md): IP address location and network information.
- [crt.sh API](https://fous.com/tools/crt-sh.md): Public certificate transparency search for issued certificates and names they cover.
- [Have I Been Pwned API](https://fous.com/tools/have-i-been-pwned.md): Find public records of known data breaches.
- [ABN Lookup API](https://fous.com/tools/abn-lookup.md): Search Australian businesses by name or ABN and check public registration details.
- [Domain.com.au API](https://fous.com/tools/domain-com-au.md): Search Australian homes for sale, rent and recently sold on Domain.
- [BuiltWith API](https://fous.com/tools/builtwith.md): Discover technologies used by websites.
- [Companies House API](https://fous.com/tools/companies-house.md): Companies House returns UK public-register company details, officers, people with significant control and recent filings; records may be incomplete, and ceased entries are optional.
- [All Security tools](https://fous.com/tools/category/security)
