# x402-gateway: verify_semaphore

> x402-gateway: verify_semaphore is a paid API for AI agents from x402.freeq.one, paid per call via x402, $0.002/call, status unknown (last checked 2026-09-13).

Locally verify a Semaphore ZK proof using Groth16 with an embedded official verification key, requiring no external dependencies.

## Facts

- Endpoint: POST https://x402.freeq.one/tools/verify_semaphore
- Price: $0.002/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/x402-gateway-verify-semaphore-8d21ad7b
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_zay9MAmeIUHvcVbVsa1jw

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability x402-gateway-verify-semaphore-8d21ad7b -d '<json body>'
```

Example prompt: 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: [...]}

## When to prefer this

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.

## Known failure modes

- 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

## How this service works

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().

## Output

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.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "proof": {
   "type": "object",
   "description": "Semaphore proof: { merkleTreeDepth, merkleTreeRoot, nullifier, message, scope, points }"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "result": {}
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/x402-gateway-verify-semaphore-8d21ad7b/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from x402.freeq.one](https://www.zero.xyz/host/x402.freeq.one/llms.txt)
