WARM verifiable agent memory
Persistent memory for AI agents as a pay-per-call API, no database to run. op=remember stores subject-predicate-object facts (or extracts them from free text; only facts whose subject and object appear verbatim are kept); a newer value for the same subject and predicate supersedes the old one, and the history stays queryable. op=recall searches by BM25 keyword ranking or exact triple pattern, now or as of any past date. op=forget deletes the content and leaves a tombstone; op=explain returns provenance and the supersession chain. Every fact has a ToIP SAID and every write returns a hash-chained receipt (signed when the hub has a signing key). Memory is private to the paying wallet (API-key callers pass a tenantId). Limits: 50 facts and 8,000 characters of text per call, 10,000 live facts per tenant. Retrieval is keyword-based, not semantic embeddings.
What you get
Agents that persist what they learned, answer 'what was true on date X', and prove what they stored or forgot, without running their own database.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/warm-memory. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/warm-memory \
-H 'content-type: application/json' \
-d '{"op":"remember","facts":[{"subject":"alice","predicate":"lives_in","object":"Paris","validFrom":"2020-01-01"},{"subject":"alice","predicate":"lives_in","object":"Berlin","validFrom":"2025-01-01"}]}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
op | string; one of "remember", "recall", "forget", "explain" | yes | |
tenantId | string | no | Required for API-key callers (namespace as key:<tenantId>; keep it unguessable). Ignored when a wallet paid. |
facts | array<object>; max 50 items | no | |
text | string; length 0..8000 | no | remember: free text; facts are extracted by a fast model and kept only if subject and object occur verbatim. |
source | string; length 0..500 | no | remember: provenance label for facts extracted from text. |
query | string; length 0..500 | no | |
pattern | object | no | Exact (case- and whitespace-insensitive) match on any of subject, predicate, object. |
said | string | no | |
asOf | one of | no | Epoch milliseconds or an ISO 8601 date/time (UTC when no offset). |
limit | integer; 1..50 | no | |
history | string; one of "current", "all" | no | recall: only facts current at asOf (default) or every status. |
Example request body
{
"op": "remember",
"facts": [
{
"subject": "alice",
"predicate": "lives_in",
"object": "Paris",
"validFrom": "2020-01-01"
},
{
"subject": "alice",
"predicate": "lives_in",
"object": "Berlin",
"validFrom": "2025-01-01"
}
]
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
op | string | no | |
tenant | string | no | |
summary | string | no | One line: what happened, e.g. "Stored 2 new facts, 1 earlier fact superseded." |
next | string | no | The most useful follow-up call. |
warnings | array<string> | no | Degraded steps, e.g. text extraction unavailable while structured facts were stored. |
remembered | array<object> | no | |
results | array<object> | no | |
forgotten | array<object> | no | |
receipt | object | no | {op, seq, saids, digest, at, prevReceiptDigest, signature?, signer?} |
deterministic | object | no |
Pay and connect
Available through: x402 (USDC on Base), MCP.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent