Early access
In production — proving itself through its first tenant

The data layer
for behavior.

Everything your agents, users, and systems do becomes a permanent, queryable record — one POST, on the open xAPI standard. Ask what happened last month, not just last session. Take all of it home whenever you want. Behavioral infrastructure, with receipts.

The first minute

Send a statement. Watch it arrive.

Your first statement lands in your ledger seconds after you send it. Read it back. Take everything home. Three commands, no setup — against production.

1 — Emit a statement

curl -X POST https://empress-api.jdnyzio.workers.dev/statements \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "actor": { "account": { "name": "agent-7",
      "homePage": "https://empress.eco" } },
    "verb": { "id": "https://empress.eco/verbs/resolved" },
    "object": { "id": "https://example.com/tickets/892" },
    "result": { "success": true }
  }'

2 — It's in the ledger. Read it back, or take it all home.

# your statements, isolated to your tenant
curl https://empress-api.jdnyzio.workers.dev/statements \
  -H "Authorization: Bearer YOUR_API_KEY"

# your ENTIRE ledger, as NDJSON
curl https://empress-api.jdnyzio.workers.dev/export \
  -H "Authorization: Bearer YOUR_API_KEY"

These commands run against production. The full surface is documented in the live OpenAPI spec, and the same first minute is what the dashboard teaches a new key.

The guarantees

Four things we can prove.

The ledger is immutable

Every statement is stored forever, exactly as emitted. Hygiene happens at query time — never by rewriting history. Your audit trail is a fact, not a promise.

Tenant isolation is machine-verified

Isolation is proven in both directions by a repeatable production test: your reads and exports return your data and only yours. This test caught and killed a real leak before any customer did.

Any verb is accepted

Empress validates structure, not vocabulary. Unknown verbs are stored and become queryable — meaning lives in interpretation, not ingestion rejection. Your domain's language is welcome.

Your data leaves whole

GET /export streams your entire ledger as cursor-paged NDJSON, tenant-scoped at the SQL level. No lock-in, no partial exports, no export tax.

The truth table

What you can build on today.

Every surface you can ship against right now — and what's coming, labeled plainly so you're never surprised.

SurfaceWhat it doesStatus
POST /statementsxAPI ingestion — the critical pathLive
GET /exportFull-ledger NDJSON export, cursor-pagedLive
GET /analytics/*Trending, rerank, difficulty, actor stats, summaryLive
GET /belief/:actorIdFSRS belief state + recommendationsLive
GET /openapi.jsonThe sold surface, machine-readableLive
Node SDK (@empress-eco/client)Typed zero-dependency clientBuilt — npm release pending
Python / Go SDKsOn the roadmapPlanned

Start remembering.

Tell us what you want to observe — your agents, your users, your systems — and we'll set you up with a key. A person reads every message.

Email [email protected]