Skip to content

connectOpenAi fails with server_error code 42 on 0.4.2 #321

Description

@Ekeu

Summary

stream.video.connectOpenAi(...) consistently fails with server_error code 42 when connecting an OpenAI Realtime agent to a call. I have isolated the cause: the same OpenAI API key connects directly to OpenAI's GA Realtime API without error, so the key/account/access are fine. I guess the failure is still inside Stream's /video/connect_agent → OpenAI path.

Bumping to 0.4.2 (as advised on my previous, now-closed ticket) did not change the result.

What I'm trying to do

Connect an OpenAI Realtime (speech-to-speech) agent to a Stream Video call so it joins as a participant and talks. It's triggered server-side from the call.session_started webhook: look up the meeting/agent, then call connectOpenAi.

const call = stream.video.call("default", meetingId);
const client = await stream.video.connectOpenAi({
  call,
  openAiApiKey: process.env.OPENAI_API_KEY, // sk-proj-36XU_...
  agentUserId: agent.id,
});
client.updateSession({ instructions });

No model is passed, so it defaults to gpt-realtime (GA).

Environment

  • @stream-io/node-sdk: 0.7.62
  • @stream-io/openai-realtime-api: 0.4.2
  • @stream-io/video-react-sdk: 1.39.1 (client)
  • Next.js: 16.2.10

What's failing

connectOpenAi rejects. The client only surfaces the opaque code 42:

Error: Stream connect_agent failed (code 42): Error:  code
{
  type: 'error',
  error: { type: 'server_error', code: '42', message: 'Error:  code ', param: null, event_id: '' }
}

The webhook itself is fine, signature verification passes (HTTP 200 via verifyAndParseWebhook on the raw gzipped body); the 500 comes solely from connectOpenAi.

Timeline

  1. On @stream-io/openai-realtime-api@0.4.0 → code 42.
  2. Support (previous ticket) said bump to 0.4.2; the ticket was closed.
  3. Bumped to 0.4.2 → still code 42, model set or unset.

Checks performed (ruling out my side)

  • API key is loaded in the route: confirmed sk-proj-36XU_..., not undefined.
  • Account: paid tier with credit.
  • Model: default gpt-realtime (GA).
  • Agent user: upserted via stream.upsertUsers([...]) at meeting creation, so the agentUserId exists as a Stream user on the call.

Decisive test: same key connects to OpenAI directly

I connected to OpenAI's GA Realtime API directly with the exact same OPENAI_API_KEY:

new WebSocket("wss://api.openai.com/v1/realtime?model=gpt-realtime", {
  headers: { Authorization: `Bearer ${OPENAI_API_KEY}` }
});

Result: WebSocket opens cleanly, no error. So the key, its Realtime access, org verification, and tier are all confirmed working outside Stream.

Conclusion

This concluded that my OpenAI credentials/access were not the problem. Should probably be coming from Stream's connect_agent backend.

Error

⨯ Error: Stream connect_agent failed (code 42): Error:  code
    at ignore-listed frames {
  type: 'error',
  error: {
    type: 'server_error',
    code: '42',
    message: 'Error:  code ',
    param: null,
    event_id: ''
  }
}
 POST /api/webhook/stream 500 in 2.0s (next.js: 121ms, proxy.ts: 11ms, application-code: 1886ms)
 POST /api/webhook/stream 200 in 514ms (next.js: 4ms, proxy.ts: 9ms, application-code: 501ms)
 ......
⨯ Error: Stream connect_agent failed (code 42): Error:  code
    at ignore-listed frames {
  type: 'error',
  error: {
    type: 'server_error',
    code: '42',
    message: 'Error:  code ',
    param: null,
    event_id: ''
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions