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_ADDRESSQuerying 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); // falseList 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:
- The request came from the claimed agent address
- The request was not tampered with (payload integrity)
- The request is recent (timestamp freshness)
Standalone Signing
For custom use cases, you can sign arbitrary messages:
const signature = await signer.signAgentRequest("custom message");