The four signals
What counts as delivered: the pack, the
live turns, the delta and the items returned by history navigation, each with its delivery time, as recorded in the receipts. Only a question asked after the delivery is a repetition. A cited item counts as used only when it is pertinent to the turn, so reciting the whole pack does not inflate the number. For internal agents, use is measured by the recorded action, and repetition is reported as not measured.
Coverage comes first
Two counters sit next to the signals:- Sessions without context: the source integrated
trackbut never calledcontext(). - Late context: the context arrived after the agent’s first answer.
context_injected_at and first_agent_turn_at on the conversation for you when you use conversation() and its agent() turn. Without coverage there is nothing to measure, and the number appears as not measured, never as zero. In the API a rate with nothing to measure is null.
Voice has one more rule. An agent turn whose speech recognition confidence is below the threshold produces no question and no claim. A first transcript pass without the agent’s text is marked not measured, with the reason
partial_transcript, and the second pass measures again. The text your agent’s model generated, captured by the SDK, is worth more than the transcript.How it runs
The measurement runs on the same path as extraction, with no extra language model call. The questions and claims of the agent come out of the single extraction call that already exists; matching them against the manifest is deterministic. Results are ready together with the derived memory, in under a minute after the session ends. A second phase runs 10 minutes after the end to check whether the receiver of a handoff read the context. Everything is recomputed when the extractor changes version: the measurement is derived data, never the source of truth.Read the numbers
GET /v1/context-use groups by any of day, source_id (the default), vendor, channel, view and experiment_group, repeating group_by, and filters by since and until (dates), source_id, channel, view and experiment_group. It takes a Console person with the analysis or vendor role, or a key with the admin scope.
sessions, deliveries, deliveries_used, questions, repeated, contradicted, transfers, transfers_unread, recontacts, late_deliveries, no_context (sessions without any context read), not_measured and selection_misses (contradictions of items the pack did not carry, which are never the agent’s). The rates usage_rate, repetition_rate, transfer_unread_rate and recontact_rate come with value, the bounds low and high of a 95% Wilson interval and the sample n, and are null when nothing could be measured, never zero. To see why a number moved, open one conversation with Context use of a conversation: one entry per delivery, with the items used, the repeated questions, the contradictions, whether it came late and the manifest it was measured against.
A person with the vendor role only sees the sources named in their role binding, so one vendor never sees the numbers of another. Niadra never compares vendors in public. What you do with the numbers is up to you.
Control group and 72-hour recontact
The measurement explains; recontact proves. A recontact is a session the customer starts within 72 hours of the end of another, on the same profile, in the same normalized category (or any category, for the overall rate). Outbound contact from your company does not count. To measure the effect of the memory, your space can run an experiment: a stable fraction of customers, drawn by an HMAC of their oldest handle, receives the memory, and the rest form the control group. The same customer stays in the same group on every channel and vendor. For the control group,context() returns an empty pack with path: "holdout" and navigation returns empty, while the memory keeps being built so the comparison holds. The SDK treats holdout as an empty pack, never as an error. A shadow manifest records what would have been delivered, which is how repetition is counted for the control group. Sessions with an overdue company promise, a regulated category or a source marked critical leave both groups and receive the memory normally. Control-group sessions are not billed.
Sampled review
Your team checks the measurement by sample.GET /v1/review/queue hands out up to 50 samples at a time, with the facts the memory extracted, the signals the measurement found and the new patterns, shown with the mask of the reviewer’s role. A reviewer records a verdict per item with POST /v1/review/{sample_id}/verdicts: the target (fact, signal or trait), its id and the verdict. Verdicts are the one governance write that only a person makes: it takes a Console person with the review role, never a source key. GET /v1/review/agreement shows how much reviewers and the system agree over the last days (90 by default), which is the number that tells you whether to trust the measurement. A verdict never changes the memory by itself: a wrong fact leaves through a correction, a wrong pattern through a retraction.
Usage
What your space consumes comes fromGET /v1/usage, for a since and until window, by hour or day, optionally for some metric values. With group_by=source, each row names the source, so you see which agent and vendor drove the conversations and tasks. It takes the analysis role or an admin key. The billed totals of the whole tenant are in the control API. Control-group sessions are not billed.
Privacy
The measurement reads what the cell already holds, and its result is about the agent, never about the data subject. Human attendants are aggregated by source, queue or team by default, never by the id of the person who answered; detail per person is off unless you configure it with a recorded legal basis. Erasing a profile removes its measurement rows through the same lineage.Next steps
Receipts and audit
the delivery record every signal points to.
Triggers and webhooks
get notified when a repetition rate crosses your threshold.
Context use
the aggregate endpoint in detail.
Voice agents
capture turns so the measurement has the agent’s text.

