vouchstone

Get started

Quickstart

The Vault records what your AI agents knew and did in a tamper-evident, hash-chained ledger. Send an event, watch it appear, prove it later. Two steps to your first record.

1. Create an ingest key

Open the Vault, go to Settings → New key, and copy the key (shown once). It authenticates every event you send and looks like vk_live_….

2. Send your first event

Every event has a typeknow (something the agent recalled), did (an action it took), or decision — plus a human-readable summary. Everything else is optional.

curl
curl -X POST https://vouchstone.dev/api/ingest \
  -H "Authorization: Bearer vk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent": "deploy-bot",
    "type": "did",
    "action": "db.migrate",
    "status": "ok",
    "summary": "applied 20260703_004 to production",
    "payload": { "migration": "20260703_004", "rows": 12 }
  }'

The response confirms the record and returns its position and hash in your chain:

response
{ "ok": true, "recorded": [ { "seq": 4127, "type": "did", "hash": "9f2a1c…" } ] }

From your code

It’s a plain HTTP POST — call it from anywhere your agent runs.

node
await fetch("https://vouchstone.dev/api/ingest", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOUCHSTONE_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    agent: "research-agent",
    type: "know",
    action: "memory.recall",
    summary: "recalled: user deploys to Hetzner, never Railway",
  }),
});
python
import os, requests

requests.post(
    "https://vouchstone.dev/api/ingest",
    headers={"Authorization": f"Bearer {os.environ['VOUCHSTONE_KEY']}"},
    json={
        "agent": "research-agent",
        "type": "decision",
        "summary": "chose Postgres over SQLite for the ledger",
        "status": "ok",
    },
)

3. See it — and prove it

Refresh your Vault. The event is on the Timeline, counted in your KPIs and the activity chart, and grouped under its agent. Open Integrity and hit Re-verify — the whole chain recomputes from genesis, and any tampering is caught and located.

Sending many events at once? Post { "events": [ … ] } with up to 100 events — see the API reference.