SpyBara
Go Premium

Documentation 2026-05-18 22:01 UTC to 2026-05-19 11:58 UTC

2 files changed +85 −2. View all changes and history on the product overview
2026
Fri 29 06:38 Thu 28 06:37 Wed 27 06:42 Sun 24 06:25 Fri 22 06:33 Thu 21 06:36 Wed 20 06:35 Tue 19 11:58 Mon 18 22:01 Thu 14 21:00 Tue 12 18:57 Thu 7 21:57 Wed 6 00:01 Tue 5 23:00 Sat 2 05:57
Details

17 17 

18## What is ChatGPT developer mode18## What is ChatGPT developer mode

19 19 

20ChatGPT developer mode is a beta feature that provides full Model Context Protocol (MCP) client support for all tools, both read and write. It's powerful but dangerous, and is intended for developers who understand how to safely configure and test apps. When using developer mode, watch for [prompt injections and other risks](https://developers.openai.com/api/docs/mcp), model mistakes on write actions that could destroy data, and malicious MCPs that attempt to steal information.20ChatGPT developer mode provides full Model Context Protocol (MCP) client support for all tools, both read and write. It's powerful but dangerous, and is intended for developers who understand how to safely configure and test apps. When using developer mode, watch for [prompt injections and other risks](https://developers.openai.com/api/docs/mcp), model mistakes on write actions that could destroy data, and malicious MCPs that attempt to steal information.

21 21 

22## How to use22## How to use

23 23 

24- **Eligibility:** Available in beta to Pro, Plus, Business, Enterprise and Education accounts on the web.24- **Eligibility:** Available to Pro, Plus, Business, Enterprise, and Education accounts on the web.

25- **Enable developer mode:** Go to [**Settings → Apps**](https://chatgpt.com/#settings/Connectors) → [**Advanced settings → Developer mode**](https://chatgpt.com/#settings/Connectors/Advanced).25- **Enable developer mode:** Go to [**Settings → Apps**](https://chatgpt.com/#settings/Connectors) → [**Advanced settings → Developer mode**](https://chatgpt.com/#settings/Connectors/Advanced).

26- **Create Apps from MCPs:**26- **Create Apps from MCPs:**

27 - Open [ChatGPT Apps settings](https://chatgpt.com/#settings/Connectors).27 - Open [ChatGPT Apps settings](https://chatgpt.com/#settings/Connectors).

Details

178```178```

179 179 

180 180 

181## Close a WebSocket session

182 

183When your source stream ends, send a [`session.close`](https://developers.openai.com/api/reference/resources/realtime/translation-client-events#session-close) event before closing the WebSocket. The event tells the service to flush pending input audio, emit any remaining translated audio and transcript output, and then send a `session.closed` event. The `session.close` event is only supported for translation sessions.

184 

185After you send `session.close`, stop appending audio and continue reading events in your normal receive loop until you receive `session.closed`. Closing the socket immediately can drop translated output still draining from the session.

186 

187Close a translation session

188 

189```javascript

190let translationSessionClosing = false;

191 

192function closeTranslationSession() {

193 if (translationSessionClosing) {

194 return;

195 }

196 

197 translationSessionClosing = true;

198 ws.send(

199 JSON.stringify({

200 type: "session.close",

201 })

202 );

203}

204 

205ws.on("message", (data) => {

206 const event = JSON.parse(data);

207 

208 if (event.type === "session.output_audio.delta") {

209 playPcm16(event.delta);

210 }

211 

212 if (event.type === "session.output_transcript.delta") {

213 process.stdout.write(event.delta);

214 }

215 

216 if (event.type === "session.input_transcript.delta") {

217 updateSourceTranscript(event.delta);

218 }

219 

220 if (event.type === "session.closed") {

221 ws.close();

222 }

223});

224 

225// Call this when the source stream ends.

226closeTranslationSession();

227```

228 

229```python

230translation_session_closing = False

231 

232 

233def close_translation_session():

234 global translation_session_closing

235 if translation_session_closing:

236 return

237 

238 translation_session_closing = True

239 ws.send(json.dumps({"type": "session.close"}))

240 

241 

242# Call this when the source stream ends.

243close_translation_session()

244 

245while True:

246 event = json.loads(ws.recv())

247 

248 if event["type"] == "session.output_audio.delta":

249 play_pcm16(event["delta"])

250 

251 if event["type"] == "session.output_transcript.delta":

252 print(event["delta"], end="", flush=True)

253 

254 if event["type"] == "session.input_transcript.delta":

255 update_source_transcript(event["delta"])

256 

257 if event["type"] == "session.closed":

258 ws.close()

259 break

260```

261 

262 

181## Build listen-along translation263## Build listen-along translation

182 264 

183Use listen-along translation when one source speaker or stream needs translated audio for an audience. Examples include livestreams, conference talks, webinars, earnings calls, lectures, and videos.265Use listen-along translation when one source speaker or stream needs translated audio for an audience. Examples include livestreams, conference talks, webinars, earnings calls, lectures, and videos.


237- Choose WebRTC for browser media and WebSockets for server media.319- Choose WebRTC for browser media and WebSockets for server media.

238- Use the dedicated `/v1/realtime/translations` endpoint.320- Use the dedicated `/v1/realtime/translations` endpoint.

239- Stream audio continuously, including silence between phrases.321- Stream audio continuously, including silence between phrases.

322- Use `session.close` and wait for `session.closed` before closing a WebSocket session.

240- Keep speaker tracks separate for conversational translation.323- Keep speaker tracks separate for conversational translation.

241- Use one session per output language.324- Use one session per output language.

242- Render both source and target transcripts when useful.325- Render both source and target transcripts when useful.