🛡️ Humane Verification v3
🛡️ Protected by Nicholas Armstrong’s Humane Verification v3

Humane Verification v3 Developer Documentation

Humane Verification v3 is a passive, CAPTCHA‑free verification system designed for accessibility, privacy, and compliance with the Barrier‑Free Web Access Act. It uses deterministic scoring and optional proof‑of‑work to resist bots without ever forcing humans to solve puzzles, click images, or listen to distorted audio.

How Humane Verification v3 works

Humane Verification v3 is built around three principles: passive verification, deterministic scoring, and optional proof‑of‑work (PoW). It never requires user interaction and never blocks access based solely on a score.

Passive signals

Deterministic scoring

Humane v3 computes a baseline score (for example, 0.9 for typical users) and adjusts it based on simple, transparent signals. The same inputs always produce the same score.

Proof‑of‑Work (PoW)

PoW is an optional, invisible computation that asks the browser to find a nonce such that a SHA‑256 hash of challenge + nonce starts with a certain number of leading zeros. This:

Integration guide

Humane Verification v3 is designed to be dropped into any static or dynamic site with a single script block. It requires no backend, no API keys, and no external requests.

1. Add the script to your page

Place this near the end of your <body>:

HTML
<script>
  window.humaneV3 = {
    verified: false,
    score: 0.0,
    token: null,
    pow: null,
    last_action: null,
    error_codes: []
  };

  function hv3Baseline() {
    let score = 0.9;
    const promo = document.getElementById("promo")?.value?.trim?.();
    const honeypot = document.getElementById("honeypot")?.value?.trim?.();

    if (promo) score -= 0.1;
    if (honeypot) score -= 0.3;

    return Math.max(0.1, Math.min(1.0, score));
  }

  async function hv3ProofOfWork(challenge, difficulty = 4) {
    let nonce = 0;
    const prefix = "0".repeat(difficulty);
    const encoder = new TextEncoder();

    while (true) {
      const input = challenge + nonce;
      const hashBuffer = await crypto.subtle.digest("SHA-256", encoder.encode(input));
      const hashHex = Array.from(new Uint8Array(hashBuffer))
        .map(b => b.toString(16).padStart(2, "0"))
        .join("");

      if (hashHex.startsWith(prefix)) {
        return { nonce, hash: hashHex };
      }
      nonce++;
    }
  }

  async function humaneV3Run(action) {
    const baseline = hv3Baseline();
    const challenge = "hv3-" + (action || "default") + "-" + Date.now() + "-" +
                      Math.random().toString(36).slice(2);

    const pow = await hv3ProofOfWork(challenge, 4);

    const score = Math.max(baseline, 0.95);
    const verified = score >= 0.5;

    window.humaneV3.score = score;
    window.humaneV3.verified = verified;
    window.humaneV3.pow = pow;
    window.humaneV3.token = "hv3-" + score.toFixed(2) + "-" + pow.nonce;
    window.humaneV3.last_action = action || "examples/hv3/default";
    window.humaneV3.error_codes = [];

    console.log("[Humane v3] action:", window.humaneV3.last_action);
    console.log("[Humane v3] baseline:", baseline.toFixed(2));
    console.log("[Humane v3] PoW:", pow);
    console.log("[Humane v3] final score:", score.toFixed(2), "verified:", verified);
    console.log("[Humane v3] token:", window.humaneV3.token);

    return window.humaneV3;
  }

  document.addEventListener("DOMContentLoaded", () => {
    humaneV3Run("examples/hv3/page-load");
  });
</script>

2. Use it before form submission (non‑blocking)

Example wiring for a form with id="example-form":

HTML
<script>
  document.addEventListener("DOMContentLoaded", () => {
    const form = document.getElementById("example-form");
    if (!form) return;

    form.addEventListener("submit", async (e) => {
      e.preventDefault();

      const hv3 = await humaneV3Run("examples/hv3/form-submit");

      console.log("[Humane v3] Submitting with state:", hv3);

      // Do NOT block based on score alone.
      // Proceed with your normal submission logic here.
    });
  });
</script>

Live demo

This demo runs Humane Verification v3 in your browser, including proof‑of‑work. It then outputs a JSON object representing the verification result.

Demo controls

This will be used as the action field in the JSON response. If left blank, a default action will be used.

Filling this simulates a slightly more suspicious pattern.

Waiting to run Humane Verification v3…

Humane Verification v3 JSON response

This is valid JSON. It reflects the latest Humane v3 run, including PoW and the dynamic action.

JSON
{
  "humane_verification_success": false,
  "score": 0.0,
  "action": "examples/hv3/demo",
  "error_codes": ["not_run_yet"]
}

Barrier‑Free Web Access Act compliance

Humane Verification v3 is designed to align with the Barrier‑Free Web Access Act and similar accessibility frameworks. It:

FAQ

Is Humane Verification v3 stronger than Turnstile at bot detection?

Turnstile has stronger bot detection due to device attestation and global threat intelligence. Humane v3 focuses on accessibility, privacy, and static/offline compatibility. With PoW enabled, it adds a meaningful cost to automated abuse without introducing barriers for humans.

Can I use Humane v3 and Turnstile together?

Yes. A common pattern is to run Humane v3 first and only escalate to Turnstile for high‑risk actions, while ensuring essential services remain accessible and never blocked solely by automated scoring.

Does Humane v3 require a backend?

No. Humane v3 can run entirely in the browser on static sites. If you want to verify tokens server‑side, you can forward the JSON payload to your backend and apply your own policies.