Skip to main content

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.

FieldTypeDefaultDescription
ApiKeystringDeveloper API key (est_...). Treated as a secret — never logged.
CharacterIdstringUUID of the character to connect to.
PlayerIdstringOpaque player identifier; scopes session and memory.
AudioSampleRateint24000TTS playback rate in Hz.
bEnableAnimationboolfalseRequest ARKit-52 lipsync frames.
bEnableBodyAnimationboolfalseRequest body-pose frames (experimental; requires 16 kHz).
ClientVersionstringDiagnostic. Auto-filled if empty.
PlatformstringDiagnostic platform string.

FEstuarySessionInfo

Received after a successful connect (read-only).

FieldTypeDescription
SessionIdstringUnique session UUID.
ConversationIdstringConversation UUID grouping this exchange.
CharacterIdstringConfirmed character UUID.
PlayerIdstringConfirmed player ID.
AnimationCapabilitiesFEstuaryAnimationCapabilitiesFace/body animation gates reported by the server.

FEstuaryAnimationCapabilities

FieldTypeDescription
FaceFEstuaryAnimationModalityCapabilityFace (ARKit-52) gate.
BodyFEstuaryAnimationModalityCapabilityBody (pose) gate.
bPresentboolTrue 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).

FieldTypeDescription
TextstringThe message text.
MessageIdstringClient-generated correlation ID.
CharacterIdstringOwning character routing ID.
bTextOnlyboolWhen true, suppress TTS audio for this turn.

FEstuaryBotResponse

A streaming response chunk.

FieldTypeWire keyDescription
TextstringtextDelta text for this chunk; concatenate across chunks.
PartialstringpartialServer-maintained running partial (may be empty).
MessageIdstringmessage_idMatches the originating SendText ID.
ChunkIndexintchunk_index0-based; -1 when absent.
bIsFinalboolis_finalTrue on the final chunk.
bIsInterjectionboolis_interjectionTrue for a backchannel/interjection.

FEstuaryInterruptPayload

Shared by outbound interrupts and inbound acknowledgements.

FieldTypeDescription
MessageIdstringMessage being interrupted (empty = current).
ReasonstringServer reason code (inbound only).
InterruptedAtstringISO-8601 timestamp (inbound only).

FEstuaryPreferences

FieldTypeWire keyDescription
bEnableVisionAcknowledgmentboolenableVisionAcknowledgmentBot verbally acknowledges what it sees.
ExtraPreferencesmap<string,string>Forward-compatible key/value bag for newer preferences.

Voice

FEstuaryStreamAudio

FieldTypeWire keyDescription
AudiostringaudioBase64 PCM16 16 kHz mono chunk.

FEstuaryStartVoice and FEstuaryStopVoice are empty marker structs (no fields).

FEstuarySttResponse

FieldTypeWire keyDescription
TextstringtextTranscript (partial or final).
bIsFinalboolis_finalTrue on the final result.
CharacterIdstringClient-side routing ID.

FEstuaryBotVoice

FieldTypeWire keyDescription
AudiostringaudioBase64 PCM16 mono chunk.
MessageIdstringmessage_idCorrelates to the bot response turn.
ChunkIndexintchunk_index0-based; -1 when absent.
bIsFinalboolis_finalTrue on the last chunk.

FEstuaryAudioPlaybackComplete

FieldTypeWire keyDescription
MessageIdstringmessage_idThe message whose audio finished (optional).

Animation

FEstuaryBotAnimation

One ARKit-52 lipsync frame.

FieldTypeWire keyDescription
MessageIdstringmessage_idOwning utterance.
FrameIndexintsequence0-based frame counter.
TimeCodeSecfloattime_code_secSeconds from utterance start (the timing base).
Weightsmap<string,float>weightsARKit-52 blendshape name → weight [0,1].
bIsFinalboolis_finalTrue only on the stream terminator (filtered before your handler).
EmitEpochMsint64emit_epoch_msDiagnostic timestamp.

