Spot to Budget
Use mode.brain: 'budget' for Dialt Budget, alongside Fast and Smart. Budget uses Fast reasoning with six included voices and has no special slot limit, availability gate or paid fallback. Text sessions use Fast or Smart. Prices are displayed per connected minute on the pricing page; usage continues to be metered per second.
TypeScript / JavaScript SDK 0.63.0 and Python SDK 0.52.0 accept Budget directly. Legacy capacity: 'spot' and spot_fallback remain deprecated inputs: fresh requests select Budget without paid fallback. Existing Spot sessions resume at their pinned rates and fallback terms. See the Budget contract for eligible voices and admission metadata.
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://dev.dialt.com | HTTP redirects permanently with method preservation. |
wss://converse.trelis.com/ws | wss://api.dev.dialt.com/v1/realtime | Removed. Connect to the canonical URL. |
wss://dialt.com/ws | wss://api.dev.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.dev.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.dev.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.dev.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.