Skip to main content
Choose a configuration in this order: product → language → accent → voice → delivery → controls. Product compatibility is not implied by a voice name or by a successful request. Read the catalog, then verify the effective configuration returned by the runtime.
Download the dated JSON reference pack. It is designed for code generation and local validation; it is not a substitute for GET /v1/voices, account entitlement checks, or the Omni configured acknowledgement.

Pick a product before a language

Hear supports automatic detection only inside its published language set. Omni accepts en, es, fr, de, and hi, while its served set is currently en, es, fr, and hi; German is an English fallback. Speak catalog groups are broader, so a Speak voice must never be presented as proof that the same language works end to end in Omni.

English is a language; accent is a voice choice

Selecting en-IN does not transform an American voice into Indian English. Use an accent-specific voice ID, then listen to the exact configuration before you ship it. Evaluate names, numbers, dates, phone numbers, interruptions, and short conversational replies. Evaluate Hindi and Hinglish separately from Indian English; a catalog identifier is not a quality result.

Copy a complete Omni configuration

This is the body of a tagged 0x03 configure frame, not a REST request or a complete browser client:
voice_instruct is a delivery request, not an acoustic guarantee or an emotion enum. It is limited to 200 characters and works only on compatible tiers. Speak uses its own conditional emotion field; Cast exposes a separate capabilities response with emotion and intensity. Do not copy controls between these products. After sending configure, require the session to confirm any capabilities your application needs:

Delivery is an observed behavior

Speak stream: true means the request accepts streamed delivery. If the server returns x-pyai-stream: buffered, it completed successfully but audio was buffered before delivery. Record that mode when measuring time to first audible audio.

Launch check

  1. Query GET /v1/voices and retain the canonical ID, aliases, available_on, and delivery metadata you selected.
  2. Mint a short-lived, origin-bound browser session token on your backend; do not expose a PyAI API key in the browser.
  3. Configure Omni, wait for configured, and compare requested versus served language, voice, and tier.
  4. Start microphone capture and playback only after required configuration is active. On flush, stop local playback and clear queued audio immediately.
  5. Test microphone denial, cancellation while connecting, duplicate start/stop, language fallback, failed configuration, interruptions, tool timeout, and duplicate tool delivery.
For a customer-owned write such as booking, retain the conversation ID, tool invocation call_id, and callback-delivery identity separately. Authorize the customer tenant in the customer backend and return a durable prior result when the same invocation is delivered again. See Omni tools.

Language support

Accepted, served, and fallback language behavior.

Omni protocol

Tagged frames and the configured acknowledgement.

Browser voice agent

A complete microphone-to-playback client.

Speak

Voice catalog, delivery modes, and audio formats.