Control Plane | Hume API

EVI Control Plane

The EVI control plane is a configuration and orchestration API that works alongside your active Chat’s data plane. The reference Chat connection is the data plane that carries live audio and assistant responses. The control plane lets you change how the session runs and observe it in real time, so you can update session settings, rotate provider keys, and attach mirrors from trusted servers without exposing secrets or disrupting the live stream.

Looking for sample code?

Visit our examples below to see how the control plane is consumed in practice.

Python Example
See the control plane API used to observe an active Chat in Python.
Python Example Code

Next.js Example
See the control plane implemented in our Next.js quickstart to securely set a supplemental LLM API key.
Next.js Example Code

When to use the control plane

Use the control plane when you:

Before you start

Endpoints (control plane)

Endpoint Purpose
WSS /chat/:chatId/connect Attach a secondary connection; receive full history on connect, then live events; bi-directional for non-audio
POST /chat/:chatId/send Post messages to an active chat.

See the API reference for full schemas and parameter details.

Connect to an existing chat

Use WSS /v0/evi/chat/:chatId/connect to attach a secondary connection to a running Chat.

The socket is bi-directional for non-audio (sending audio_input is not permitted). On connect you receive the full session history, then live events in real time, using the same event schema as the reference Chat socket.

You can only connect to a Chat that is currently active. Use the chat history APIs to fetch transcripts for past sessions instead.

Use cases

See sample requests below

TypeScript

import { HumeClient } from "hume";

const hume = new HumeClient({ apiKey: process.env.HUME_API_KEY! });

export async function connectControlPlane(chatId: string) {
  const socket = await hume.empathicVoice.controlPlane.connect({
    chatId
  });

// history is replayed first, then live events
  socket.on("message", (event) => {
    console.log("[control-plane]", event);
  });

// optional lifecycle hooks
  socket.on("open", () => console.log("Control plane connected"));
  socket.on("close", () => console.log("Control plane closed"));

return socket;
}

Post messages to an active chat

Use POST /v0/evi/chat/:chatId/send to send control messages to the active chat.

You can send any message type that the Chat accepts, except audio_input. This includes updating session settings and any other publish messages supported by EVI.

Use cases

See sample requests below:

cURL

curl "https://api.hume.ai/v0/evi/chat/<CHAT_ID>/send" \
  -H "X-Hume-Api-Key: $HUME_API_KEY" \
  --json '{
    "type": "session_settings",
    "language_model_api_key": "<SUPPLEMENTAL_LLM_KEY>"
  }'