Data Models
All wire payload structs (USTRUCT(BlueprintType)) and enums. Field names below are the C++/Blueprint member names; the wire (JSON) keys differ where noted.
Connection & Session
FEstuaryAuthPayload
Sent to the gateway on connect.
| Field | Type | Default | Description |
|---|---|---|---|
ApiKey | string | — | Developer API key (est_...). Treated as a secret — never logged. |
CharacterId | string | — | UUID of the character to connect to. |
PlayerId | string | — | Opaque player identifier; scopes session and memory. |
AudioSampleRate | int | 24000 | TTS playback rate in Hz. |
bEnableAnimation | bool | false | Request ARKit-52 lipsync frames. |
bEnableBodyAnimation | bool | false | Request body-pose frames (experimental; requires 16 kHz). |
ClientVersion | string | — | Diagnostic. Auto-filled if empty. |
Platform | string | — | Diagnostic platform string. |
FEstuarySessionInfo
Received after a successful connect (read-only).
| Field | Type | Description |
|---|---|---|
SessionId | string | Unique session UUID. |
ConversationId | string | Conversation UUID grouping this exchange. |
CharacterId | string | Confirmed character UUID. |
PlayerId | string | Confirmed player ID. |
AnimationCapabilities | FEstuaryAnimationCapabilities | Face/body animation gates reported by the server. |
FEstuaryAnimationCapabilities
| Field | Type | Description |
|---|---|---|
Face | FEstuaryAnimationModalityCapability | Face (ARKit-52) gate. |
Body | FEstuaryAnimationModalityCapability | Body (pose) gate. |
bPresent | bool | True if the server reported capabilities (older servers omit this). |
FEstuaryAnimationModalityCapability: bActive (bool) — server will emit this modality's frames; Provider (string) — active provider name.
Text Chat
FEstuaryUserText
Outbound user message (usually built for you by SendText).
| Field | Type | Description |
|---|---|---|
Text | string | The message text. |
MessageId | string | Client-generated correlation ID. |
CharacterId | string | Owning character routing ID. |
bTextOnly | bool | When true, suppress TTS audio for this turn. |
FEstuaryBotResponse
A streaming response chunk.
| Field | Type | Wire key | Description |
|---|---|---|---|
Text | string | text | Delta text for this chunk; concatenate across chunks. |
Partial | string | partial | Server-maintained running partial (may be empty). |
MessageId | string | message_id | Matches the originating SendText ID. |
ChunkIndex | int | chunk_index | 0-based; -1 when absent. |
bIsFinal | bool | is_final | True on the final chunk. |
bIsInterjection | bool | is_interjection | True for a backchannel/interjection. |
FEstuaryInterruptPayload
Shared by outbound interrupts and inbound acknowledgements.
| Field | Type | Description |
|---|---|---|
MessageId | string | Message being interrupted (empty = current). |
Reason | string | Server reason code (inbound only). |
InterruptedAt | string | ISO-8601 timestamp (inbound only). |
FEstuaryPreferences
| Field | Type | Wire key | Description |
|---|---|---|---|
bEnableVisionAcknowledgment | bool | enableVisionAcknowledgment | Bot verbally acknowledges what it sees. |
ExtraPreferences | map<string,string> | — | Forward-compatible key/value bag for newer preferences. |
Voice
FEstuaryStreamAudio
| Field | Type | Wire key | Description |
|---|---|---|---|
Audio | string | audio | Base64 PCM16 16 kHz mono chunk. |
FEstuaryStartVoice and FEstuaryStopVoice are empty marker structs (no fields).
FEstuarySttResponse
| Field | Type | Wire key | Description |
|---|---|---|---|
Text | string | text | Transcript (partial or final). |
bIsFinal | bool | is_final | True on the final result. |
CharacterId | string | — | Client-side routing ID. |
FEstuaryBotVoice
| Field | Type | Wire key | Description |
|---|---|---|---|
Audio | string | audio | Base64 PCM16 mono chunk. |
MessageId | string | message_id | Correlates to the bot response turn. |
ChunkIndex | int | chunk_index | 0-based; -1 when absent. |
bIsFinal | bool | is_final | True on the last chunk. |
FEstuaryAudioPlaybackComplete
| Field | Type | Wire key | Description |
|---|---|---|---|
MessageId | string | message_id | The message whose audio finished (optional). |
Animation
FEstuaryBotAnimation
One ARKit-52 lipsync frame.
| Field | Type | Wire key | Description |
|---|---|---|---|
MessageId | string | message_id | Owning utterance. |
FrameIndex | int | sequence | 0-based frame counter. |
TimeCodeSec | float | time_code_sec | Seconds from utterance start (the timing base). |
Weights | map<string,float> | weights | ARKit-52 blendshape name → weight [0,1]. |
bIsFinal | bool | is_final | True only on the stream terminator (filtered before your handler). |
EmitEpochMs | int64 | emit_epoch_ms | Diagnostic timestamp. |
FEstuaryBotPose (experimental)
One body-pose frame.
| Field | Type | Wire key | Description |
|---|---|---|---|
MessageId | string | message_id | Owning utterance. |
FrameIndex | int | sequence | 0-based frame counter. |
TimeCodeSec | float | time_code_sec | Seconds from utterance start. |
Fps | int | fps | Frame rate (30). |
Bones | array<FEstuaryBotPoseBone> | bones | Per-bone rotations. |
HipsWorld | vector | hips_world | Root translation. |
HipsLocalToFloor | vector | hips_local_to_floor | Floor-projected root translation (SMPL-X canonical meters). |
EmitEpochMs | int64 | emit_epoch_ms | Diagnostic timestamp (worker wall-clock). |
bIsFinal | bool | is_final | Terminator flag (filtered before your handler). |
FEstuaryBotPoseBone: Name (string) — bone name; Quat (FVector4) — rotation [x,y,z,w], identity default (0,0,0,1).
Vision
FEstuaryCameraImage
Outbound captured frame (built for you by the camera component).
| Field | Type | Wire key | Description |
|---|---|---|---|
ImageJpegBase64 | string | image | Base64 JPEG data. Never logged. |
MimeType | string | mime_type | Default image/jpeg. |
RequestId | string | request_id | Correlation key matched in the vision response. |
Text | string | text | Optional prompt context. |
SampleRate | int | sample_rate | Optional hint (omitted when 0). |
(CharacterId, Width, Height, TimestampMs are client-side only — not transmitted.)
FEstuaryCameraCapture
Server-initiated capture request.
| Field | Type | Wire key | Description |
|---|---|---|---|
RequestId | string | request_id | Echo back in the response. |
Text | string | text | Optional prompt/intent context. |
FEstuaryVisionResponse
Assembled client-side from the response chunks for a sent frame.
| Field | Type | Description |
|---|---|---|
MessageId | string | Matches the originating request_id. |
CharacterId | string | Owning character. |
Description | string | VLM text chunk; concatenate across chunks. |
bIsFinal | bool | True on the final chunk. |
Memory
FEstuaryMemoryUpdated
Pushed after background memory extraction. Top-level keys are snake_case.
| Field | Type | Wire key | Description |
|---|---|---|---|
AgentId | string | agent_id | Character UUID. |
PlayerId | string | player_id | Player scope. |
MemoriesExtracted | int | memories_extracted | Count this round. |
FactsExtracted | int | facts_extracted | Fact count this round. |
ConversationId | string | conversation_id | Source conversation. |
NewMemories | array<FEstuaryMemoryData> | new_memories | The extracted memories. |
Timestamp | string | timestamp | ISO-8601 emit time. |
FEstuaryMemoryData
One extracted memory. (Item keys are camelCase on the wire.)
| Field | Type | Description |
|---|---|---|
Id | string | Memory UUID. |
Content | string | Extracted content. |
MemoryType | string | Category (fact / preference / relationship / event / …). |
Confidence | float | Extraction confidence [0,1]. |
Status | string | Lifecycle (active / superseded / decayed / deleted). |
Topic | string | Primary topic. |
SourceQuote | string | Quote the memory was extracted from. |
SecondaryTopics | array<string> | Related topics. |
AccessCount | int | Times accessed. |
CreatedAt / UpdatedAt | string | ISO-8601 timestamps. |
Errors
FEstuaryError
Non-terminal — the session stays open.
| Field | Type | Wire key | Description |
|---|---|---|---|
Message | string | message | Human-readable error. |
FEstuaryAuthError
Terminal — credentials rejected.
| Field | Type | Description |
|---|---|---|
Error | string | Error code/message. |
FEstuarySessionRejected
Terminal — valid credentials but a server policy blocks the session.
| Field | Type | Description |
|---|---|---|
Reason | string | Rejection reason (e.g., concurrent_limit). |
Cap | int | The policy cap exceeded. |
ShareTokenId | string | Share token whose policy triggered the rejection. |
FEstuaryQuotaExceeded
The server disconnects right after. Numeric fields are 0 in the share-limit variant.
| Field | Type | Wire key | Description |
|---|---|---|---|
ErrorCode | string | error | quota_exceeded or share_limit_exceeded. |
Message | string | message | Human-readable message. |
Current | int | current | Current usage. |
Limit | int | limit | Quota limit. |
Remaining | int | remaining | Remaining quota. |
Tier | string | tier | Subscription tier. |
Enums
EEstuarySessionState
Disconnected · Connecting · Connected · Reconnecting · Error
See Core Concepts → Session Lifecycle.
EEstuaryVoiceMode
WebSocket · LiveKit — the active voice transport.
EEstuaryCaptureSource
RenderedScene · Webcam — the camera component's capture source.
EEstuaryFingerPolicy
How body animation drives hand joints (experimental):
| Value | Behavior |
|---|---|
Driven | Play live frames (default). |
BindPose | Force the rest pose every frame (kiosk demos). |
IdleBreath | Driven plus an additive idle (behaves like Driven in the preview). |
Statue | Freeze fingers at the last received frame (debug only). |