Skip to main content

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 after expires_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
Returns
AuthClient

Methods

createToken()
Mint an access token for the given credentials and scopes.
Parameters
Returns
Promise<TokenResponse>
Throws
when the credentials are invalid (401), lack a requested scope (403), or the request is otherwise rejected.
createClientToken()
Mint a short-lived, capped client token for direct browser use. Call this from your backend with your API key; the returned token is safe to hand to a browser to call the upload, stream, or real-time endpoints directly. It grants the requested scopes (default 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
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()
Revoke a previously minted client token. Call this from your backend with the same API key that minted the token. Once revoked, the token is rejected on new requests and any live streaming session it opened is torn down on its next chunk. Revoking an already-expired token is a harmless no-op.
Parameters
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
Returns
StaticTokenProvider

Methods

getToken()
Return a currently-valid bearer token, minting/refreshing as needed.
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
Returns
TokenManager

Methods

getToken()
Return a valid bearer token, minting or refreshing transparently.
Returns
Promise<string>
Implementation of
TokenProvider.getToken
invalidate()
Drop any cached token so the next getToken mints a fresh one.
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
Returns
InterhumanClient

Properties

Methods

stream()
Create a new StreamClient for a live analysis session. Each call returns a fresh client (one per WebSocket session); register handlers and then call connect().
Returns
StreamClient
realtime()
Create a new RealtimeClient for a real-time multi-track analysis session (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()
Return a currently-valid bearer token (minting/refreshing as needed).
Returns
Promise<string>

InterhumanError

Base class for every error the SDK throws.

Extends

  • Error

Extended by

Constructors

Constructor
Parameters
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
Returns
InterhumanApiError
Overrides
InterhumanError.constructor

Properties


InterhumanConfigError

A configuration/usage error caught before any network call. Stream error 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
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 the requestClose() 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
Returns
RealtimeClient
Overrides
SessionSocketClient.constructor

Properties

Accessors

isOpen
Get Signature
Whether the underlying socket is open.
Returns
boolean
Inherited from
SessionSocketClient.isOpen

Methods

sendTranscript()
Send (or replace) the caller-supplied transcript as a 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
Returns
void
on()
Subscribe to an event. Returns an unsubscribe function. Use a specific envelope type (e.g. "signal.detected"), "message" for every envelope, or a lifecycle event ("open", "close", "socketError").
Type Parameters
Parameters
Returns
() => void
Inherited from
SessionSocketClient.on
off()
Unsubscribe a previously registered handler.
Type Parameters
Parameters
Returns
void
Inherited from
SessionSocketClient.off
once()
Subscribe to the next occurrence of an event, then auto-unsubscribe.
Type Parameters
Parameters
Returns
() => void
Inherited from
SessionSocketClient.once
connect()
Open the connection and resolve once it is established. Rejects if the connection closes or errors before opening (e.g. invalid credentials).
Returns
Promise<void>
Inherited from
SessionSocketClient.connect
waitForSessionReady()
Wait for the 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()
Send a chunk of WebM or fragmented-MP4 video as a binary frame.
Parameters
Returns
void
Inherited from
SessionSocketClient.sendVideo
updateConfig()
Send (or replace) the session config. Each frame fully replaces the active config; the server acknowledges with a session.updated envelope.
Parameters
Returns
void
Inherited from
SessionSocketClient.updateConfig
requestClose()
Request a graceful end-of-analysis shutdown (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()
Close the connection immediately, without the graceful drain handshake.
Parameters
Returns
void
Inherited from
SessionSocketClient.close
sendJson()
Send an arbitrary JSON payload as a text frame.
Parameters
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

Constructors

Constructor
Parameters
Returns
SessionSocketClient<TEventMap, TConfig>

Properties

Accessors

isOpen
Get Signature
Whether the underlying socket is open.
Returns
boolean

Methods

on()
Subscribe to an event. Returns an unsubscribe function. Use a specific envelope type (e.g. "signal.detected"), "message" for every envelope, or a lifecycle event ("open", "close", "socketError").
Type Parameters
Parameters
Returns
() => void
off()
Unsubscribe a previously registered handler.
Type Parameters
Parameters
Returns
void
once()
Subscribe to the next occurrence of an event, then auto-unsubscribe.
Type Parameters
Parameters
Returns
() => void
connect()
Open the connection and resolve once it is established. Rejects if the connection closes or errors before opening (e.g. invalid credentials).
Returns
Promise<void>
waitForSessionReady()
Wait for the 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()
Send a chunk of WebM or fragmented-MP4 video as a binary frame.
Parameters
Returns
void
updateConfig()
Send (or replace) the session config. Each frame fully replaces the active config; the server acknowledges with a session.updated envelope.
Parameters
Returns
void
requestClose()
Request a graceful end-of-analysis shutdown (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()
Close the connection immediately, without the graceful drain handshake.
Parameters
Returns
void
sendJson()
Send an arbitrary JSON payload as a text frame.
Parameters
Returns
void

StreamClient

A typed client over the stream 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 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
Returns
StreamClient
Overrides
SessionSocketClient.constructor

Properties

Accessors

isOpen
Get Signature
Whether the underlying socket is open.
Returns
boolean
Inherited from
SessionSocketClient.isOpen

Methods

on()
Subscribe to an event. Returns an unsubscribe function. Use a specific envelope type (e.g. "signal.detected"), "message" for every envelope, or a lifecycle event ("open", "close", "socketError").
Type Parameters
Parameters
Returns
() => void
Inherited from
SessionSocketClient.on
off()
Unsubscribe a previously registered handler.
Type Parameters
Parameters
Returns
void
Inherited from
SessionSocketClient.off
once()
Subscribe to the next occurrence of an event, then auto-unsubscribe.
Type Parameters
Parameters
Returns
() => void
Inherited from
SessionSocketClient.once
connect()
Open the connection and resolve once it is established. Rejects if the connection closes or errors before opening (e.g. invalid credentials).
Returns
Promise<void>
Inherited from
SessionSocketClient.connect
waitForSessionReady()
Wait for the 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()
Send a chunk of WebM or fragmented-MP4 video as a binary frame.
Parameters
Returns
void
Inherited from
SessionSocketClient.sendVideo
updateConfig()
Send (or replace) the session config. Each frame fully replaces the active config; the server acknowledges with a session.updated envelope.
Parameters
Returns
void
Inherited from
SessionSocketClient.updateConfig
requestClose()
Request a graceful end-of-analysis shutdown (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()
Close the connection immediately, without the graceful drain handshake.
Parameters
Returns
void
Inherited from
SessionSocketClient.close
sendJson()
Send an arbitrary JSON payload as a text frame.
Parameters
Returns
void
Inherited from
SessionSocketClient.sendJson

UploadClient

Analyzes a complete video file and returns a single report. The request is sent as multipart/form-data with the bearer token attached automatically from the configured TokenProvider.

Constructors

Constructor
Parameters
Returns
UploadClient

Methods

analyze()
Analyze a video file in upload mode.
Parameters
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


TokenProvider

Anything that can supply a bearer token on demand.

Methods

getToken()
Return a currently-valid bearer token, minting/refreshing as needed.
Returns
Promise<string>

TokenManagerOptions

Options for a TokenManager.

Properties


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 for POST /v1/auth.

Extends

Properties


TokenResponse

Response body from POST /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


ClientTokenResponse

Response body from POST /v1/client_tokens.

Properties


RevokeClientTokenRequest

Request for revoking a client token (POST /v1/client_tokens/revoke).

Extends

Properties


InterhumanClientOptions

Options for constructing an InterhumanClient.

Properties


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 a session.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


TranscriptUpdatedFrame

The inbound transcript.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


RealtimeSessionReadyConfigOptions

Supported real-time session-config options advertised on session.ready. Unlike the stream options, only the real-time controls appear here — never the stream include / goal_dimensions options.

Properties


RealtimeSessionReadyData

session.ready payload — the same connection-level limits as the stream session.ready, with the real-time supported-config options.

Properties


RealtimeSessionReadyEvent

Fields shared by every server→client envelope.

Extends

Properties


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


RealtimeSessionUpdatedEvent

Fields shared by every server→client envelope.

Extends

Properties


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


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


RealtimeEventMap

Event payloads keyed by event name, for the typed on/off surface of the real-time client. The envelope types map to their envelope objects; the remaining keys are client-level lifecycle events.

Properties


SessionSocketClientOptions

Options shared by every WebSocket session client.

Properties


SessionSocketEventMapBase

The lifecycle and wildcard events every session event map carries, alongside its protocol-specific envelope type keys. TEvent is the protocol’s envelope union and TReady its session.ready envelope.

Type Parameters

Properties


StreamEnvelopeBase

Fields shared by every server→client envelope.

Extended by

Properties


SessionReadyConfigOptions

Supported session-config options advertised on session.ready.

Properties


SessionReadyData

session.ready payload — session limits and supported config.

Properties


SessionReadyEvent

Fields shared by every server→client envelope.

Extends

Properties


SessionUpdatedData

session.updated payload — consolidated config after a config frame applied.

Properties


SessionUpdatedEvent

Fields shared by every server→client envelope.

Extends

Properties


SessionClosingData

session.closing payload — the graceful-close drain contract.

Properties


SessionClosingEvent

Acknowledges a caller-initiated session.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


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


SignalDetectedData

Properties


SignalDetectedEvent

Fields shared by every server→client envelope.

Extends

Properties


SignalUpdatedData

Properties


SignalUpdatedEvent

Fields shared by every server→client envelope.

Extends

Properties


SignalEndedData

Properties


SignalEndedEvent

Fields shared by every server→client envelope.

Extends

Properties


EngagementUpdatedData

Properties


EngagementUpdatedEvent

Fields shared by every server→client envelope.

Extends

Properties


ConversationQualityUpdatedData

Properties


ConversationQualityUpdatedEvent

Fields shared by every server→client envelope.

Extends

Properties


FeedbackGeneratedData

Properties


FeedbackGeneratedEvent

Fields shared by every server→client envelope.

Extends

Properties


CoverageDroppedRange

A contiguous range of media skipped under backpressure (not billed).

Properties


CoverageDroppedData

Properties


CoverageDroppedEvent

Fields shared by every server→client envelope.

Extends

Properties


StreamErrorData

Properties


StreamErrorEvent

Fields shared by every server→client envelope.

Extends

Properties


StreamSessionConfig

Client-to-server session config (sent as a JSON text frame).

Properties


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 with session.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 typed on/off surface. The twelve envelope types map to their envelope objects; the remaining keys are client-level lifecycle events.

Properties


WebSocketLike

The subset of the WHATWG WebSocket interface the SDK relies on. Both the browser WebSocket and Node 22+‘s global WebSocket satisfy this.

Properties

Methods

send()
Parameters
Returns
void
close()
Parameters
Returns
void
addEventListener()
Parameters
Returns
void
removeEventListener()
Parameters
Returns
void

Signal

A single social signal detected over a span of the analyzed media.

Properties


EngagementStateEntry

A contiguous stretch of media labeled with a single engagement state.

Properties


ConversationQualityValues

The five conversation-quality dimension scores plus their mean (0–100).

Properties


ConversationQualityTimelineEntry

Conversation-quality scores for one window of the timeline.

Properties


ConversationQuality

Overall and time-varying conversation-quality scores.

Properties


InteractionFeedback

Structured interaction feedback returned by the coach model.

Properties


AnalysisResult

The full report returned by POST /v1/upload/analyze.

Properties


AnalyzeUploadInput

Arguments for UploadClient.analyze.

Properties


UploadClientOptions

Options for constructing an UploadClient.

Properties

Type Aliases

Environment

A named Interhuman API environment.

RealtimeClientOptions

Options for constructing a RealtimeClient.

AnalysisGroup

Top-level analysis surfaces a real-time session can run. Each group maps to one or more server-side analysis tracks: video is the Inter-1 social-signal analysis, visual the visual-signals track, and audio the audio tracks.

RealtimeFeedbackFrequency

How often the feedback step runs, measured in analyzed video: high = every 10 seconds, medium = every 20 seconds, low = every 30 seconds. Only takes effect once realtime_feedback_instructions has enabled feedback.

RealtimeEvent

Discriminated union of every real-time server→client envelope.

VideoChunk

A chunk of WebM or fragmented-MP4 video to stream to the server.

Listener

An event handler registered via on/once.

Type Parameters

Parameters

Returns

void

StreamClientOptions

Options for constructing a StreamClient.

StreamEvent

Discriminated union of every server→client envelope.

WebSocketFactory

Constructs a WebSocketLike from a URL and optional subprotocols.

Parameters

Returns

WebSocketLike

ScopeValue

OAuth-style scopes an API key can carry.

SignalType

Social signal types the model can detect.

Probability

Confidence level attached to a detected signal.

EngagementLevel

Engagement state of the analyzed subject.

GoalDimension

Conversation-quality dimensions a caller can flag as a session goal.

IncludeFlag

Optional response sections the caller may request.

FeedbackType

Discriminator for the structured interaction-feedback result.

VideoInput

The video to analyze. Either a Blob/File (browsers, or Node 18+ where Blob is global) or raw bytes plus a filename.

Union Members

Blob
Type Literal
data
Raw video bytes.
filename?
Filename to report in the multipart part, e.g. "clip.mp4".
contentType?
MIME type, e.g. "video/mp4".

Variables

HTTP_BASE_URLS

HTTP base URLs per named environment.

AnalysisGroup

Named analysis-group constants.

Type Declaration

Video
Inter-1 social-signal analysis.
Visual
The visual-signals track.
Audio
The audio tracks.

RealtimeFeedbackFrequency

Named feedback-frequency constants.

Type Declaration

High
Feedback runs every 10 seconds of analyzed video.
Medium
Feedback runs every 20 seconds of analyzed video.
Low
Feedback runs every 30 seconds of analyzed video.

WS_READY_STATE

readyState constants, mirrored from the WHATWG WebSocket spec.

Type Declaration

CONNECTING
OPEN
CLOSING
CLOSED

Scope

Named scope constants.

Type Declaration

Upload
Grants access to POST /v1/upload/analyze.
Stream
Grants access to WS /v1/stream/analyze.
Realtime
Grants access to WS /v0/realtime/analyze.

GoalDimension

Named goal-dimension constants.

Type Declaration

Clarity
Authority
Energy
Rapport
Learning

IncludeFlag

Named include-flag constants.

Type Declaration

ConversationQualityOverall
ConversationQualityTimeline

Functions

resolveHttpBaseUrl()

Resolve the HTTP base URL for a client. 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

Returns

string

httpToWsBaseUrl()

Derive the WebSocket origin from an HTTP base URL: httpswss, httpws. Any path on the base URL is preserved (so a proxy mount point survives), with the trailing slash trimmed.

Parameters

Returns

string