Or jump from this list on a smaller screen.

This is a page from the Audivra documentation. Developer exportsindex: http://127.0.0.1:3000/docs/llms.txt, full corpus: http://127.0.0.1:3000/docs/llms-full.txt, OpenAPI: http://127.0.0.1:3000/docs/openapi.json, Postman: http://127.0.0.1:3000/docs/postman.json. Press ⌘K to search docs.

SDKs

Thin TypeScript and Python clients for TTS, unified generate, voices, and jobs — zero dependencies beyond fetch / stdlib.

Why a thin SDK

Audivra's differentiator is a unified voice + avatar API — one generate() call covers TTS, LLM, lip-sync, and async video. These clients wrap /api/v1/* with typed helpers; OpenAPI codegen works too — see OpenAPI reference.

Methods

MethodReturnsRoute
tts(text, options?)WAV bytesPOST /api/v1/tts
stt(audio, options?)Transcript JSONPOST /api/v1/stt
music(options)WAV bytesPOST /api/v1/music
sfx(options)WAV bytesPOST /api/v1/sfx
dub(source, options?)Queued job JSONPOST /api/v1/dub
generate(options)JSON (sync, job_id, or multipart lipsync)POST /api/v1/generate
generateBatch(items | { jsonl, dry_run })Queued jobs JSONPOST /api/v1/generate/batch
estimate(options)Credits + plan capsPOST /api/v1/estimate
getJob(jobId)Job status JSONGET /api/v1/jobs/{id}
listVoices()Voice catalog JSONGET /api/v1/voices
listClones()Clone list JSONGET /api/voices/clone
createClone(samples, options?)Queued clone + voice_idPOST /api/voices/clone
renameClone(cloneId, name)Updated clonePATCH /api/voices/clone/{id}
previewClone(cloneId)WAV bytesGET /api/v1/voices/clone/{id}/sample
deleteClone(cloneId)Slot freedDELETE /api/voices/clone/{id}
waitUntilReady(cloneId)Ready clone recordpoll GET /api/voices/clone
listDesigns()Design list JSONGET /api/voices/design
createDesign(prompt, options?)Queued design + voice_idPOST /api/voices/design
previewDesign(options)Preview WAV bytesPOST /api/voices/design/preview
deleteDesign(designId)Slot freedDELETE /api/voices/design/{id}
waitUntilDesignReady(designId)Ready design recordpoll GET /api/voices/design
remixVoice(parentId, options)Queued remix + voice_idPOST /api/v1/voices/{id}/remix
listCommunityVoices(query?)Marketplace listingsGET /api/v1/voices/community
acquireCommunityVoice(listingId)Usage grantPOST /api/v1/voices/community/{id}
publishClone(cloneId, options)Published listingPOST /api/voices/clone/{id}/publish
reviewCommunityVoice(listingId, options)ReviewPOST /api/v1/voices/community/{id}/reviews
listCommunityReviews(listingId)ReviewsGET /api/v1/voices/community/{id}/reviews

TypeScript

Source: sdk/typescript/ — zero runtime dependencies (uses fetch).

sdk/typescript
import { Audivra } from "./sdk/typescript";

const client = new Audivra({
  apiKey: process.env.AUDIVRA_API_KEY!,
  baseUrl: "http://127.0.0.1:3000",
});

// TTS — regional voices e.g. zuri-sw, amara-ha
const wav = await client.tts("Habari from Audivra", { voice_id: "zuri-sw" });

// Unified generate — voice + avatar in one call
const result = await client.generate({
  text: "Welcome to our product launch.",
  voice_id: "zuri-sw",
  avatar_id: "studio-host",
});

if ("job_id" in result) {
  const job = await client.getJob(String(result.job_id));
  console.log(job.status);
}

Python

Source: sdk/python/ — stdlib only (urllib).

Install
pip install ./sdk/python

# or copy audivra/ into your project
sdk/python
from audivra import Audivra, AudivraError

client = Audivra(api_key="sk_live_…", base_url="http://127.0.0.1:3000")

try:
    wav = client.tts("Habari from Audivra", voice_id="zuri-sw")
    with open("out.wav", "wb") as f:
        f.write(wav)

    job = client.generate(
        text="Welcome to our launch.",
        voice_id="zuri-sw",
        avatar_id="studio-host",
    )
    if "job_id" in job:
        print(client.get_job(job["job_id"]))
except AudivraError as e:
    print(e.status, e)  # 402 quota · 429 rate limit

Errors & limits

Clients surface HTTP errors as AudivraError with status 401/402/429/502. See errors reference and limits reference. Responses include X-Audivra-Api-Version: 1.