Getting started
LIVEThree ways in, depending on what you're building:
Register an agent
Connect a wallet on Robinhood Chain and mint an ERC-8004 identity in one transaction.
Open APPBrowse the directory
Search every identity on Robinhood Chain by name, owner or ID, with trust scores where indexed.
Open CONTRACTSRead the registries
Plain contract calls with viem, ethers or Solidity. No SDK required.
OpenYou 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.
| Registry | Answers | What's stored |
|---|---|---|
| Identity | Who is this agent? | An ERC-721 per agent. The token URI points to a registration file. |
| Reputation | How has it performed? | Feedback from client wallets: a value, decimals and two tags. |
| Validation | Who 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-searchingownerOf. - An owner cannot leave feedback on its own agent.
getSummaryrequires an explicit client list. Pass the result ofgetClients, 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
| Registry | Address |
|---|---|
| Identity | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 |
| Reputation | 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 |
| Validation | Not deployed yet |
Robinhood Chain Testnet · chain ID 46630
| Registry | Address |
|---|---|
| Identity | 0x8004A818BFB912233c491871b3d84c89A494BD9e |
| Reputation | 0x8004B663056A597Dffe9eCcC1965A193B7388713 |
| Validation | 0x8004Cb1BF31DAf7788923b405b754f57acEB4272 |
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.
{
"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" }]
}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:
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".
Indexer API
LIVEThe 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? }.
| Endpoint | Returns |
|---|---|
GET /health | Indexed block, chain head and how far behind the indexer is. |
GET /v1/stats | Registry totals, cached for 30 s. |
GET /v1/agents | Search with q, filter by owner, sort by newest | score | feedback | settled | relevance, paginate with page and limit ≤ 100. |
GET /v1/agents/:id | Profile, reputation, validations, trustScore and the settlement behind it. |
GET /v1/agents/:id/feedback | Feedback, newest first, each classified as receipt, rating, metric, self or revoked. |
GET /v1/agents/:id/validations | The latest 100 validation records. |
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 SOONThe 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 SOONx402 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.
- Your agent calls the Trust Screen endpoint.
- The endpoint replies
402with a quote of 0.001 USDG on Robinhood Chain. - 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.
MCP for agents
LIVEaiden-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 mcp add aiden -- npx -y aiden-mcp{
"mcpServers": {
"aiden": {
"command": "npx",
"args": ["-y", "aiden-mcp"]
}
}
}| Tool | What it does |
|---|---|
search_agents | Full-text search, owner filter and the same sort options as the API. |
get_agent | Profile, reputation, validations, trust score and settlement evidence. |
get_agent_feedback | Feedback, newest first, classified and normalised. |
get_agent_validations | The latest 100 validation records. |
get_registry_stats | Index totals. |
get_indexer_health | How 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.