{"name":"Vaultfire — File Vouch","summary":"Vouch for another AI agent’s reputation by staking ETH inside the VaultfireReputationStaking contract. Tx-prepare; caller signs locally.","description":"Vaultfire — the web-of-trust for AI agents, on-chain. Vouching means putting your own stake on the line behind another agent’s claim to be trustworthy. — ENDPOINT BEHAVIOR: GET returns this full spec for free. POST (paid $0.05 USDC) returns an unsigned PAYABLE transaction calldata; the caller signs locally in their wallet and broadcasts to the chain. Vaultfire NEVER handles private keys. — ON-CHAIN MECHANIC (VaultfireReputationStaking.vouch(address)): (1) caller MUST be a registered + active agent on Vaultfire IdentityRegistry; (2) target MUST be a different, registered + active agent (cannot vouch for self or zero address); (3) msg.value MUST be >= MIN_VOUCH_STAKE = 0.001 ether (1,000,000,000,000,000 wei); (4) only ONE active vouch per (voucher, target) pair — a second call before unvouching reverts with \"already vouching for this agent\"; (5) the stake is locked until the voucher calls /actions/unvouch (which is also paid). — ECONOMIC MEANING: vouching is reputation-with-stake. If the target agent is later slashed via /actions/slash-reputation, the voucher’s stake is at risk in proportion. Trust is economic, not aspirational. — SECURITY: this endpoint validates inputs, rejects any private-key-shaped fields, and only returns unsigned calldata.","priceUsdc":"0.25","tags":["vaultfire","vouch","reputation","trust","web-of-trust","staking","kya"],"mimeType":"application/json","inputSchema":{"bodyType":"json","bodyFields":{"walletAddress":{"type":"address","required":true,"description":"Voucher wallet — your wallet. Signs the returned tx and stakes ETH on chain. MUST be a registered + active agent on Vaultfire IdentityRegistry. NEVER include private keys in the request body."},"targetAgent":{"type":"address","required":true,"description":"Agent address being vouched for. MUST be different from walletAddress, non-zero, and a registered + active agent on Vaultfire IdentityRegistry."},"stakeWei":{"type":"uint256","required":false,"description":"msg.value of the returned tx, in wei. MUST be >= MIN_VOUCH_STAKE = 1000000000000000 (0.001 ETH).","default":"10000000000000000","example":"10000000000000000"},"chain":{"type":"string","required":false,"description":"Target chain for the prepared tx. Multi-chain; ensure target chain has ETH for gas.","enum":["base","avalanche","arbitrum","polygon"],"default":"base"}}},"outputSchema":{"type":"object","properties":{"success":{"type":"boolean","required":true,"description":"Always true on a 200 response."},"txData":{"type":"object","required":true,"description":"Unsigned tx: { to, data, value, chainId, gasEstimate }. Sign locally and broadcast."},"chain":{"type":"string","required":true,"description":"The chain the tx is prepared for."},"voucher":{"type":"address","required":true,"description":"Echoed walletAddress."},"targetAgent":{"type":"address","required":true,"description":"Echoed targetAgent."},"stakeWei":{"type":"string","required":true,"description":"Final stake amount in wei."},"contract":{"type":"address","required":true,"description":"VaultfireReputationStaking on the target chain."},"explorer":{"type":"string","required":true,"description":"Block-explorer URL for the contract."},"message":{"type":"string","required":true,"description":"Human-readable summary the caller can show in their UI."}}},"contract":{"name":"VaultfireReputationStaking","solidityFunction":"vouch(address targetAgent) payable","selector":"0xdd66e16b","payable":true,"usesEip3009":false,"valueConstraints":{"minWei":"1000000000000000","minHuman":"0.001 ETH (MIN_VOUCH_STAKE)","note":"msg.value MUST be >= MIN_VOUCH_STAKE. There is no upper bound on stake. Larger stakes carry more reputation weight and more slashing risk."}},"networks":[{"chain":"base","chainId":8453,"rpc":"https://base-rpc.publicnode.com","explorer":"https://basescan.org","contract":"0xd42BBfD3061A38D4B5540317A31D90212380069b","contractExplorerUrl":"https://basescan.org/address/0xd42BBfD3061A38D4B5540317A31D90212380069b","usdcDomain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}},{"chain":"avalanche","chainId":43114,"rpc":"https://api.avax.network/ext/bc/C/rpc","explorer":"https://snowtrace.io","contract":"0x32211773C8266774A704aeD471f8eF073f34bA79","contractExplorerUrl":"https://snowtrace.io/address/0x32211773C8266774A704aeD471f8eF073f34bA79","usdcDomain":{"name":"USD Coin","version":"2","chainId":43114,"verifyingContract":"0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E"}},{"chain":"arbitrum","chainId":42161,"rpc":"https://arb1.arbitrum.io/rpc","explorer":"https://arbiscan.io","contract":"0x9d4AbeAa8201e6f1649c296dd179Bbb3c401f96F","contractExplorerUrl":"https://arbiscan.io/address/0x9d4AbeAa8201e6f1649c296dd179Bbb3c401f96F","usdcDomain":{"name":"USD Coin","version":"2","chainId":42161,"verifyingContract":"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"}},{"chain":"polygon","chainId":137,"rpc":"https://polygon-bor-rpc.publicnode.com","explorer":"https://polygonscan.com","contract":"0x3ceA2B0853B76Ac75603C1fa2A29D96A4467Bb79","contractExplorerUrl":"https://polygonscan.com/address/0x3ceA2B0853B76Ac75603C1fa2A29D96A4467Bb79","usdcDomain":{"name":"USD Coin","version":"2","chainId":137,"verifyingContract":"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359"}}],"servicePayee":{"address":"0xfA15Ee28939B222B0448261A22156070f0A7813C","ens":"ghostkey.base.eth","note":"All Vaultfire service fees route to the protocol payee. Never send funds to any other address claiming to be Vaultfire."},"integration":["1. GET this endpoint (free) to retrieve the full spec.","2. Build the POST body: { walletAddress, targetAgent, stakeWei (>= 0.001 ETH in wei), chain }.","3. POST with x402 payment header for $0.05 USDC on base.","4. Receive unsigned tx — sign locally with your wallet (Base App, MetaMask, WalletConnect, Coinbase Wallet).","5. Broadcast the signed tx to the chain RPC. Stake is locked in REPUTATION_STAKING until you call /actions/unvouch."],"reverts":[{"condition":"caller not registered on IdentityRegistry","reason":"agent not registered"},{"condition":"caller is inactive","reason":"agent inactive"},{"condition":"target not registered","reason":"target agent not registered"},{"condition":"target == caller","reason":"cannot vouch for self"},{"condition":"target == address(0)","reason":"zero address"},{"condition":"msg.value < MIN_VOUCH_STAKE","reason":"stake too low"},{"condition":"second active vouch for same target","reason":"already vouching for this agent"}],"liveProof":{"status":"pattern-only","note":"This specific action has not yet been exercised on mainnet under live monitoring. The underlying primitive (tx-prepare with caller-side signing, EIP-3009 settlement where applicable) is verified by the live atomic-bond proof linked below."},"patternProof":{"pattern":"EIP-3009 + atomic settlement (pay-and-execute, one transaction, one signature)","contract":"0x3479307333c0AF75423A9B2F6826441Feb1F9F85","chain":"base","chainId":8453,"verifiedOn":"sourcify","verifiedMatch":"exact_match","exampleTx":"0x9b5b0643c212ea095db02e86cc739c13473d21d27fa94b7371078d549a0fdae0","exampleBlock":46383869,"exampleGas":276841,"exampleNote":"First production atomic bond. Single tx emitted USDC AuthorizationUsed + USDC Transfer + AtomicBondCreated. The same EIP-3009 + atomic-execute primitive is the basis of every payable Vaultfire action.","explorerUrl":"https://basescan.org/tx/0x9b5b0643c212ea095db02e86cc739c13473d21d27fa94b7371078d549a0fdae0","sourceUrl":"https://repo.sourcify.dev/contracts/full_match/8453/0x3479307333c0AF75423A9B2F6826441Feb1F9F85/"},"security":{"privateKeysPolicy":"Vaultfire NEVER accepts private keys. All POST handlers reject any field shaped like a private key (privateKey, private_key, secret, mnemonic, seed).","signingModel":"tx-prepare: the endpoint returns unsigned calldata. The caller signs locally in their wallet (Base App, MetaMask, WalletConnect, Coinbase Wallet, etc.) and broadcasts.","custodyModel":"no-custody: Vaultfire holds nothing. Funds and stakes settle inside the caller's own transaction.","x402Facilitator":"Verify / Settle / Submit-signed are CORS-restricted to known marketplace origins. Nonces are durably deduplicated in Upstash KV (fail-closed on KV outage)."},"links":{"documentation":"https://theloopbreaker.com/docs","protocol":"https://theloopbreaker.com","repository":"https://gitlawb.com/z6MkryiNsYdFEMHv95wxzSQ1vtFXPyVQQrxXdPw3tE5HpfxV/vaultfire","relatedEndpoints":["/api/x402/actions/unvouch","/api/x402/actions/slash-reputation","/api/x402/actions/trigger-reputation-decay","/api/x402/trust/agent-status","/api/x402/trust/vouching"]},"_discovery":{"version":"1.0","emittedBy":"vaultfire-x402","endpointStability":"stable","getIsFree":true,"postIsPaid":true}}