Veritio documentation
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.
Start with the complete path
Section titled “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.
- Install the verified SDK release.
- Record two events into one tenant-local chain.
- Change and remove records to observe verification failures.
- Choose durable storage or an optional managed 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”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.
bun add @veritio/core@0.4.7git clone https://github.com/getveritio/veritio.gitgit -C veritio checkout c4100ee7b678d0c6b227c67ae6ea1d8a1f373967python3 -m pip install -e ./veritio/sdks/pythongo get github.com/getveritio/veritio/sdks/go@c4100ee7b678d0c6b227c67ae6ea1d8a1f373967import { 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) })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]})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”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”| You need to… | Continue with |
|---|---|
| Understand event input versus stored records | Audit events |
| See exactly how tampering becomes detectable | Hash chain |
| Integrate an application framework | Framework guides |
| Select authoritative storage | Storage overview |
| Capture agent activity safely | Agent events |
| Look up exact fields and errors | Reference |
Keep the trust boundary explicit
Section titled “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. If @veritio/core@0.4.7 is already installed, continue directly to Record your first audit event.