# Lucid Oracle ZK Proof Verification Service

> Lucid Oracle ZK Proof Verification Service is a paid API for AI agents from lucid-oracle-production.up.railway.app, paid per call via x402, $0.02/call, status unknown (last checked 2026-09-13).

Verifies a zero-knowledge proof (Groth16 format) against a specified circuit and public signals, returning whether the proof is valid

## Facts

- Endpoint: POST https://lucid-oracle-production.up.railway.app/api/verify-proof
- Price: $0.02/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-13
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/lucid-oracle-zk-proof-verification-service-ae7d66eb
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_7hrj5fJxB_JHeMl8bM1oA

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 lucid-oracle-zk-proof-verification-service-ae7d66eb -d '<json body>'
```

Example prompt: Can you verify this Groth16 zk-SNARK proof I generated from the 'age_check' circuit — here's the proof object and the public signals [1, 0] — I need to know if it's valid before I proceed.

## When to prefer this

Choose this endpoint when you need to cryptographically verify an existing Groth16 zk-SNARK proof against known public signals and a circuit type — specifically as the verification step after proof generation, not for generating proofs. Use this when you need a definitive valid/invalid determination before accepting or acting on a ZK proof in your application.

## Known failure modes

- Invalid or malformed proof object returns verified: false or error
- Unsupported circuit type returns error or unrecognized circuit response
- Mismatched public signals (wrong count or values) causes verification failure
- Malformed JSON in request body returns HTTP 400
- Service unavailability returns HTTP 500 or timeout
- Proof in wrong format (not Groth16) may cause parsing error

## How this service works

Verify zero-knowledge proof

## Output

Returns a JSON object with a 'verified' boolean indicating proof validity, a 'success' boolean for the API call status, and metadata including the circuit name, Unix timestamp of verification, and execution time in milliseconds.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "proof",
  "circuit",
  "publicSignals"
 ],
 "properties": {
  "proof": {
   "type": "object",
   "description": "The zk-SNARK proof to verify (Groth16 format)"
  },
  "circuit": {
   "enum": [
    "hashPreimage",
    "rangeProof",
    "customArithmetic"
   ],
   "type": "string",
   "description": "Circuit type used"
  },
  "publicSignals": {
   "type": "array",
   "description": "Public signals from proof generation"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "success": {
  "type": "boolean"
 },
 "metadata": {
  "type": "object",
  "properties": {
   "circuit": {
    "type": "string"
   },
   "verifiedAt": {
    "type": "number"
   },
   "executionTime": {
    "type": "number"
   }
  }
 },
 "verified": {
  "type": "boolean",
  "description": "Whether the proof is valid"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/lucid-oracle-zk-proof-verification-service-ae7d66eb/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from lucid-oracle-production.up.railway.app](https://www.zero.xyz/host/lucid-oracle-production.up.railway.app/llms.txt)
