# Universal resolver
URL: /docs/x1id/universal-resolver

> Resolve X1ID @handles, X1NS domains, Solana .sol names, and Ethereum .eth names through one endpoint. A disabled namespace returns an honest NOT_CONFIGURED — it never fabricates an address.

# Universal resolver

<Pill tone="mainnet">Mainnet</Pill>

<LlmActions />

The **universal resolver** resolves names across naming systems through one call: X1ID `@handles` and X1NS domains natively, Solana `.sol` names (SNS), and Ethereum `.eth` names (ENS). Each foreign namespace reads its **own** chain through an adapter, so a `.sol` or `.eth` result is real on-chain data — never a guess.

## Resolve any name

<Endpoint method="GET" path="/v1/resolve-universal/:name" />

Keyed or [x402-metered](/docs/x1id/platform#pay-per-call-with-x402), priced like a resolve. The optional `?chain=` picks which chain's address you want (`X1` default, or `SOL` / `ETH` / `BTC`).

```bash title="GET /v1/resolve-universal/:name"
curl "https://api.x1id.io/v1/resolve-universal/jack.sol?chain=SOL" \
  -H "X-API-Key: $X1ID_API_KEY"
```

```json
{
  "input": "jack.sol",
  "name": "jack.sol",
  "namespace": "sol",
  "address": "7Np1jK…pQ4mZ",
  "chain": "SOL",
  "source": "sns",
  "verified": true
}
```

| field       | meaning                                                                                   |
| ----------- | ----------------------------------------------------------------------------------------- |
| `namespace` | which naming system the name belongs to: `handle`, `x1` / `xnt` / `xen`, `sol`, or `eth`. |
| `source`    | the system that answered: `x1id`, `sns`, or `ens`.                                        |
| `verified`  | whether ownership of `address` was proved on-chain.                                       |

An unknown name is `400`; a name with no address for the requested chain is `404 NO_RECORD_FOR_CHAIN`; an RPC failure is `502`. A name in a namespace that isn't enabled on this deployment is `501 NOT_CONFIGURED` — see below.

## Which namespaces are live

<Endpoint method="GET" path="/v1/namespaces" />

Ungated. Lists each namespace and whether its adapter is configured on this deployment — check it before you rely on `.sol` or `.eth`.

```bash
curl https://api.x1id.io/v1/namespaces
```

```json
{
  "namespaces": [
    { "namespace": "handle", "source": "x1id", "configured": true },
    { "namespace": "x1",     "source": "x1id", "configured": true },
    { "namespace": "xnt",    "source": "x1id", "configured": true },
    { "namespace": "xen",    "source": "x1id", "configured": true },
    { "namespace": "sol",    "source": "sns",  "configured": true },
    { "namespace": "eth",    "source": "ens",  "configured": true }
  ]
}
```

<Callout type="warn">
  **`.sol` and `.eth` are config-gated, by design.** The native X1ID / X1NS path is always on. SNS (`.sol`) reads a Solana RPC and ENS (`.eth`) reads an Ethereum RPC — each is enabled only when that deployment has the corresponding RPC configured. **ENS in particular needs an Ethereum RPC configured** to answer at all. When an adapter is off it returns a typed `NOT_CONFIGURED` and never fabricates an address or fails the whole resolver. Always consult `GET /v1/namespaces` rather than assuming.
</Callout>

## When to use it

Use the universal resolver when your app accepts names from more than one ecosystem in one field — a cross-chain wallet, a payments box, a directory. If you only need X1ID `@handles` and X1NS, the [public Resolve API](/docs/x1id/api) (keyless) or the [SDK](/docs/x1id/sdk) (reads chain directly, no hosted dependency) are simpler.

<Callout type="info">
  **Never conflate the namespaces.** `@jack`, `jack.x1`, `jack.sol`, and `jack.eth` can belong to **different people**. The resolver classifies strictly by shape and tells you which `namespace`/`source` answered — render that before letting a user send, and never fall back from one namespace to another.
</Callout>

## Next

<Cards>
  <Card href="/docs/x1id/api" icon="Zap" title="Resolve API (public)" description="Keyless X1ID + X1NS resolution — no /v1, no key." />

  <Card href="/docs/x1id/sdk" icon="Code" title="SDK reference" description="Resolve straight from chain with @x1id/resolve — no hosted dependency." />

  <Card href="/docs/x1id/examples" icon="BookOpen" title="Add names to a send flow" description="The 'show the namespace before you send' rule, in full." />
</Cards>
