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 anduser.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 auser_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.
Defining critical attributes
Each attribute is a typed field:
A realistic schema for a sales assistant:
How the profile is built
The profile updates as a by-product of normal ingestion — there is no separate API call to maintain it:- Your application pushes a conversation (for example with
conversation.ingest_transcript) and moves on — everything below is asynchronous and off your hot path. - Synap’s ingestion pipeline extracts long-term memories from the transcript.
- 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. - 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.
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:user.get_profile for response details and
Response Shapes for the typed models.