How does Unison extract facts from what I ingest?

Understand how Unison's async entity-resolution and fact-extraction pipeline turns raw conversations into structured knowledge.

What actually happens when I ingest a conversation? How does the brain "learn" from it?

When you send a conversation dump to Unison, it runs an asynchronous pipeline that extracts structured knowledge from the raw text.

Note: POST /v1/brain/ingest is document-only now. Conversation dumps go through POST /v1/brain/remember instead - the extraction pipeline below applies to whichever surface accepted the raw material.

The pipeline

  1. Receive. The API accepts the conversation and returns a jobId immediately — ingestion happens in the background.
  2. Chunk. The conversation is split into segments for processing.
  3. Entity resolution. People, organizations, products, and concepts are identified and resolved against entities the brain already knows about. "Alice" in this conversation is linked to the same Alice from previous conversations.
  4. Fact extraction. Statements are converted into structured facts and attached to the resolved entities. "We decided to use PostgreSQL" becomes a fact on the "architecture decisions" entity.
  5. Index. The extracted facts and the raw chunks are indexed for vector search. Both are available for recall.

Checking job status

Ingest is async but typically reflects in recall within moments. GET /v1/brain/jobs/{id} returns a single job's status:

curl "https://brain.unisonlabs.ai/v1/brain/jobs/$JOB_ID" \
  -H "Authorization: Bearer $UNISON_TOKEN"

To inspect the queue, list recent jobs instead:

curl "https://brain.unisonlabs.ai/v1/brain/jobs?limit=10" \
  -H "Authorization: Bearer $UNISON_TOKEN"

You can also check aggregate stats with GET /v1/brain/jobs/stats, or retry a failed job with POST /v1/brain/jobs/{id}/retry.

Documents are synchronous

Only conversation ingest is async. When you write a document directly (PUT /v1/brain/doc with the path in the body), it's available for recall immediately — no job, no polling.

See Conversation vs document ingest for when to use each.

On this page