Abstraxn Agent Kit implements the Identity layer of ERC-8004 so each agent can have a portable, verifiable on-chain identity — not just a wallet address. Developers register agents on supported EVM chains, publish a machine-readable registration file, and monitor identity plus MCP activity from the dashboard or their own UI.

Supported chain IDs (Agent Kit)

Identity registration uses a numeric EVM chainId in every API and SDK call — not string slugs like sepolia or base. Contract addresses follow the official ERC-8004 contracts README: mainnet networks share one IdentityRegistry / ReputationRegistry pair; testnet networks share another.
These chainId values are accepted by POST /agents/:id/identity/prepare, POST /agents/:id/identity/confirm, GET /agents/:id/identity?chainId=…, and SDK registerAgentIdentity / getAgentIdentity. Any other chainId returns a validation error.
NetworkchainIdType
Ethereum Mainnet1Mainnet
Ethereum Sepolia11155111Testnet
Polygon Mainnet137Mainnet
Polygon Amoy80002Testnet
Base Mainnet8453Mainnet
Base Sepolia84532Testnet
BSC Mainnet56Mainnet
BSC Testnet97Testnet
Arbitrum One42161Mainnet
Avalanche C-Chain43114Mainnet
// Supported chainId values (Agent Kit IdentityChainId enum)
const IDENTITY_CHAIN_IDS = {
  ETHEREUM_MAINNET: 1,
  SEPOLIA: 11155111,
  POLYGON_MAINNET: 137,
  POLYGON_AMOY: 80002,
  BASE_MAINNET: 8453,
  BASE_SEPOLIA: 84532,
  BSC_MAINNET: 56,
  BSC_TESTNET: 97,
  ARBITRUM_ONE: 42161,
  AVALANCHE_MAINNET: 43114,
} as const;
# Example: register on Ethereum Sepolia
curl -X POST "$AGENT_KIT/agents/$AGENT_UUID/identity/prepare" \
  -H "X-API-Key: $ABSTRAXN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"chainId": 11155111}'
One agent may register once per chainId. Fund the agent EVM address with native gas on the chain you choose before calling prepare/register.

Registry addresses by chainId

chainIdNetworkIdentityRegistryReputationRegistry
1Ethereum Mainnet0x8004A169FB4a3325136EB29fA0ceB6D2e539a4320x8004BAa17C55a88189AE136b182e5fdA19dE9b63
11155111Ethereum Sepolia0x8004A818BFB912233c491871b3d84c89A494BD9e0x8004B663056A597Dffe9eCcC1965A193B7388713
137Polygon Mainnet0x8004A169FB4a3325136EB29fA0ceB6D2e539a4320x8004BAa17C55a88189AE136b182e5fdA19dE9b63
80002Polygon Amoy0x8004A818BFB912233c491871b3d84c89A494BD9e0x8004B663056A597Dffe9eCcC1965A193B7388713
8453Base Mainnet0x8004A169FB4a3325136EB29fA0ceB6D2e539a4320x8004BAa17C55a88189AE136b182e5fdA19dE9b63
84532Base Sepolia0x8004A818BFB912233c491871b3d84c89A494BD9e0x8004B663056A597Dffe9eCcC1965A193B7388713
56BSC Mainnet0x8004A169FB4a3325136EB29fA0ceB6D2e539a4320x8004BAa17C55a88189AE136b182e5fdA19dE9b63
97BSC Testnet0x8004A818BFB912233c491871b3d84c89A494BD9e0x8004B663056A597Dffe9eCcC1965A193B7388713
42161Arbitrum One0x8004A169FB4a3325136EB29fA0ceB6D2e539a4320x8004BAa17C55a88189AE136b182e5fdA19dE9b63
43114Avalanche C-Chain0x8004A169FB4a3325136EB29fA0ceB6D2e539a4320x8004BAa17C55a88189AE136b182e5fdA19dE9b63
Override defaults per chain on your Kit deployment:
PurposeExample env vars
RegistryIDENTITY_REGISTRY_<chainId> (e.g. IDENTITY_REGISTRY_1, IDENTITY_REGISTRY_SEPOLIA)
RPCCHAIN_RPC_ETHEREUM, CHAIN_RPC_SEPOLIA, CHAIN_RPC_POLYGON, CHAIN_RPC_BASE, CHAIN_RPC_BSC, CHAIN_RPC_ARBITRUM_ONE, CHAIN_RPC_AVALANCHE, …

