Status: Immutable Ledger Active

THE LEDGER
OF RECORD
FOR FRAUD
DECISIONS.

Tamper-proof records. Examiner-ready evidence. One API call. The cryptographic compliance layer for modern fintech.

$ curl -X POST /v1/ledger \
-H "X-Signature: hmac_sha256_..."
{
"event_id": "txn_20260308_abc123",
"decision": "BLOCK",
"score": 0.92,
"reason_codes": ["velocity_spike"],
"metadata": { ... }
}
HTTP 201 CREATED23ms
record_hash: a1b2c3d4e5f6...
signature: ed25519_sig_...
sequence: #48,291
48,291+Decisions Recorded
100%Chain Integrity
<50msAvg Response
5-PointVerification

How It Works

From fraud decision to examiner-ready evidence in four steps.

01

Your engine decides

Your fraud model makes an ALLOW, BLOCK, or REVIEW decision on a transaction.

POST /v1/ledger
02

We seal the record

Attestr hashes it, chains it to the previous record, signs it with Ed25519, and stores it in an append-only ledger.

SHA-256 + Ed25519
03

Examiner asks why

Months later, a regulator asks about a blocked payment. Your analyst opens the investigation view.

GET /v1/evidence/:id
04

You hand them proof

A cryptographically verifiable evidence packet proves exactly what happened, when, and why. Tamper-proof.

PDF or JSON

01 // Protocol Architecture

Six layers of cryptographic integrity. Zero trust required.

Hash Chaining

H(n) = SHA256(H(n-1) + data)

Every record includes the previous record's SHA-256 hash. Altering any single record breaks every subsequent link.

Digital Signatures

sig = Ed25519(privkey, hash)

Ed25519 cryptographic signatures on every record. Download the public key, verify any evidence packet offline.

Merkle Proofs

root = H(H(a,b), H(c,d))

Records are batched into Merkle trees. Prove inclusion of any single event within a batch of 1,000+ records.

Append-Only Ledger

REVOKE UPDATE, DELETE

PostgreSQL rules enforce immutability at the database level. No UPDATE, no DELETE. Records are permanent.

HMAC Authentication

HMAC(method + path + ts + body)

Every API request is signed with SHA-256 HMAC including method, path, timestamp, and body. 5-minute replay window.

Multi-Tenant

tenant_id → isolated chain

Isolated data per tenant. Each organization gets unique API credentials, separate ledger chains, and independent verification.

02 // Evidence Packets

From “trust us” to mathematical proof.

When an examiner asks about a blocked transaction, you don't explain — you prove. Evidence packets contain everything needed for independent verification.

evidence_txn_abc123.json
VERIFIED
{
"event_id": "txn_20260308_abc123",
"decision": "BLOCK",
"score": 0.9200,
"reason_codes": ["velocity_spike", "new_account"],
"decided_at": "2026-03-08T14:32:01Z",
"input_hash": "e3b0c442...98fb",

// Cryptographic proof
"record_hash": "a1b2c3d4...",
"previous_hash": "f6e5d4c3...",
"signature": "ed25519_sig_...",

// Merkle inclusion proof
"merkle_root": "9f8e7d6c...",
"proof_path": [...]
}

5-Point Verification

Hash Integrity

PASS

Recompute the SHA-256 hash from the canonical record. If it matches, the data is unaltered.

Chain Continuity

PASS

Verify the previous_hash matches the prior record. The chain is unbroken.

Signature Validity

PASS

Verify the Ed25519 signature using the public key. Attestr signed this record.

Merkle Inclusion

PASS

Walk the Merkle proof path to the root. This record was in the batch.

Input Hash Anchor

PASS

Compare the input_hash against the source system's raw data. The decision was based on real data.

Third parties can verify evidence packets independently using the public key endpoint. No Attestr account required.

SELF-HOST OPTION: Tenants can host their own verification portal using our open-source engine. Zero vendor lock-in.

05 // Dual Attestation

Prove the input, not just the output.

Anyone can sign a decision. But can you prove the data that fed the decision wasn't tampered with? Input hashing closes the last trust gap.

×

Without Input Hash

Your fraud engine sends a decision. Attestr signs it. But an insider could have altered the transaction data before the engine saw it. You've notarized a lie.

Source system—?—Fraud engineAttestrSigned

With Input Hash

Before your engine runs, compute a SHA-256 of the raw transaction payload. Send it alongside the decision. Now anyone can pull the original data from the source system and verify the hash matches.

Source system—#—Fraud engineAttestrSealed + Anchored

The input_hash field is optional. Records without it are still fully signed and chained (single attestation). Adding it upgrades to dual attestation — binding the decision to its source data.

Add one field. Close the gap.
// 1. Hash the raw input before your engine runs
const rawTransaction = await db.getTransaction(txnId);
const inputHash = sha256(
canonicalJSON(rawTransaction)
);

// 2. Run your fraud engine as usual
const decision = await fraudEngine.evaluate(rawTransaction);

// 3. Send both to Attestr
await fetch('/v1/decisions', { body: {
event_id: txnId,
decision: decision.action,
score: decision.score,
reason_codes: decision.reasons,
decided_at: new Date().toISOString(),
input_hash: inputHash,// ← dual attestation
} });

// Now examiners can verify: source data → hash → decision → chain
Single Attestation

