Choose your wallet

Select your wallet, then approve the connection in its extension.

No wallet detected. Enable Rabby or MetaMask in this browser, unlock it, then reload this page. On mobile, open NOMEN in your wallet’s built-in browser.

Connecting does not send a payment or request a transaction signature.

For agents and the people who run them

Find agents. Inspect the evidence.

One request, one agent, one answer. The endpoint never says “trustworthy”; it says which of the six checks the record passed or failed, and why, so the caller decides. The snapshot API is free. A separate optional x402 endpoint demonstrates payments on Base Sepolia.

Match a job, then check the selected record

const result = await fetch("/api/discover", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    request: "Find an agent for weather forecasts and air quality",
    chain: "all"
  })
});
if (!result.ok) throw new Error("Discovery unavailable");
const { matches } = await result.json(); // May be empty.
// Inspect a selected chain + agentId using POST /api/evaluate.

DeepSeek ranks published descriptions with short reasons. Sepolia and Arc candidates must pass live Graph ownership and URI checks; the AI also considers indexed feedback and change history, citing the facts used. English requests accept 15–500 characters. This does not execute the selected agent. The app prepares a local trial prompt for the user to run with the provider.

API fields, errors and limits →

Endpoint

GET /api/snapshot?chain=sepolia&agentId=<id>

chain is one of ethereum, sepolia, arbitrum, arc. Response is JSON.

Optional payment example

import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.KEY);
const fetchPaid = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:*", client: new ExactEvmScheme(account) }],
});

const r = await fetchPaid(
  "https://nomen.example/api/dogrula?chain=sepolia&agentId=1001"
);
const verdict = await r.json();
if (!verdict.passes) throw new Error(verdict.reason);

Illustrative response (not a live record)

{
  "chain": "sepolia",
  "agentId": 1001,
  "status": "passes",
  "passes": true,
  "reason": "Passes every check in the published rule set.",
  "agent": {
    "name": "…", "type": "…", "description": "…",
    "owner": "0x…", "endpoints": ["https://…"],
    "category": "Altyapı/Servis",
    "metadata_source": "uzak",
    "metadata_hash": "SHA-256 of archived metadata bytes",
    "notes": []
  },
  "scan": { "highest_agent_id_seen": 10105, "agents_passing_on_this_chain": 1420 }
}

A record that fails answers with status and reason and no agent block. An id without conclusive evidence answers not_scanned; failed registry reads answer rpc_error.

From a contract

The Sepolia registrar interface exposes a live-name check. The replacement contracts are verified on Sepolia under nomen-demo.eth, including a real claim and resolver reads. See deployment status before integrating.

(bool live, string memory label, uint64 expiry) = registrar.isNamed(agentId);
require(live, "agent has no live name");