You have an X1 address and want to know if it has a name. Or you have a name like chris.x1 and want the address behind it. Or you want to know whether yourname.x1 is taken before you spend anything on it.

All three are one HTTP request. X1NS runs a public REST API with no authentication and no API key, rate-limited to 100 requests per minute per IP. This guide covers every lookup method — browser, API, SDK and raw on-chain — with real responses from live mainnet.

The fastest lookup: paste it in a browser

Every endpoint below is a plain GET. Paste it into a browser tab and you get JSON back immediately. Base URL is https://api.x1ns.xyz.

Here is a real response, read from mainnet on September 10, 2026:

GET https://api.x1ns.xyz/api/resolve/chris.x1

{
  "domain": "chris.x1",
  "available": false,
  "owner": "7TR16MVFNcHCzhZn8xJuPAiBmN1eMMBA7JAqCyojgdHL",
  "address": "GnMRfUj7fS5Bq5SwdkLgRvWDEoDoMykJZGHz1WGikvei",
  "name": "chris.x1"
}

Two different keys there, and confusing them is the most common mistake people make with this API. owner is the wallet that holds the domain — the human. address is the on-chain account where the domain record itself lives. If you want to send someone tokens, you want owner.

Every endpoint, and what each is for

EndpointAnswers
/api/resolve/:domainWho owns this name?
/api/available/:domainCan I register this name?
/api/price/:nameWhat would this name cost?
/api/reverse/:addressWhat domains does this wallet own?
/api/primary/:addressWhat name should I display for this wallet?
/api/records/:domainWhat addresses has this name registered, across chains?
/api/profile/:domainWhat social links has this name published?
/api/subdomains/:domainWhat subdomains exist under this name?

Checking availability

GET https://api.x1ns.xyz/api/available/thisnameisfree99.x1

{
  "domain": "thisnameisfree99.x1",
  "available": true,
  "message": "Domain is available for registration"
}

Pair it with the price endpoint before you connect a wallet anywhere:

GET https://api.x1ns.xyz/api/price/alice

{ "name": "alice", "priceLamports": "4000000000",
  "formattedPrice": "4 XNT", "priceXNT": 4 }

Note the price endpoint takes the name without the TLD — pricing depends only on character length, and all three namespaces charge identically. If you are about to register, our step-by-step registration guide covers the rest.

Reverse lookup: address to name

Two endpoints do subtly different jobs here, and picking the wrong one is why some integrations display nothing.

/api/reverse/:address returns every domain a wallet owns. /api/primary/:address returns the single name the owner has designated as their public identity:

GET https://api.x1ns.xyz/api/primary/DEQWNRhQmNg7T6UQxV8d2oJAanFHBu9YkNyXDb7GvzvA

{
  "address": "DEQWNRhQmNg7T6UQxV8d2oJAanFHBu9YkNyXDb7GvzvA",
  "hasPrimary": false,
  "domain": null,
  "message": "No primary domain set for this address"
}

That hasPrimary: false is worth dwelling on, because it is extremely common. Owning a domain and setting it as primary are separate actions, and many holders never do the second one. A wallet can own several names and still have no primary set. If you are building a UI, handle the null — fall back to a truncated address rather than rendering an empty string.

Looking it up in code

For applications, the TypeScript SDK is cleaner than raw HTTP because it reads from the chain directly rather than depending on the API host.

npm install @x1ns/sdk

Forward resolution:

import { resolveDomain } from '@x1ns/sdk';

const owner = await resolveDomain(connection, 'alice.x1', 'mainnet');
if (owner) console.log('Owner:', owner.toBase58());

Reverse resolution:

import { getPrimaryDomain } from '@x1ns/sdk';
import { PublicKey } from '@solana/web3.js';

const primary = await getPrimaryDomain(
  connection, new PublicKey('...'), 'mainnet'
);

resolveDomain returns PublicKey | null and getPrimaryDomain returns string | null. Both take a network argument, so the same code runs against testnet during development without spending mainnet XNT.

Reading it straight off the chain

If you would rather not depend on either the API host or the SDK, X1NS state lives in program-derived addresses with deterministic seeds. That means any client can compute where a record lives and read it in a single RPC call, with no indexer in the middle:

  • ["central_state"] — global config
  • ["primary_domain", owner] — the reverse-lookup record
  • ["profile", domain] — social and address records

The programs on X1 mainnet:

ComponentAddress
X1NS RegistrarX1NS1M4Lh9zwpYe7Mi2RKyy7QWq7dRtqyr7KxsLyUn5
SPL Name ServicenameQyUhZQQgnirGbbJRR9ECWSdq1W7mMaNUZZTBvtq

X1NS is built on the SPL Name Service standard — the same primitive Solana naming services use — with an X1NS registrar layered on top for pricing, TLD authority, primary records, profiles and tokenization. If you have integrated Solana naming before, the storage layer will be familiar.

To inspect any of these accounts by hand, any X1 explorer will show you the raw account data.

Market and activity lookups

Beyond individual names, the API exposes namespace-wide activity — useful if you are tracking the market rather than a single domain:

  • /api/marketplace/listings — everything currently for sale
  • /api/marketplace/listing/:domain — the ask on one specific name
  • /api/sales/recent and /api/sales/stats — what has actually traded, versus what is merely listed
  • /api/registrations/recent — new names as they are claimed
  • /api/tokenizations/recent — domains minted as NFTs

The sales endpoints are the ones worth watching. Listing prices are asks; in a namespace with fewer than 3,000 total registrations, the gap between asking and clearing can be very wide.

Frequently asked questions

How do I find out who owns a .x1 domain?

Request https://api.x1ns.xyz/api/resolve/thename.x1 in any browser. The owner field is the wallet that holds it.

Does the X1NS API need an API key?

No. Public endpoints require no authentication. The limit is 100 requests per minute per IP.

How do I find the domain for an X1 address?

Use /api/primary/:address for the display name, or /api/reverse/:address for every domain that wallet owns.

Why does an address return no domain when I know it owns one?

The owner has not set a primary domain. Ownership and the reverse record are separate; query /api/reverse/ instead to see everything the wallet holds.

Can I resolve X1NS names without calling the API?

Yes. Use the @x1ns/sdk package, or derive the PDAs yourself from the documented seeds and read the accounts over RPC.

Is there a testnet?

Yes — the SDK takes a network argument, so you can develop against testnet without spending mainnet XNT.

All responses shown were read from live X1 mainnet on September 10, 2026. Endpoints and rate limits may change; check the X1NS developer docs for the current contract.