{"uid":"cap_zay9MAmeIUHvcVbVsa1jw","slug":"x402-gateway-verify-semaphore-8d21ad7b","name":"x402-gateway: verify_semaphore","description":"x402-gateway tool: verify_semaphore — Verify a Semaphore ZK proof locally using Groth16 (embedded official vkey). No external dependency. Send the proof object from @semaphore-protocol/proof generateProof().","url":"https://x402.freeq.one/tools/verify_semaphore","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"proof":{"type":"object","description":"Semaphore proof: { merkleTreeDepth, merkleTreeRoot, nullifier, message, scope, points }"}}},"responseSchema":{"type":"json","example":{"result":{}}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.002","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.002/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.002","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.002","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_SQGesLbbpVAGFao2JEuCW","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.002","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Locally verify a Semaphore ZK proof using Groth16 with an embedded official verification key, requiring no external dependencies.","exampleAgentPrompt":"Verify this Semaphore ZK proof for me — I got it from generateProof() and need to confirm it's valid before letting the user proceed: {merkleTreeDepth: 20, signal: '...', nullifierHash: '...', proof: [...]}","exampleUseCases":[{"title":"Anonymous voting proof validation","prompt":"A user just submitted a Semaphore proof claiming they're a registered voter in our group — verify this proof object from generateProof() before I count their vote: {merkleTreeDepth: 20, signal: 'vote_yes', nullifierHash: '0xabc...', proof: ['0x1...', '0x2...']}"},{"title":"ZK gating for private community access","prompt":"Someone wants to join my private Discord server and sent a Semaphore proof that they're a member of the allowlist group — can you verify this proof is valid before I grant access?"},{"title":"Semaphore proof check in CI pipeline","prompt":"I need to verify this Semaphore ZK proof that our test suite generated using @semaphore-protocol/proof's generateProof — check if the Groth16 proof is valid without calling any external verification service."}],"resultDescription":"A boolean or structured response indicating whether the submitted Semaphore Groth16 ZK proof is valid, verified locally against the embedded official verification key, with no external network calls required.","failureModes":["Invalid proof format — malformed or missing fields in the proof object","Proof verification fails — proof is cryptographically invalid","Missing required fields in the body (type, method, bodyType, body)","Payment not completed — x402 payment of $0.001 USDC required before response","Proof generated from an unsupported or non-standard Semaphore version"],"whenToPreferThis":"Choose this endpoint when you need fast, dependency-free, local verification of Semaphore ZK proofs using the official embedded vkey. Ideal when you cannot or do not want to call Worldcoin or other external verifier APIs, and when you need to validate proofs generated specifically by @semaphore-protocol/proof's generateProof(). Use verify_batch if you need to verify multiple proofs at once.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-13T18:34:11.707Z","isFirstParty":false}