Optional afterConnection age after which the first end of speech opens the next connection.
3_300_000 (55 minutes)
Optional deadlineConnection age at which the next connection opens whatever is being said.
3_480_000 (58 minutes)
Optional overlapLeast time both connections receive the same audio.
3_000
Optional hardConnection age at which an old connection still in speech is committed and drained, and at which a connection whose rollover was refused, or has not opened its next connection yet, ends the session. Keep it under the provider's 60-minute limit.
3_570_000 (59.5 minutes)
Optional matchSlack, in milliseconds, when matching an utterance of the new connection to one of the old.
500
Optional approveCalled before a rollover opens the next connection. Resolve false, or
throw, to refuse it: the session keeps its current connection until
hardStopMs, finishes the items it holds, and closes. An answer that has
not come by hardStopMs counts as a refusal, and a later one opens
nothing. It is a policy check beside the funding: a host that pays for
audio per connection reserves each one, rollovers included, through
StreamingSTTConfig.connectionHooks.authorize, keyed by the connection's
connectionId rather than this numeric index.
When and how a session moves to a new connection before OpenAI's session limit (60 minutes for a Realtime session). Ages are counted from the moment a connection's session update was confirmed.
With server turn detection, a connection older than
afterMsopens the next one at its first end of speech, or atdeadlineMswhatever is being said. Both connections receive the same audio for at leastoverlapMs; the old one keeps receiving audio until it is between utterances (or untilhardStopMs, when its buffer is committed), finishes the items it holds and closes. An utterance both connections transcribed is emitted once: from the old connection, or from the new one when the old connection's transcription of it fails, comes back empty or never arrives. The new connection's interim text for utterances that began while the old one was open is not emitted. With client commits (turnDetection: null) the switch happens at the firstflush()afterafterMs, or with a commit atdeadlineMs, and the connections do not overlap.