More ERC-8004 networks

The ERC-8004 contracts repo lists additional deployments (Optimism, Linea, Scroll, Monad, and others). Abstraxn will add more chainId values to Agent Kit as RPC and registry env support is rolled out.

What is ERC-8004?

ERC-8004 (Trustless Agents) is an Ethereum standard (mainnet-ready as of early 2026) for giving autonomous agents discoverable, composable trust primitives. It defines three registries; Agent Kit focuses on Identity today.
RegistryPurpose
IdentityOn-chain agent id (ERC-721-style), linked to an agent URI that resolves to a registration JSON file
ReputationStructured feedback anchored on-chain (not yet exposed in Agent Kit UI)
ValidationAttestations that an agent behaved as claimed (future / domain-specific)

Why identity matters for agents

A raw EVM address does not tell a counterparty who operates the agent, which MCP endpoint to use, or whether the agent supports x402. ERC-8004 Identity fixes that by combining:
  1. On-chain record — registration in an IdentityRegistry contract on a chosen chain (e.g. Sepolia, Base).
  2. Off-chain agent card — JSON at agentURI with name, description, service endpoints (including MCP), and x402 support flags.
  3. Global identifier — a CAIP-style global agent id derived from chain, registry, and on-chain agentId so the same logical agent can be referenced across tools and explorers.
Identity does not prove an agent is honest or within spend policy — it proves who the agent claims to be and where to reach it. Pair identity with your own auth, spend policy, and activity logs for full accountability.

Registration file (agent card)

Agent Kit serves an EIP-8004 registration-v1 document at a public URL (no API key):
GET {AGENT_KIT_PUBLIC_URL}/agent/{agentUuid}/registration
Example shape (fields may grow with your agent metadata):
{
  "type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
  "name": "Trading Assistant",
  "description": "Executes trades within spend policy",
  "services": [
    {
      "name": "MCP",
      "endpoint": "https://agent-kit.abstraxn.com/mcp",
      "version": "2025-06-18"
    }
  ],
  "registrations": [
    {
      "agentId": 42,
      "agentRegistry": "eip155:11155111:0x8004A818BFB912233c491871b3d84c89A494BD9e"
    }
  ],
  "x402Support": true,
  "active": true
}
The on-chain register(agentURI) call points the registry at this URL. Wallets and explorers can resolve it without calling your private APIs.

How Abstraxn registers an agent

Prerequisites

  • Agent created with createAgent (or bind) so it has an evmAddress.
  • accessKey stored on your backend for signing.
  • Native gas on the target chain in that EVM address (registration is a contract call).
  • Identity registry configured on Agent Kit for that chain (IDENTITY_REGISTRY_* env vars on the Kit deployment). Default addresses match the ERC-8004 contracts README; see Supported chain IDs above.

REST API (Agent Kit)

All routes below require X-API-Key (application API key) except the public registration file.
MethodPathDescription
GET/agent/:id/registrationPublic registration JSON (agent card)
GET/agents/:id/identity?chainId=11155111Read persisted registration for one chain
GET/agents/:id/identityList all chain registrations in metadata
POST/agents/:id/identity/prepareBody: { "chainId": 11155111 } → unsigned tx + agentURI
POST/agents/:id/identity/confirmBody: { "chainId", "txHash" } → verify and save
After confirm, Agent Kit stores records under agent.metadata.erc8004.registrations[] with:
FieldMeaning
agentIdOn-chain id from registry events
globalId / agentIdentityPortable global agent identifier
agentURIRegistration file URL used on-chain
registryAddress, chainIdWhere it was registered
ownerAgent EVM address (must match on-chain owner)
txHash, registeredAtAudit fields

