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
ApiKeystring—Developer API key (est_...). Treated as a secret — never logged.
CharacterIdstring—UUID of the character to connect to.
PlayerIdstring—Opaque player identifier; scopes session and memory.
AudioSampleRateint24000TTS playback rate in Hz.
bEnableAnimationboolfalseRequest ARKit-52 lipsync frames.
bEnableBodyAnimationboolfalseRequest body-pose frames (experimental; requires 16 kHz).
ClientVersionstring—Diagnostic. Auto-filled if empty.
Platformstring—Diagnostic 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.
CharacterIdstring—Client-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).