# Veritio documentation

Kind

overview

For

newcomer · developer

Verified against

@veritio/core@0.4.7 · veritio@c4100ee

Veritio records application actions as portable evidence: normalized events, deterministic canonical bytes, ordered record chains, relationships, and independently verifiable exports. You can run the core workflow locally without an account.

Open source first

[Veritio Cloud](/docs/cloud/overview/) is optional. It operates a managed ingest and storage boundary; it does not replace the public event contract or independent verification path.

## Start with the complete path

[Section titled “Start with the complete path”](#start-with-the-complete-path)

The TypeScript tutorial is the complete checked path today: create two events, append them through a store, read the resulting records, verify the chain, then prove that changed or missing evidence fails verification.

1.  [Install the verified SDK release](/docs/start/installation/).
2.  [Record two events into one tenant-local chain](/docs/start/record-first-event/).
3.  [Change and remove records to observe verification failures](/docs/start/verify-a-chain/).
4.  [Choose durable storage or an optional managed path](/docs/start/choose-your-path/).

That sequence is executable from the checked fixtures used by the pages. It is not a prose-only quickstart.

## The same event in three languages

[Section titled “The same event in three languages”](#the-same-event-in-three-languages)

TypeScript, Python, and Go share the portable event, canonical JSON, deterministic redaction, and event-hash semantics. They do not currently expose identical storage and record-verification APIs, so the tabs below stop at the capability each SDK actually provides.

-   [TypeScript](#tab-panel-0)
-   [Python](#tab-panel-1)
-   [Go](#tab-panel-2)

Terminal window

```sh
bun add @veritio/core@0.4.7
```

Terminal window

```sh
git clone https://github.com/getveritio/veritio.git
git -C veritio checkout c4100ee7b678d0c6b227c67ae6ea1d8a1f373967
python3 -m pip install -e ./veritio/sdks/python
```

Terminal window

```sh
go get github.com/getveritio/veritio/sdks/go@c4100ee7b678d0c6b227c67ae6ea1d8a1f373967
```

-   [TypeScript](#tab-panel-3)
-   [Python](#tab-panel-4)
-   [Go](#tab-panel-5)

src/examples/quickstart/typescript.ts

```ts
import { MemoryAuditStore, createAuditEvent, hashAuditEvent, verifyAuditRecords } from '@veritio/core'

const store = new MemoryAuditStore()
const scope = { tenantId: 'org_acme', environment: 'production' }

const event = createAuditEvent({
  id: 'evt_member_invited_01',
  occurredAt: '2026-08-09T10:00:00.000Z',
  actor: { type: 'user', id: 'usr_123' },
  action: 'organization.member.invited',
  target: { type: 'organization', id: 'org_acme' },
  scope,
  purpose: 'access_management',
  lawfulBasis: 'contract',
  retention: 'security_1y',
  metadata: { role: 'viewer' },
})

const record = await store.append(event, { idempotencyKey: 'invite:inv_123' })
const records = await store.list(scope)
const verification = verifyAuditRecords(records)

console.log({ sequence: record.sequence, verification, hashPrefix: hashAuditEvent(event).slice(0, 12) })
```

src/examples/quickstart/python.py

```python
from veritio import create_audit_event, hash_audit_event

event = create_audit_event(
    {
        "id": "evt_member_invited_01",
        "occurredAt": "2026-08-09T10:00:00.000Z",
        "actor": {"type": "user", "id": "usr_123"},
        "action": "organization.member.invited",
        "target": {"type": "organization", "id": "org_acme"},
        "scope": {"tenantId": "org_acme", "environment": "production"},
        "purpose": "access_management",
        "lawfulBasis": "contract",
        "retention": "security_1y",
        "metadata": {"role": "viewer"},
    }
)

event_hash = hash_audit_event(event)
print({"eventId": event["id"], "hashPrefix": event_hash[:12]})
```

src/examples/quickstart/go.go

```go
package main

import (
  "fmt"

  veritio "github.com/getveritio/veritio/sdks/go"
)

func main() {
  event, err := veritio.CreateAuditEvent(veritio.AuditEventInput{
    ID:          "evt_member_invited_01",
    OccurredAt:  "2026-08-09T10:00:00.000Z",
    Actor:       veritio.Principal{Type: "user", ID: "usr_123"},
    Action:      "organization.member.invited",
    Target:      veritio.Resource{Type: "organization", ID: "org_acme"},
    Scope:       &veritio.EvidenceScope{TenantID: "org_acme", Environment: "production"},
    Purpose:     "access_management",
    LawfulBasis: "contract",
    Retention:   "security_1y",
    Metadata:    map[string]any{"role": "viewer"},
  })
  if err != nil {
    panic(err)
  }

  hash, err := veritio.HashAuditEvent(event, nil)
  if err != nil {
    panic(err)
  }
  fmt.Printf("event=%s hash=%s\n", event.ID, hash[:12])
}
```

## What the first event describes

[Section titled “What the first event describes”](#what-the-first-event-describes)

All three fixtures use the same event identifier, actor, action, target, tenant scope, purpose, lawful basis, retention label, and minimized metadata. The verification suite confirms that all three languages produce the same event-hash prefix.

The host still decides whether the claim is true, resolves the tenant and actor from trusted server context, and minimizes metadata before recording it. Veritio makes the recorded bytes and their later ordering checkable.

## Choose the page that matches your job

[Section titled “Choose the page that matches your job”](#choose-the-page-that-matches-your-job)

You need to…

Continue with

Understand event input versus stored records

[Audit events](/docs/concepts/audit-events/)

See exactly how tampering becomes detectable

[Hash chain](/docs/concepts/hash-chain/)

Integrate an application framework

[Framework guides](/docs/frameworks/nextjs/)

Select authoritative storage

[Storage overview](/docs/storage/overview/)

Capture agent activity safely

[Agent events](/docs/ai/agent-events/)

Look up exact fields and errors

[Reference](/docs/reference/event-schema/)

## Keep the trust boundary explicit

[Section titled “Keep the trust boundary explicit”](#keep-the-trust-boundary-explicit)

Veritio records evidence supplied by your application. Your host still owns authentication, authorization, tenant resolution, durable storage, encryption, key management, backups, and retention enforcement. Never put secrets, access tokens, raw prompts, full diffs, or unnecessary personal data into event metadata.

Begin with [Installation](/docs/start/installation/). If `@veritio/core@0.4.7` is already installed, continue directly to [Record your first audit event](/docs/start/record-first-event/).

[Edit page](https://github.com/getveritio/veritio-website/edit/main/src/content/docs/docs/index.mdx)

Last updated: Aug 23, 2026

[Next  
Installation](/docs/start/installation/)

Veritio provides evidence support, not legal advice or automatic compliance.

This site uses cookieless, anonymous analytics (Umami) by default. With your consent, we also enable Google Analytics, which sets cookies and sends usage data to Google. [Privacy Policy](/legal/privacy/)
