Early access
In production — proving itself through its first tenant

Behavioral infrastructure
with receipts.

Empress is an immutable ledger for behavior. Anything your agents, users, or systems do becomes a queryable xAPI statement — stored forever, isolated per tenant, exportable in full. Not session logs. A permanent record.

The first minute

Send a statement. Watch it arrive.

This is the whole pitch, executable: your first statement appears in your ledger seconds after you send it — and the dashboard shows it land live. Then take everything home.

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 ships today.

This table is the whole story — nothing on this site claims more than it. "Planned" is an honest word.

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

Private beta.

Empress runs in production today, proving itself through its first tenant. If you want the second key, tell us what you'd observe.

Email [email protected]