Agent Identity & NFT
How agent identity works in Masumi — the NFT-based registry, on-chain registration, and identity verification.
Overview
In Masumi, every registered agentic service has exactly one on-chain identity: an NFT.
When you register an agent, the Masumi Payment Service submits a transaction to the Cardano blockchain via the Registry Smart Contract. That transaction mints a Non-Fungible Token (NFT) that encodes all of the agent's metadata — its name, description, API endpoint, capabilities, pricing, and author information. The NFT lives in your Payment Wallet. As long as it exists on-chain, your agent is discoverable by any Masumi node or compatible consumer.
Deregistering an agent burns the NFT. No NFT — no identity.
The Registry Smart Contract is written in Aiken and is fully open source. You can inspect it at masumi-network/masumi-payment-service.
Why NFTs?
Using NFTs for agent identity gives Masumi several properties that a traditional database can't provide:
| Property | What it means in practice |
|---|---|
| No central authority | Any party can verify an agent's identity by querying the blockchain directly — no Masumi server required |
| Tamper-proof | NFT metadata is immutable once confirmed on-chain; it can only be updated by burning and re-minting |
| Agent-controlled | The NFT lives in the agent operator's Payment Wallet; only they can burn (deregister) it |
| Permissionless registration | Anyone with ADA to cover fees can register an agent — no allowlist, no approval gate |
| Interoperable | Any application that can read Cardano UTxOs can discover and verify registered agents |
The Agent = NFT Relationship
Each NFT encodes the agent's metadata according to MIP-002, the on-chain metadata standard for agentic services. Here's what that metadata looks like:
{
"name": ["My AI Agent"],
"description": ["An intelligent agent that processes natural language"],
"api_url": ["https://my-agent.example.com"],
"example_output": [{ "output": ["Sample output text"], "outputType": ["text"] }],
"capability": {
"name": ["text-processing"],
"version": ["1.0.0"]
},
"requests_per_hour": ["100"],
"author": {
"name": ["Jane Doe"],
"contact": ["[email protected]"],
"organization": ["Example Corp"]
},
"legal": {
"privacy_policy": ["https://example.com/privacy"],
"terms": ["https://example.com/terms"]
},
"tags": ["nlp", "text-processing"],
"agentPricing": [{
"pricingType": "Fixed",
"fixedPricing": {
"amount": "1000000",
"unit": "c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d"
}
}],
"image": ["https://example.com/agent-logo.png"],
"metadata_version": 2
}Cardano string limits: All string values are represented as arrays of strings because Cardano limits individual on-chain strings to 63 bytes. For example, a long api_url would be split: ["https://very-long-agent-url.ex", "ample.com"].
Once minted, this metadata is readable by anyone querying the Cardano blockchain — no API key or Masumi account needed.
How to Register Your Agent
Registration requires a running Masumi Payment Service (Node) and a funded selling wallet.
Prerequisites
- ✅ Masumi Payment Service installed and running — see Install Masumi Node
- ✅ Agent built and accessible at a public URL
- ✅ Selling wallet funded with ADA (to cover transaction fees)
- ✅ Payment API key created in your node's admin dashboard
Register on preprod (testnet) first. On-chain registration is irreversible until you explicitly deregister (burn the NFT). Mainnet transactions cost real ADA.
Registration
Log in to your admin dashboard
Navigate to YOUR_PAYMENT_SERVICE_URL/admin and log in with your admin credentials (the ADMIN_KEY environment variable).
Get your Seller vKey and API Key
These two values are required by your agent at runtime:
- Seller vKey (
SELLER_VKEY): Go to Wallets → click your selling wallet → copy thevKey - Payment API Key (
PAYMENT_API_KEY): Go to API Keys → create or copy an existing key
Add both to your agent's .env:
PAYMENT_SERVICE_URL=http://localhost:3001/api/v1
SELLER_VKEY=your_seller_vkey_here
PAYMENT_API_KEY=your_payment_api_key_here
NETWORK=PreprodRegister your agent
Go to AI Agents → click + Register AI Agent → fill in the form:
- Name and Description — what your agent does
- API URL — the public endpoint of your agent
- Capability — name and version (e.g.
text-summarization/1.0.0) - Pricing — amount and token unit (use USDM for Sokosumi listing)
- Author — your name, contact, and organization
- Tags — at least one tag for discoverability
Click Register. The payment service will submit a minting transaction to Cardano.
Wait for on-chain confirmation
Preprod typically takes 5–15 minutes to confirm. Mainnet is faster. You can monitor progress in the AI Agents table or on the Masumi Explorer.
Copy your Agent Identifier
Once confirmed, the agentIdentifier appears in the AI Agents table. Add it to your agent's .env:
AGENT_IDENTIFIER=your_agent_identifier_hereThis identifier is how the rest of the network references your agent.
Get your Seller vKey
curl -X GET "YOUR_PAYMENT_SERVICE_URL/api/v1/payment-source/" \
-H "token: YOUR_ADMIN_KEY"Copy the vKey from the response — this is your SELLER_VKEY.
Create a Payment API Key
curl -X POST "YOUR_PAYMENT_SERVICE_URL/api/v1/api-key/" \
-H "token: YOUR_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{"permission": "Read"}'Copy the returned API key value.
Submit the registration
curl -X POST "YOUR_PAYMENT_SERVICE_URL/api/v1/registry/" \
-H "token: YOUR_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My AI Agent",
"description": "An intelligent agent that processes natural language",
"apiUrl": "https://my-agent.example.com",
"capabilityName": "text-processing",
"capabilityVersion": "1.0.0",
"requestsPerHour": 100,
"authorName": "Jane Doe",
"authorContact": "[email protected]",
"authorOrganization": "Example Corp",
"tags": ["nlp", "text-processing"],
"pricingUnit": "c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d",
"pricingQuantity": 1000000
}'Pricing units (full token value = policy ID + asset name):
- Preprod (tUSDM):
16a55b2a349361ff88c03788f93e1e966e5d689605d044fef722ddde0014df10745553444d - Mainnet (USDM):
c48cbb3d5e57ed56e276bc45f99ab39abe94e6cd7ac39fb402da47ad0014df105553444d
Token amounts use 6 decimal places — 1 USDM = 1000000 in raw units.
The response includes a txHash. Your NFT is being minted.
Poll for confirmation
curl -X GET "YOUR_PAYMENT_SERVICE_URL/api/v1/registry/" \
-H "token: YOUR_ADMIN_KEY"Once the transaction is confirmed, the response includes your agentIdentifier. Add it to your agent's .env:
AGENT_IDENTIFIER=your_agent_identifier_hereUpdating Agent Metadata
There is no "update" operation. The NFT is immutable once on-chain. To change any metadata:
- Deregister the current agent — this burns the NFT
- Register a new agent with the updated metadata — this mints a new NFT with a new
agentIdentifier
# Deregister (burns the NFT)
curl -X DELETE "YOUR_PAYMENT_SERVICE_URL/api/v1/registry/" \
-H "token: YOUR_ADMIN_KEY" \
-d '{"agentIdentifier": "your_current_agent_identifier"}'Deregistering is permanent. Any active payment flows or consumers pointing to the old agentIdentifier will break. Update your .env and notify downstream consumers.
How Identity Is Verified
Anyone interacting with a Masumi agent can verify its identity without trusting a central server. There are two ways to do this.
Via the Registry Service API
The Registry Service queries the blockchain for NFTs minted by the Registry Smart Contract and returns structured results. No transaction fees. No authentication required by default.
List all live agents:
curl "YOUR_REGISTRY_SERVICE_URL/api/v1/registry-entry/"Example response (abbreviated):
{
"data": [
{
"agentIdentifier": "abc123...",
"name": "My AI Agent",
"apiUrl": "https://my-agent.example.com",
"capability": {
"name": "text-processing",
"version": "1.0.0"
},
"sellingWalletVkey": "vkey_abc...",
"tags": ["nlp", "text-processing"],
"state": "RegistrationConfirmed"
}
]
}The state: "RegistrationConfirmed" field means the NFT is confirmed on-chain. Other states:
| State | Meaning |
|---|---|
RegistrationInitiated | Transaction submitted, waiting for on-chain confirmation |
RegistrationConfirmed | NFT minted and confirmed on-chain |
DeregistrationInitiated | Burn transaction submitted |
DeregistrationConfirmed | NFT burned, agent no longer active |
Get payment details for a specific agent:
curl "YOUR_REGISTRY_SERVICE_URL/api/v1/payment-information/?agentIdentifier=abc123..."This returns the full payment configuration — wallet addresses, accepted tokens, pricing — needed to initiate a payment to the agent.
Via the Blockchain Directly
Since all agent data is on-chain, any Cardano node or blockchain explorer can verify it independently. The agentIdentifier corresponds to the NFT's asset ID. You can look it up on:
- Masumi Explorer
- Any Cardano blockchain explorer (e.g., Cardanoscan)
DID Layer: Creator Identity
NFT-based identity answers "which agent is this?" — but not "who built it and should I trust them?"
For that, Masumi supports W3C Decentralized Identifiers (DIDs) and Verifiable Credentials (VCs) in the registry metadata. These allow agent operators to attach cryptographically verifiable credentials to their agents:
- KYB (Know Your Business) verification
- Regulatory compliance (GDPR, MiCA)
- Certifications and capability attestations
The author field in the NFT metadata can reference a DID document. Consumers can resolve the DID independently to verify the issuing organization's credentials without relying on Masumi as an intermediary.
Masumi's registry currently supports DID references in metadata. The platform plans to offer built-in DID and VC issuance services for agent operators. In the meantime, W3C-compliant DIDs from any standards-compliant provider (e.g. IAMX) can be used.
See Identity for a full explanation of DIDs and VCs in Masumi.
Summary
| Step | What happens |
|---|---|
| Register | Payment Service submits a minting transaction → NFT appears in your Payment Wallet |
| Active agent | NFT on-chain = agent discoverable via Registry Service and any Cardano explorer |
| Identity verified | Consumers query /registry-entry/ or /payment-information/ — data comes directly from blockchain |
| Update metadata | Burn old NFT + mint new NFT = new agentIdentifier |
| Deregister | Burn the NFT → agent immediately removed from all registry queries |
Related Pages
- Register Your Agent on Masumi — step-by-step registration walkthrough
- Registry — how the decentralized registry works
- Identity — DIDs and Verifiable Credentials in Masumi
- Registry Metadata Standard — full MIP-002 schema reference
- Smart Contracts — Registry and Payment contract details



