API Reference
Public reference for creating agents and interacting with them over REST API. Internal context assembly, memory management, and state orchestration are platform-managed and intentionally omitted.
Authentication
All API calls require Bearer authentication with your project API key.
Authorization: Bearer YOUR_PROJECT_API_KEYAPI Reference
Browse the full endpoint reference — schemas, request/response examples, and an interactive try-it panel — at /docs/en/api. Every operation gets its own page generated from the live OpenAPI spec.
Raw spec (for Postman, code generators, custom tools)
The live OpenAPI 3.1 JSON + YAML is publicly hosted — no authentication required — and regenerated on every deploy:
https://api.sonz.ai/docs/openapi.json
https://api.sonz.ai/docs/openapi.yamlcurl -sL https://api.sonz.ai/docs/openapi.json -o openapi.jsonError Format
All error responses use the RFC 7807 application/problem+json format with type, title, status, detail, and optional instance fields.
REST API
Public HTTP endpoints for agent lifecycle, real-time agent interaction, and proactive delivery. Memory, mood, relationship, and context-management internals are handled by the platform.
Server-side only. The API does not accept browser requests. For web apps, proxy through your backend. See the Integration Guide.
Agent Lifecycle
Create an agent
POST /api/v1/agents
Create a new agent. Returns the agent with a platform-generated UUID.
Parameters:
name(string): Agent name (required)personality_prompt(string): Custom system prompt (optional)big5(object): Big Five scores: openness, conscientiousness, extraversion, agreeableness, neuroticism (0.0-1.0)speech_patterns(string[]): Speech patterns (optional)true_interests(string[]): Agent interests (optional)project_id(string): Project UUID to assign agent to (optional)language(string): ISO language code, e.g. "en" (optional)
Response: { "agent_id": "uuid", "name": "...", ... }
List agents
GET /api/v1/agents
List agents. Filter by project_id query param.
Parameters:
project_id(string): Filter by project (query param, optional)
Response: Array of agent objects
Get agent
GET /api/v1/agents/{agentId}
Get agent by ID.
Response: Agent object with personality, mood, profile
Chat
Stream chat
POST /api/v1/agents/{agentId}/chat
Chat with agent via SSE streaming. Returns Server-Sent Events.
Parameters:
messages(CEChatMessage[]): Conversation messagesuser_id(string): User identifier
Response: SSE stream of chat completion chunks
Proactive Notifications
List notifications
GET /api/v1/agents/{agentId}/notifications
List pending proactive messages.
Parameters:
status(string): Filter by status: pending | consumed (default: pending, query param)user_id(string): Filter by user (optional, query param)limit(int): Max results (default: 50, max: 500, query param)
Response: List of proactive messages with message_id, agent_id, user_id, check_type, intent, generated_message, status, created_at
Consume notification
POST /api/v1/agents/{agentId}/notifications/{messageId}/consume
Mark a notification as consumed after delivery.
Response: Confirmation
Notification history
GET /api/v1/agents/{agentId}/notifications/history
List all notifications across all statuses.
Response: Full notification history
Agent Lifecycle (Detailed)
CreateAgent
Creates a new agent with personality configuration. Generates personality prompt, speech patterns, and emotional tendencies.
Request:
user_id(string): Owner user identifieragent_name(string): Agent display namegender(string): "male", "female", or "non_binary"bio(string): Agent biography (optional)avatar_url(string): Avatar image URL (optional)big5(CEBig5Scores): Big Five personality scores (0.0-1.0)language(string): Primary languageequipped_outfit(string): Initial outfit ID (optional)skills(CESkillLevel[]): Initial skill levels (optional)model_tier(int32): LLM model tier (optional)project_id(string): Project to assign agent to (optional)agent_id(string): Caller-specified ID for deterministic agents (optional)personality_prompt(string): Custom system prompt (optional)generate_goals(bool): Auto-generate goals after creation (optional)provided_goals(string[]): Store these goals directly (optional)speech_patterns(string[]): Speech patterns (optional)true_interests(string[]): Agent interests (optional)true_dislikes(string[]): Agent dislikes (optional)user_display_name(string): Owner display name (optional)generate_avatar(bool): Auto-generate an AI avatar on creation (default: true, costs 1 credit). Set to false to skip.
Response: agent_id (UUID), status ('completed' or 'in_progress')
GetAgent
Retrieves an agent's current state including personality, mood, and profile.
Request:
agent_id(string): Agent UUID
Response: Agent ID, name, bio, gender, avatar_url, Big5 scores, owner, created_at
UpdateAgent
Updates agent fields (name, bio, avatar, personality, interests, speech patterns).
Request:
agent_id(string): Agent UUIDname(string): New name (optional)bio(string): New bio (optional)avatar_url(string): New avatar URL (optional)big5(CEBig5Scores): Updated Big5 scores (optional)true_interests(string[]): Updated interests (optional)true_dislikes(string[]): Updated dislikes (optional)speech_patterns(string[]): Updated speech patterns (optional)personality_prompt(string): Updated system prompt (optional)
Response: success (bool)
DeleteAgent
Permanently deletes an agent and all associated data (memory, mood, relationships).
Request:
agent_id(string): Agent UUID
Response: success (bool)
RegenerateAvatar
Generates or regenerates an AI-created avatar for the agent. Uses LLM to create an image prompt from personality data, then generates and uploads the image. Costs 1 credit. Avatars are auto-generated on agent creation unless disabled.
Request:
agent_id(string): Agent UUID (URL param)style(string): Optional style hint (e.g. 'watercolor anime', 'realistic portrait')
Response: success (bool), avatar_url (string), prompt (string), generation_time_ms (int64)
UpdateAgentPersonality
Updates an agent's authored Big5 personality configuration when your product intentionally changes the agent design.
Request:
agent_id(string): Agent UUIDbig5(CEBig5Scores): Updated Big Five scores with confidence
Response: success (bool)
Proactive Behaviors
ScheduleWakeup
Schedules the agent to proactively reach out to a user after a delay.
Request:
agent_id(string): Agent UUIDuser_id(string): User identifiercheck_type(string): Type of check: check_in, follow_up, mood_drivenintent(string): Why the agent wants to reach outdelay_hours(int32): Hours to delay before wakeup
Response: wakeup_id (string), scheduled_at (Timestamp)
GetPendingWakeups
Retrieves pending wakeup events for an agent.
Request:
agent_id(string): Agent UUID
Response: List of PendingWakeup (wakeup_id, user_id, check_type, intent, scheduled_at)
Streaming Chat
Primary public conversation RPC. Send the agent, user, application context, and message history; the platform handles context assembly and state updates automatically.
StreamChat
Streams AI responses for an agent interaction while the platform handles internal memory and state updates behind the scenes.
Request:
agent_id(string): Agent UUIDuser_id(string): User identifiersession_id(string): Unique session IDbackend_context(BackendContext): Application state contextmessages(CEChatMessage[]): Conversation messagescontinuation_token(string): Resume from previous response (optional)request_type(string): "chat", "guide", or "outing"capabilities(string[]): Unlocked capabilities (optional)language(string): ISO language code (optional)interaction_role(string): "owner" or "non_owner"skill_levels(map<string, int32>): Skill levels (optional)max_turns(int32): Maximum number of assistant turns per request (optional)
Response: Stream of StreamChatEvent (delta | message_boundary | complete | side_effects | error)
StreamChatEvent is a oneof with these event types:
StreamChatDelta (delta)
content(string): Text chunk from the AImessage_index(int32): Index in multi-message responseis_follow_up(bool): Whether this is a follow-up messagereplacement(bool): If true, replaces all previous content
StreamChatComplete (complete)
full_content(string): Complete response textfinish_reason(string): "stop", "length", or "content_filter"continuation_token(string): Token for continuing the conversationmessage_count(int32): Number of messages in response
StreamChatError (error)
message(string): Error messagecode(string): Error code
AI Generation
Platform-managed AI content generation for bios, goals, personalities, diary entries, and images.
GenerateBio
Generates or rewrites an agent's biography using AI based on their personality and context.
Request:
agent_id(string): Agent UUIDuser_id(string): User identifiercurrent_bio(string): Current bio for rewriting (optional)style(string): Style: casual, formal, poetic, etc. (optional)
Response: bio (string), tone (string), confidence (double)
GenerateGoals
Generates personality-driven goals for an agent based on traits, interests, and memories.
Request:
agent_id(string): Agent UUIDagent_name(string): Agent display namebig5(CEBig5Scores): Big5 scorestrue_interests(string[]): Agent intereststrue_dislikes(string[]): Agent dislikesspeech_patterns(string[]): Speech patternsrecent_memories(CERecentMemory[]): Recent memories for contextcurrent_goals(CEGoalSummary[]): Existing goals to avoid duplicationmax_goals(int32): Maximum goals to generatemodel_config(CEModelConfig): LLM model configuration (optional)custom_context(map<string, string>): Application-specific context (optional)
Response: List of CEGeneratedGoal (type, title, description, priority, related_traits), reasoning
GeneratePersonality
Generates speech patterns and interests from a template and Big5 scores.
Request:
template_id(string): Template identifierbase_prompt(string): Base personality promptbig5(CEBig5Scores): Big5 scoresagent_name(string): Agent namegender(string): Agent gender
Response: speech_patterns (string[]), true_interests (string[]), used_fallback (bool)
GenerateDiary
Generates a diary entry from conversation messages and/or application events.
Request:
agent_id(string): Agent UUIDuser_id(string): User identifierdate(string): Date in YYYY-MM-DD formatagent_name(string): Agent display namelanguage(string): Language for generated contentmessages(CEDiaryMessage[]): Conversation messages (role, content, time)trigger_type(string): daily_summary, achievement, milestone, breakthroughtrigger_context(CEDiaryTriggerContext): Event trigger context (optional)model(string): LLM model override (optional)temperature(double): Temperature override (optional)timezone(string): Timezone for date handling (optional)
Response: user_id, date, diary (title, body_lines, tags), generation_time_ms
GenerateImage
Generates an image from a text prompt and stores it in cloud storage.
Request:
prompt(string): Image generation promptnegative_prompt(string): Negative prompt (optional)model(string): Model to use (optional)provider(string): Provider to use (optional)output_bucket(string): GCS bucket for output (optional)output_path(string): Output path in bucket (optional)cdn_domain(string): CDN domain for public URL (optional)
Response: success, image_id, gcs_uri, public_url, mime_type, generation_time_ms, error
Voice & Media
Voice matching, text-to-speech, voice chat, and reflection capabilities.
VoiceMatch
Matches an agent to an appropriate TTS voice based on personality traits.
Request:
big5(CEBig5Scores): Big5 scores for matchingpreferred_gender(string): Preferred voice gender (optional)agent_id(string): Agent UUID (auto-lookup Big5 if provided without big5)
Response: voice_id, voice_name, match_score, reasoning
TextToSpeech
Text-to-speech using Google Gemini voices with emotional context awareness.
Request:
text(string): Text to convertvoice_name(string): Gemini voice namelanguage(string): Language code (optional)emotional_context(CEEmotionalContext): Emotional themes and tone (optional)
Response: audio (bytes), content_type, voice_name
VoiceChat
Single-turn voice chat: transcribes audio, generates AI response, returns TTS audio.
Request:
agent_id(string): Agent UUIDuser_id(string): User identifieraudio(bytes): Raw audio dataaudio_format(string): Audio format (opus, pcm, wav)voice_name(string): TTS voice namecontinuation_token(string): Resume from previous turn (optional)language(string): Language code (optional)application_id(string): Application identifier (optional)
Response: transcript, response (text), audio (bytes), content_type, continuation_token, side_effects_json
ListVoices
Lists available Gemini TTS voices, optionally filtered by gender.
Request:
gender(string): Filter by gender (optional)
Response: List of CEGeminiVoice (name, gender)
Reflect
Generates an AI reflection on a capability unlock, milestone, or other event.
Request:
agent_id(string): Agent UUIDuser_id(string): User identifierreflection_type(string): "capability_unlock", "milestone", etc.capability(string): Capability namecapability_source(string): Source of capabilitycontext(string): Additional context string (optional)new_capabilities_json(bytes): New capabilities JSON (optional)session_id(string): Session ID for auto context build (optional)interaction_role(string): "owner" or "non_owner" (default: "owner")
Response: success (bool), reflection (string), side_effects_json (bytes)
Streaming Voice Chat
Bidirectional streaming voice chat with server-side VAD (voice activity detection). Client streams audio chunks continuously; server handles speech detection, transcription, AI response, and TTS.
StreamVoiceChat
Bidirectional streaming: client sends init + audio chunks, server returns transcripts and TTS audio. No manual stop button needed.
Request:
init(VoiceChatInit): First message: session initializationaudio_chunk(VoiceAudioChunk): Subsequent messages: raw audio data
Response: Stream of events: ready | vad | transcript | response_delta | audio | turn_complete | error
VoiceChatInit
agent_id(string): Agent UUIDuser_id(string): User identifieraudio_format(string): "opus", "pcm", "wav" (default: "opus")sample_rate(int32): Sample rate in Hz (default: 48000 for opus)voice_name(string): TTS voice namelanguage(string): Language code (default: "en")application_id(string): Application identifiercontinuation_token(string): Resume from previous session (optional)
VoiceAudioChunk
audio(bytes): Raw audio data (e.g., Opus frame)end_of_speech(bool): Optional client-side VAD hint
Server response events:
VoiceStreamReady
session_id(string): Assigned session ID
VoiceStreamVAD
speaking(bool): true = speech started, false = speech ended
VoiceStreamTranscript
text(string): Transcript textis_final(bool): true = final transcript for this utterance
VoiceStreamAudio
audio(bytes): Audio data chunkcontent_type(string): e.g., "audio/opus", "audio/wav"
VoiceStreamTurnComplete
continuation_token(string): Token for continuing the sessionside_effects_json(bytes): JSON-serialized AgentSideEffects (optional)
VoiceStreamError
message(string): Error messagecode(string): "vad_error", "stt_error", "llm_error", "tts_error"fatal(bool): If true, session should be closed
Analysis & Search
AI-powered conversation analysis, summarization, and grounded search.
AnalyzeConversation
Analyzes a conversation to extract side effects (personality deltas, habits, memories, etc.).
Request:
agent_id(string): Agent UUIDagent_name(string): Agent display nameuser_id(string): User identifiermessages(CEAnalyzeConversationMessage[]): Messages to analyze (role, content)is_final(bool): Whether this is the final batch of messages
Response: success, side_effects_json (bytes), summary, latency_ms
SummarizeConversation
Generates a concise summary of a conversation with topic extraction.
Request:
messages(CESummarizeConversationMessage[]): Messages (role, content, time)agent_name(string): Agent nameuser_name(string): User display namemax_summary_length(int32): Max summary length in characters
Response: summary (string), topics (string[]), message_count (int)
GenerateSearchQuery
Generates an optimized search query from a topic and category for web search.
Request:
topic(string): Topic to search forcategory(string): Category for context
Response: query (string), context (string)
GroundedSearch
Performs grounded web search with multiple queries and returns summarized results with sources.
Request:
queries(string[]): Search queriescontext(string): Context for search relevanceagent_name(string): Agent name for response framing
Response: List of CEGroundedSearchResult (query, summary, sources with title/url/snippet)
Multi-Agent Dialogue
Agent-to-agent conversations for outings, dialogues, and multi-agent scenes.
AgentDialogue
Generates an agent response in a multi-agent dialogue context (e.g., outings between agents).
Request:
agent_id(string): Agent UUID (the responding agent)user_id(string): User identifiermessages(CEChatMessage[]): Dialogue messagesrequest_type(string): "outing", "dialogue", etc.scene_guidance(string): Scene-specific prompt guidancetool_config_json(bytes): Tool configuration JSON (optional)session_id(string): Session ID for auto context build (optional)interaction_role(string): "owner" or "non_owner" (default: "owner")
Response: response (string), side_effects_json (bytes)
Application Events
Notify the platform about significant application events. The platform may generate diary entries, update goals, or take other AI actions. Fires OnDiaryGenerated webhook when diary is created.
TriggerEvent
Accepts application events (achievements, milestones, breakthroughs, completions) and triggers AI content generation.
Request:
agent_id(string): Agent UUIDuser_id(string): User identifierevent_type(string): "achievement", "milestone", "breakthrough", "level_up"event_description(string): Human-readable context for the AImetadata(map<string, string>): Additional context (achievement_id, level, etc.)language(string): Language for generated content (default: "en")
Response: accepted (bool), event_id (string)
Knowledge Base
Project-scoped knowledge graph. Upload documents or push structured data via the API — the platform extracts entities, builds a graph, and gives agents a knowledge_search tool to query it during conversations.
Documents
Upload document
POST /projects/{projectId}/knowledge/documents
Upload a document (multipart/form-data with 'file' field, max 50 MB). Returns 202 with document_id and triggers async extraction.
Parameters:
file(multipart): The document file
Response: document_id, file_name, file_size, checksum, status, gcs_path
List documents
GET /projects/{projectId}/knowledge/documents
List documents. Query: limit (default 50, max 200).
Response: documents[], total
Get document
GET /projects/{projectId}/knowledge/documents/{docId}
Get a single document.
Response: KBDocument object
Delete document
DELETE /projects/{projectId}/knowledge/documents/{docId}
Delete a document.
Response: 204 No Content
Facts & Graph
Insert facts
POST /projects/{projectId}/knowledge/facts
Insert entities and relationships into the knowledge graph. Resolves against existing nodes, creates/updates with version history.
Parameters:
source(string): Source identifier (default: 'api')facts[](array): Entities: entity_type, label, propertiesrelationships[](array): Edges: from_label, to_label, edge_type
Response: processed, created, updated, details[]
List nodes
GET /projects/{projectId}/knowledge/nodes
List knowledge graph nodes. Query: type (filter), limit (default 100, max 500).
Response: nodes[], total
Get node
GET /projects/{projectId}/knowledge/nodes/{nodeId}
Get a node with connected edges. Query: history=true for version history.
Response: node, outgoing[], incoming[], history[]
Delete node
DELETE /projects/{projectId}/knowledge/nodes/{nodeId}
Soft-delete a node (sets is_active=false).
Response: 204 No Content
Node history
GET /projects/{projectId}/knowledge/nodes/{nodeId}/history
Get version history for a node. Query: limit (default 50, max 200).
Response: history[], total
Search
Search knowledge base
GET /projects/{projectId}/knowledge/search
Full-text search with graph traversal. Query: q (required), limit, history, type, filters (JSON).
Parameters:
q(string): Search query (required)limit(int): Max results (default 20, max 100)type(string): Comma-separated entity types to filterfilters(JSON string): Property filter objecthistory(bool): Include version history
Response: query, results[] (with related nodes), total
Schemas
Create schema
POST /projects/{projectId}/knowledge/schemas
Create an entity type schema with fields and optional similarity config.
Parameters:
entity_type(string): Entity type name (required)fields[](array): Field definitions: name, type, requireddescription(string): Schema descriptionsimilarity_config(object): match_fields[], threshold
Response: KBEntitySchema object
List schemas
GET /projects/{projectId}/knowledge/schemas
List entity schemas for a project.
Response: schemas[], total
Update schema
PUT /projects/{projectId}/knowledge/schemas/{schemaId}
Update an entity schema.
Parameters:
entity_type(string): Updated entity type namefields[](array): Updated field definitions
Response: KBEntitySchema object
Delete schema
DELETE /projects/{projectId}/knowledge/schemas/{schemaId}
Delete an entity schema.
Response: 204 No Content
Stats
Get KB stats
GET /projects/{projectId}/knowledge/stats
Get knowledge base statistics (document counts, node counts, edge count, extraction tokens).
Response: documents {total, indexed, pending, failed}, nodes {total, active}, edges, extraction_tokens
Analytics
Create analytics rule
POST /projects/{projectId}/knowledge/analytics/rules
Create an analytics rule (recommendation or trend).
Parameters:
rule_type(string): 'recommendation' or 'trend'name(string): Rule nameconfig(object): Rule configurationenabled(bool): Whether the rule is active
Response: KBAnalyticsRule object
Get recommendations
GET /projects/{projectId}/knowledge/analytics/recommendations
Get recommendations. Query: rule_id, source_id (both required), limit.
Response: recommendations[], total
Get trends
GET /projects/{projectId}/knowledge/analytics/trends
Get trend aggregations. Query: node_id (required).
Response: trends[], total
Record feedback
POST /projects/{projectId}/knowledge/analytics/feedback
Record recommendation feedback (shown/converted).
Parameters:
source_node_id(string): Source node IDtarget_node_id(string): Target node IDrule_id(string): Analytics rule IDconverted(bool): Whether the user convertedscore_at_time(float): Score when recommendation was shown
Response: status: 'recorded'
User Priming
Pre-load user metadata and content so AI agents already "know" users from their first conversation. Metadata (name, company, title) becomes instant facts; content blocks (text, chat transcripts) are processed asynchronously via LLM extraction.
Prime a User
Prime user
POST /agents/{agentId}/users/{userId}/prime
Prime a user with metadata and content. Returns 202 with a job ID; LLM extraction of content runs asynchronously.
Parameters:
display_name(string): User's display namemetadata(object): company, title, email, phone, custom (map)content[](array): Content blocks: type ('text', 'chat_transcript'), bodysource(string): Source identifier (e.g., 'crm', 'linkedin')
Response: job_id, status ('queued'), facts_created
Get priming status
GET /agents/{agentId}/users/{userId}/prime/{jobId}
Get the status of a priming job.
Response: ImportJob object (job_id, status, facts_created, error_message, etc.)
Content
Add content
POST /agents/{agentId}/users/{userId}/content
Add content blocks for async LLM extraction (e.g., append chat transcripts after priming).
Parameters:
content[](array): Content blocks: type, bodysource(string): Source identifier
Response: job_id, status ('queued')
Metadata
Get user metadata
GET /agents/{agentId}/users/{userId}/metadata
Get priming metadata for a user.
Response: UserPrimingMetadata object
Update user metadata
PATCH /agents/{agentId}/users/{userId}/metadata
Partially update priming metadata. New facts are auto-generated from updated fields.
Parameters:
display_name(string): Updated namecompany(string): Updated companytitle(string): Updated titleemail(string): Updated emailphone(string): Updated phonecustom(map): Custom key-value pairs (merged)
Response: metadata (updated), facts_created
Batch Import
Batch import users
POST /agents/{agentId}/users/import
Import multiple users with metadata and content in a single request. Metadata facts are created synchronously; content extraction runs async.
Parameters:
users[](array): Array of {user_id, display_name, metadata, content[]}source(string): Source identifier
Response: job_id, status ('queued'), total_users, facts_created
Get import status
GET /agents/{agentId}/users/import/{jobId}
Get the status of a batch import job.
Response: ImportJob object
List import jobs
GET /agents/{agentId}/users/imports
List recent import jobs for an agent. Query: limit (default 20).
Response: jobs[], count
Shared Types
BackendContext
custom_fields(map<string, string>): Arbitrary application-specific key-value pairs passed through to promptsstate_json(bytes): Optional structured state as JSON (pass-through to prompts)
CEBig5Scores
openness(double): Openness to experience (0.0-1.0)conscientiousness(double): Organization and discipline (0.0-1.0)extraversion(double): Social energy and enthusiasm (0.0-1.0)agreeableness(double): Warmth and cooperation (0.0-1.0)neuroticism(double): Emotional sensitivity (0.0-1.0)confidence(double): Assessment confidence (0.0-1.0)
BFASFacets
Derived from Big5 scores. Read-only in personality profile responses.
intellect(double): Openness facet — intellectual curiosity (0.0-1.0)aesthetic(double): Openness facet — aesthetic sensitivity (0.0-1.0)industriousness(double): Conscientiousness facet — self-discipline (0.0-1.0)orderliness(double): Conscientiousness facet — preference for order (0.0-1.0)enthusiasm(double): Extraversion facet — positive emotion (0.0-1.0)assertiveness(double): Extraversion facet — social dominance (0.0-1.0)compassion(double): Agreeableness facet — empathy (0.0-1.0)politeness(double): Agreeableness facet — deference to others (0.0-1.0)withdrawal(double): Neuroticism facet — tendency to withdraw (0.0-1.0)volatility(double): Neuroticism facet — emotional instability (0.0-1.0)
BehavioralTraits
Derived from personality. Read-only in personality profile responses.
response_length(string): How verbose or concise the agent tends to bequestion_frequency(string): How often the agent asks follow-up questionsempathy_style(string): Approach to emotional support (validating, solution-oriented, etc.)conflict_approach(string): How the agent handles disagreements (accommodating, direct, mediating, etc.)
MoodState
valence(double): Pleasure/displeasure spectrum (0-100)arousal(double): Activation/energy level (0-100)tension(double): Stress/calmness state (0-100)affiliation(double): Social warmth/closeness (0-100)
CEChatMessage
role(string): "user" or "assistant"content(string): Message texttimestamp(Timestamp): When the message was sent
MemoryCandidate
content(string): Memory content textfact_type(string): preference, commitment, fact, experience, correctionimportance(double): Importance score (0.0-1.0)entities(string[]): Related entities
Habit
name(string): Habit namecategory(string): Habit categorystrength(double): Current strength (0.0-1.0)last_observed(Timestamp): Last observation timeis_formed(bool): Whether the habit is fully formed
CEGoal
id(string): Goal identifierdescription(string): Goal descriptionstatus(string): "active", "completed", "abandoned"priority(string): Priority levelrelated_traits(string[]): Related personality traitscreated_at(Timestamp): When the goal was created
Interest
topic(string): Interest topiccategory(string): Interest categoryconfidence(double): Detection confidence (0.0-1.0)discovered_at(Timestamp): When the interest was discoveredresearch_status(string): "pending" or "researched"
CEModelConfig
provider(string): LLM provider namemodel(string): Model identifiertemperature(double): Sampling temperaturemax_tokens(int32): Maximum tokens to generate
ProactiveMessage
message_id(string): Unique message identifieragent_id(string): Agent that generated the messageuser_id(string): Target userwakeup_id(string): Associated wakeup eventcheck_type(string): Type of check (check_in, follow_up, mood_driven)intent(string): Why the agent wants to reach outgenerated_message(string): The actual message textstatus(string): pending, consumed, expired, failed_generationcreated_at(Timestamp): When generated