> ## Documentation Index
> Fetch the complete documentation index at: https://ixoworld-mintlify-ad1a4ffc.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# domain-indexer

> Domain analysis and entity lookup across the IXO ecosystem — organisations, projects, DAOs, DIDs.

**Source:** [`packages/oracle-runtime/src/plugins/domain-indexer/`](https://github.com/ixoworld/ixo-oracles-boilerplate/blob/main/packages/oracle-runtime/src/plugins/domain-indexer/)

| Attribute     | Value            |
| ------------- | ---------------- |
| Feature key   | `domain-indexer` |
| Visibility    | `always`         |
| Stability     | `stable`         |
| Category      | `data`           |
| Default state | On               |
| Depends on    | —                |

## Summary

Domain analysis and entity lookup across the IXO ecosystem — organisations, projects, DAOs, DIDs. Exposes a sub-agent (`call_domain_indexer_agent`) that searches the IXO Domain Indexer and resolves entity domain cards by DID. Base URL defaults to per-network endpoints (`https://domain-indexer{.testnet|.devnet}.ixo.earth`) resolved from `NETWORK`; override with `DOMAIN_INDEXER_URL`.

## Environment variables

| Var                  | Required | Description                                                                                 |         |            |
| -------------------- | -------- | ------------------------------------------------------------------------------------------- | ------- | ---------- |
| `DOMAIN_INDEXER_URL` | no       | Optional URL override. Without it the plugin resolves per-network from `NETWORK` (\`mainnet | testnet | devnet\`). |
| `NETWORK`            | no       | Read but not owned (declared by the core base env schema).                                  |         |            |

## What it contributes

* **Tools (inside the sub-agent):** `domain_indexer_search`, `get_domain_card`.
* **Sub-agents:** `call_domain_indexer_agent`.
* **Middleware:** none.
* **HTTP routes:** none.
* **Shared state:** none.

## Opt out / Opt in

```ts theme={null}
const app = await createOracleApp({
  config,
  features: { 'domain-indexer': false }, // never load
  // features: { 'domain-indexer': true }, // force load (default)
});
```

## When to use it

* User asks "what is X?" or "tell me about X" for an organisation, project, DAO, or DID.
* User needs the summary, overview, or FAQ of an IXO entity.
* Looking up a domain card by its DID.
* Discovering entities by topic, category, or keyword.

## Search filters

`domain_indexer_search` accepts a `filters` object that maps directly to the Domain Indexer's `dc.*` query parameters. Two of these come from on-chain data and have exact-match semantics you need to know about.

### `dc.entity_type` — exact compound match

The `entity_type` on each domain card is sourced from the chain `type` field and stored as a single compound token. It is **never split on `/`**, so filter values must match the full compound value:

| Filter value                  | Matches                                                                                     |
| ----------------------------- | ------------------------------------------------------------------------------------------- |
| `dc.entity_type=asset/device` | Only entities whose chain type is exactly `asset/device`                                    |
| `dc.entity_type=asset`        | Only entities whose chain type is exactly `asset` (not `asset/device`, not `asset/vehicle`) |
| `dc.entity_type=dao/pod`      | Only pods                                                                                   |
| `dc.entity_type=dao/protocol` | Only protocol DAOs                                                                          |
| `dc.entity_type=dao`          | Only plain DAOs                                                                             |

Passing a partial prefix like `asset` when you want every asset sub-type returns zero results. To match multiple compound types, pass a comma-separated list: `dc.entity_type=asset/device,asset/vehicle`.

### `dc.entity_verified` — chain-verified status

`entity_verified` reflects the on-chain `entityVerified` flag for the entity:

| Filter value               | Behaviour                                                                                        |
| -------------------------- | ------------------------------------------------------------------------------------------------ |
| `dc.entity_verified=true`  | Only entities marked verified on chain                                                           |
| `dc.entity_verified=false` | Only entities explicitly marked not verified on chain                                            |
| *(omitted)*                | Both verified and unverified entities, plus records that have not yet been backfilled from chain |

`null` (not-yet-indexed) is distinct from `false`. Records still awaiting the chain-metadata backfill return `entity_verified: null` in results and are only excluded when you set the filter to `true` or `false`.

### Example

```ts theme={null}
// Find verified protocol DAOs relevant to "mining"
await tools.domain_indexer_search.invoke({
  query: 'mining',
  filters: {
    'dc.entity_type': 'dao/protocol',
    'dc.entity_verified': 'true',
  },
});
```

## When NOT to use it

* General web search unrelated to IXO entities — use [`firecrawl`](/build-an-oracle/reference/bundled-plugins/firecrawl).
* Personal memory or past-conversation recall — use [`memory`](/build-an-oracle/reference/bundled-plugins/memory).
* Page editing or workspace pages — use [`editor`](/build-an-oracle/reference/bundled-plugins/editor). Pages are not entities.

## Where to read next

<CardGroup cols={2}>
  <Card title="Add a sub-agent" icon="diagram-project" href="/build-an-oracle/develop/plugin-recipes/add-a-sub-agent">
    Sub-agent contribution pattern.
  </Card>

  <Card title="Environment variables" icon="key" href="/build-an-oracle/reference/environment-variables">
    All env vars including `NETWORK`.
  </Card>
</CardGroup>
