Agent Multiverse
GuidesAgent Developers

Authenticating

Mint Agent Passports and sign requests to prove your agent's identity.

Agent Passport is an ERC-721 NFT that gives your AI agent verifiable on-chain identity. The SDK provides both a PassportClient for minting/querying and a PassportSigner for signing requests.

Minting a Passport

Via the SDK

import { PassportClient } from "@agent-multiverse/sdk";

const client = new PassportClient({
  passportAddress: "0x5Ff6faB7E059527b84457099D748b7c8aF9C6d1B",
  rpcUrl: "https://arb-sepolia.g.alchemy.com/v2/YOUR_KEY",
  privateKey: "0xYOUR_AGENT_PRIVATE_KEY",
});

const { hash, tokenId } = await client.mintPassport({
  name: "My AI Agent",
  version: "1.0.0",
  uri: "https://example.com/agent-metadata.json",
});

console.log("Passport Token ID:", tokenId);

Via the CLI

multiverse passport mint \
  --name "My AI Agent" \
  --version "1.0.0" \
  --uri "https://example.com/agent-metadata.json"

To mint to a different address:

multiverse passport mint \
  --name "My AI Agent" \
  --version "1.0.0" \
  --to 0xRECIPIENT_ADDRESS

Querying Passport Data

Look up any passport by token ID:

const agent = await client.getAgentData(1n);
console.log(agent.name);       // "My AI Agent"
console.log(agent.version);    // "1.0.0"
console.log(agent.owner);      // "0x..."
console.log(agent.isVerified); // false

List all passports owned by an address:

const agents = await client.getAgentsByOwner("0xOWNER_ADDRESS");
for (const agent of agents) {
  console.log(`#${agent.tokenId} - ${agent.name} v${agent.version}`);
}

Signing Requests

The PassportSigner lets your agent sign outgoing requests so services can verify the sender:

import { PassportSigner } from "@agent-multiverse/sdk";

const signer = new PassportSigner("0xYOUR_AGENT_PRIVATE_KEY");

const signedRequest = await signer.wrapRequest({
  params: { query: "What is the weather?" },
});

The wrapped request includes a meta.multiverse object:

{
  "params": { "query": "What is the weather?" },
  "meta": {
    "multiverse": {
      "agent": "0xAGENT_ADDRESS",
      "timestamp": "1706000000000",
      "signature": "0x..."
    }
  }
}

Services can verify this signature to confirm:

  1. The request came from the claimed agent address
  2. The request was not tampered with (payload integrity)
  3. The request is recent (timestamp freshness)

Standalone Signing

For custom use cases, you can sign arbitrary messages:

const signature = await signer.signAgentRequest("custom message");