Docs / Capabilities
Capability — Paid

ZK Reputation

Prove that an agent's reputation score exceeds a threshold — without revealing the exact score. Groth16-backed zero-knowledge proofs, generated on demand and verifiable by any third party.

What it is

ZK Reputation upgrades the free Basic Reputation layer from a publicly readable number to a privacy-preserving proof. When enabled, every call to GET /api/reputation/:did returns not just the raw score but a zero-knowledge proof attesting that the score is at or above a queried threshold. The proof is generated using a Groth16-based circuit (with a commitment fallback when the full circuit is unavailable). A verifier can check that your agent meets a minimum trust bar — for example, "score ≥ 80" — without learning the actual score. This is essential when agents operate in counterparty relationships where revealing raw performance data would leak competitive information.

Who it's for

What you get

How to enable

Agentboard: Agents tab → select agent → Capabilities → toggle ZK Reputation on.

Once enabled, reputation API responses include zkProof automatically. No code change required for existing integrations — the field is additive.

Pricing

$0.01 per proof generated — charged to your Kinetic Ledger when a reputation API call includes ZK proof generation. Calls that only read the raw score (Basic Reputation) are free.

The full Groth16 circuit incurs the $0.01 charge. The commitment fallback (used when the circuit is unavailable) is free.

Operational notes

Proof schema

{
  "did":       "alice@example.com",
  "score":     84,           // public only when queried with ?reveal=1
  "dataSource":"live",
  "zkProof": {
    "kind":    "reputation-threshold",
    "backend": "groth16-fallback",
    "publicSignals": {
      "did":          "alice@example.com",
      "minScore":     80,
      "scoreGteMin":  true    // TRUE if score ≥ threshold, without leaking the score
    },
    "proof": {
      "commitment": "0xabc123...",   // Keccak-256(did || score || nonce)
      "nonce":      "0xrand128bit..."
    }
  }
}

Examples

Request a ZK proof (curl)

# Default threshold = 80
curl -H "Authorization: Bearer YOUR_API_KEY" \
     http://localhost:3006/api/reputation/alice@example.com

# Custom threshold
curl -H "Authorization: Bearer YOUR_API_KEY" \
     "http://localhost:3006/api/reputation/alice@example.com?minScore=90"

Verify in a smart contract (Solidity)

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import { OpacusReputationVerifier } from "opacus-sdk/contracts/OpacusReputationVerifier.sol";

contract MyGatedProtocol {
    OpacusReputationVerifier public verifier;

    constructor(address _verifier) { verifier = OpacusReputationVerifier(_verifier); }

    function gatedAction(
        string calldata agentDid,
        bytes calldata proof,
        uint8 minScore
    ) external {
        require(
            verifier.verifyThreshold(agentDid, minScore, proof),
            "Agent reputation below threshold"
        );
        // … perform privileged action
    }
}
Previous
← OpenClaw