> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.agentrouter.to/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.agentrouter.to/_mcp/server.

# Domain

A domain is the highest-level bucket in AgentRouter.

It describes the problem area an agent is trying to solve, not the vendor the agent happens to call.

Examples:

* `email`
* `enrichment`
* `social`
* `web`
* `search`
* `post`
* `broadcast`
* `finance`
* `geo`
* `document`
* `media`
* `models`
* `travel`
* `speech`
* `translation`
* `chain`

## Why Domains Exist

Agents reason better about tasks such as:

* send an email
* extract data from a page
* answer a grounded search query
* publish a post to a target channel
* quote a public broadcast before approving the real post
* run a finance lookup or market-data action
* get current time or convert a datetime between locations
* run model chat completion, code completion, or model listing
* enrich a person record

than about vendors such as Resend, Brave, Firecrawl, or Apollo.

So AgentRouter is domain-first, not provider-first.

## What A Domain Gives You

Each domain exposes:

* a stable key such as `email`
* a human label and description
* a domain status such as `live` or `pending`
* a path to its capabilities
* a path to its route catalog

Example:

```json
{
  "domainKey": "email",
  "label": "Email",
  "description": "Programmatic outbound email and inbox lifecycle management for agents.",
  "status": "live",
  "capabilitiesPath": "/api/agentic-api/domains/email/capabilities",
  "routesPath": "/api/agentic-api/domains/email/routes"
}
```

## How To Use A Domain

Choose the domain that best matches the user's intent.

Call `GET /domains/{domainKey}/capabilities`.

Call `GET /domains/{domainKey}/capabilities/{capabilityId}/contract` when you need the exact request shape.

## Design Rule

Do not create top-level domains for every provider or every thin endpoint variation.

Good:

* `search.answer`
* `web.extract`
* `email.send`

Bad:

* `exa-answer`
* `firecrawl-scrape`
* `resend-send`

Those provider-specific choices belong at the route layer.