Skip to main content

Overview

The User Profile is a structured document Synap maintains for every end user of your instance: a set of critical attributes you define (typed fields like a customer’s budget, preferred language, or purchase timeline), a short narrative overview, and an extras bucket for stable facts that fall outside your schema. Profiles are built exclusively from what users actually said in ingested conversations — extracted, never inferred. If a conversation never touched an attribute, that attribute stays blank. Every populated attribute carries its own confidence, timestamp, and the ID of the conversation it came from. The profile is designed for conversation-start injection: one low-latency fetch returns the profile (plus recent conversation summaries) ready to paste into your agent’s system prompt — see Context Fetch and user.get_profile.

Availability and enabling

The feature ships platform-wide but is off by default for every instance (zero-regression: enabling it never changes existing ingestion or retrieval behavior). It is switched on per instance by adding a user_profile block to the instance’s memory-architecture configuration — contact your Maximem team or use your dashboard’s instance configuration to enable it and define your attributes.
Your attribute definitions are treated as client-owned state: they survive memory-architecture regeneration and instance promotion unchanged.

Defining critical attributes

Each attribute is a typed field: A realistic schema for a sales assistant:
Write descriptions as extraction instructions. A phrase like “only if explicitly stated by the customer” in the description is honored by the extraction pass — fields stay blank until a conversation genuinely provides the value.

How the profile is built

The profile updates as a by-product of normal ingestion — there is no separate API call to maintain it:
  1. Your application pushes a conversation (for example with conversation.ingest_transcript) and moves on — everything below is asynchronous and off your hot path.
  2. Synap’s ingestion pipeline extracts long-term memories from the transcript.
  3. At the end of the pipeline, the profile step loads your instance’s attribute schema and merges newly extracted, conversation-grounded values into the user’s profile document — updating only attributes the conversation actually evidenced, respecting allowed_values, and rewriting the narrative overview.
  4. Each write bumps the profile’s version and records, per attribute, the source conversation ID and timestamp. Unrelated attributes are never touched, and concurrent ingestions for the same user merge safely.
Stable facts that don’t match any configured attribute are kept in the profile’s extras object rather than discarded. Client-supplied analysis passed with the transcript is used as extraction hints only — the transcript remains the source of truth.
Attribute-schema edits take effect on new ingestions within a few minutes (configuration is cached briefly). Existing profile values are preserved; new and changed attributes populate as subsequent conversations provide evidence.

Reading the profile

At conversation start, fetch the profile together with recent conversation summaries in one call:
Or read it directly:
The document shape:
See user.get_profile for response details and Response Shapes for the typed models.