API, EVM Contracts and Interfaces
Discover API routes, EVM contract responsibilities, events, errors, and callable interfaces.
This page documents the public read path and the current EVM contract interface surface. Non-EVM program interfaces are intentionally not included.
Discover API
The Discover API is read-only. It returns indexed projections suitable for product integration, dashboards, public directories, and partner workflows.
Base URLs
| Environment | Base URL |
|---|---|
| Production | https://agentpass-api.myfinchain.com |
The public Scan UI is available at https://agentpass-scan.myfinchain.com.
Common query parameters
| Parameter | Applies to | Description |
|---|---|---|
page | All collection endpoints | Positive integer page number. Defaults to 1. |
pageSize | All collection endpoints | Positive integer page size. Maximum value is 100. Defaults to 20. |
chainType | Agent list, search, leaderboard | Optional chain filter. Use evm for EVM data. |
chainId | Agent list, search, leaderboard | Optional chain ID filter. Requires chainType. Sepolia uses 11155111; Avalanche Mainnet uses 43114. |
includeRevoked | Feedback endpoints | Set to true to include revoked feedback records. |
Collection endpoints are:
GET /agentsGET /searchGET /agents/:agentId/feedbacksGET /agents/by-id/:canonicalAgentId/feedbacksGET /agents/:agentId/feedbacks/:feedbackId/responsesGET /agents/by-id/:canonicalAgentId/feedbacks/:feedbackId/responsesGET /feedbacksGET /reputation/leaderboard
Agent discovery
| Endpoint | Purpose |
|---|---|
GET /agents | Agent list with pagination, sort, order, and optional EVM chain filters. |
GET /agents/:agentId | Agent detail by numeric Agent ID. Returns 409 when the numeric ID is ambiguous across networks. |
GET /agents/by-id/:canonicalAgentId | Agent detail by canonical Agent ID. Recommended for cross-network links. |
GET /search | Full-text and tag-based Agent search with optional minimum score and EVM chain filters. |
GET /agents supports sort values:
created_atupdated_atweighted_scorefeedback_count
order accepts asc or desc.
GET /search supports:
qtagminScorepagepageSizechainTypechainId
Feedback and responses
| Endpoint | Purpose |
|---|---|
GET /agents/:agentId/feedbacks | Feedback list for one Agent by numeric Agent ID. |
GET /agents/by-id/:canonicalAgentId/feedbacks | Feedback list for one Agent by canonical Agent ID. |
GET /agents/:agentId/feedbacks/:feedbackId/responses | Response list under a specific feedback record. |
GET /agents/by-id/:canonicalAgentId/feedbacks/:feedbackId/responses | Response list under a specific feedback record by canonical Agent ID. |
GET /feedbacks | Cross-Agent feedback query, with optional revoked-feedback inclusion. |
Reputation
| Endpoint | Purpose |
|---|---|
GET /agents/:agentId/reputation | Reputation metrics for one Agent by numeric Agent ID. |
GET /agents/by-id/:canonicalAgentId/reputation | Reputation metrics for one Agent by canonical Agent ID. |
GET /reputation/leaderboard | Ranking view ordered by the current reputation model. |
Response envelope
Successful collection endpoints return data as an array. Paginated list endpoints also return a
pagination object.
| Field | Type | Description |
|---|---|---|
data | object, array, or null | The endpoint payload. Reputation detail returns null when the Agent exists but metrics have not been materialized yet. |
pagination.page | number | Current page number for paginated list endpoints. |
pagination.pageSize | number | Page size used by the request. |
pagination.total | number | Total matching row count for paginated list endpoints. |
Error responses use this shape:
{
"error": {
"code": "BAD_REQUEST",
"message": "invalid page",
"requestId": "req_d572cfce-1f1b-493a-9fc9-2c2f8d0db93a"
}
}Common error codes:
| HTTP status | error.code | Typical cause |
|---|---|---|
400 | BAD_REQUEST | Invalid page, pageSize, numeric ID, chain filter, sort, order, or bounded text input. |
404 | NOT_FOUND | Agent or canonical Agent ID does not exist. |
409 | CONFLICT | Numeric agentId is ambiguous across networks. Use canonicalAgentId. |
429 | RATE_LIMITED | Request exceeded the configured route or global rate limit. |
500 | INTERNAL_ERROR | Unexpected server-side failure. |
Rate limit headers
Rate limiting is enabled on the public API. Clients should read the response headers instead of hard-coding a fixed request budget, because route weights and limits are deployment configuration.
| Header | Description |
|---|---|
x-agentpass-ratelimit-limit | Maximum request weight allowed in the current window. |
x-agentpass-ratelimit-used | Request weight consumed in the current window. |
x-agentpass-ratelimit-remaining | Remaining request weight in the current window. |
x-agentpass-ratelimit-reset | Unix timestamp, in seconds, when the current window resets. |
retry-after | Seconds to wait before retrying. Present on rate-limited responses. |
Agent object
Agent list, detail, search, and leaderboard responses share the same Agent shape.
| Field | Type | Description |
|---|---|---|
agentId | string | Numeric Agent ID rendered as a string for safe transport. |
canonicalAgentId | string | Cross-network stable identifier: chainType:chainId:registryAddress:localAgentId. |
chainType | string | Source chain type. Use evm for the current EVM integration surface. |
chainId | string | Chain identifier. Sepolia uses 11155111; Avalanche Mainnet uses 43114. |
registryAddress | string | Registry address used in the canonical Agent ID. |
localAgentId | string | Per-registry Agent ID. For current EVM deployments this matches agentId. |
asset | string | Contract asset identifier captured by the indexer. |
owner | string | Current owner snapshot from the Identity Registry. |
creator | string | Creator address captured at registration. |
status | active or burned | Current lifecycle state. |
agentUri | string or null | Current Agent profile URI. |
collectionPointer | string or null | Optional external collection pointer. |
agentWallet | string or null | Optional operator wallet configured for the Agent. |
feedbackCount | number | Indexed feedback count. |
ownerVersion | number | Owner projection version used by the indexer. |
createdAt | ISO timestamp | Indexed creation time. |
updatedAt | ISO timestamp | Last indexed update time. |
burnedAt | ISO timestamp or null | Burn timestamp when the Agent was retired. |
profile | object or null | Current parsed Registration File snapshot. |
profile.version | number | Indexed Registration File snapshot version. |
profile.sourceUri | string | Source URI fetched by the profile worker. |
profile.contentHash | string | Indexed content hash. |
profile.name | string or null | Parsed profile name. |
profile.description | string or null | Parsed profile description. |
profile.tags | string[] | Parsed profile tags. |
profile.services | object[] | Parsed service descriptors. Each item includes name, endpoint, and version. |
profile.services[].name | string | Parsed service name. |
profile.services[].endpoint | string or null | Parsed service endpoint. |
profile.services[].version | string or null | Parsed service version. |
profile.content | object | Full parsed Registration File content. |
reputation | object or null | Materialized reputation metrics, when available. |
Agent URI and Registration File
agentUri must point to an off-chain URI. The EVM contract stores only the URI string. The
component that actually fetches and parses Agent URI content is
agentpass-indexer/src/profile/fetcher.ts.
The current indexer supports only these URI schemes:
https://ipfs://
Base64 data URIs such as data:application/json;base64,... are not supported yet.
Unsupported URI schemes may still appear in agentUri because the contract stores the raw URI
string, but they are not fetched into profile.
For protocol integrations, the Registration File referenced by the Agent URI must be a JSON document with the following structure:
{
"type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
"name": "myAgentName",
"description": "A natural language description of the Agent, which MAY include what it does, how it works, pricing, and interaction methods",
"image": "https://example.com/agentimage.png",
"services": [
{
"name": "web",
"endpoint": "https://web.agentxyz.com/"
},
{
"name": "A2A",
"endpoint": "https://agent.example/.well-known/agent-card.json",
"version": "0.3.0"
},
{
"name": "MCP",
"endpoint": "https://mcp.agent.eth/",
"version": "2025-06-18"
},
{
"name": "OASF",
"endpoint": "ipfs://{cid}",
"version": "0.8",
"skills": [],
"domains": []
},
{
"name": "ENS",
"endpoint": "vitalik.eth",
"version": "v1"
},
{
"name": "DID",
"endpoint": "did:method:foobar",
"version": "v1"
},
{
"name": "email",
"endpoint": "mail@myagent.com"
}
],
"x402Support": false,
"active": true,
"registrations": [
{
"agentId": 22,
"agentRegistry": "{namespace}:{chainId}:{identityRegistry}"
}
],
"supportedTrust": ["reputation", "crypto-economic", "tee-attestation"]
}agentRegistry uses the {namespace}:{chainId}:{identityRegistry} format, for example
eip155:1:0x742.... The OASF service skills and domains fields are optional.
The current indexer validation is intentionally narrower than the full Registration File shape. It
requires a string type, a non-empty string name, bounded optional description, and, when
services is present, service entries with string name and string endpoint. Additional fields
such as image, x402Support, active, registrations, supportedTrust, skills, and
domains are preserved in profile.content.
Reputation object
| Field | Type | Description |
|---|---|---|
canonicalAgentId | string | Present on dedicated reputation and leaderboard responses. |
chainType | string | Present when the response includes Agent context. |
chainId | string | Present when the response includes Agent context. |
registryAddress | string | Present when the response includes Agent context. |
localAgentId | string | Present when the response includes Agent context. |
agentId | string | Present on dedicated reputation and leaderboard responses. |
totalFeedback | number | Active, non-revoked feedback count used for scoring. |
uniqueClients | number | Count of unique active feedback submitters. |
avgScore | string or null | Decimal score after value normalization. |
positiveRatio | string or null | Share of active feedback with positive score. |
weightedScore | string or null | Weighted discovery score. |
diversityRatio | string or null | uniqueClients / totalFeedback. |
tier | string or null | Current tier: unrated, bronze, silver, or gold. |
updatedAt | ISO timestamp or null | Last materialization time. |
List Agents
The IDs and addresses below are illustrative. Use GET /agents on the target environment to
discover current records before calling detail endpoints.
Request:
curl "https://agentpass-api.myfinchain.com/agents?chainType=evm&chainId=11155111&page=1&pageSize=20&sort=weighted_score&order=desc"Response:
{
"data": [
{
"agentId": "202",
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"chainType": "evm",
"chainId": "11155111",
"registryAddress": "0x1111111111111111111111111111111111111111",
"localAgentId": "202",
"asset": "asset-202",
"owner": "0x2020202020202020202020202020202020202020",
"creator": "0x3030303030303030303030303030303030303030",
"status": "active",
"agentUri": "https://example.com/202.json",
"collectionPointer": null,
"agentWallet": "0x2020202020202020202020202020202020202020",
"feedbackCount": 3,
"ownerVersion": 1,
"createdAt": "2026-04-30T10:00:00.000Z",
"updatedAt": "2026-04-30T11:00:00.000Z",
"burnedAt": null,
"profile": {
"version": 1,
"sourceUri": "https://example.com/202.json",
"contentHash": "hash-202",
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"],
"services": [
{
"name": "Relay API",
"endpoint": "https://relay.example/api",
"version": "1.0.0"
}
],
"content": {
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"]
}
},
"reputation": {
"totalFeedback": 3,
"uniqueClients": 2,
"avgScore": "4.10",
"positiveRatio": "0.80",
"weightedScore": "1.95",
"diversityRatio": "0.66",
"tier": "silver",
"updatedAt": "2026-04-30T11:00:00.000Z"
}
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1
}
}Get Agent Detail
Use canonical Agent IDs for durable links and cross-network integrations.
Request:
curl "https://agentpass-api.myfinchain.com/agents/by-id/evm%3A11155111%3A0x1111111111111111111111111111111111111111%3A202"Response:
{
"data": {
"agentId": "202",
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"chainType": "evm",
"chainId": "11155111",
"registryAddress": "0x1111111111111111111111111111111111111111",
"localAgentId": "202",
"asset": "asset-202",
"owner": "0x2020202020202020202020202020202020202020",
"creator": "0x3030303030303030303030303030303030303030",
"status": "active",
"agentUri": "https://example.com/202.json",
"collectionPointer": null,
"agentWallet": "0x2020202020202020202020202020202020202020",
"feedbackCount": 3,
"ownerVersion": 1,
"createdAt": "2026-04-30T10:00:00.000Z",
"updatedAt": "2026-04-30T11:00:00.000Z",
"burnedAt": null,
"profile": {
"version": 1,
"sourceUri": "https://example.com/202.json",
"contentHash": "hash-202",
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"],
"services": [
{
"name": "Relay API",
"endpoint": "https://relay.example/api",
"version": "1.0.0"
}
],
"content": {
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"]
}
},
"reputation": {
"totalFeedback": 3,
"uniqueClients": 2,
"avgScore": "4.10",
"positiveRatio": "0.80",
"weightedScore": "1.95",
"diversityRatio": "0.66",
"tier": "silver",
"updatedAt": "2026-04-30T11:00:00.000Z"
}
}
}Legacy numeric detail requests are still available:
curl "https://agentpass-api.myfinchain.com/agents/202"If the numeric ID is ambiguous across networks, the API returns 409 and the client should retry
with GET /agents/by-id/:canonicalAgentId.
Search Agents
Request:
curl "https://agentpass-api.myfinchain.com/search?q=relay&tag=automation&minScore=4&chainType=evm&chainId=11155111&page=1&pageSize=20"Response:
{
"data": [
{
"agentId": "202",
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"chainType": "evm",
"chainId": "11155111",
"registryAddress": "0x1111111111111111111111111111111111111111",
"localAgentId": "202",
"asset": "asset-202",
"owner": "0x2020202020202020202020202020202020202020",
"creator": "0x3030303030303030303030303030303030303030",
"status": "active",
"agentUri": "https://example.com/202.json",
"collectionPointer": null,
"agentWallet": "0x2020202020202020202020202020202020202020",
"feedbackCount": 3,
"ownerVersion": 1,
"createdAt": "2026-04-30T10:00:00.000Z",
"updatedAt": "2026-04-30T11:00:00.000Z",
"burnedAt": null,
"profile": {
"version": 1,
"sourceUri": "https://example.com/202.json",
"contentHash": "hash-202",
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"],
"services": [
{
"name": "Relay API",
"endpoint": "https://relay.example/api",
"version": "1.0.0"
}
],
"content": {
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"]
}
},
"reputation": {
"totalFeedback": 3,
"uniqueClients": 2,
"avgScore": "4.10",
"positiveRatio": "0.80",
"weightedScore": "1.95",
"diversityRatio": "0.66",
"tier": "silver",
"updatedAt": "2026-04-30T11:00:00.000Z"
}
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1
}
}List Feedback
Request by canonical Agent ID:
curl "https://agentpass-api.myfinchain.com/agents/by-id/evm%3A11155111%3A0x1111111111111111111111111111111111111111%3A202/feedbacks?includeRevoked=true&page=1&pageSize=20"Response:
{
"data": [
{
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"agentId": "202",
"feedbackId": "501",
"client": "0x4040404040404040404040404040404040404040",
"value": "410",
"valueDecimals": 2,
"tag1": "automation",
"tag2": "reliability",
"endpoint": "relay-api",
"isRevoked": false,
"createdAt": "2026-04-30T10:40:00.000Z",
"revokedAt": null
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1
}
}Cross-Agent feedback query:
curl "https://agentpass-api.myfinchain.com/feedbacks?includeRevoked=true&page=1&pageSize=20"The response uses the same data item shape and pagination envelope as the Agent-scoped
feedback query.
Feedback fields:
| Field | Type | Description |
|---|---|---|
canonicalAgentId | string | Agent identifier for the feedback target. |
agentId | string | Numeric Agent ID rendered as a string. |
feedbackId | string | Per-Agent feedback sequence ID. |
client | string | Feedback submitter address. |
value | string | Raw feedback value before decimal normalization. |
valueDecimals | number | Decimal precision for value. |
tag1 | string | Primary feedback label. |
tag2 | string | Secondary feedback label. |
endpoint | string | Service endpoint or service label associated with the feedback. |
isRevoked | boolean | Whether the feedback was revoked by the original client. |
createdAt | ISO timestamp | Feedback creation time. |
revokedAt | ISO timestamp or null | Revocation time, when applicable. |
List Feedback Responses
Request:
curl "https://agentpass-api.myfinchain.com/agents/by-id/evm%3A11155111%3A0x1111111111111111111111111111111111111111%3A202/feedbacks/501/responses?page=1&pageSize=20"Response:
{
"data": [
{
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"agentId": "202",
"feedbackId": "501",
"responseId": "1",
"responder": "0x2020202020202020202020202020202020202020",
"responseUri": "https://example.com/responses/501-1.json",
"createdAt": "2026-04-30T10:45:00.000Z"
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1
}
}Response fields:
| Field | Type | Description |
|---|---|---|
canonicalAgentId | string | Agent identifier for the response target. |
agentId | string | Numeric Agent ID rendered as a string. |
feedbackId | string | Parent feedback ID. |
responseId | string | Per-feedback response sequence ID. |
responder | string | Address or identifier that appended the response. |
responseUri | string | External response document URI. |
createdAt | ISO timestamp | Response creation time. |
Get Agent Reputation
Request:
curl "https://agentpass-api.myfinchain.com/agents/by-id/evm%3A11155111%3A0x1111111111111111111111111111111111111111%3A202/reputation"Response:
{
"data": {
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"chainType": "evm",
"chainId": "11155111",
"registryAddress": "0x1111111111111111111111111111111111111111",
"localAgentId": "202",
"agentId": "202",
"totalFeedback": 3,
"uniqueClients": 2,
"avgScore": "4.10",
"positiveRatio": "0.80",
"weightedScore": "1.95",
"diversityRatio": "0.66",
"tier": "silver",
"updatedAt": "2026-04-30T11:00:00.000Z"
}
}When the Agent exists but metrics are not materialized yet, the response is:
{
"data": null
}Leaderboard
Request:
curl "https://agentpass-api.myfinchain.com/reputation/leaderboard?chainType=evm&chainId=11155111&page=1&pageSize=20"Response:
{
"data": [
{
"agentId": "202",
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"chainType": "evm",
"chainId": "11155111",
"registryAddress": "0x1111111111111111111111111111111111111111",
"localAgentId": "202",
"status": "active",
"profile": {
"version": 1,
"sourceUri": "https://example.com/202.json",
"contentHash": "hash-202",
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"],
"services": [
{
"name": "Relay API",
"endpoint": "https://relay.example/api",
"version": "1.0.0"
}
],
"content": {
"name": "Sepolia Relay",
"description": "EVM automation relay",
"tags": ["automation", "relay"]
}
},
"reputation": {
"canonicalAgentId": "evm:11155111:0x1111111111111111111111111111111111111111:202",
"chainType": "evm",
"chainId": "11155111",
"registryAddress": "0x1111111111111111111111111111111111111111",
"localAgentId": "202",
"agentId": "202",
"totalFeedback": 3,
"uniqueClients": 2,
"avgScore": "4.10",
"positiveRatio": "0.80",
"weightedScore": "1.95",
"diversityRatio": "0.66",
"tier": "silver",
"updatedAt": "2026-04-30T11:00:00.000Z"
}
}
],
"pagination": {
"page": 1,
"pageSize": 20,
"total": 1
}
}EVM contracts
Agentpass currently exposes two upgradeable EVM contracts:
AgentpassIdentityRegistryAgentpassReputationRegistry
Both use UUPS upgradeability and OpenZeppelin upgradeable base contracts. Production integrations should use the deployed proxy address, not the implementation address.
AgentpassIdentityRegistry
The Identity Registry is an ERC-721-based Agent identity registry. Each registered Agent is minted as a unique token.
Callable interface
| Function | Access | Purpose |
|---|---|---|
initialize(address initialOwner) | Initializer | Initializes the registry and sets the contract owner. |
setReputationRegistry(address registry) | Contract owner | Links the Reputation Registry contract. |
register(string agentURI) | Any caller | Registers a new Agent, mints the identity token, stores the token URI, and sets the caller as the initial Agent wallet. |
setAgentURI(uint256 agentId, string newURI) | Agent owner or approved operator | Updates the Agent profile URI. |
setMetadata(uint256 agentId, string key, string value, bool immutableValue) | Agent owner or approved operator | Sets keyed metadata. Immutable metadata cannot be overwritten later. |
deleteMetadata(uint256 agentId, string key) | Agent owner or approved operator | Deletes keyed metadata unless it is immutable. |
getMetadata(uint256 agentId, string key) | Read-only | Reads keyed metadata. |
setCollectionPointer(uint256 agentId, string pointer, bool locked) | Agent owner or approved operator | Sets a collection pointer and optionally locks it. |
collectionPointerOf(uint256 agentId) | Read-only | Reads the collection pointer and lock state. |
setAgentWallet(uint256 agentId, address wallet) | Agent owner or approved operator | Sets the Agent wallet. The wallet cannot be the zero address. |
unsetAgentWallet(uint256 agentId) | Agent owner or approved operator | Clears the Agent wallet. |
agentWalletOf(uint256 agentId) | Read-only | Reads the Agent wallet. |
burn(uint256 agentId) | Agent owner or approved operator | Burns the Agent identity token, marks the Agent as burned, and clears the Agent wallet. |
isBurned(uint256 agentId) | Read-only | Returns whether the Agent was burned. |
isAuthorizedOrOwner(address spender, uint256 agentId) | Read-only | Returns whether an address is the Agent owner, approved address, or approved operator. |
Events
| Event | Purpose |
|---|---|
RegistryInitialized(address authority, address baseCollection, address reputationRegistry) | Registry initialization or reputation registry link state changed. |
Registered(uint256 agentId, address asset, address owner, address creator, string agentURI) | New Agent identity registered. |
UriUpdated(uint256 agentId, string newURI, address updatedBy) | Agent profile URI changed. |
MetadataSet(uint256 agentId, string indexedKey, string key, string value, bool immutableValue) | Metadata set. |
MetadataDeleted(uint256 agentId, string indexedKey, string key) | Metadata deleted. |
CollectionPointerSet(uint256 agentId, string pointer, bool locked) | Collection pointer set or locked. |
AgentWalletSet(uint256 agentId, address wallet) | Agent wallet set. |
AgentWalletUnset(uint256 agentId, address clearedBy) | Agent wallet cleared. |
AgentTransferred(uint256 agentId, address asset, address from, address to) | Agent token transferred. |
OwnerSynced(uint256 agentId, address asset, address previousOwner, address currentOwner) | Owner projection should be refreshed. |
AgentBurned(uint256 agentId, address asset, address burnedBy) | Agent identity burned. |
Errors
| Error | Meaning |
|---|---|
NotAuthorized() | Caller is not the owner, approved address, or approved operator for the Agent. |
ImmutableMetadata() | Caller attempted to overwrite or delete immutable metadata. |
CollectionPointerLocked() | Caller attempted to change a locked collection pointer. |
ZeroAddress() | Caller provided the zero address where a non-zero address is required. |
AgentpassReputationRegistry
The Reputation Registry stores feedback, revocation state, and append-only response records for registered Agents.
Callable interface
| Function | Access | Purpose |
|---|---|---|
initialize(address identityRegistryAddress, address initialOwner) | Initializer | Initializes the contract and links the Identity Registry. |
giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackFileHash) | Any non-owner/non-operator caller | Submits feedback for an Agent and returns a new feedbackId. |
revokeFeedback(uint256 agentId, uint256 feedbackId) | Original feedback client | Marks feedback as revoked. |
appendResponse(uint256 agentId, uint256 feedbackId, string responseURI, bytes32 responseHash) | Any caller | Appends a response under existing feedback and returns a new responseId. |
readFeedback(uint256 agentId, uint256 feedbackId) | Read-only | Reads feedback client, value, decimals, tags, and revocation state. |
responseCount(uint256 agentId, uint256 feedbackId) | Read-only | Reads the number of responses under a feedback record. |
Feedback value limits
giveFeedback rejects values when:
valueDecimalsis greater than18.valueis less than-1e38.valueis greater than1e38.
The contract also rejects feedback from the current owner or authorized operator of the target Agent.
Events
| Event | Purpose |
|---|---|
NewFeedback(uint256 agentId, uint256 feedbackId, address client, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackFileHash) | Feedback submitted. |
FeedbackRevoked(uint256 agentId, uint256 feedbackId, address client) | Feedback revoked by the original feedback client. |
ResponseAppended(uint256 agentId, uint256 feedbackId, uint256 responseId, address responder, string responseURI, bytes32 responseHash) | Response appended under feedback. |
Errors
| Error | Meaning |
|---|---|
SelfFeedbackNotAllowed() | Caller is the Agent owner or authorized operator. |
InvalidFeedback() | Feedback does not exist or registry initialization input is invalid. |
InvalidValue() | Feedback value or decimal precision is outside supported bounds. |
EmptyResponseURI() | Response append attempted with an empty URI. |
NotFeedbackClient() | Caller is not the original feedback client for revocation. |
EVM Contracts Info
Use the network selector below to view deployed proxy addresses, implementation addresses, setup metadata, and ABI signatures. Production integrations should call the deployed proxy addresses, not the implementation addresses.
Current EVM contract deployments are listed for Ethereum Sepolia and Avalanche Mainnet. Avalanche
Mainnet uses chain ID 43114.
EVM Contracts Info
Select an EVM network to view deployed addresses and ABI signatures.
- Status
- Testnet
- Chain ID
- 11155111
- Deployed At
- 2026-08-04T03:28:01.979Z
- Setup Block
- 11414726
- Setup Transaction
- 0x82e9a388e16aec499e9805c7aed276a506727cb8d68425842d439229c3186448
AgentpassIdentityRegistry
- Proxy Address
- 0x9a71f0Ed8D1de2122C1c0E99D8295A3f793676B2
- Implementation Address
- 0xA9629a88ff3019184FF7B2951AD20211e07F610c
- Upgrade Kind
- UUPS
ABI
constructor()
error AddressEmptyCode(address target)
error CollectionPointerLocked()
error ERC1967InvalidImplementation(address implementation)
error ERC1967NonPayable()
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
error ERC721InsufficientApproval(address operator, uint256 tokenId)
error ERC721InvalidApprover(address approver)
error ERC721InvalidOperator(address operator)
error ERC721InvalidOwner(address owner)
error ERC721InvalidReceiver(address receiver)
error ERC721InvalidSender(address sender)
error ERC721NonexistentToken(uint256 tokenId)
error FailedCall()
error ImmutableMetadata()
error InvalidInitialization()
error NotAuthorized()
error NotInitializing()
error OwnableInvalidOwner(address owner)
error OwnableUnauthorizedAccount(address account)
error UUPSUnauthorizedCallContext()
error UUPSUnsupportedProxiableUUID(bytes32 slot)
error ZeroAddress()
event AgentBurned(indexed uint256 agentId, indexed address asset, indexed address burnedBy)
event AgentTransferred(indexed uint256 agentId, indexed address asset, indexed address from, address to)
event AgentWalletSet(indexed uint256 agentId, indexed address wallet)
event AgentWalletUnset(indexed uint256 agentId, indexed address clearedBy)
event Approval(indexed address owner, indexed address approved, indexed uint256 tokenId)
event ApprovalForAll(indexed address owner, indexed address operator, bool approved)
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
event CollectionPointerSet(indexed uint256 agentId, string pointer, bool locked)
event Initialized(uint64 version)
event MetadataDeleted(indexed uint256 agentId, indexed string indexedKey, string key)
event MetadataSet(indexed uint256 agentId, indexed string indexedKey, string key, string value, bool immutableValue)
event MetadataUpdate(uint256 _tokenId)
event OwnerSynced(indexed uint256 agentId, indexed address asset, address previousOwner, address currentOwner)
event OwnershipTransferred(indexed address previousOwner, indexed address newOwner)
event Registered(indexed uint256 agentId, indexed address asset, indexed address owner, address creator, string agentURI)
event RegistryInitialized(indexed address authority, indexed address baseCollection, indexed address reputationRegistry)
event Transfer(indexed address from, indexed address to, indexed uint256 tokenId)
event Upgraded(indexed address implementation)
event UriUpdated(indexed uint256 agentId, string newURI, indexed address updatedBy)
function UPGRADE_INTERFACE_VERSION() view returns (string)
function agentWalletOf(uint256 agentId) view returns (address)
function approve(address to, uint256 tokenId)
function balanceOf(address owner) view returns (uint256)
function burn(uint256 agentId)
function collectionPointerOf(uint256 agentId) view returns (string pointer, bool locked)
function deleteMetadata(uint256 agentId, string key)
function getApproved(uint256 tokenId) view returns (address)
function getMetadata(uint256 agentId, string key) view returns (string)
function initialize(address initialOwner)
function isApprovedForAll(address owner, address operator) view returns (bool)
function isAuthorizedOrOwner(address spender, uint256 agentId) view returns (bool)
function isBurned(uint256 agentId) view returns (bool)
function name() view returns (string)
function owner() view returns (address)
function ownerOf(uint256 tokenId) view returns (address)
function proxiableUUID() view returns (bytes32)
function register(string agentURI) returns (uint256 agentId)
function renounceOwnership()
function reputationRegistry() view returns (address)
function safeTransferFrom(address from, address to, uint256 tokenId)
function safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
function setAgentURI(uint256 agentId, string newURI)
function setAgentWallet(uint256 agentId, address wallet)
function setApprovalForAll(address operator, bool approved)
function setCollectionPointer(uint256 agentId, string pointer, bool locked)
function setMetadata(uint256 agentId, string key, string value, bool immutableValue)
function setReputationRegistry(address registry)
function supportsInterface(bytes4 interfaceId) view returns (bool)
function symbol() view returns (string)
function tokenURI(uint256 tokenId) view returns (string)
function transferFrom(address from, address to, uint256 tokenId)
function transferOwnership(address newOwner)
function unsetAgentWallet(uint256 agentId)
function upgradeToAndCall(address newImplementation, bytes data) payableAgentpassReputationRegistry
- Proxy Address
- 0x5d49C42fa1Ec7cF866964B2AB795A422d37a8c17
- Implementation Address
- 0x9820658082cc7bA81377fcD18d0842B8aF94A5Eb
- Upgrade Kind
- UUPS
ABI
constructor()
error AddressEmptyCode(address target)
error ERC1967InvalidImplementation(address implementation)
error ERC1967NonPayable()
error EmptyResponseURI()
error FailedCall()
error InvalidFeedback()
error InvalidInitialization()
error InvalidValue()
error NotFeedbackClient()
error NotInitializing()
error OwnableInvalidOwner(address owner)
error OwnableUnauthorizedAccount(address account)
error SelfFeedbackNotAllowed()
error UUPSUnauthorizedCallContext()
error UUPSUnsupportedProxiableUUID(bytes32 slot)
event FeedbackRevoked(indexed uint256 agentId, indexed uint256 feedbackId, indexed address client)
event Initialized(uint64 version)
event NewFeedback(indexed uint256 agentId, indexed uint256 feedbackId, indexed address client, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackFileHash)
event OwnershipTransferred(indexed address previousOwner, indexed address newOwner)
event ResponseAppended(indexed uint256 agentId, indexed uint256 feedbackId, indexed uint256 responseId, address responder, string responseURI, bytes32 responseHash)
event Upgraded(indexed address implementation)
function UPGRADE_INTERFACE_VERSION() view returns (string)
function appendResponse(uint256 agentId, uint256 feedbackId, string responseURI, bytes32 responseHash) returns (uint256 responseId)
function giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackFileHash) returns (uint256 feedbackId)
function identityRegistry() view returns (address)
function initialize(address identityRegistryAddress, address initialOwner)
function owner() view returns (address)
function proxiableUUID() view returns (bytes32)
function readFeedback(uint256 agentId, uint256 feedbackId) view returns (address client, int128 value, uint8 valueDecimals, string tag1, string tag2, bool isRevoked)
function renounceOwnership()
function responseCount(uint256 agentId, uint256 feedbackId) view returns (uint256)
function revokeFeedback(uint256 agentId, uint256 feedbackId)
function transferOwnership(address newOwner)
function upgradeToAndCall(address newImplementation, bytes data) payable- Status
- Mainnet
- Chain ID
- 43114
- Deployed At
- 2026-08-10T02:49:34.548Z
- Setup Block
- 92447519
- Setup Transaction
- 0x20641a82fa7aef42c7cb20bc9739ab4d622c80cdecfbf747d51c0d5ad49bc8a5
AgentpassIdentityRegistry
- Proxy Address
- 0x7dCbFba3440462Cbb518b61D9424DDF2Cfe89F0f
- Implementation Address
- 0xc8b3a1355ba6184a343307490E07b175E3B4c5Dd
- Upgrade Kind
- UUPS
ABI
constructor()
error AddressEmptyCode(address target)
error CollectionPointerLocked()
error ERC1967InvalidImplementation(address implementation)
error ERC1967NonPayable()
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner)
error ERC721InsufficientApproval(address operator, uint256 tokenId)
error ERC721InvalidApprover(address approver)
error ERC721InvalidOperator(address operator)
error ERC721InvalidOwner(address owner)
error ERC721InvalidReceiver(address receiver)
error ERC721InvalidSender(address sender)
error ERC721NonexistentToken(uint256 tokenId)
error FailedCall()
error ImmutableMetadata()
error InvalidInitialization()
error NotAuthorized()
error NotInitializing()
error OwnableInvalidOwner(address owner)
error OwnableUnauthorizedAccount(address account)
error UUPSUnauthorizedCallContext()
error UUPSUnsupportedProxiableUUID(bytes32 slot)
error ZeroAddress()
event AgentBurned(indexed uint256 agentId, indexed address asset, indexed address burnedBy)
event AgentTransferred(indexed uint256 agentId, indexed address asset, indexed address from, address to)
event AgentWalletSet(indexed uint256 agentId, indexed address wallet)
event AgentWalletUnset(indexed uint256 agentId, indexed address clearedBy)
event Approval(indexed address owner, indexed address approved, indexed uint256 tokenId)
event ApprovalForAll(indexed address owner, indexed address operator, bool approved)
event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId)
event CollectionPointerSet(indexed uint256 agentId, string pointer, bool locked)
event Initialized(uint64 version)
event MetadataDeleted(indexed uint256 agentId, indexed string indexedKey, string key)
event MetadataSet(indexed uint256 agentId, indexed string indexedKey, string key, string value, bool immutableValue)
event MetadataUpdate(uint256 _tokenId)
event OwnerSynced(indexed uint256 agentId, indexed address asset, address previousOwner, address currentOwner)
event OwnershipTransferred(indexed address previousOwner, indexed address newOwner)
event Registered(indexed uint256 agentId, indexed address asset, indexed address owner, address creator, string agentURI)
event RegistryInitialized(indexed address authority, indexed address baseCollection, indexed address reputationRegistry)
event Transfer(indexed address from, indexed address to, indexed uint256 tokenId)
event Upgraded(indexed address implementation)
event UriUpdated(indexed uint256 agentId, string newURI, indexed address updatedBy)
function UPGRADE_INTERFACE_VERSION() view returns (string)
function agentWalletOf(uint256 agentId) view returns (address)
function approve(address to, uint256 tokenId)
function balanceOf(address owner) view returns (uint256)
function burn(uint256 agentId)
function collectionPointerOf(uint256 agentId) view returns (string pointer, bool locked)
function deleteMetadata(uint256 agentId, string key)
function getApproved(uint256 tokenId) view returns (address)
function getMetadata(uint256 agentId, string key) view returns (string)
function initialize(address initialOwner)
function isApprovedForAll(address owner, address operator) view returns (bool)
function isAuthorizedOrOwner(address spender, uint256 agentId) view returns (bool)
function isBurned(uint256 agentId) view returns (bool)
function name() view returns (string)
function owner() view returns (address)
function ownerOf(uint256 tokenId) view returns (address)
function proxiableUUID() view returns (bytes32)
function register(string agentURI) returns (uint256 agentId)
function renounceOwnership()
function reputationRegistry() view returns (address)
function safeTransferFrom(address from, address to, uint256 tokenId)
function safeTransferFrom(address from, address to, uint256 tokenId, bytes data)
function setAgentURI(uint256 agentId, string newURI)
function setAgentWallet(uint256 agentId, address wallet)
function setApprovalForAll(address operator, bool approved)
function setCollectionPointer(uint256 agentId, string pointer, bool locked)
function setMetadata(uint256 agentId, string key, string value, bool immutableValue)
function setReputationRegistry(address registry)
function supportsInterface(bytes4 interfaceId) view returns (bool)
function symbol() view returns (string)
function tokenURI(uint256 tokenId) view returns (string)
function transferFrom(address from, address to, uint256 tokenId)
function transferOwnership(address newOwner)
function unsetAgentWallet(uint256 agentId)
function upgradeToAndCall(address newImplementation, bytes data) payableAgentpassReputationRegistry
- Proxy Address
- 0xa2608B615266861C45dd005c2b767ca897a7467C
- Implementation Address
- 0x90D39339640EA44A280B493c70799dB70Caa5574
- Upgrade Kind
- UUPS
ABI
constructor()
error AddressEmptyCode(address target)
error ERC1967InvalidImplementation(address implementation)
error ERC1967NonPayable()
error EmptyResponseURI()
error FailedCall()
error InvalidFeedback()
error InvalidInitialization()
error InvalidValue()
error NotFeedbackClient()
error NotInitializing()
error OwnableInvalidOwner(address owner)
error OwnableUnauthorizedAccount(address account)
error SelfFeedbackNotAllowed()
error UUPSUnauthorizedCallContext()
error UUPSUnsupportedProxiableUUID(bytes32 slot)
event FeedbackRevoked(indexed uint256 agentId, indexed uint256 feedbackId, indexed address client)
event Initialized(uint64 version)
event NewFeedback(indexed uint256 agentId, indexed uint256 feedbackId, indexed address client, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackFileHash)
event OwnershipTransferred(indexed address previousOwner, indexed address newOwner)
event ResponseAppended(indexed uint256 agentId, indexed uint256 feedbackId, indexed uint256 responseId, address responder, string responseURI, bytes32 responseHash)
event Upgraded(indexed address implementation)
function UPGRADE_INTERFACE_VERSION() view returns (string)
function appendResponse(uint256 agentId, uint256 feedbackId, string responseURI, bytes32 responseHash) returns (uint256 responseId)
function giveFeedback(uint256 agentId, int128 value, uint8 valueDecimals, string tag1, string tag2, string endpoint, string feedbackURI, bytes32 feedbackFileHash) returns (uint256 feedbackId)
function identityRegistry() view returns (address)
function initialize(address identityRegistryAddress, address initialOwner)
function owner() view returns (address)
function proxiableUUID() view returns (bytes32)
function readFeedback(uint256 agentId, uint256 feedbackId) view returns (address client, int128 value, uint8 valueDecimals, string tag1, string tag2, bool isRevoked)
function renounceOwnership()
function responseCount(uint256 agentId, uint256 feedbackId) view returns (uint256)
function revokeFeedback(uint256 agentId, uint256 feedbackId)
function transferOwnership(address newOwner)
function upgradeToAndCall(address newImplementation, bytes data) payable