FEstuaryBotPose (experimental)

One body-pose frame.

FieldTypeWire keyDescription
MessageIdstringmessage_idOwning utterance.
FrameIndexintsequence0-based frame counter.
TimeCodeSecfloattime_code_secSeconds from utterance start.
FpsintfpsFrame rate (30).
Bonesarray<FEstuaryBotPoseBone>bonesPer-bone rotations.
HipsWorldvectorhips_worldRoot translation.
HipsLocalToFloorvectorhips_local_to_floorFloor-projected root translation (SMPL-X canonical meters).
EmitEpochMsint64emit_epoch_msDiagnostic timestamp (worker wall-clock).
bIsFinalboolis_finalTerminator 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).

FieldTypeWire keyDescription
ImageJpegBase64stringimageBase64 JPEG data. Never logged.
MimeTypestringmime_typeDefault image/jpeg.
RequestIdstringrequest_idCorrelation key matched in the vision response.
TextstringtextOptional prompt context.
SampleRateintsample_rateOptional hint (omitted when 0).

(CharacterId, Width, Height, TimestampMs are client-side only — not transmitted.)

FEstuaryCameraCapture

Server-initiated capture request.

FieldTypeWire keyDescription
RequestIdstringrequest_idEcho back in the response.
TextstringtextOptional prompt/intent context.

FEstuaryVisionResponse

Assembled client-side from the response chunks for a sent frame.

FieldTypeDescription
MessageIdstringMatches the originating request_id.
CharacterIdstringOwning character.
DescriptionstringVLM text chunk; concatenate across chunks.
bIsFinalboolTrue on the final chunk.

Memory

FEstuaryMemoryUpdated

Pushed after background memory extraction. Top-level keys are snake_case.

FieldTypeWire keyDescription
AgentIdstringagent_idCharacter UUID.
PlayerIdstringplayer_idPlayer scope.
MemoriesExtractedintmemories_extractedCount this round.
FactsExtractedintfacts_extractedFact count this round.
ConversationIdstringconversation_idSource conversation.
NewMemoriesarray<FEstuaryMemoryData>new_memoriesThe extracted memories.
TimestampstringtimestampISO-8601 emit time.

FEstuaryMemoryData

One extracted memory. (Item keys are camelCase on the wire.)

FieldTypeDescription
IdstringMemory UUID.
ContentstringExtracted content.
MemoryTypestringCategory (fact / preference / relationship / event / …).
ConfidencefloatExtraction confidence [0,1].
StatusstringLifecycle (active / superseded / decayed / deleted).
TopicstringPrimary topic.
SourceQuotestringQuote the memory was extracted from.
SecondaryTopicsarray<string>Related topics.
AccessCountintTimes accessed.
CreatedAt / UpdatedAtstringISO-8601 timestamps.

Errors

FEstuaryError

Non-terminal — the session stays open.

FieldTypeWire keyDescription
MessagestringmessageHuman-readable error.

FEstuaryAuthError

Terminal — credentials rejected.

FieldTypeDescription
ErrorstringError code/message.

FEstuarySessionRejected

Terminal — valid credentials but a server policy blocks the session.

FieldTypeDescription
ReasonstringRejection reason (e.g., concurrent_limit).
CapintThe policy cap exceeded.
ShareTokenIdstringShare token whose policy triggered the rejection.

FEstuaryQuotaExceeded

The server disconnects right after. Numeric fields are 0 in the share-limit variant.

FieldTypeWire keyDescription
ErrorCodestringerrorquota_exceeded or share_limit_exceeded.
MessagestringmessageHuman-readable message.
CurrentintcurrentCurrent usage.
LimitintlimitQuota limit.
RemainingintremainingRemaining quota.
TierstringtierSubscription 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):

ValueBehavior
DrivenPlay live frames (default).
BindPoseForce the rest pose every frame (kiosk demos).
IdleBreathDriven plus an additive idle (behaves like Driven in the preview).
StatueFreeze fingers at the last received frame (debug only).