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.
| Surface | What it does | Status |
|---|---|---|
POST /statements | xAPI ingestion — the critical path | Live |
GET /export | Full-ledger NDJSON export, cursor-paged | Live |
GET /analytics/* | Trending, rerank, difficulty, actor stats, summary | Live |
GET /belief/:actorId | FSRS belief state + recommendations | Live |
GET /openapi.json | The sold surface, machine-readable | Live |
Node SDK (@empress-eco/client) | Typed zero-dependency client | Built — npm release pending |
Python / Go SDKs | On the roadmap | Planned |
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]