Skip to main content
Routing is either managed ("auto", "stt/auto", "tts/auto", "s2s/auto" — every eligible model is ranked, with automatic fallbacks) or pinned to an exact owner/model slug (no fallbacks unless you set provider.allow_fallbacks). Constrain a single request with provider:
Billed in Naive credits from the cost each request reports — by audio duration for transcription, input characters for synthesis, and audio seconds for conversations. Catalog and usage reads are free. Per-user and AccountKit-gated like other primitives (naive.forUser(id).audio). See the Audio primitive guide for the full parameter reference, the feature values that steer managed routing, and error handling.
feature is case-sensitive and valid only on tts/auto / s2s/auto with voice: "auto". Pinned models reject it — native voice ids aren’t portable, so a managed route can’t honor them.
audio is opt-in. Enable it on the Account Kit first, or every call returns 403 forbidden (primitive_disabled_by_kit, or subprocessor_consent_required on an older kit with no audio entry). See Audio → Multi-tenant.Naive also applies two defaults you should know about: requests are pinned to provider.region = ["us","global"], and transcription sets retention (none for sync, transcript for async). Both are overridden by anything you pass explicitly.