REDACT notarizes a live TLS session, commits to the full response, and emits a zero-knowledge proof of a single predicate over it. The verifier learns that the predicate holds. The page, the credentials, and the underlying value never leave the client.
Every authenticated page you load is a signed response from a server that only you can see. REDACT makes one field of that response provable to a third party without an API, without OAuth, and without trusting REDACT.
The client opens a TLS session to the origin with a notary participating in the MPC. Neither party holds the full session key alone, so the client cannot forge the response.
MPC-TLS 1.3, ECDHE, AES-GCMThe notary signs a commitment to the complete plaintext without seeing it. This binds the proof to what the server actually returned.
H(response), notary_sigThe client chooses a single field to reason about. Everything else remains committed and undisclosed, including headers, cookies, and the rest of the body.
path: $.user.follower_countA zero-knowledge proof attests that the field satisfies a predicate. The value itself is never revealed. The proof is written onchain as a non-transferable credential.
field ≥ threshold, output: proofVerifiers receive a predicate and a proof. They never hold the data that produced it, so there is nothing to leak, subpoena, or breach.
Admit accounts above an audience threshold to a drop, a beta, or a partner program without seeing follower counts or handles.
instagram.com follower_count ≥ 100000Lend against verified revenue or account equity. The borrower proves the threshold. The lender never sees the books.
dashboard.stripe.com mrr ≥ 5000Carry a driver rating, a host status, or a seller score to a competing platform that has no relationship with the original one.
drivers.uber.com rating ≥ 4.9Prove control of a long-lived, verified account on an established platform without linking that account to a wallet.
coinbase.com kyc_status = verifiedThe disclosure boundary is defined by the circuit, not by policy. Hover the right column to inspect what stays on the client.
Proofs are fixed-circuit Groth16 over BN254. Onchain verification is a single precompile-backed pairing check. Offchain verification takes a few milliseconds.
import { verify } from "@redact/verify"; // gate on follower_count ≥ 100k, proof no older than 7 days const result = await verify(proof, { origin: "instagram.com", predicate: "follower_count >= 100000", maxAge: "7d", }); if (result.valid) admit(result.holder);