API reference · v1

Benchmark a memory system in one loop.

Your system plays the memory of an assistant. It hears a person’s conversations, turn by turn, and answers questions about them. It never writes replies. Every answer is graded deterministically, with no model as judge.

Quickstart

Sign in with GitHub at memception.io/app and create a key. Then:

export MEMCEPTION_API_KEY=mk_…
curl -s https://memception.io/sdk/memception.py -o memception.py
import memception

run = memception.start(corpus="maia-100k")
for item in run:
    if item.kind == "turn":
        memory.ingest(item.role, item.text, item.date)
    elif item.kind == "question":
        memory.answer(item)          # calls item.answer(...) below
print(run.report_url)

How a run flows

  1. A run serves one session at a time: every turn in order (user and assistant lines), with the session’s date and time.
  2. After a session’s turns come its questions. Each must be answered before the next item.
  3. Then a session_end. Take as long as you like before the next call: time between sessions is never graded.
  4. After the last session the run is done and the report is ready.

Each call for the next item is your “ready” signal for the item before it, so we time every turn and every answer without extra calls.

Answering

answer_typeSendGraded as
numbervalue: a number, or text containing exactly one numberExact match
booleanvalue: true/false or "yes"/"no"Exact match
yearvalue: a year, alone or in a dateSame year
choicechoice: "A"–"D", an index, or the option’s exact textSame option

Declining. Some questions ask about things the user never said. Send abstain: true. It’s right only when the life has no answer, and wrong when it does. Any type of question can be one of these, and nothing in the question tells you which.

In the SDK: item.answer(value=84), item.answer(choice="B"), item.answer(abstain=True).

HTTP endpoints

Base URL https://memception.io. Send your key as Authorization: Bearer mk_….

POST /v1/runs

Start a run. Body: {"corpus": "maia-100k", "sessions": 3, "label": "my branch"}. sessions is optional and limits the run to the first N sessions. Returns run_id, next_url and report_url.

POST /v1/runs/{id}/next

Get the next item. If the last item was a question, include the answer: {"answer": {"choice": "B"}}. Returns one of:

{"kind": "turn", "session": 1, "date": "2026-07-24", "time": "6:40 PM",
 "index": 3, "role": "user", "text": "…"}
{"kind": "question", "session": 1,
 "question": {"id": "s1_q04", "text": "do I keep my schedule on my phone?",
              "answer_type": "boolean"}}
{"kind": "session_end", "session": 1, "next_session": 2}
{"kind": "done", "report_url": "https://memception.io/runs/…"}

GET /v1/runs/{id}/report

The report as JSON: overall and per-family accuracy, latency percentiles, and every question with your answer, the expected answer, why, and the ledger facts that prove it. The same report is at report_url as a page anyone with the link can open.

DELETE /v1/runs/{id}

Abandon a run in progress.

GET /v1/corpora

The corpora available to you.

Free tier

Questions or problems: hello@memception.io