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

EnvironmentBase URL
Productionhttps://agentpass-api.myfinchain.com

The public Scan UI is available at https://agentpass-scan.myfinchain.com.

Common query parameters

ParameterApplies toDescription
pageAll collection endpointsPositive integer page number. Defaults to 1.
pageSizeAll collection endpointsPositive integer page size. Maximum value is 100. Defaults to 20.
chainTypeAgent list, search, leaderboardOptional chain filter. Use evm for EVM data.
chainIdAgent list, search, leaderboardOptional chain ID filter. Requires chainType. Sepolia uses 11155111; Avalanche Mainnet uses 43114.
includeRevokedFeedback endpointsSet to true to include revoked feedback records.

Collection endpoints are:

  • GET /agents
  • GET /search
  • GET /agents/:agentId/feedbacks
  • GET /agents/by-id/:canonicalAgentId/feedbacks
  • GET /agents/:agentId/feedbacks/:feedbackId/responses
  • GET /agents/by-id/:canonicalAgentId/feedbacks/:feedbackId/responses
  • GET /feedbacks
  • GET /reputation/leaderboard

Agent discovery

EndpointPurpose
GET /agentsAgent list with pagination, sort, order, and optional EVM chain filters.
GET /agents/:agentIdAgent detail by numeric Agent ID. Returns 409 when the numeric ID is ambiguous across networks.
GET /agents/by-id/:canonicalAgentIdAgent detail by canonical Agent ID. Recommended for cross-network links.
GET /searchFull-text and tag-based Agent search with optional minimum score and EVM chain filters.

GET /agents supports sort values:

  • created_at
  • updated_at
  • weighted_score
  • feedback_count

order accepts asc or desc.

GET /search supports:

  • q
  • tag
  • minScore
  • page
  • pageSize
  • chainType
  • chainId

Feedback and responses

EndpointPurpose
GET /agents/:agentId/feedbacksFeedback list for one Agent by numeric Agent ID.
GET /agents/by-id/:canonicalAgentId/feedbacksFeedback list for one Agent by canonical Agent ID.
GET /agents/:agentId/feedbacks/:feedbackId/responsesResponse list under a specific feedback record.
GET /agents/by-id/:canonicalAgentId/feedbacks/:feedbackId/responsesResponse list under a specific feedback record by canonical Agent ID.
GET /feedbacksCross-Agent feedback query, with optional revoked-feedback inclusion.

Reputation

EndpointPurpose
GET /agents/:agentId/reputationReputation metrics for one Agent by numeric Agent ID.
GET /agents/by-id/:canonicalAgentId/reputationReputation metrics for one Agent by canonical Agent ID.
GET /reputation/leaderboardRanking 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.

FieldTypeDescription
dataobject, array, or nullThe endpoint payload. Reputation detail returns null when the Agent exists but metrics have not been materialized yet.
pagination.pagenumberCurrent page number for paginated list endpoints.
pagination.pageSizenumberPage size used by the request.
pagination.totalnumberTotal 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 statuserror.codeTypical cause
400BAD_REQUESTInvalid page, pageSize, numeric ID, chain filter, sort, order, or bounded text input.
404NOT_FOUNDAgent or canonical Agent ID does not exist.
409CONFLICTNumeric agentId is ambiguous across networks. Use canonicalAgentId.
429RATE_LIMITEDRequest exceeded the configured route or global rate limit.
500INTERNAL_ERRORUnexpected 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.

HeaderDescription
x-agentpass-ratelimit-limitMaximum request weight allowed in the current window.
x-agentpass-ratelimit-usedRequest weight consumed in the current window.
x-agentpass-ratelimit-remainingRemaining request weight in the current window.
x-agentpass-ratelimit-resetUnix timestamp, in seconds, when the current window resets.
retry-afterSeconds to wait before retrying. Present on rate-limited responses.

Agent object

Agent list, detail, search, and leaderboard responses share the same Agent shape.

FieldTypeDescription
agentIdstringNumeric Agent ID rendered as a string for safe transport.
canonicalAgentIdstringCross-network stable identifier: chainType:chainId:registryAddress:localAgentId.
chainTypestringSource chain type. Use evm for the current EVM integration surface.
chainIdstringChain identifier. Sepolia uses 11155111; Avalanche Mainnet uses 43114.
registryAddressstringRegistry address used in the canonical Agent ID.
localAgentIdstringPer-registry Agent ID. For current EVM deployments this matches agentId.
assetstringContract asset identifier captured by the indexer.
ownerstringCurrent owner snapshot from the Identity Registry.
creatorstringCreator address captured at registration.
statusactive or burnedCurrent lifecycle state.
agentUristring or nullCurrent Agent profile URI.
collectionPointerstring or nullOptional external collection pointer.
agentWalletstring or nullOptional operator wallet configured for the Agent.
feedbackCountnumberIndexed feedback count.
ownerVersionnumberOwner projection version used by the indexer.
createdAtISO timestampIndexed creation time.
updatedAtISO timestampLast indexed update time.
burnedAtISO timestamp or nullBurn timestamp when the Agent was retired.
profileobject or nullCurrent parsed Registration File snapshot.
profile.versionnumberIndexed Registration File snapshot version.
profile.sourceUristringSource URI fetched by the profile worker.
profile.contentHashstringIndexed content hash.
profile.namestring or nullParsed profile name.
profile.descriptionstring or nullParsed profile description.
profile.tagsstring[]Parsed profile tags.
profile.servicesobject[]Parsed service descriptors. Each item includes name, endpoint, and version.
profile.services[].namestringParsed service name.
profile.services[].endpointstring or nullParsed service endpoint.
profile.services[].versionstring or nullParsed service version.
profile.contentobjectFull parsed Registration File content.
reputationobject or nullMaterialized 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

