# Connect clients (/connect)

A Cuelo server exposes the agent, your own routes and the dashboard on **one
port** (4141 by default). Pick the entry point that fits your client:

<ConnectDiagram />

| You're building…                     | Use                                              | Page                                                            |
| ------------------------------------ | ------------------------------------------------ | --------------------------------------------------------------- |
| A web or mobile app with a mic       | `/v1/realtime`, the OpenAI Realtime protocol     | [Realtime API](/connect/realtime-api)                           |
| Something already on OpenAI Realtime | the same: change the base URL                    | [Realtime API](/connect/realtime-api)                           |
| A phone line (Twilio, SIP, Plivo)    | a WebSocket route in `src/api.py` bridging media | [Custom endpoints](/connect/custom-endpoints)                   |
| A simple device or test client       | `/v1/pcm`: raw PCM in and out, events as JSON    | [Custom endpoints](/connect/custom-endpoints#the-pcm-websocket) |
| Server-side control of live calls    | your own HTTP routes using `harness.sessions`    | [Custom endpoints](/connect/custom-endpoints)                   |

## What every client gets [#what-every-client-gets]

- **Audio both ways as PCM16 mono at 24 kHz.** The engine resamples for each
  provider.
- **Cuelo's turn-taking.** Clients stream audio continuously and the server
  decides when to speak, stop and backchannel. No client-side VAD is needed.
- **Events.** Transcripts, turn decisions, tool calls and latency marks stream
  to the client as they happen.
- **One rule:** when the agent is interrupted, drop any audio you haven't
  played yet.

## Securing it [#securing-it]

On anything but localhost, set API keys. The server refuses to start on a
public host without one. Browsers pass the key as a WebSocket subprotocol. See
[Security](/ship/security).