# dailynewdomains.com API reference

New .ai, .io, .so, .security and .si domains that already have a live website, from your own code, a spreadsheet tool or an AI assistant. The API, webhooks and the MCP server come with the Feed and API plan.

## Authentication

Make a key in your account (https://dailynewdomains.com/account) and send it on every call as `Authorization: Bearer dnd_your_key`. Making a new key stops the old one at once.

## Endpoints

### GET /api/v1/domains

**List new domains.** New domains with a live website, newest first, for any filter. The same rows the feed shows.

Access: Feed and API plan.

```bash
curl "https://dailynewdomains.com/api/v1/domains?tld=ai&q=legal&days=7" \
  -H "Authorization: Bearer dnd_your_key"
```

| Parameter | Notes |
|---|---|
| `q` | Words to find in the domain, the site title or its description. Up to 60 characters. |
| `tld` | Endings, comma separated: ai, io, so, security, si. Leave out for all five. |
| `host` | Hosting: cloudflare, vercel, godaddy, aws-route53, porkbun or squarespace. |
| `mail` | Mail: any (the domain receives mail at all), google_workspace, microsoft365 or custom (its own mail server). |
| `days` | 1, 2, 7 or 30. Default 1, the last 24 hours. |
| `limit` | Rows per page, 1 to 500. Default 100. |
| `before` | Pages back: pass the next value from the previous page. |
| `format` | csv for a spreadsheet instead of JSON. |

A page of rows (HTTP 200):

```
{
  "ok": true,
  "filter": { "q": "legal", "tlds": ["ai"], "host": null, "mail": null, "days": 7 },
  "total": 41,
  "count": 41,
  "domains": [
    {
      "domain": "memindex.ai",
      "ending": ".ai",
      "url": "https://memindex.ai",
      "title": "MemIndex: a lasting memory for your AI agents",
      "description": "Persistent memory for AI agents, with hosting that brings your memory to every machine and MCP client.",
      "hosting": "cloudflare",
      "mail": "custom",
      "registrar": "Cloudflare, Inc",
      "registered_on": "2026-10-13",
      "first_seen": "2026-11-07T20:12:55.976Z"
    }
  ],
  "next": null
}
```

hosting and mail are null when the domain has none yet. first_seen is when the domain was first seen as newly registered, in UTC. total counts every match; next is set when more pages remain.

### GET /api/v1/stats

**Counts for the last 24 hours.** How many new live sites appeared in the last 24 hours, per ending.

Access: Feed and API plan.

```bash
curl "https://dailynewdomains.com/api/v1/stats" \
  -H "Authorization: Bearer dnd_your_key"
```

Counts (HTTP 200):

```
{
  "ok": true,
  "since": "2026-11-06T21:00:00.000Z",
  "total": 742,
  "by_ending": { ".ai": 391, ".io": 288, ".so": 21, ".security": 6, ".si": 36 }
}
```

### GET /download/{day}.csv

**Download a day.** One UTC day as CSV, oldest first. Works in a browser too: no key, it reads your signed-in session.

Access: Yesterday is free for anyone (domain, ending, first_seen_utc). With a plan, any of the last 30 days, with title, description, hosting, mail, registrar, registered_on and url.

The file (HTTP 200):

```
domain,ending,first_seen_utc
memindex.ai,.ai,2026-11-07 20:12:55
forensis.io,.io,2026-11-07 20:12:55
```

## Webhooks

On the Feed and API plan, an alert can call your https address each time new sites match it, about once a minute while they arrive. We POST JSON and do not follow redirects; answer with any 2xx.

```json
{
  "alert": "9b41d07c2e8a4f1b6c3d5e7f",
  "filter": ".ai matching \"legal\"",
  "count": 1,
  "domains": [
    {
      "domain": "memindex.ai",
      "ending": ".ai",
      "url": "https://memindex.ai",
      "title": "MemIndex: a lasting memory for your AI agents",
      "description": "Persistent memory for AI agents, with hosting that brings your memory to every machine and MCP client.",
      "hosting": "cloudflare",
      "mail": "custom",
      "registrar": "Cloudflare, Inc",
      "registered_on": "2026-10-13",
      "first_seen": "2026-11-07T20:12:55.976Z"
    }
  ]
}
```

## Errors

Errors answer `{ "ok": false, "error": "<code>", "message": "..." }`.

| HTTP | error | Meaning |
|---|---|---|
| 401 | `invalid_key` | The key is missing, mistyped, or was replaced by a new one. |
| 402 | `no_plan` | The account has no Feed and API plan, or it has ended. Start or renew it on the pricing page. |

## Limits and pacing

- The data changes about once a minute, so polling more often than that returns the same rows.
- Use days and before to page through history instead of large limits, and keep to about 60 calls a minute.
- For new matches as they happen, use an alert with a webhook instead of polling.
- History goes back 30 days.

## Use it from Claude, ChatGPT or Cursor (MCP)

An MCP server at `https://dailynewdomains.com/api/mcp` (streamable HTTP, JSON-RPC 2.0). Use your API key as the token:

```json
{
  "mcpServers": {
    "dailynewdomains": {
      "url": "https://dailynewdomains.com/api/mcp",
      "headers": { "Authorization": "Bearer dnd_your_key" }
    }
  }
}
```

| Tool | Arguments | What it does |
|---|---|---|
| `search_new_domains` | q, tld, host, mail, days, limit (all optional) | New live sites for a filter, newest first, with title, hosting and mail. |
| `new_domain_stats` | none | How many new live sites appeared in the last 24 hours, per ending. |