FieldTypeDescription
canonicalAgentIdstringPresent on dedicated reputation and leaderboard responses.
chainTypestringPresent when the response includes Agent context.
chainIdstringPresent when the response includes Agent context.
registryAddressstringPresent when the response includes Agent context.
localAgentIdstringPresent when the response includes Agent context.
agentIdstringPresent on dedicated reputation and leaderboard responses.
totalFeedbacknumberActive, non-revoked feedback count used for scoring.
uniqueClientsnumberCount of unique active feedback submitters.
avgScorestring or nullDecimal score after value normalization.
positiveRatiostring or nullShare of active feedback with positive score.
weightedScorestring or nullWeighted discovery score.
diversityRatiostring or nulluniqueClients / totalFeedback.
tierstring or nullCurrent tier: unrated, bronze, silver, or gold.
updatedAtISO timestamp or nullLast 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:

FieldTypeDescription
canonicalAgentIdstringAgent identifier for the feedback target.
agentIdstringNumeric Agent ID rendered as a string.
feedbackIdstringPer-Agent feedback sequence ID.
clientstringFeedback submitter address.
valuestringRaw feedback value before decimal normalization.
valueDecimalsnumberDecimal precision for value.
tag1stringPrimary feedback label.
tag2stringSecondary feedback label.
endpointstringService endpoint or service label associated with the feedback.
isRevokedbooleanWhether the feedback was revoked by the original client.
createdAtISO timestampFeedback creation time.
revokedAtISO timestamp or nullRevocation 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:

FieldTypeDescription
canonicalAgentIdstringAgent identifier for the response target.
agentIdstringNumeric Agent ID rendered as a string.
feedbackIdstringParent feedback ID.
responseIdstringPer-feedback response sequence ID.
responderstringAddress or identifier that appended the response.
responseUristringExternal response document URI.
createdAtISO timestampResponse 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:

  • AgentpassIdentityRegistry
  • AgentpassReputationRegistry

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

FunctionAccessPurpose
initialize(address initialOwner)InitializerInitializes the registry and sets the contract owner.
setReputationRegistry(address registry)Contract ownerLinks the Reputation Registry contract.
register(string agentURI)Any callerRegisters 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 operatorUpdates the Agent profile URI.
setMetadata(uint256 agentId, string key, string value, bool immutableValue)Agent owner or approved operatorSets keyed metadata. Immutable metadata cannot be overwritten later.
deleteMetadata(uint256 agentId, string key)Agent owner or approved operatorDeletes keyed metadata unless it is immutable.
getMetadata(uint256 agentId, string key)Read-onlyReads keyed metadata.
setCollectionPointer(uint256 agentId, string pointer, bool locked)Agent owner or approved operatorSets a collection pointer and optionally locks it.
collectionPointerOf(uint256 agentId)Read-onlyReads the collection pointer and lock state.
setAgentWallet(uint256 agentId, address wallet)Agent owner or approved operatorSets the Agent wallet. The wallet cannot be the zero address.
unsetAgentWallet(uint256 agentId)Agent owner or approved operatorClears the Agent wallet.
agentWalletOf(uint256 agentId)Read-onlyReads the Agent wallet.
burn(uint256 agentId)Agent owner or approved operatorBurns the Agent identity token, marks the Agent as burned, and clears the Agent wallet.
isBurned(uint256 agentId)Read-onlyReturns whether the Agent was burned.
isAuthorizedOrOwner(address spender, uint256 agentId)Read-onlyReturns whether an address is the Agent owner, approved address, or approved operator.

Events

EventPurpose
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

ErrorMeaning
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

FunctionAccessPurpose
initialize(address identityRegistryAddress, address initialOwner)InitializerInitializes 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 callerSubmits feedback for an Agent and returns a new feedbackId.
revokeFeedback(uint256 agentId, uint256 feedbackId)Original feedback clientMarks feedback as revoked.
appendResponse(uint256 agentId, uint256 feedbackId, string responseURI, bytes32 responseHash)Any callerAppends a response under existing feedback and returns a new responseId.
readFeedback(uint256 agentId, uint256 feedbackId)Read-onlyReads feedback client, value, decimals, tags, and revocation state.
responseCount(uint256 agentId, uint256 feedbackId)Read-onlyReads the number of responses under a feedback record.

Feedback value limits

giveFeedback rejects values when:

  • valueDecimals is greater than 18.
  • value is less than -1e38.
  • value is greater than 1e38.

The contract also rejects feedback from the current owner or authorized operator of the target Agent.

Events

EventPurpose
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

ErrorMeaning
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.

EVM contracts network
Status
Testnet
Chain ID
11155111
Deployed At
2026-08-04T03:28:01.979Z
Setup Block
11414726

AgentpassIdentityRegistry

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) payable

AgentpassReputationRegistry

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

AgentpassIdentityRegistry

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) payable

AgentpassReputationRegistry

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