captured_at and lists what it could not write in refused. Natural language: messages, each with the instant it was said or written; the engine extracts the statements as claim and prediction blocks, the people, assets and organisations as entity nodes, and the causal links the speaker actually argued as typed edges between the blocks. A request may carry both.
A block extracted from a message is asserted when the message says it was (
observed_at), never when it was ingested. Add a backfill declaration when the message is from the past so the blocks are also known then, not today. Without it, a 2024 transcript ingested today is asserted in 2024 but known today, and as_of=2024-06-01 reads hide it.Request
string
required
Whose memory this is. Stamped on every node in the request. Any string; a prefix like
user:, agent:, tckg: is recommended.object
Declares that this data was known before today. The request becomes one batch, and masking uses
declared_captured_at for every row in it. Fields: declared_captured_at (timestamp), reason (string). See Concepts.Node[]
default:"[]"
Nodes to write. One request is one transaction.
Edge[]
default:"[]"
Edges to write. Endpoints must exist in the same tenant, in this request or earlier.
Message[]
default:"[]"
Natural language to extract from. Processed in order; each message is one episode. Extraction takes a few seconds per message and runs inside the request.
Message
string
required
The text: a transcript, a note, a conversation turn, an article.
string
required
When it was said or written (ISO 8601 date or instant). Every block extracted from it is asserted at this instant, and the extraction knows nothing after it.
string
A label for the episode. Defaults to the first words of the content.
string
Where it came from: a channel, a document, a meeting.
The same statement said again in a later message resolves onto the existing block (no duplicate); a statement the engine judges to contradict an earlier one leaves the earlier block in place and adds a
SUPERSEDES edge from the newer one.
Node
string
required
Unique within the tenant. The same id may be written again only with a non-overlapping
valid interval.string
required
One of
entity, claim, prediction, factor, timeseries, episode.string
The text that search indexes.
string
object
Free-form. Conventions:
about (the period the content is about), source, factblock_id.timestamp
required
When the statement was made.
timestamp
Start of the validity interval.
timestamp
End of the validity interval. Open when omitted.
string
For
resolve. If the key is not declared yet the row is written with an undeclared_fact warning.any
The value
resolve returns for this candidate.number[]
A vector you computed. Pass a query vector from the same model to
search.forbidden
Sending either refuses the row with
captured_at_supplied. The server owns knowledge time.Edge
string
required
string
required
Both must be nodes in the same tenant. Otherwise the edge is refused with
missing_endpoint.number
0 to 1.
string
A PostgreSQL interval such as
"20 days" or "3 mons". A value that does not parse refuses the row.string
One sentence on why.
object
Free-form.
timestamp
required
timestamp
As for nodes.
Response
integer
Rows written (nodes plus edges).
object[]
Rows not written. Each has the row’s ids, a stable
reason, and why with the original error text.
Reasons: captured_at_supplied, missing_endpoint, cross_tenant, overlapping_valid (same id, overlapping valid), missing_required_field, unparseable_value (lag, timestamps).object[]
Rows handled with a note.
already_remembered (an identical row exists; nothing written), undeclared_fact.timestamp
The instant the server learned this request. The first
as_of at which the rows are visible, unless a backfill was declared.uuid or null
The batch id when
backfill was given.object[]
One entry per message, in order.
id is the episode node. nodes lists what the message produced (id, kind, statement); existing blocks the message resolved onto appear here with their existing ids. edges lists the relations (source_id, target_id, edge_type, fact), with as saying how each was stored: edge for a typed link between two blocks, claim for a relation that became a block of its own (a statement about two entities). accepted counts them.