> ## Documentation Index
> Fetch the complete documentation index at: https://docs.maximem.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# user.get_profile

> Fetch a caller's profile document: client-defined critical attributes plus a free-text overview.

```python theme={null}
await sdk.user.get_profile(
    user_id: str,
    customer_id: Optional[str] = None,
) -> UserProfileModel
```

Fetch the accumulated **profile** for a user — the client-defined critical attributes (e.g. intent, budget, preferences) plus a short free-text overview that Synap maintains across the user's conversations.

This is a convenience getter. The same document is returned inline by [`sdk.fetch(context_mode="conversation-summary", include_profile=True)`](/sdk-reference/context/fetch); reach for `get_profile` when you want the profile on its own — dashboardless debugging, your own tooling, or a quick lookup.

<Note>
  Profiles are **opt-in per instance** (MACA `user_profile.enabled`). On an instance without profiles configured, there is nothing to return and the call raises `ContextNotFoundError`.
</Note>

### Parameters

<ParamField path="user_id" type="str" required={true}>
  Caller identity (e.g. an E.164 phone number).
</ParamField>

<ParamField path="customer_id" type="str" required={false}>
  **Required on B2B (strict-isolation) instances** so the profile resolves to the right tenant; omit on B2C.
</ParamField>

### Returns

A `UserProfileModel`.

<ResponseField name="attributes" type="Dict[str, ProfileAttributeModel]">Critical attributes keyed by name. Each `ProfileAttributeModel` carries `value`, `confidence`, `updated_at`, `source_conversation_id` (and `.raw`).</ResponseField>
<ResponseField name="overview" type="Optional[str]">A short free-text summary of the caller.</ResponseField>
<ResponseField name="extras" type="Dict[str, Any]">Stable facts worth keeping that match no configured attribute.</ResponseField>
<ResponseField name="meta" type="Dict[str, Any]">Document metadata (`_meta`): schema, version, `updated_at`, etc.</ResponseField>

`.raw` exposes the full untyped profile document.

### Example

```python theme={null}
from maximem_synap import MaximemSynapSDK, ContextNotFoundError

sdk = MaximemSynapSDK(api_key="synap_your_key_here")
await sdk.initialize()

try:
    profile = await sdk.user.get_profile("+919812345678")
    print(profile.overview)
    for name, attr in profile.attributes.items():
        print(f"{name}: {attr.value} (confidence {attr.confidence})")
except ContextNotFoundError:
    print("No profile yet for this caller.")
```

### Raises

* `ContextNotFoundError`: no profile exists for this user (HTTP 404).
* `AuthenticationError`: when the API key is missing or invalid.

### See also

* [context.fetch (conversation-summary mode)](/sdk-reference/context/fetch)
* [conversation.ingest\_transcript](/sdk-reference/conversation/ingest-transcript) — pushing a transcript is what refreshes a profile.
