Invoance

Loading…

Document anchoring

Any document — contract, invoice, report, certificate — can be anchored into the Invoance ledger as a tamper-evident, cryptographically signed record. The anchor proves the document existed in its exact form at a specific point in time.

Invoance stores the SHA-256 fingerprint, not the document itself. The fingerprint is sufficient to independently verify integrity. Original document custody remains with you.

Free up to 10,000 events · Available on all plans · No document storage required

What gets anchored

A single call to POST /v1/document/anchor creates a permanent, immutable ledger entry binding your document hash to a timestamp and organizational identity.

Document hash

SHA-256 of the exact document bytes. Any alteration to the document — a single character, a metadata change, a formatting tweak — produces a completely different hash.

Document reference

A human-readable identifier you provide — invoice number, contract ID, file name. Used to locate the record later without storing the document itself.

Ed25519 signature

The anchor is signed with your tenant's private key. The signature proves the record was issued by your organization and has not been altered since.

Timestamp

Recorded at ingestion and included in the signed payload. Cannot be backdated, adjusted, or overwritten after anchoring.

Public verification link

Every anchor produces a public URL. Any third party — a counterparty, auditor, or court — can verify the document's integrity without authentication.

Optional document storage

Original document retention is available as an optional feature. When disabled, only the fingerprint is stored. Verification always resolves against the hash, not the stored file.

How it works

Document anchoring does not require document routing changes or storage delegation. Hash the document locally, submit the hash. The document never leaves your systems unless you choose otherwise.

1
Hash the document
import hashlib

with open("invoice_1042.pdf", "rb") as f:
    document_hash = hashlib.sha256(f.read()).hexdigest()

# → "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
2
Anchor the hash
POST /v1/document/anchor
Authorization: Bearer invoance_live_xxx
Idempotency-Key: <uuid>

{
  "document_ref":  "Invoice #1042",
  "document_hash": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3"
}
3
Receive immutable proof
{
  "event_id":          "evt_01HX…",
  "document_ref":      "Invoice #1042",
  "document_hash":     "a94a8fe5…",
  "signature_b64":     "…",
  "public_key_b64":    "…",
  "created_at":        "2026-02-25T14:22:01Z",
  "verify_url":        "https://invoance.com/verify/evt_01HX…"
}
4
Verify at any time
GET https://invoance.com/verify/evt_01HX…

# Returns: hash, signature, public_key, timestamp, tenant_domain
# Verifier recomputes SHA-256 of original document
# Compares → match = document unchanged since anchoring
What anchoring proves and does not prove
Anchoring proves
The document existed in its exact form at the anchored timestamp.
The document has not been altered since anchoring.
The anchor was issued by the stated organization.
The timestamp was recorded at ingestion and is part of the signed payload.
The record is independently verifiable without contacting Invoance.
Outside the scope of anchoring
Whether the document contents are accurate or truthful.
Whether the document was legitimately created.
Legal validity of the document in any specific jurisdiction.
That a specific person signed or approved the document.
Anything that occurred before the document was anchored.
Anchoring is a point-in-time integrity guarantee. It answers "has this changed?" not "is this true?" Those are different questions and require different tools.
When document anchoring matters

Document disputes follow a predictable pattern: one party claims a document was altered after signing, after delivery, or after an event that changed the stakes. Anchoring resolves that dispute with cryptographic evidence rather than competing testimony.

Contract disputes

Counterparty claims contract terms were changed after execution.

Without anchoring

You have the file. They have a different version. Someone is lying. Courts cannot determine which.

With anchoring

Anchor at execution. SHA-256 at anchoring matches SHA-256 of your copy. Dispute resolved cryptographically.

Regulatory submissions

Regulator questions whether a submitted report matches the version on file.

Without anchoring

Metadata and version history presented. Auditor requests independent verification. Engineering reconstructs.

With anchoring

Anchor at submission. Regulator verifies via public URL. No engineering involvement required.

Vendor and supplier records

Invoice dispute — vendor claims payment terms were different at delivery.

Without anchoring

Both parties have copies. Email chains are inconclusive. Legal fees accumulate.

With anchoring

Invoice anchored at delivery. Hash comparison proves which version was current at that moment.

Audit evidence

Auditor requires proof that policies and procedures were in effect at a specific date.

Without anchoring

Documents produced from file systems. Auditor cannot rule out post-dated modification.

With anchoring

Policy anchored when published. Anchor timestamp is signed and independently verifiable.

What can be anchored

Any file that can be hashed can be anchored. Invoance is format-agnostic — it operates on bytes, not document structure. The hash is deterministic regardless of file type.

Contracts and agreementsNDAs, service agreements, employment contracts, partnership deeds. Anchor at signing to establish the agreed version.
Invoices and financial recordsInvoices, purchase orders, payment confirmations. Anchor at issuance to fix the authoritative version.
Compliance reports and filingsRegulatory submissions, audit reports, compliance certifications. Anchor at submission to establish the filed version.
Policies and proceduresInternal policies, security procedures, governance documents. Anchor when published to establish effective dates.
Technical specificationsDesign documents, API specifications, architecture records. Anchor at approval to establish the authoritative version.
Certificates and credentialsCompliance certificates, qualification records, training completions. Anchor at issuance to prevent backdating.
Duplicate detection

If the same document hash is submitted more than once, the API returns 409 Conflict with the original event details. This is by design — it prevents double-anchoring the same document and surfaces potential process errors.

409Conflict — document already anchored
{
  "error":    "document_already_anchored",
  "message":  "This document hash was already anchored.",
  "event_id": "evt_01HX…",
  "created_at":"2026-01-10T09:14:22Z",
  "verify_url":"https://invoance.com/verify/evt_01HX…"
}

The conflict response includes the original anchor details so you can retrieve the existing proof without a separate lookup.

Three anchoring surfaces

Document anchoring is one of three proof endpoints in Invoance. Each addresses a different anchoring need — same cryptographic primitives, different data models.

What is anchored
Primary use case
Document anchoring
File hash + document reference
Contracts, invoices, reports, certificates
Structured business event payload
Approvals, access logs, compliance events
AI input hash + output hash + model metadata
AI decisions, recommendations, generated content

Document anchoring uses the same cryptographic foundation as all Invoance records — SHA-256, Ed25519, and append-only Postgres. The proof is verifiable offline, independent of Invoance infrastructure.