VerisumVerisum
Developer Docs

HAPP Protocol Documentation

Everything you need to integrate cryptographic governance proof into your stack. REST APIs, proof types, verification, and more.

Quick Start

Three steps to anchor your first governance proof.

1

Get Your API Key

Navigate to Settings → API Keys in your Verisum dashboard. Generate a key with prove:write scope. Available on the Verify plan.

2

Create a Proof

Call any /api/prove/* endpoint with your API key. Start with an attestation — it's the simplest proof type to test.

3

Verify It

Use the verification ID returned in the response. Call /api/public/verify or visit app.verisum.org/verify/{id} — no auth needed.

Authentication

All write endpoints require a Bearer token. The public verification endpoint requires no authentication.

Request Header

Authorization: Bearer YOUR_API_KEY

Generate a key: Settings → API Keys in your Verisum dashboard.

Required scope: prove:write for creating proofs, prove:read for reading your own proofs.

Rate limits: 100 requests/minute per key. Batch operations count as a single request.

Plan requirement: API access is available on the Verisum Verify plan.

Core Concepts

HAPP is built on three primitives that turn governance actions into verifiable, portable trust.

Anchor

  • Every governance event is serialised into a canonical JSON payload and hashed with SHA-256.
  • Hashes are batched into a Merkle tree (batch window: 60 seconds or 100 events, whichever comes first).
  • The Merkle root is written to an EVM-compatible blockchain as a single transaction, minimising gas costs.
  • Each individual proof can be verified via Merkle inclusion proof against the anchored root.

Attest

  • Attestations require a human in the loop. Automated systems can trigger governance events, but only authorised humans can sign attestations.
  • The attester reviews the evidence, adds their statement, and digitally signs. The signed attestation is then anchored via the Anchor primitive.
  • Attestations have a validity period (default 90 days). Expired attestations remain verifiable but are flagged as expired.

Exchange

  • Proofs can be shared with any external party using a single exchange request. No bilateral integration required.
  • The exchange itself is anchored — creating proof that specific governance evidence was shared with a specific party at a specific time.
  • Recipients verify proofs using the public /api/public/verify endpoint. No Verisum account needed.

Cryptographic Pipeline

event_data → SHA-256(payload) → Merkle(batch) → anchor(root, EVM) → VRF-{type}-{id}

Individual proofs are verified via Merkle inclusion proofs against the on-chain root. Full chain transaction details are included in every verification response.

API Reference

Base URL: https://app.verisum.org

POST/api/prove/approvals

Create Approval

Submit a governance decision for human approval. The decision is hashed, the approver signs off, and the proof is anchored on-chain. Returns a verification ID.

Request Body

FieldTypeRequiredDescription
system_idstringRequiredUUID of the AI system being governed
decision_typestringRequiredType of decision: deployment, policy_change, model_update, data_access, config_change
decision_summarystringRequiredHuman-readable description of the governance decision
approver_emailstringRequiredEmail of the designated human approver
evidenceobjectOptionalSupporting evidence (assessment scores, policy references, risk ratings)
expires_atISO 8601OptionalExpiry for the approval request (default: 7 days)

Response

FieldTypeDescription
idstringUUID of the approval record
statusstringpending_approval | approved | rejected
verification_idstringVRF-APR-{id} — issued once approved and anchored
approval_urlstringURL for the approver to review and sign off

Example

const res = await fetch("https://app.verisum.org/api/prove/approvals", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    system_id: "sys_a1b2c3d4",
    decision_type: "deployment",
    decision_summary: "Approve v2.1 model deployment to production",
    approver_email: "cto@example.com",
    evidence: {
      trust_score: 78,
      risk_rating: "medium",
      assessment_id: "run_x9y8z7"
    }
  })
});
POST/api/prove/attestations

Issue Attestation

Create a signed attestation of compliance state. A human reviewer attests to the governance posture of a system or organisation. The attestation is hashed, Merkle-batched, and anchored.

Request Body

FieldTypeRequiredDescription
target_typestringRequiredWhat is being attested: organisation, system, or process
target_idstringRequiredUUID of the target entity
attestation_typestringRequiredcompliance_state, risk_assessment, policy_alignment, incident_resolution
statementstringRequiredThe attestation statement (what is being declared)
attester_emailstringRequiredEmail of the human attester
evidence_refsstring[]OptionalUUIDs of supporting evidence (assessments, policies, incidents)
valid_untilISO 8601OptionalAttestation validity period (default: 90 days)

Response

FieldTypeDescription
idstringUUID of the attestation record
verification_idstringVRF-ATT-{id} — issued once signed and anchored
event_hashstringSHA-256 hash of the attestation payload
anchored_atstringISO 8601 timestamp of on-chain anchoring

Example

const res = await fetch("https://app.verisum.org/api/prove/attestations", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    target_type: "organisation",
    target_id: "org_m4n5o6",
    attestation_type: "compliance_state",
    statement: "Organisation meets EU AI Act Article 9 requirements for risk management",
    attester_email: "dpo@example.com",
    evidence_refs: ["run_x9y8z7", "pol_a1b2c3"],
    valid_until: "2026-06-15T00:00:00Z"
  })
});
POST/api/prove/provenance

Record Provenance

Track AI system outputs with full provenance — model version, data sources, review status, and decision chain. Creates an auditable trail from input to output.

Request Body

FieldTypeRequiredDescription
system_idstringRequiredUUID of the AI system
output_typestringRequiredprediction, recommendation, classification, generation, decision
model_versionstringRequiredVersion identifier of the model that produced the output
data_sourcesstring[]RequiredIdentifiers of input data sources used
output_summarystringRequiredDescription of what was produced
reviewer_emailstringOptionalHuman reviewer who validated the output
review_statusstringOptionalpending, approved, flagged, rejected

Response

FieldTypeDescription
idstringUUID of the provenance record
verification_idstringVRF-PRV-{id} — issued once anchored
event_hashstringSHA-256 hash of the provenance payload
chain_of_custodyobjectFull input → model → output → review chain

Example

const res = await fetch("https://app.verisum.org/api/prove/provenance", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    system_id: "sys_a1b2c3d4",
    output_type: "recommendation",
    model_version: "gpt-4o-2026-03",
    data_sources: ["customer_db_v3", "product_catalog_q1"],
    output_summary: "Personalised product recommendations for 12,000 users",
    reviewer_email: "ml-lead@example.com",
    review_status: "approved"
  })
});
POST/api/prove/exchanges

Trust Exchange

Share anchored proofs with external parties — regulators, auditors, or supply chain partners. Creates a logged exchange record with recipient details and access controls.

Request Body

FieldTypeRequiredDescription
proof_idsstring[]RequiredVerification IDs of proofs to share (VRF-APR-*, VRF-ATT-*, etc.)
recipient_orgstringRequiredName of the receiving organisation
recipient_emailstringRequiredContact email for the recipient
purposestringRequiredWhy the proofs are being shared: audit, regulatory, due_diligence, partnership
access_expiresISO 8601OptionalWhen the shared access expires (default: 30 days)
messagestringOptionalOptional message to the recipient

Response

FieldTypeDescription
exchange_idstringUUID of the exchange record
verification_idstringVRF-EXC-{id} — proof of the exchange itself
share_urlstringURL the recipient can use to view shared proofs
proofs_includednumberCount of proofs included in the exchange

Example

const res = await fetch("https://app.verisum.org/api/prove/exchanges", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    proof_ids: ["VRF-ATT-a1b2c3", "VRF-APR-d4e5f6"],
    recipient_org: "Financial Conduct Authority",
    recipient_email: "ai-governance@fca.org.uk",
    purpose: "regulatory",
    message: "Q1 2026 AI governance compliance evidence"
  })
});
POST/api/prove/incident-locks

Incident Lock

Forensic freeze of governance state at the moment of an AI incident. Captures assessment scores, active policies, system configuration, and governance posture as immutable evidence.

Request Body

FieldTypeRequiredDescription
incident_idstringRequiredUUID of the incident record from Verisum
system_idstringRequiredUUID of the affected AI system
severitystringRequiredcritical, high, medium, low
snapshot_scopestring[]RequiredWhat to capture: assessments, policies, config, vendor_status, declarations
locked_bystringRequiredEmail of the person initiating the forensic lock

Response

FieldTypeDescription
lock_idstringUUID of the incident lock record
verification_idstringVRF-INC-{id} — proof of the frozen state
event_hashstringSHA-256 hash of the entire governance snapshot
snapshotobjectThe frozen governance state (scores, policies, config)

Example

const res = await fetch("https://app.verisum.org/api/prove/incident-locks", {
  method: "POST",
  headers: {
    "Authorization": "Bearer YOUR_API_KEY",
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    incident_id: "inc_p7q8r9",
    system_id: "sys_a1b2c3d4",
    severity: "high",
    snapshot_scope: ["assessments", "policies", "config", "vendor_status"],
    locked_by: "incident-lead@example.com"
  })
});
GET/api/public/verifyNo auth required

Verify Proof

Public verification endpoint. No authentication required. Pass a verification ID to confirm the proof is authentic, unaltered, and anchored on-chain. Returns the proof metadata, chain transaction, and Merkle inclusion proof.

Query Parameters

FieldTypeRequiredDescription
idstring (query)RequiredThe verification ID (e.g., VRF-APR-a1b2c3d4)

Response

FieldTypeDescription
validbooleanWhether the proof is authentic and unaltered
typestringProof type: approval, attestation, provenance, exchange, incident_lock
anchored_atstringISO 8601 timestamp of on-chain anchoring
chain_txstringTransaction hash on the anchoring chain
chainstringNetwork name (e.g., polygon, ethereum)
event_hashstringSHA-256 hash of the original event
merkle_proofstring[]Merkle inclusion proof for independent verification
organisationstringName of the organisation that created the proof

Example

// No authentication required
const res = await fetch(
  "https://app.verisum.org/api/public/verify?id=VRF-ATT-a1b2c3d4"
);
const proof = await res.json();

// {
//   valid: true,
//   type: "attestation",
//   anchored_at: "2026-03-15T14:22:00Z",
//   chain_tx: "0x7a3f...e91d",
//   chain: "polygon",
//   event_hash: "sha256:a1b2c3d4e5f6...",
//   merkle_proof: ["0x...", "0x...", "0x..."],
//   organisation: "Acme Corp"
// }

Proof Types

Every proof is identified by a verification ID with a type-specific prefix.

TypeVRF-ID PrefixDescription
ApprovalVRF-APRHuman-approved governance decisions (deployments, policy changes, model updates)
AttestationVRF-ATTSigned compliance state declarations by authorised attesters
ProvenanceVRF-PRVAI output lineage — model version, data sources, review chain
ExchangeVRF-EXCCross-org proof sharing records with recipient and purpose
Incident LockVRF-INCForensic governance state snapshots at incident time

Verification ID Format

VRF-{TYPE}-{uuid}

Example: VRF-ATT-a1b2c3d4-e5f6-7890-abcd-ef1234567890

How Verification Works

Any HAPP proof can be independently verified without a Verisum account.

1

Hash Check

The original event payload is re-hashed and compared against the stored event_hash. Any alteration fails this check.

2

Merkle Inclusion

The event hash is verified against the Merkle root using the inclusion proof (sibling hashes). This confirms the proof was part of the anchored batch.

3

Chain Lookup

The Merkle root is verified against the on-chain transaction. This confirms the root was written to the blockchain at the claimed timestamp.

Verification Portal

Any HAPP proof can be verified in a browser:

https://app.verisum.org/verify/{verification-id}

No account required. No authentication. The portal shows the proof type, anchoring timestamp, chain transaction, and real-time verification status.

SDKs

Native SDKs for integrating HAPP directly into your governance workflows, CI/CD pipelines, and compliance tooling.

JS/TS

JavaScript / TypeScript

Full-featured SDK with TypeScript types, automatic retries, Merkle proof validation, and webhook support.

npm install @verisum/happ-sdk
Coming Q3 2026
Python

Python

Pythonic SDK with async support, pandas integration for batch operations, and built-in proof validation.

pip install verisum-happ
Coming Q3 2026

Ready to Anchor Your First Proof?

HAPP is available today on Verisum Verify. Get your API key and start proving governance in minutes.