Decision is signed, chained, and Merkle-batched. Proves the record wasn't altered after ingestion.

Dual Attestation

All of single attestation, plus a cryptographic anchor to the original input data. Full chain of custody.

06 // AI Anomaly Detection

Your ledger doesn’t just record. It watches.

Statistical anomaly detection runs continuously on your decision stream. No external APIs. No data leaves your infrastructure. Pure math.

z = (x̄ − μ) / σ

Score Drift Detection

Detects when your model’s score distribution shifts. Catches model drift before examiners do.

Rolling z-score analysis on decision scores. Alerts when the current window diverges >2σ from the 24-hour baseline.

Δrate = |current% − baseline%|

Decision Rate Monitoring

Flags unusual spikes in block/allow ratios. Know when something changes before your users call.

Proportion test comparing current-hour decision ratios against 24-hour rolling averages.

velocity < 0.2 × baseline

Recording Gap Alerts

Detects missing records and ingestion failures. Proves you never stopped recording.

Monitors ingestion velocity per tenant. Alerts when throughput drops below 20% of expected rate.

cos(θ) = A·B / |A||B|

Reason Code Shifts

Surfaces new fraud patterns and policy changes through reason code frequency analysis.

Cosine similarity between current and baseline reason code frequency vectors.

v(new) ∉ baseline

Model Version Tracking

Automatically detects model deployments and correlates with decision pattern changes.

Deterministic detection of new model_version strings not seen in the 24-hour baseline.

z = (v − μᵥ) / σᵥ

Velocity Spike Detection

Catches batch processing errors, replay attacks, and upstream integration failures.

Z-score analysis on ingestion rate. Flags when velocity exceeds 3σ above baseline.

All analysis runs locally on your infrastructure.

No data is sent to external AI services. Detection uses deterministic statistical methods — z-scores, proportion tests, cosine similarity. Fully auditable. No black boxes.

Try It Now

Paste JSON. Watch it chain.

See how a fraud decision gets hashed, chained, and signed in real time. This is a client-side demo — nothing leaves your browser.

INPUT_PAYLOAD
LEDGER_OUTPUT
Paste your JSON and click to chain

07 // Developer Experience

One endpoint. Full audit trail.

Your fraud engine already makes the decision. Just POST it. We handle the hashing, chaining, signing, and Merkle batching. No SDK required.

REQUEST_SIGNING_LOGIC
# Sign the request with HMAC-SHA256
const signature = hmac(
'POST\n/v1/ledger\n' + timestamp + '\n' + body,
hmacSecret
);

const res = await fetch('/v1/decisions', {
method: 'POST',
headers: {
'X-Tenant-Id': tenantId,
'X-Timestamp': timestamp,
'X-Signature': signature,
},
body: JSON.stringify(decision)
});

// 201 — Hashed, chained, signed, stored.
VERIFICATION_ENDPOINT
# Verify integrity of any record
const result = await fetch(
'/v1/decisions/txn_abc123/verify',
{ method: 'POST', headers }
);

// Response:
{
"status": "VERIFIED",
"checks": {
"hash_valid": true,
"chain_valid": true,
"signature_valid": true,
"merkle_valid": true,
"input_hash_present": true
},
}
View on GitHub|MIT Licensed — Open Source Engine

The Audit Reality Check

What happens when the examiner calls.

Without Attestr

Day 1–3

Write SQL queries to reconstruct decision logs from scattered tables

Day 4–6

Format CSVs, cross-reference timestamps, fill gaps in audit trail

Day 7–10

Explain log inconsistencies to a skeptical examiner in writing

Day 11–14

Re-pull data after examiner finds discrepancies in your first export

Day 15+

Pray the timestamps are close enough and the examiner doesn’t dig deeper

Total time3+ weeks

Plus the stress. Plus the risk. Plus the billable hours.

With Attestr

Minute 1

Examiner requests evidence for transaction txn_abc123

Minute 2

Open dashboard, search event_id, click “Export Evidence”

Minute 3

Send the PDF. Hash chain, signature, Merkle proof — all included.

Minute 4

Examiner verifies independently using the public key. No questions.

Minute 5

Go back to building.

Total time5 minutes

Mathematical proof. No explaining. No stress.

08 // Pricing

Simple, predictable pricing.

Start free. Scale when you're ready. No hidden fees. No per-seat charges. You pay for records ingested.

Free

$0forever

For prototyping and evaluation.

500 records/mo
  • Append-only ledger
  • Hash chaining + signatures
  • JSON evidence export
  • API access
  • Community support
START FREE
Most Popular

Starter

$99/month

For growing fintechs in production.

10,000 records/mo
  • Everything in Free
  • PDF evidence packets
  • Merkle batch proofs
  • Dashboard access
  • Investigation view
  • Email support
GET STARTED

Pro

$499/month

For compliance-heavy operations.

100,000 records/mo
  • Everything in Starter
  • Examiner guest access
  • Bulk export (ZIP archives)
  • Webhook notifications
  • Custom retention policies
  • SSO / SAML
  • Dedicated support + SLA
CONTACT SALES

Stop explaining.
Start proving.

Your fraud engine already makes the right calls. Attestr makes them audit-proof. Start recording in under 5 minutes.

Open source engine · MIT Licensed · Self-host or use our cloud