Ingestion Pipeline

Ingest Episode

Store a conversation episode as remembered turns (tex.episodes.store).

The messages go through the SAME path as POST /ingestion/memory (conversations.remember): each message is a turn in the active tier (recallable at once) and a durable turn node, in one active-memory episode that is later consolidated into an EPISODE_SUMMARY — which is what GET /episodes lists. It used to be forwarded to the ingestion service's /ingest/episode, which stored it as a document: not recallable until that job ran, never an episode, never listed.

Request shape unchanged. Mapping onto turns:

  • content (or text) -> turn text; role user/human -> user, assistant/ai/agent/bot/model -> assistant, any other role -> an assistant turn prefixed with the role ("[system] ...");
  • timestamp -> the turn's capture time (same contract as remember, natural language read in timezone, default UTC); omitted -> the arrival time, +1 ms per message, so order and identity are kept;
  • the episode is episode_id, else the session id sent, else a new id (returned as episode_id);
  • scope: legacy tenant dict or "<kind>:<value>", checked exactly as /ingestion/memory checks it. metadata and options (preference extraction etc.) belonged to the document pipeline and are accepted but not used.
post/ingestion/episode

Request

Request body

episode_idstring nullable

Episode identifier

session_idstring nullable

Explicit session id, honored on the string-scope path (the SDK sends it alongside a string scope; the legacy dict carries its own)

timezonestring nullable

The caller's timezone (IANA name, e.g. Europe/Berlin, or +HH:MM) for natural-language turn timestamps such as "yesterday 3pm"; default UTC

Response

Successful Response

job_idstring required

Per-call observability id (there is no background job)

episode_idstring required

The episode the messages were stored in: the request's episode_id, else its session id, else a new id. Store more messages under it to continue the episode.

statusstring required

"stored": every message is recallable now

preferences_detectedinteger nullable

Not computed (always null); kept for compatibility

estimated_timeinteger nullable

Not used (always null); kept for compatibility

messagestring nullable

What happened, in words

turn_idsstring[]

Turn id of each stored message part; retire one with DELETE /ingestion/memory/turns/{turn_id}

active_fragment_idsstring[]

Active-tier fragment ids written

not_stored_forgottenstring[]

turn_ids not stored because their owner had forgotten them

Changes

No recorded changes to this operation across all 1 revision of this API.