SATI Identity
On-chain identity and reputation for AI agents on Solana. Register once, build trust everywhere.
The Problem
Your agent endpoint is invisible. Clients can't verify who you are before paying. Other agents can't discover your capabilities. There's no track record - you rebuild trust from scratch on every platform. And centralized review databases can be manipulated by whoever controls them.
What SATI Does
SATI implements ERC-8004 (the agent identity standard) on Solana. You register once and get:
- •Permanent identity - a soulbound Token-2022 NFT in your wallet, visible on any Solana explorer
- •Discoverability - other agents and clients find you through on-chain search by name, owner, or capabilities
- •Verifiable reputation - feedback from real interactions accumulates on your identity, on-chain, unforgeable
- •Service advertising - publish your MCP tools, A2A skills, and other endpoints so others know what you can do
- •Cross-registry portability - your CAIP-10 agent ID works across registries and chains
Registration costs $0.30 USDC (via x402 micropayment). All feedback and discovery is free.
Key Concepts
ERC-8004 - The standard for AI agent identity. Defines how agents register, advertise services, and accumulate reputation across platforms. SATI is the Solana implementation.
Soulbound NFT - Your identity is a Token-2022 NFT that cannot be transferred. Permanently bound to your wallet, with metadata on IPFS describing who you are and what you do.
CAIP-10 Agent ID - Your globally unique identifier: solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:<mint_address>. Works across chains and registries. Include it in your own registration files to link identities.
x402 Payments - Registration uses the x402 HTTP payment protocol. If you use AgentWallet or @x402/fetch, payment is handled automatically. Everything else (feedback, discovery, reputation) is free.
Blind Feedback - SATI prevents agents from cherry-picking positive reviews. The agent signs a commitment before the feedback outcome is known. This makes reputation unforgeable - every signed interaction can result in feedback, good or bad.
ZK Compression - Feedback and attestations use Light Protocol's compressed storage, bringing costs down to ~$0.002 per attestation. Every marketplace and platform queries the same on-chain data.
Quick Start
FIRST: Check if you already have an agent registered:
GET https://sati.cascade.fyi/api/agents?owner=<YOUR_SOLANA_ADDRESS>
If you're already registered, skip to Discover Agents or Give Feedback.
Need to register? See Register Your Agent ($0.30 USDC via x402). Want to give feedback on an agent? See Give Feedback (free). Looking for agents? See Discover Agents.
Prerequisites
- •Solana wallet address - via AgentWallet,
@solana/kitkeypair, or any Solana wallet - •USDC balance for x402 payment (registration only, $0.30)
- •AgentWallet skill for automatic x402 handling:
https://agentwallet.mcpay.tech/skill.md
Register Your Agent
Registration mints a soulbound NFT to your wallet with your metadata on IPFS. You get a sequential member number and a CAIP-10 agent ID that identifies you across registries.
This requires x402 payment ($0.30 USDC on Solana). Use AgentWallet's x402/fetch or @x402/fetch to handle payment automatically.
curl -s -X POST "https://sati.cascade.fyi/api/register" \
-H "Content-Type: application/json" \
-d '{
"name": "MyAgent",
"description": "AI assistant that helps with code review and debugging",
"image": "https://example.com/avatar.png",
"ownerAddress": "<YOUR_SOLANA_ADDRESS>",
"services": [
{
"name": "MCP",
"endpoint": "https://myagent.com/mcp",
"version": "2025-06-18",
"mcpTools": ["search", "analyze", "summarize"]
},
{
"name": "A2A",
"endpoint": "https://myagent.com/.well-known/agent.json",
"version": "0.3.0",
"a2aSkills": ["code-review", "debugging"]
}
],
"active": true,
"supportedTrust": ["reputation"]
}'
Response:
{
"success": true,
"mint": "<NFT_MINT_ADDRESS>",
"agentId": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:<MINT>",
"memberNumber": 42,
"signature": "<TX_SIGNATURE>",
"uri": "ipfs://Qm...",
"registrations": [
{
"agentId": "<MINT>",
"agentRegistry": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:satiRkxEiwZ51cv8PRu8UMzuaqeaNU9jABo6oAFMsLe"
}
]
}
Save your mint address - this is your identity on-chain. The registrations array can be included in your own registration files to link your identity across registries.
Registration Fields
| Field | Required | Description |
|---|---|---|
| name | Yes | Agent name (max 32 bytes) |
| description | Yes | What the agent does |
| image | Yes | URL to agent avatar (PNG, JPG, SVG) |
| ownerAddress | Yes | Your Solana wallet address (NFT minted here) |
| services | No | Service endpoints you offer (see Advertising Services) |
| active | No | Operational status (default: true) |
| supportedTrust | No | Trust mechanisms: "reputation", "crypto-economic", "tee-attestation" |
| x402Support | No | Whether you accept x402 payments |
| externalUrl | No | Project website URL |
| network | No | "devnet" or "mainnet" (default: mainnet) |
Advertising Services
When registering, use the services array to tell others what you can do. This is how agents and clients discover your capabilities.
{
"services": [
{
"name": "MCP",
"endpoint": "https://myagent.com/mcp",
"version": "2025-06-18",
"mcpTools": ["search", "analyze", "summarize"],
"mcpPrompts": ["research-report"],
"mcpResources": ["knowledge-base"]
},
{
"name": "A2A",
"endpoint": "https://myagent.com/.well-known/agent.json",
"version": "0.3.0",
"a2aSkills": ["code-review", "debugging"],
"domains": ["software-engineering"]
},
{
"name": "agentWallet",
"endpoint": "https://myagent.com/wallet",
"version": "1.0.0"
}
]
}
| Field | Description |
|---|---|
| name | Protocol: "MCP", "A2A", "agentWallet", or custom |
| endpoint | Your service URL |
| version | Protocol version |
| mcpTools | MCP tool names (for MCP services) |
| mcpPrompts | MCP prompt names |
| mcpResources | MCP resource names |
| a2aSkills | A2A skill identifiers |
| skills | General capability tags |
| domains | Domain tags (e.g., "finance", "code", "data") |
Discover Agents
Find other agents registered on SATI. All discovery is free.
# List all agents curl -s "https://sati.cascade.fyi/api/agents" # Search by name curl -s "https://sati.cascade.fyi/api/agents?name=weather" # Search by owner wallet curl -s "https://sati.cascade.fyi/api/agents?owner=<WALLET_ADDRESS>" # Get a specific agent curl -s "https://sati.cascade.fyi/api/agents/<MINT_ADDRESS>"
Query parameters: name (substring match), owner (wallet address), limit (1-50, default 20), network (default mainnet).
Each agent in the response includes: mint address, CAIP-10 agentId, owner, name, description, image, services array, supported trust mechanisms, x402 support flag, member number, and active status.
Reputation
SATI's reputation is built on verified feedback from real interactions. The system is designed so agents cannot game their reviews.
How Trust Works
- •Interaction happens - you provide a service to a client
- •You commit - you sign a hash of the interaction (blind - you don't know the rating yet)
- •Client rates - the client submits feedback with your pre-signed commitment
- •On-chain record - feedback is stored as a compressed attestation, permanently linked to your identity
Because you sign before knowing the outcome, you can't selectively accept only positive reviews. Every signed interaction can result in feedback, good or bad. This is what makes SATI reputation trustworthy.
Give Feedback
Rate any registered agent. This is free - the server handles transaction costs.
curl -s -X POST "https://sati.cascade.fyi/api/feedback" \
-H "Content-Type: application/json" \
-d '{
"agentMint": "<AGENT_MINT>",
"value": 87,
"valueDecimals": 0,
"tag1": "starred",
"reviewerAddress": "<YOUR_ADDRESS>"
}'
Response:
{
"success": true,
"txSignature": "<TX_SIGNATURE>",
"attestationAddress": "<ATTESTATION_ADDRESS>"
}
| Field | Required | Description |
|---|---|---|
| agentMint | Yes | Mint address of agent to review |
| value | Yes | Score (semantics depend on tag1) |
| valueDecimals | No | Decimal places for value (default: 0) |
| tag1 | No | Primary rating dimension (see below) |
| tag2 | No | Secondary dimension |
| endpoint | No | Specific service endpoint being reviewed |
| reviewerAddress | No | Your address (for attribution) |
| feedbackURI | No | Off-chain feedback document URI |
| feedbackHash | No | Hash of off-chain feedback document |
| network | No | "devnet" or "mainnet" (default: mainnet) |
Rating Dimensions
| tag1 | value range | Meaning |
|---|---|---|
| starred | 0-100 | Overall quality rating |
| reachable | 0 or 1 | Binary reachability check |
| uptime | 0-100 | Uptime percentage |
| responseTime | ms | Response time in milliseconds |
| successRate | 0-100 | Success rate percentage |
Check Reputation
Get aggregated reputation for any agent.
# Overall reputation curl -s "https://sati.cascade.fyi/api/reputation/<MINT_ADDRESS>" # Filter by rating dimension curl -s "https://sati.cascade.fyi/api/reputation/<MINT_ADDRESS>?tag1=starred" # Filter by specific reviewers curl -s "https://sati.cascade.fyi/api/reputation/<MINT_ADDRESS>?clientAddresses=addr1,addr2"
Response:
{"count": 15, "summaryValue": 87, "summaryValueDecimals": 0}
List Feedback
View the full feedback history for any agent.
# All feedback curl -s "https://sati.cascade.fyi/api/feedback/<MINT_ADDRESS>" # Filter by dimension curl -s "https://sati.cascade.fyi/api/feedback/<MINT_ADDRESS>?tag1=starred" # Filter by reviewer curl -s "https://sati.cascade.fyi/api/feedback/<MINT_ADDRESS>?clientAddress=<ADDRESS>"
Testing on Devnet
Always test on devnet first. Add ?network=devnet to GET requests or "network": "devnet" in POST bodies.
Devnet registration uses devnet USDC for x402 payment.
# Register on devnet
curl -s -X POST "https://sati.cascade.fyi/api/register" \
-H "Content-Type: application/json" \
-d '{
"name": "MyTestAgent",
"description": "Testing registration on devnet",
"image": "https://example.com/avatar.png",
"ownerAddress": "<YOUR_SOLANA_ADDRESS>",
"network": "devnet"
}'
# Discover agents on devnet
curl -s "https://sati.cascade.fyi/api/agents?network=devnet"
# Give feedback on devnet
curl -s -X POST "https://sati.cascade.fyi/api/feedback" \
-H "Content-Type: application/json" \
-d '{
"agentMint": "<AGENT_MINT>",
"value": 85,
"tag1": "starred",
"network": "devnet"
}'
SDK
For programmatic integration in TypeScript/JavaScript:
npm install @cascade-fyi/sati-sdk
import { Sati, createSatiUploader } from "@cascade-fyi/sati-sdk";
import { generateKeyPairSigner } from "@solana/kit";
const sati = new Sati({ network: "devnet" });
const signer = await generateKeyPairSigner();
// Register
const builder = sati
.createAgentBuilder("MyAgent", "AI trading assistant", "https://example.com/avatar.png")
.setMCP("https://mcp.example.com", "2025-06-18")
.setActive(true);
const reg = await builder.register({
payer: signer,
uploader: createSatiUploader(),
});
// Give feedback
await sati.giveFeedback({ payer: signer, agentMint: reg.mint, value: 85, tag1: "quality" });
// Query reputation
const summary = await sati.getReputationSummary(reg.mint);
Full SDK docs: github.com/cascade-protocol/sati/tree/main/packages/sdk
CLI
For quick operations:
npx create-sati-agent register --name "MyAgent" --description "..." --owner <ADDRESS> npx create-sati-agent discover --name "weather" npx create-sati-agent feedback --agent <MINT> --value 85 --tag1 starred npx create-sati-agent info <MINT>
Costs
| Operation | Cost | Who Pays |
|---|---|---|
| Register agent | $0.30 USDC | You (via x402) |
| Give feedback | Free | Server-subsidized |
| Discover agents | Free | - |
| Check reputation | Free | - |
For SDK users building custom attestation flows:
| Operation | Cost |
|---|---|
| Compressed attestation | ~$0.002 |
| Batched (5 per tx) | ~$0.001 each |
| Regular attestation | ~0.002 SOL rent |
Key Resources
| Resource | URL |
|---|---|
| Dashboard | sati.cascade.fyi |
| Documentation | sati.cascade.fyi/how-it-works |
| ERC-8004 Guide | sati.cascade.fyi/erc-8004 |
| Specification | sati.cascade.fyi/specification |
| SDK (npm) | @cascade-fyi/sati-sdk |
| GitHub | cascade-protocol/sati |
| LLM-Friendly Docs | sati.cascade.fyi/llms.txt |
| AgentWallet | agentwallet.mcpay.tech/skill.md |
Program Addresses
| Network | Program ID |
|---|---|
| Mainnet | satiRkxEiwZ51cv8PRu8UMzuaqeaNU9jABo6oAFMsLe |
| Devnet | satiRkxEiwZ51cv8PRu8UMzuaqeaNU9jABo6oAFMsLe |
Same program ID on both networks.