Developer documentation
The Dialt voice engine
Use Dialt's API and SDKs to build voice assistants, connect your tools, run evaluations and monitor conversations. To train a model on your data, contact our team.
SDKs
Choose your SDK
Keep persistent API keys on your backend. Browser and native apps connect with scoped session credentials.
npm install @dialt/sdk
Python SDKServices, telephony bridges and devices that manage their own audio.uv add dialt-sdk
Swift SDK · ExperimentalNative voice and text for macOS and iOS. Add dialt-ai/dialt-swift through Xcode’s Swift Package Manager.
For other languages and custom media stacks, use the WebSocket integration guide. See the Swift SDK’s validation notes for device coverage.
Using Pipecat? The Dialt-maintained Pipecat plugin (alpha) includes setup instructions, a minimal pipeline and supported features and limitations.
Recipes
Start from a working example
Dialt recipes are runnable application patterns built on the public SDKs. Each example includes its setup instructions. Your application owns its business rules and tool execution.
API reference
API schemas: OpenAPI · AsyncAPI. For coding agents: documentation index.
Pre-generate audio
Exact-text speech
Render fixed text as an audio file your application stores and plays itself. Call it from your backend with a persistent key.
Dialt speaks exactly what you send and keeps no copy of the text or audio. Exact-text speech is available only through POST /v1/speech; realtime session keys and WebSocket speech frames do not provide this operation.
curl https://api.dialt.com/v1/speech \
-H "Authorization: Bearer $DIALT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: cue-7f3a9c21" \
-d '{"voice": "us_female", "text": "Hold for 30 seconds, then rest 90 seconds."}' \
-o cue.wav
The response is audio/wav: mono, 24 kHz, 16-bit PCM. Send exactly one of voice, a key from GET /v1/voices, or design, the ID of one of your published Voice Designs. A voice or design private to another account is rejected with invalid_voice or invalid_design. A design contributes only its voice and delivery. There are no model, provider or tier settings.
- Limits: up to 1000 characters per request, with at least one letter or digit. Longer text returns
text_too_longand is never truncated; send long scripts as separate requests. Square and angle brackets returninvalid_textbecause they are reserved for speech markup that would drop words from the audio. - Pronunciation: Dialt does not rewrite your text. The voice reads numerals, abbreviations and punctuation as it would in a live conversation, so write out anything that must be said a particular way.
- Billing: the audio's length in whole seconds, rounded up, at half the Dialt Fast hourly rate (half of the saved Fast or Smart tier for a design), posted only after audio is produced. No language model runs. Refusals and synthesis failures are free. A retry with the same
Idempotency-Key, voice or design, and text is billed once and returnsIdempotent-Replay: true. A lost response or a503after settlement can still have been billed, so use the same key when retrying an ambiguous error. - Rates: an account can run a small number of requests at once.
429and503includeRetry-Afterand are safe to retry. A402means the account is out of credit. - Storage: store and cache the WAV yourself; every call renders again and is billed again. Responses are
private, no-store.
Evaluate and improve
Learn from conversations
Session and segment metrics.delivery and GET /v1/sessions/stats's delivery pool recording-aligned speaking delivery separately for assistant and user: speaking rate in words per minute, estimated articulation rate excluding pauses, and pause fraction. Rates use total words and total full-word span seconds across measured speech, so longer spans carry their actual weight. Coverage is explicit in aligned_segments and unavailable_segments; missing measurements are null, while measured pause-free speech has zero pause totals. The HTTP reference lists the full counts, durations and pause distribution.
Delivery covers ordinary uninterrupted English, Hindi, Portuguese, Spanish and Arabic speech with current complete alignment. Chinese characters are never reported as words per minute. Gaps at least 200 ms within speech are estimated acoustic pauses; between-turn gaps are excluded. Estimated articulation rate is a proxy and does not measure intelligibility. Older, stale or unavailable alignment contributes no delivery values. Response latency boundaries are unchanged.
Inspect transcripts, recordings and tool calls in Sessions. Use conversation evals to assess behavior and compare changes to your instructions and tools.
Start with a simulation recipe, or use the Python evals client to run your own cases.