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.