Classes
AuthClient
Exchanges API-key credentials for a short-lived bearer access token. The token returned by createToken carries only the scopes you request and expires afterexpires_in seconds (typically 15 minutes). For
hands-off token lifecycle management, prefer the top-level
InterhumanClient, which uses a TokenManager to fetch and
refresh tokens for you.
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
options | AuthClientOptions |
Returns
AuthClient
Methods
createToken()
Parameters
| Parameter | Type |
|---|---|
request | TokenRequest |
Returns
Promise<TokenResponse>
Throws
when the credentials are invalid (401), lack a requested scope (403), or the request is otherwise rejected.createClientToken()
interhumanai.stream) and
carries the caps you set, which the API enforces across upload, stream, and
real-time (the video budget spans all three). Omitted fields are left unset
(the server applies its defaults, e.g. a single concurrent session and a
300s TTL).
Parameters
| Parameter | Type |
|---|---|
request | ClientTokenRequest |
Returns
Promise<ClientTokenResponse>
Throws
when the credentials are invalid (401), the key lacks a requested scope (403), or the mint rate limit is exceeded (429).revokeClientToken()
Parameters
| Parameter | Type |
|---|---|
request | RevokeClientTokenRequest |
Returns
Promise<void>
Throws
when the credentials or token are invalid (401).StaticTokenProvider
A TokenProvider that always returns the same pre-issued token.Implements
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
token | string |
Returns
StaticTokenProvider
Methods
getToken()
Returns
Promise<string>
Implementation of
TokenProvider.getToken
TokenManager
Mints access tokens from API-key credentials via AuthClient and caches them until shortly before they expire, so callers can request a valid bearer token cheaply on every call. Concurrent requests while a token is being minted share a single in-flight request.Implements
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
options | TokenManagerOptions |
Returns
TokenManager
Methods
getToken()
Returns
Promise<string>
Implementation of
TokenProvider.getToken
invalidate()
Returns
void
InterhumanClient
The main entry point. Construct it once with credentials (or a token) and use upload, stream, and realtime to call the API; token lifecycle is handled for you.Example
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
options | InterhumanClientOptions |
Returns
InterhumanClient
Properties
| Property | Modifier | Type | Description |
|---|---|---|---|
auth | readonly | AuthClient | Low-level auth client for minting tokens directly via /v1/auth. |
upload | readonly | UploadClient | Upload-mode analysis client (POST /v1/upload/analyze). |
Methods
stream()
connect().
Returns
StreamClient
realtime()
WS /v0/realtime/analyze). Each call returns a fresh client
(one per WebSocket session); register handlers and then call connect().
For the current temporary release the endpoint accepts tokens holding
either the stream or the realtime scope, so the default scopes work as-is;
pass scopes: [Scope.Realtime] to mint realtime-scoped tokens explicitly.
Returns
RealtimeClient
getToken()
Returns
Promise<string>
InterhumanError
Base class for every error the SDK throws.Extends
Error
Extended by
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
message | string |
Returns
InterhumanError
Overrides
InterhumanApiError
An error response from an HTTP endpoint (/v1/auth, /v1/upload/analyze).
errorId, correlationId, and link are surfaced from the canonical
ApiErrorBody when the server returned one.
Extends
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
args | { status: number; body?: ApiErrorBody; message?: string; } |
args.status | number |
args.body? | ApiErrorBody |
args.message? | string |
Returns
InterhumanApiError
Overrides
InterhumanError.constructor
Properties
| Property | Modifier | Type | Description |
|---|---|---|---|
status | readonly | number | HTTP status code. |
errorId? | readonly | string | Machine-readable error code (e.g. "ih2001"), when present. |
correlationId? | readonly | string | Correlation id for support, when present. |
link? | readonly | string | Documentation link for the error, when present. |
body? | readonly | ApiErrorBody | The raw parsed error body, when the server returned JSON. |
InterhumanConfigError
A configuration/usage error caught before any network call. Streamerror envelopes are not thrown — they are delivered as typed
StreamErrorEvents through the stream client’s on("error", …)
surface, and transport-level socket failures arrive on "socketError" as a
base InterhumanError.
Extends
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
message | string |
Returns
InterhumanConfigError
Inherited from
InterhumanError.constructor
RealtimeClient
A typed client over the real-time WebSocket protocol. The real-time endpoint shares the stream endpoint’s session mechanics (subprotocol bearer auth, binary video frames, JSON envelopes down, and therequestClose() graceful shutdown handshake) and adds multi-track analysis,
a caller-supplied transcript (sendTranscript), a live server
transcript (transcript.generated), and a periodic feedback step
(realtime_feedback.generated) enabled through the session config’s
realtime_feedback_instructions. Unlike the stream endpoint it never emits
engagement.updated or conversation_quality.updated.
Temporary release: the endpoint currently ships under the v0 path
(/v0/realtime/analyze) and accepts credentials holding either the
interhumanai.stream or the interhumanai.realtime scope, so existing
stream-scoped keys work without a new permission. Both aspects may change
when the endpoint graduates to v1. The previous hyphenated spelling
(/v0/real-time/analyze) still works as a temporary compatibility alias, but
new integrations should use /v0/realtime/analyze.
Example
Extends
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
options | SessionSocketClientOptions |
Returns
RealtimeClient
Overrides
SessionSocketClient.constructor
Properties
| Property | Modifier | Type | Default value | Description | Overrides |
|---|---|---|---|---|---|
endpointPath | readonly | "/v0/realtime/analyze" | "/v0/realtime/analyze" | Endpoint path appended to the WebSocket base URL (e.g. /v1/stream/analyze). | SessionSocketClient.endpointPath |
clientName | readonly | "RealtimeClient" | "RealtimeClient" | Concrete class name used in configuration error messages. | SessionSocketClient.clientName |
displayName | readonly | "Real-time" | "Real-time" | Human-readable surface name used in error messages (e.g. "Stream"). | SessionSocketClient.displayName |
scopeHint | readonly | "The credentials may be invalid or lack the stream or realtime scope." | "The credentials may be invalid or lack the stream or realtime scope." | Appended to the connect-rejection message to hint at the likely scope issue. | SessionSocketClient.scopeHint |
Accessors
isOpen
Get Signature
Returns
boolean
Inherited from
SessionSocketClient.isOpen
Methods
sendTranscript()
transcript.updated text frame. The most recent transcript replaces any
prior one for the session and is rendered into the feedback prompt. A
transcript that does not match the segment shape is rejected by the server
with a non-fatal error envelope; the session stays open.
Parameters
| Parameter | Type |
|---|---|
transcript | TranscriptSegment[] |
Returns
void
on()
type (e.g. "signal.detected"), "message" for every envelope,
or a lifecycle event ("open", "close", "socketError").
Type Parameters
| Type Parameter |
|---|
K extends keyof RealtimeEventMap |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<RealtimeEventMap[K]> |
Returns
() =>void
Inherited from
SessionSocketClient.on
off()
Type Parameters
| Type Parameter |
|---|
K extends keyof RealtimeEventMap |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<RealtimeEventMap[K]> |
Returns
void
Inherited from
SessionSocketClient.off
once()
Type Parameters
| Type Parameter |
|---|
K extends keyof RealtimeEventMap |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<RealtimeEventMap[K]> |
Returns
() =>void
Inherited from
SessionSocketClient.once
connect()
Returns
Promise<void>
Inherited from
SessionSocketClient.connect
waitForSessionReady()
session.ready envelope. Resolves immediately if it has
already arrived (the envelope is retained), otherwise on the next one.
Safe to call after connect without racing the frame.
Returns
Promise<RealtimeSessionReadyEvent>
Inherited from
SessionSocketClient.waitForSessionReady
sendVideo()
Parameters
| Parameter | Type |
|---|---|
chunk | VideoChunk |
Returns
void
Inherited from
SessionSocketClient.sendVideo
updateConfig()
session.updated envelope.
Parameters
| Parameter | Type |
|---|---|
config | RealtimeSessionConfig |
Returns
void
Inherited from
SessionSocketClient.updateConfig
requestClose()
session.close).
The server acknowledges with a session.closing envelope whose
data.max_drain_seconds is the longest you should wait for the final
session.ended envelope. After the acknowledgment the server rejects new
video, finishes analyzing the video it already accepted (emitting the
normal envelopes in order, plus signal.ended for still-active signals),
sends session.ended, and closes the socket with code 1000 — so listen
for "session.ended" (or "close") rather than calling close.
Returns
void
Inherited from
SessionSocketClient.requestClose
close()
Parameters
| Parameter | Type |
|---|---|
code? | number |
reason? | string |
Returns
void
Inherited from
SessionSocketClient.close
sendJson()
Parameters
| Parameter | Type |
|---|---|
payload | unknown |
Returns
void
Inherited from
SessionSocketClient.sendJson
abstract SessionSocketClient
Base class implementing the shared live-session WebSocket protocol.
Authentication uses the Sec-WebSocket-Protocol: access_token, <token>
subprotocol pair, which is portable across browsers and Node (the standard
WebSocket constructor cannot set an Authorization header). Inbound frames
are decoded into the protocol’s envelope union and dispatched through the
typed on surface; outbound video is sent as binary frames and JSON
payloads (session config, and for real-time the transcript) as text frames.
Extended by
Type Parameters
| Type Parameter | Description |
|---|---|
TEventMap extends SessionSocketEventMapBase<unknown, unknown> | Event payloads keyed by event name (envelope types plus the lifecycle events of SessionSocketEventMapBase). |
TConfig extends object | The client→server session-config shape. |
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
options | SessionSocketClientOptions |
Returns
SessionSocketClient<TEventMap, TConfig>
Properties
Accessors
isOpen
Get Signature
Returns
boolean
Methods
on()
type (e.g. "signal.detected"), "message" for every envelope,
or a lifecycle event ("open", "close", "socketError").
Type Parameters
| Type Parameter |
|---|
K extends string | number | symbol |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<TEventMap[K]> |
Returns
() =>void
off()
Type Parameters
| Type Parameter |
|---|
K extends string | number | symbol |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<TEventMap[K]> |
Returns
void
once()
Type Parameters
| Type Parameter |
|---|
K extends string | number | symbol |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<TEventMap[K]> |
Returns
() =>void
connect()
Returns
Promise<void>
waitForSessionReady()
session.ready envelope. Resolves immediately if it has
already arrived (the envelope is retained), otherwise on the next one.
Safe to call after connect without racing the frame.
Returns
Promise<TEventMap["session.ready"]>
sendVideo()
Parameters
| Parameter | Type |
|---|---|
chunk | VideoChunk |
Returns
void
updateConfig()
session.updated envelope.
Parameters
| Parameter | Type |
|---|---|
config | TConfig |
Returns
void
requestClose()
session.close).
The server acknowledges with a session.closing envelope whose
data.max_drain_seconds is the longest you should wait for the final
session.ended envelope. After the acknowledgment the server rejects new
video, finishes analyzing the video it already accepted (emitting the
normal envelopes in order, plus signal.ended for still-active signals),
sends session.ended, and closes the socket with code 1000 — so listen
for "session.ended" (or "close") rather than calling close.
Returns
void
close()
Parameters
| Parameter | Type |
|---|---|
code? | number |
reason? | string |
Returns
void
sendJson()
Parameters
| Parameter | Type |
|---|---|
payload | unknown |
Returns
void
StreamClient
A typed client over the stream WebSocket protocol. Authentication uses theSec-WebSocket-Protocol: access_token, <token>
subprotocol pair, which is portable across browsers and Node (the standard
WebSocket constructor cannot set an Authorization header). Inbound frames
are decoded into the StreamEvent union and dispatched through the
typed on surface inherited from SessionSocketClient; outbound video
is sent as binary frames and session config as a JSON text frame.
Example
Extends
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
options | SessionSocketClientOptions |
Returns
StreamClient
Overrides
SessionSocketClient.constructor
Properties
| Property | Modifier | Type | Default value | Description | Overrides |
|---|---|---|---|---|---|
endpointPath | readonly | "/v1/stream/analyze" | "/v1/stream/analyze" | Endpoint path appended to the WebSocket base URL (e.g. /v1/stream/analyze). | SessionSocketClient.endpointPath |
clientName | readonly | "StreamClient" | "StreamClient" | Concrete class name used in configuration error messages. | SessionSocketClient.clientName |
displayName | readonly | "Stream" | "Stream" | Human-readable surface name used in error messages (e.g. "Stream"). | SessionSocketClient.displayName |
scopeHint | readonly | "The credentials may be invalid or lack the stream scope." | "The credentials may be invalid or lack the stream scope." | Appended to the connect-rejection message to hint at the likely scope issue. | SessionSocketClient.scopeHint |
Accessors
isOpen
Get Signature
Returns
boolean
Inherited from
SessionSocketClient.isOpen
Methods
on()
type (e.g. "signal.detected"), "message" for every envelope,
or a lifecycle event ("open", "close", "socketError").
Type Parameters
| Type Parameter |
|---|
K extends keyof StreamEventMap |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<StreamEventMap[K]> |
Returns
() =>void
Inherited from
SessionSocketClient.on
off()
Type Parameters
| Type Parameter |
|---|
K extends keyof StreamEventMap |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<StreamEventMap[K]> |
Returns
void
Inherited from
SessionSocketClient.off
once()
Type Parameters
| Type Parameter |
|---|
K extends keyof StreamEventMap |
Parameters
| Parameter | Type |
|---|---|
event | K |
handler | Listener<StreamEventMap[K]> |
Returns
() =>void
Inherited from
SessionSocketClient.once
connect()
Returns
Promise<void>
Inherited from
SessionSocketClient.connect
waitForSessionReady()
session.ready envelope. Resolves immediately if it has
already arrived (the envelope is retained), otherwise on the next one.
Safe to call after connect without racing the frame.
Returns
Promise<SessionReadyEvent>
Inherited from
SessionSocketClient.waitForSessionReady
sendVideo()
Parameters
| Parameter | Type |
|---|---|
chunk | VideoChunk |
Returns
void
Inherited from
SessionSocketClient.sendVideo
updateConfig()
session.updated envelope.
Parameters
| Parameter | Type |
|---|---|
config | StreamSessionConfig |
Returns
void
Inherited from
SessionSocketClient.updateConfig
requestClose()
session.close).
The server acknowledges with a session.closing envelope whose
data.max_drain_seconds is the longest you should wait for the final
session.ended envelope. After the acknowledgment the server rejects new
video, finishes analyzing the video it already accepted (emitting the
normal envelopes in order, plus signal.ended for still-active signals),
sends session.ended, and closes the socket with code 1000 — so listen
for "session.ended" (or "close") rather than calling close.
Returns
void
Inherited from
SessionSocketClient.requestClose
close()
Parameters
| Parameter | Type |
|---|---|
code? | number |
reason? | string |
Returns
void
Inherited from
SessionSocketClient.close
sendJson()
Parameters
| Parameter | Type |
|---|---|
payload | unknown |
Returns
void
Inherited from
SessionSocketClient.sendJson
UploadClient
Analyzes a complete video file and returns a single report. The request is sent asmultipart/form-data with the bearer token attached
automatically from the configured TokenProvider.
Constructors
Constructor
Parameters
| Parameter | Type |
|---|---|
options | UploadClientOptions |
Returns
UploadClient
Methods
analyze()
Parameters
| Parameter | Type |
|---|---|
input | AnalyzeUploadInput |
Returns
Promise<AnalysisResult>
Throws
on a rejected request (auth, validation, too-large/too-short media, quota, unprocessable video, server error).Interfaces
AuthClientOptions
Options for constructing an AuthClient.Properties
| Property | Type | Description |
|---|---|---|
baseUrl? | string | Explicit base URL (e.g. http://localhost:8080). Overrides environment. |
environment? | Environment | Named environment to target. Defaults to "production". |
fetch? | { (input, init?): Promise<Response>; (input, init?): Promise<Response>; } | Custom fetch implementation. Defaults to the global fetch. |
TokenProvider
Anything that can supply a bearer token on demand.Methods
getToken()
Returns
Promise<string>
TokenManagerOptions
Options for a TokenManager.Properties
| Property | Type | Description |
|---|---|---|
authClient | AuthClient | - |
credentials | ApiKeyCredentials | - |
scopes | ScopeValue[] | Scopes to request when minting tokens. |
refreshSkewSeconds? | number | Refresh a cached token this many seconds before its stated expiry, to absorb clock skew and request latency. Defaults to 30. |
now? | () => number | Injectable clock (milliseconds). Defaults to Date.now. Test seam. |
ApiKeyCredentials
Credentials issued in the Interhuman customer platform.Extended by
Properties
ApiKeyCredential
A full API key string used to mint and revoke client tokens.Extended by
Properties
TokenRequest
Request body forPOST /v1/auth.
Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
keyId | string | API key ID from the dashboard. | ApiKeyCredentials.keyId |
keySecret | string | API key secret from the dashboard. | ApiKeyCredentials.keySecret |
scopes | ScopeValue[] | Requested scopes; at least one is required. | - |
TokenResponse
Response body fromPOST /v1/auth.
Properties
ClientTokenRequest
Request for minting an ephemeral, capped client token (POST /v1/client_tokens).
Call this server-side with your API key; the returned token is safe to hand
to a browser to call the upload, stream, or real-time endpoints directly.
Every cap is optional. The token grants only the requested scopes
(default interhumanai.stream); the caps are enforced on streaming sessions
(stream / real-time) and the video budget additionally spans upload.
Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
apiKey | string | Your full API key from the dashboard (ih_<env>_<publicId>_<entropy>). | ApiKeyCredential.apiKey |
scopes? | ScopeValue[] | Scopes to grant the token. Defaults to ["interhumanai.stream"]. | - |
expiresIn? | number | Requested lifetime in seconds. Clamped to 60–3600; defaults to 300. | - |
maxDurationSeconds? | number | Max wall-clock duration, in seconds, of a session opened with this token. | - |
maxBytes? | number | Max cumulative video bytes a session opened with this token may send. | - |
maxConcurrent? | number | Max number of concurrent sessions opened with this token. Defaults to 1 (one session at a time) when omitted server-side. | - |
maxVideoSeconds? | number | Max total seconds of video the token may process across upload/stream/real-time. | - |
allowedOrigins? | string[] | Allow-list of browser Origin values permitted to use this token. | - |
ClientTokenResponse
Response body fromPOST /v1/client_tokens.
Properties
RevokeClientTokenRequest
Request for revoking a client token (POST /v1/client_tokens/revoke).
Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
apiKey | string | Your full API key from the dashboard (ih_<env>_<publicId>_<entropy>). | ApiKeyCredential.apiKey |
token | string | The client token to revoke (as returned in access_token). | - |
InterhumanClientOptions
Options for constructing an InterhumanClient.Properties
| Property | Type | Description |
|---|---|---|
credentials? | ApiKeyCredentials | API-key credentials. The client exchanges these at /v1/auth and refreshes the resulting token automatically. Provide either credentials or accessToken. |
accessToken? | string | A pre-issued bearer access token, used as-is. Provide either accessToken or credentials. |
scopes? | ScopeValue[] | Scopes requested when minting tokens from credentials. Defaults to upload + stream. Ignored when accessToken is supplied. |
environment? | Environment | Named environment to target. Defaults to "production". |
baseUrl? | string | Explicit base URL (e.g. http://localhost:8080). Overrides environment. |
fetch? | { (input, init?): Promise<Response>; (input, init?): Promise<Response>; } | Custom fetch implementation. Defaults to the global fetch. |
webSocket? | WebSocketFactory | Custom WebSocket factory for the stream and real-time clients. Defaults to the global WebSocket (browsers, Node 22+). |
refreshSkewSeconds? | number | Seconds before stated expiry to refresh a minted token. Defaults to 30. |
ApiErrorBody
The canonical error body returned by every HTTP error path.Properties
TranscriptSegment
One diarized utterance of a real-time transcript. The same shape is used for the transcript you send (sendTranscript) and the live transcript the
server streams back (transcript.generated).
Properties
RealtimeSessionConfig
Client-to-server real-time session config (sent as a JSON text frame). The last config sent fully replaces the active one; the server acknowledges with asession.updated envelope. The stream include flags are not accepted —
the real-time endpoint never emits the conversation-quality or engagement
updates those flags control.
Properties
| Property | Type | Description |
|---|---|---|
analysis_groups? | AnalysisGroup[] | Analysis surfaces to run for this session, any subset of what the server advertises on session.ready under supported_session_config_options.analysis_groups. Must be non-empty when present: an empty array — like selecting a group the server has not enabled — is rejected with an error envelope. When omitted, the server default is audio + visual (not video), clamped to what the deployment allows. |
realtime_feedback_frequency? | RealtimeFeedbackFrequency | How often feedback runs once enabled. Has no effect until a non-empty realtime_feedback_instructions enables feedback. |
realtime_feedback_instructions? | string | Configuration block for the periodic feedback step, and the switch that enables it: feedback runs only when this is a non-empty string (there is no default prompt). It sets the goal, domain/context, and the focus, tone, or output style of the guidance. It is treated as untrusted configuration data — it shapes the guidance but cannot override the server’s feedback task or output contract. |
TranscriptUpdatedFrame
The inboundtranscript.updated text frame carrying a caller-supplied
transcript. Sent by RealtimeClient.sendTranscript; the most recent
transcript replaces any prior one and is rendered into the feedback prompt.
Properties
| Property | Type | Description |
|---|---|---|
type | "transcript.updated" | - |
transcript | TranscriptSegment[] | The full transcript as {start, end, text, speaker} segments, in spoken order. |
RealtimeSessionReadyConfigOptions
Supported real-time session-config options advertised onsession.ready.
Unlike the stream options, only the real-time controls appear here — never
the stream include / goal_dimensions options.
Properties
| Property | Type | Description |
|---|---|---|
realtime_feedback_instructions | "string" | Always the literal "string": realtime_feedback_instructions takes free-form text, so its accepted JSON type is advertised instead of a value list. |
realtime_feedback_frequency | RealtimeFeedbackFrequency[] | Accepted realtime_feedback_frequency values. |
analysis_groups | AnalysisGroup[] | Analysis groups this deployment allows — the valid values for the config’s analysis_groups field, so you can pick a subset without round-tripping a rejection. |
RealtimeSessionReadyData
session.ready payload — the same connection-level limits as the stream
session.ready, with the real-time supported-config options.
Properties
| Property | Type | Description |
|---|---|---|
session_idle_timeout_seconds | number | Idle seconds tolerated before the server closes the session (0 = disabled). |
session_max_duration_seconds | number | Maximum total session duration in seconds (0 = disabled). |
max_segment_duration_seconds | number | null | Max probed duration of one inbound chunk, or null when only the size cap binds. |
min_segment_size_bytes | number | Minimum size in bytes of one inbound chunk. |
max_segment_size_bytes | number | Maximum size in bytes of one inbound chunk. |
supported_session_config_options | RealtimeSessionReadyConfigOptions | - |
RealtimeSessionReadyEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
type | "session.ready" | - | - |
data | RealtimeSessionReadyData | - | - |
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
RealtimeSessionUpdatedData
session.updated payload — the consolidated real-time config after a config
frame applied. Reports only the real-time options, never the stream-only
include / goal_dimensions fields.
Properties
| Property | Type | Description |
|---|---|---|
realtime_feedback_instructions | string | null | The applied realtime_feedback_instructions, echoed back verbatim; null when unset. |
realtime_feedback_frequency | RealtimeFeedbackFrequency | null | The active feedback frequency; null when unset. |
analysis_groups | AnalysisGroup[] | The effective analysis-group selection in force, already clamped to what the deployment allows (the server default when you have not chosen one). |
RealtimeSessionUpdatedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
type | "session.updated" | - | - |
data | RealtimeSessionUpdatedData | - | - |
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
TranscriptGeneratedEvent
transcript.generated — the server’s own live transcription of the analyzed
audio, emitted when the deployment’s transcription track produced new
speech. Each event carries only text not already sent, so concatenating the
text of successive events reconstructs the running transcript without
duplication. speaker is always 0 (single-speaker transcription).
Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
type | "transcript.generated" | - | - |
data | TranscriptSegment | - | - |
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
RealtimeFeedbackGeneratedData
realtime_feedback.generated payload — one feedback run’s guidance text.
Properties
RealtimeFeedbackGeneratedEvent
realtime_feedback.generated — the periodic feedback result. Emitted only when
realtime_feedback_instructions has enabled feedback, paced by realtime_feedback_frequency.
Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
type | "realtime_feedback.generated" | - | - |
data | RealtimeFeedbackGeneratedData | - | - |
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
RealtimeEventMap
Event payloads keyed by event name, for the typedon/off surface of the
real-time client. The envelope types map to their envelope objects; the
remaining keys are client-level lifecycle events.
Properties
| Property | Type | Description |
|---|---|---|
session.ready | RealtimeSessionReadyEvent | - |
session.updated | RealtimeSessionUpdatedEvent | - |
session.closing | SessionClosingEvent | - |
session.ended | SessionEndedEvent | - |
signal.detected | SignalDetectedEvent | - |
signal.updated | SignalUpdatedEvent | - |
signal.ended | SignalEndedEvent | - |
transcript.generated | TranscriptGeneratedEvent | - |
realtime_feedback.generated | RealtimeFeedbackGeneratedEvent | - |
coverage.dropped | CoverageDroppedEvent | - |
error | StreamErrorEvent | - |
message | RealtimeEvent | Fires for every server→client envelope, regardless of type. |
open | void | Fires once when the WebSocket connection opens. |
close | StreamCloseInfo | Fires once when the connection closes. |
socketError | Error | Transport-level socket error (distinct from the error envelope). |
SessionSocketClientOptions
Options shared by every WebSocket session client.Properties
| Property | Type | Description |
|---|---|---|
tokenProvider | TokenProvider | Supplies the bearer token used to authenticate the connection. |
baseUrl? | string | Explicit base URL (e.g. http://localhost:8080). Overrides environment. |
environment? | Environment | Named environment to target. Defaults to "production". |
webSocket? | WebSocketFactory | Custom WebSocket factory. Defaults to the global WebSocket (browsers, Node 22+). Supply one backed by the ws package on older Node. |
SessionSocketEventMapBase
The lifecycle and wildcard events every session event map carries, alongside its protocol-specific envelopetype keys. TEvent is the protocol’s
envelope union and TReady its session.ready envelope.
Type Parameters
| Type Parameter |
|---|
TEvent |
TReady |
Properties
| Property | Type | Description |
|---|---|---|
session.ready | TReady | The session.ready envelope — first frame after the handshake. |
message | TEvent | Fires for every server→client envelope, regardless of type. |
open | void | Fires once when the WebSocket connection opens. |
close | StreamCloseInfo | Fires once when the connection closes. |
socketError | Error | Transport-level socket error (distinct from the error envelope). |
StreamEnvelopeBase
Fields shared by every server→client envelope.Extended by
ConversationQualityUpdatedEventCoverageDroppedEventEngagementUpdatedEventFeedbackGeneratedEventSessionClosingEventSessionEndedEventSessionReadyEventSessionUpdatedEventSignalDetectedEventSignalEndedEventSignalUpdatedEventStreamErrorEventRealtimeSessionReadyEventRealtimeSessionUpdatedEventRealtimeFeedbackGeneratedEventTranscriptGeneratedEvent
Properties
SessionReadyConfigOptions
Supported session-config options advertised onsession.ready.
Properties
| Property | Type | Description |
|---|---|---|
include | IncludeFlag[] | - |
goal_dimensions | GoalDimension[] | null | null when the feedback feature is disabled. |
SessionReadyData
session.ready payload — session limits and supported config.
Properties
| Property | Type | Description |
|---|---|---|
session_idle_timeout_seconds | number | Idle seconds tolerated before the server closes the session (0 = disabled). |
session_max_duration_seconds | number | Maximum total session duration in seconds (0 = disabled). |
max_segment_duration_seconds | number | null | Max probed duration of one inbound chunk, or null when only the size cap binds. |
min_segment_size_bytes | number | Minimum size in bytes of one inbound chunk. |
max_segment_size_bytes | number | Maximum size in bytes of one inbound chunk. |
supported_session_config_options | SessionReadyConfigOptions | - |
SessionReadyEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "session.ready" | - | - |
data | SessionReadyData | - | - |
SessionUpdatedData
session.updated payload — consolidated config after a config frame applied.
Properties
| Property | Type |
|---|---|
include | IncludeFlag[] |
goal_dimensions | GoalDimension[] | null |
SessionUpdatedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "session.updated" | - | - |
data | SessionUpdatedData | - | - |
SessionClosingData
session.closing payload — the graceful-close drain contract.
Properties
SessionClosingEvent
Acknowledges a caller-initiatedsession.close request. From this point
the server rejects new video, finishes analyzing the video it already
accepted, emits final lifecycle envelopes (signal.ended for still-active
signals), sends session.ended, and closes the socket.
Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "session.closing" | - | - |
data | SessionClosingData | - | - |
SessionEndedData
session.ended payload — why the session ended.
Properties
SessionEndedEvent
The final message of a gracefully closed session: all analysis is closed and the server closes the WebSocket (code 1000) immediately after sending it. No further analysis messages follow.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "session.ended" | - | - |
data | SessionEndedData | - | - |
SignalDetectedData
Properties
| Property | Type | Description |
|---|---|---|
signal_type | SignalType | - |
start | number | Seconds, absolute session-cumulative time. |
probability | Probability | null | - |
rationale | string | null | - |
SignalDetectedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "signal.detected" | - | - |
data | SignalDetectedData | - | - |
SignalUpdatedData
Properties
| Property | Type |
|---|---|
signal_type | SignalType |
start | number |
probability | Probability | null |
rationale | string | null |
SignalUpdatedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "signal.updated" | - | - |
data | SignalUpdatedData | - | - |
SignalEndedData
Properties
| Property | Type | Description |
|---|---|---|
signal_type | SignalType | - |
end | number | Seconds, absolute session-cumulative time. |
SignalEndedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "signal.ended" | - | - |
data | SignalEndedData | - | - |
EngagementUpdatedData
Properties
| Property | Type |
|---|---|
state | EngagementLevel |
start | number |
EngagementUpdatedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "engagement.updated" | - | - |
data | EngagementUpdatedData | - | - |
ConversationQualityUpdatedData
Properties
| Property | Type | Description |
|---|---|---|
overall | ConversationQualityValues | null | Non-null when conversation_quality_overall was requested. |
timeline | | ConversationQualityTimelineEntry[] | null | Non-null when conversation_quality_timeline was requested and the period had signals. |
ConversationQualityUpdatedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "conversation_quality.updated" | - | - |
data | ConversationQualityUpdatedData | - | - |
FeedbackGeneratedData
Properties
FeedbackGeneratedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "feedback.generated" | - | - |
data | FeedbackGeneratedData | - | - |
CoverageDroppedRange
A contiguous range of media skipped under backpressure (not billed).Properties
CoverageDroppedData
Properties
| Property | Type |
|---|---|
ranges | CoverageDroppedRange[] |
CoverageDroppedEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "coverage.dropped" | - | - |
data | CoverageDroppedData | - | - |
StreamErrorData
Properties
StreamErrorEvent
Fields shared by every server→client envelope.Extends
Properties
| Property | Type | Description | Inherited from |
|---|---|---|---|
timestamp | string | ISO 8601 timestamp identifying when the event occurred. | StreamEnvelopeBase.timestamp |
correlation_id | string | Connection correlation id; quote it when contacting support. | StreamEnvelopeBase.correlation_id |
type | "error" | - | - |
data | StreamErrorData | - | - |
StreamSessionConfig
Client-to-server session config (sent as a JSON text frame).Properties
| Property | Type | Description |
|---|---|---|
include? | IncludeFlag[] | Conversation-quality sections to include in result messages. |
goal_dimensions? | GoalDimension[] | Goal dimensions for this session (drive periodic feedback). |
SessionCloseRequest
Client-to-server graceful close request (sent as a JSON text frame). Tells the server the caller is done sending video; the server acknowledges withsession.closing and ends the session with session.ended.
Properties
StreamCloseInfo
Information about a closed stream connection.Properties
StreamEventMap
Event payloads keyed by event name, for the typedon/off surface. The
twelve envelope types map to their envelope objects; the remaining keys
are client-level lifecycle events.
Properties
| Property | Type | Description |
|---|---|---|
session.ready | SessionReadyEvent | - |
session.updated | SessionUpdatedEvent | - |
session.closing | SessionClosingEvent | - |
session.ended | SessionEndedEvent | - |
signal.detected | SignalDetectedEvent | - |
signal.updated | SignalUpdatedEvent | - |
signal.ended | SignalEndedEvent | - |
engagement.updated | EngagementUpdatedEvent | - |
conversation_quality.updated | ConversationQualityUpdatedEvent | - |
feedback.generated | FeedbackGeneratedEvent | - |
coverage.dropped | CoverageDroppedEvent | - |
error | StreamErrorEvent | - |
message | StreamEvent | Fires for every server→client envelope, regardless of type. |
open | void | Fires once when the WebSocket connection opens. |
close | StreamCloseInfo | Fires once when the connection closes. |
socketError | Error | Transport-level socket error (distinct from the error envelope). |
WebSocketLike
The subset of the WHATWGWebSocket interface the SDK relies on. Both the
browser WebSocket and Node 22+‘s global WebSocket satisfy this.
Properties
Methods
send()
Parameters
| Parameter | Type |
|---|---|
data | string | Blob | ArrayBufferLike | ArrayBufferView<ArrayBufferLike> |
Returns
void
close()
Parameters
| Parameter | Type |
|---|---|
code? | number |
reason? | string |
Returns
void
addEventListener()
Parameters
| Parameter | Type |
|---|---|
type | string |
listener | (event) => void |
Returns
void
removeEventListener()
Parameters
| Parameter | Type |
|---|---|
type | string |
listener | (event) => void |
Returns
void
Signal
A single social signal detected over a span of the analyzed media.Properties
| Property | Type | Description |
|---|---|---|
type | SignalType | - |
start | number | Start time in seconds. |
end | number | End time in seconds. |
probability | Probability | null | - |
rationale | string | null | - |
EngagementStateEntry
A contiguous stretch of media labeled with a single engagement state.Properties
| Property | Type |
|---|---|
state | EngagementLevel |
start | number |
end | number |
ConversationQualityValues
The five conversation-quality dimension scores plus their mean (0–100).Properties
ConversationQualityTimelineEntry
Conversation-quality scores for one window of the timeline.Properties
| Property | Type |
|---|---|
start | number |
end | number |
values | ConversationQualityValues |
ConversationQuality
Overall and time-varying conversation-quality scores.Properties
| Property | Type |
|---|---|
overall | ConversationQualityValues |
timeline | ConversationQualityTimelineEntry[] |
InteractionFeedback
Structured interaction feedback returned by the coach model.Properties
| Property | Type |
|---|---|
type | FeedbackType |
message? | string | null |
active_dimensions? | GoalDimension[] |
primary_signal? | SignalType | null |
reason? | string | null |
AnalysisResult
The full report returned byPOST /v1/upload/analyze.
Properties
| Property | Type |
|---|---|
signals | Signal[] |
engagement_state | EngagementStateEntry[] |
feedback? | InteractionFeedback | null |
conversation_quality? | ConversationQuality | null |
AnalyzeUploadInput
Arguments for UploadClient.analyze.Properties
| Property | Type | Description |
|---|---|---|
file | VideoInput | The video file to analyze (mp4/avi/mov/mkv/mpeg-ts/webm, ≥3s, ≤32MB). |
filename? | string | Filename used when file is a Blob without a name. Defaults to "video". |
include? | IncludeFlag[] | Optional response sections to include. When omitted, conversation-quality scores are not returned. |
goalDimensions? | GoalDimension[] | Optional goal dimensions for this interaction. Supplying at least one triggers interaction feedback. Ignored when conversationContext is set. |
conversationContext? | string | Optional free-text scenario description. When set, it is the sole source of context for feedback generation and goalDimensions is ignored. |
signal? | AbortSignal | Optional AbortSignal to cancel the request. |
UploadClientOptions
Options for constructing an UploadClient.Properties
| Property | Type | Description |
|---|---|---|
tokenProvider | TokenProvider | Supplies the bearer token attached to each request. |
baseUrl? | string | Explicit base URL (e.g. http://localhost:8080). Overrides environment. |
environment? | Environment | Named environment to target. Defaults to "production". |
fetch? | { (input, init?): Promise<Response>; (input, init?): Promise<Response>; } | Custom fetch implementation. Defaults to the global fetch. |
Type Aliases
Environment
RealtimeClientOptions
AnalysisGroup
video is the Inter-1
social-signal analysis, visual the visual-signals track, and audio the
audio tracks.
RealtimeFeedbackFrequency
high =
every 10 seconds, medium = every 20 seconds, low = every 30 seconds.
Only takes effect once realtime_feedback_instructions has enabled feedback.
RealtimeEvent
VideoChunk
Listener
on/once.
Type Parameters
| Type Parameter |
|---|
T |
Parameters
| Parameter | Type |
|---|---|
payload | T |
Returns
void
StreamClientOptions
StreamEvent
WebSocketFactory
Parameters
| Parameter | Type |
|---|---|
url | string |
protocols? | string | string[] |
Returns
WebSocketLike
ScopeValue
SignalType
Probability
EngagementLevel
GoalDimension
IncludeFlag
FeedbackType
VideoInput
Blob/File (browsers, or Node 18+ where
Blob is global) or raw bytes plus a filename.
Union Members
Blob
Type Literal
data
filename?
"clip.mp4".
contentType?
"video/mp4".
Variables
HTTP_BASE_URLS
AnalysisGroup
Type Declaration
Video
Visual
Audio
RealtimeFeedbackFrequency
Type Declaration
High
Medium
Low
WS_READY_STATE
readyState constants, mirrored from the WHATWG WebSocket spec.
Type Declaration
CONNECTING
OPEN
CLOSING
CLOSED
Scope
Type Declaration
Upload
POST /v1/upload/analyze.
Stream
WS /v1/stream/analyze.
Realtime
WS /v0/realtime/analyze.
GoalDimension
Type Declaration
Clarity
Authority
Energy
Rapport
Learning
IncludeFlag
Type Declaration
ConversationQualityOverall
ConversationQualityTimeline
Functions
resolveHttpBaseUrl()
baseUrl takes precedence (use it to point at a local server, e.g.
http://localhost:8080); otherwise the named environment is used,
defaulting to production. The returned URL never has a trailing slash.
Parameters
| Parameter | Type |
|---|---|
options | { baseUrl?: string; environment?: Environment; } |
options.baseUrl? | string |
options.environment? | Environment |
Returns
string
httpToWsBaseUrl()
https→wss,
http→ws. Any path on the base URL is preserved (so a proxy mount
point survives), with the trailing slash trimmed.
Parameters
| Parameter | Type |
|---|---|
httpBaseUrl | string |
Returns
string