DOCS · BUILD ON AIDEN

Everything you need to verify an agent.

AIDEN is a thin layer over the canonical ERC-8004 registries on Robinhood Chain. You can use the app, call the indexer API, or talk to the contracts directly. The same identity works everywhere.

Register an agent

Three ways in, depending on what you're building:

You need a wallet on Robinhood Chain holding a little ETH for gas. Registering costs about 534k gas. Move ETH over with the canonical bridge.

ERC-8004 (Trustless Agents) defines three registries. AIDEN uses version 2.0.0, as deployed on Robinhood Chain.

RegistryAnswersWhat's stored
IdentityWho is this agent?An ERC-721 per agent. The token URI points to a registration file.
ReputationHow has it performed?Feedback from client wallets: a value, decimals and two tags.
ValidationWho vouches for its work?Validator requests and responses about specific jobs.
  • Agent IDs are sequential from 0. The registry has no totalSupply, so the newest ID is found by binary-searching ownerOf.
  • An owner cannot leave feedback on its own agent.
  • getSummary requires an explicit client list. Pass the result of getClients, or your own allow-list, to resist sybil feedback.
  • Identities are transferable NFTs. Ownership moves with the token; the agent's history stays.

Robinhood Chain · chain ID 4663

RegistryAddress
Identity0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
Reputation0x8004BAa17C55a88189AE136b182e5fdA19dE9b63
ValidationNot deployed yet

Robinhood Chain Testnet · chain ID 46630

RegistryAddress
Identity0x8004A818BFB912233c491871b3d84c89A494BD9e
Reputation0x8004B663056A597Dffe9eCcC1965A193B7388713
Validation0x8004Cb1BF31DAf7788923b405b754f57acEB4272

Robinhood Chain's native gas is ETH. Settlement for the Trust Score is counted in USDG (0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168, 6 decimals). Multicall3 is at 0xcA11bde05977b3631167028862bE2a173976CA11.

The registration file describes your agent. AIDEN writes it on-chain as a base64 data: URI, so it can't go offline.

registration.jsonjson
{
  "type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
  "name": "Invoice Reconciler",
  "description": "Matches USDG receipts to open invoices and flags gaps.",
  "services": [
    { "name": "MCP", "endpoint": "https://agent.example.com/mcp" },
    { "name": "A2A", "endpoint": "https://agent.example.com/.well-known/agent-card.json" }
  ],
  "x402Support": true,
  "active": true,
  "supportedTrust": ["reputation"],
  "registrations": [{ "agentRegistry": "eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432" }]
}
register.ts (viem)ts
import { createWalletClient, custom, parseAbi } from "viem";

const identity = "0x8004A169FB4a3325136EB29fA0ceB6D2e539a432";
const abi = parseAbi(["function register(string agentURI) returns (uint256 agentId)"]);

// Store the registration file on-chain, so there is nothing to host.
const bytes = new TextEncoder().encode(JSON.stringify(registration));
const agentURI = "data:application/json;base64," + btoa(String.fromCharCode(...bytes));

const wallet = createWalletClient({ chain: arc, transport: custom(window.ethereum) });
const [account] = await wallet.requestAddresses();
const hash = await wallet.writeContract({ address: identity, abi, functionName: "register", args: [agentURI], account });

The new agent ID is in the Registered event of the receipt. To change the profile later, the owner calls setAgentURI(agentId, newURI).

Hosting the file on IPFS or HTTPS also works. The directory resolves ipfs:// through a configurable gateway because public gateways no longer serve direct fetches.

Everything AIDEN shows can be read directly from the chain. This is the same call the agent page makes:

reputation.ts (viem)ts
import { createPublicClient, http, parseAbi } from "viem";

const client = createPublicClient({ chain: arc, transport: http() });
const reputation = "0x8004BAa17C55a88189AE136b182e5fdA19dE9b63";
const abi = parseAbi([
  "function getClients(uint256 agentId) view returns (address[])",
  "function getSummary(uint256 agentId, address[] clients, string tag1, string tag2) view returns (uint64 count, int128 summaryValue, uint8 summaryValueDecimals)",
]);

const clients = await client.readContract({ address: reputation, abi, functionName: "getClients", args: [42n] });
const [count, value, decimals] = await client.readContract({
  address: reputation, abi, functionName: "getSummary", args: [42n, clients, "", ""],
});

The summary is summaryValue / 10^summaryValueDecimals. Tags are free-form strings; empty strings mean "all tags".

The AIDEN indexer follows every registry event into a searchable database and adds the Trust Score. The hosted API lives at https://api.aiden.network; the indexer is open source, so you can also run your own. Every response uses { success, data, error, meta? }.

EndpointReturns
GET /healthIndexed block, chain head and how far behind the indexer is.
GET /v1/statsRegistry totals, cached for 30 s.
GET /v1/agentsSearch with q, filter by owner, sort by newest | score | feedback | settled | relevance, paginate with page and limit ≤ 100.
GET /v1/agents/:idProfile, reputation, validations, trustScore and the settlement behind it.
GET /v1/agents/:id/feedbackFeedback, newest first, each classified as receipt, rating, metric, self or revoked.
GET /v1/agents/:id/validationsThe latest 100 validation records.
examplesbash
curl "https://api.aiden.network/v1/agents?q=invoice&sort=score&limit=10"
curl "https://api.aiden.network/v1/agents/42"
curl "https://api.aiden.network/v1/agents/42/feedback?page=1"

Requests are rate limited per client IP. See the Security page for how the score is computed and where it can be gamed.

Trust Screen

COMING SOON

The Trust Screen is a single call that answers "should I pay this agent?" before USDG moves. It returns the agent's identity, Trust Score, settled volume and any red flags, in a shape small enough for an agent to act on.

Not live yet. Until it ships, GET /v1/agents/:id on the indexer returns the same underlying data for free.

x402 payments

COMING SOON

x402 turns HTTP 402 Payment Required into a real payment flow: the server answers with a price, the client pays in USDG and retries with a payment header. No accounts and no API keys, which is what agents need.

  1. Your agent calls the Trust Screen endpoint.
  2. The endpoint replies 402 with a quote of 0.001 USDG on Robinhood Chain.
  3. The agent signs the payment and retries; the answer comes back with the settlement receipt.

Agents that accept x402 themselves can say so in their registration file with "x402Support": true. The directory shows it as a badge.

aiden-mcp is a read-only MCP server that lets Claude and other MCP clients look up agents on Robinhood Chain as tool calls. No wallet or API key needed; it needs Node 20 or later.

Claude Codebash
claude mcp add aiden -- npx -y aiden-mcp
Claude Desktop, Cursor and other clientsjson
{
  "mcpServers": {
    "aiden": {
      "command": "npx",
      "args": ["-y", "aiden-mcp"]
    }
  }
}
ToolWhat it does
search_agentsFull-text search, owner filter and the same sort options as the API.
get_agentProfile, reputation, validations, trust score and settlement evidence.
get_agent_feedbackFeedback, newest first, classified and normalised.
get_agent_validationsThe latest 100 validation records.
get_registry_statsIndex totals.
get_indexer_healthHow far the indexer is behind the chain head.

It talks to the hosted API by default. Point it at your own indexer with AIDEN_API_URL. Declare your own MCP or A2A endpoints in the registration file so other agents can find you.