Name mapping
| Legacy | Canonical Dialt name | Compatibility |
|---|---|---|
ck_... | dk_... for newly issued keys | Existing keys remain valid. |
CONVERSE_API_KEY | DIALT_API_KEY | Environment fallback remains temporary. |
@trelis/converse | @dialt/sdk 0.41.0 | Install the Dialt package for updates. |
ConverseClient | DialtClient | Removed. |
mode.kind: 'converse' | mode.kind: 'dialt' | Rejected. |
converse-sdk | dialt-sdk 0.33.0 | The final bridge remains installable. |
converse_sdk | dialt | Legacy imports emit a deprecation warning. |
ConverseError, ConverseMode, ConverseSession | DialtError, DialtMode, DialtSession | Removed. |
https://converse.trelis.com | https://dialt.com | HTTP redirects permanently with method preservation. |
wss://converse.trelis.com/ws | wss://api.dialt.com/v1/realtime | Removed. Connect to the canonical URL. |
wss://dialt.com/ws | wss://api.dialt.com/v1/realtime | Removed. Connect to the canonical URL. |
Alpha API cleanup
Remove flow, raw-assist research controls, vendor relay configuration and ambience.
Only mode.kind: 'dialt' is supported. Use brain: 'smart'
instead of 'genius', dialt-smart instead of the retired eval target dialt-genius, and recorded_bridge instead of
wait_for_tool. The later expected_duration field remains a deprecated compatibility alias. Use DialtMode instead of SessionMode.
Python mode configuration is keyword-only.
Reset now ends the old conversation and opens a new logical session with a fresh UUID.
Browser await client.reset() retains capture and selected configuration.
Python returns a new object: session = await session.reset().
Direct protocol clients close and reconnect without a resume token; there is no reset frame.
Application-owned tasks remain the application's responsibility.
Instructions are required
From Browser SDK 0.49.0 and Python SDK 0.41.0, every session sets mode.instructions. The platform prompt no longer says "You are a voice assistant on a phone call" or tells the agent to ask a clarifying question; the agent's role comes only from your instructions. A fresh start without non-empty instructions fails with the nonretryable error code missing_instructions and closes with 1008, and both SDKs refuse such a mode before connecting. To keep the previous behaviour, pass You are a helpful voice assistant on a phone call. If a request is missing a key detail, ask one concise clarifying question. Eval case targets and simulators also need instructions. See assistant instructions.
Browser
npm remove @trelis/converse
npm install @dialt/sdk
import { DialtClient } from '@dialt/sdk';
const client = new DialtClient({
url: 'wss://api.dialt.com/v1/realtime',
mode: {
kind: 'dialt',
instructions: 'You are a helpful voice assistant on a phone call. If a request is missing a key detail, ask one concise clarifying question.',
},
});
Use the canonical Browser SDK guide for new integrations. It covers secure scoped credentials, SDK and AudioWorklet loading, microphone lifecycle, and input selection.
Python
uv remove converse-sdk
uv add dialt-sdk
from dialt import DialtMode, DialtSession
Credentials and endpoints
DIALT_API_KEY=dk_your_key
Mint browser credentials with
POST https://api.dialt.com/v1/session-keys. Do not rely on an HTTP redirect
for credential creation. Keep persistent keys out of browser JavaScript.
Versioned public API
Machine requests use https://api.dialt.com. Browser SDK 0.41.0 and Python SDK 0.33.0 are the oldest releases that default to the canonical API; pass the base URL shown here to use another deployment. The legacy machine routes below are removed; upgrade older SDKs.
POST /api/v1/session-keysis removed; usePOST /v1/session-keys./api/app/evals/...is removed; use/v1/evals/.... Collections use{results, next, has_more}with an optional opaque signedcursorand optionallimitfrom 1 through 100 (default 50). Follownextverbatim; there is no page, count or previous field. Cases, suites and runs are ordered by descendingcreated_at, then UUID. Malformed or mismatched cursors return structured 400 errors.DELETE /v1/evals/runs/{uuid}deletes a finished run and its results. Active runs return 409; cancel and wait first. Python clients can useevals.delete_run(run_id). Creation retry keys remain reserved after deletion, so replay returns 409./api/app/sessionslists recording rows. The new/v1/sessionslists logical calls; read a call's segments at/v1/sessions/{uuid}/segments.
The ID copied from a current recording on the Sessions dashboard is its logical session UUID,
accepted by GET /v1/sessions/{uuid}. Historical recordings without a known
parent have no copyable public session ID; their trace URLs still use segment UUIDs.
A session keeps its server UUID across successful reconnects and transfers. Each recording-row UUID identifies one segment, which can contain many turns. Client session_id is a correlation value, not unique call identity. Historical recordings without logical session identity remain available in the dashboard; the API does not guess their membership.
App routes under /api/app accept only the signed-in dashboard session, never an API key. Keep browser login, account and dashboard requests on dialt.com; persistent API keys belong on your backend and the API origin.
Compatibility policy
The warning-bearing releases provide a migration window. Dialt will announce a specific removal version before deleting legacy aliases. Existing persistent keys are not invalidated by the SDK migration.