SDK shortcut

@abstraxn/agent-kit wraps prepare → sign → broadcast → confirm:
const identity = await agentKit.registerAgentIdentity({
  agentId: kitAgent.id,           // Agent Kit UUID
  userIdentity: 'user-123',
  accessKey: decryptedAccessKey,
  organizationId: wallet.organizationId,
  evmAddress: wallet.evmAddress,
  chainId: 11155111,
});
See SDK quickstart for createAgent and accessKey storage first. For external wallet agents (no accessKey), use registerAgentIdentityExternal or manual prepare/confirm with your own signer — see External wallet identity.

Dashboard — Identity & Activity

In Agentic Stack → All agents, open an agent row to see two tabs:

Identity tab

Shows ERC-8004 status for operators and support teams:
  • Registered on-chain banner with global agent identifier (copy-friendly).
  • Per-chain registration cards: on-chain agent id, owner, registry address, transaction hash, explorer links.
  • Controllers and wallets: EVM/Solana addresses and masked API key reference tied to the agent.
If the agent is not registered, the tab shows Not registered on-chain with guidance to register on a supported chain (registration is triggered from your app backend, not from this dashboard screen alone).

Activity log tab

Lists MCP tool calls for that agent — audit trail for debugging and compliance:
ColumnMeaning
Tool nameFrom live tools/list for the agent’s MCP endpoint
IntentHuman-readable summary when provided
Statusok, error, payment_required, spend_policy_denied, etc.
DurationMilliseconds
TimestampWhen the call ran
Use Refresh and pagination to load more. Open Details on a row to inspect request/response payloads (redact secrets before sharing externally). Activity appears after the agent executes MCP tools via your backend or integrations using your application API key with that agent_id.

Integrate in your app

The sample backend API and sample web app demonstrate the full UX pattern Abstraxn recommends.

Sample backend API (NestJS)

MethodPathBehavior
POST/agents/:id/register-identityBody: { "chainId": 11155111 } → calls SDK registerAgentIdentity
GET/agents/:id/identity?chainId=Proxies Kit GET /agents/:id/identity for the UI
Flow inside AgentsService.registerAgentIdentity:
  1. Load agent row + decrypt accessKey.
  2. Pass chainId to SDK registerAgentIdentity (requires [email protected]+).
  3. SDK signs and submits registration, then confirms with Agent Kit.
  4. Return tx hash and chainId metadata to the client.
Relevant modules: agents.controller.ts, agents.service.ts, identity-chain.config.ts.

Sample web app (Next.js)

  • RegisterIdentityModal — user picks chain; calls POST /agents/:id/register-identity.
  • RegisterIdentityFundRequiredModal — prompts funding if balance preflight fails.
  • AgentIdentityDetails on the dashboard — shows global id, on-chain agent id, registry, owner, explorer links after registration.
  • useAgentIdentity — loads identity state from your API.
The browser never holds accessKey; it only triggers your JWT-protected backend route.

Implementation checklist

  1. Create agent and fund EVM address with gas on target chain.
  2. Expose POST /agents/:id/register-identity (or call Kit REST prepare/confirm yourself).
  3. Show registration status in your UI (mirror dashboard Identity fields).
  4. Set AGENT_KIT_PUBLIC_URL on Agent Kit so agentURI is reachable on the public internet.
  5. Link users to Activity in dashboard or build your own log viewer using Kit MCP tool log APIs.

Configuration (Agent Kit operators)

VariablePurpose
AGENT_KIT_PUBLIC_URLBase URL embedded in agentURI (must serve /agent/:id/registration)
IDENTITY_REGISTRY_SEPOLIA, IDENTITY_REGISTRY_BASE, …Registry contract per chain
CHAIN_RPC_* / SEPOLIA_RPC_URLRPC for prepare, confirm, and receipt parsing