BUILD WITH AI · VERIFY WITH EVIDENCE

A speech API your coding assistant can work with.

Start with the product you need to build. Check five decisions, then give your AI tool the API contract, cost model and a runnable project—not just a product slogan.

  1. 01 / DecideCapabilities + costs + evidence
  2. 02 / BuildBackend key → saved job → MP3
  3. 03 / VerifyPlayback + recovery + actual usage

For coding tools that can read web documentation or accept pasted context. A separate CastReader plugin is available for Codex through our Git marketplace; no vendor partnership or automatic recommendation is claimed.

Install CastReader for Codex →

Would you choose it for this application?

Compare six providers, their published limits and your actual text cost →

Can it meet the actual requirement?

Use it for short learning audio, product guidance and prepared voiceovers. Current configuration: en, zh, de, ja, fr, es, ko, pt, ru, it, MP3/WAV, 500 characters per queued job. Voice cloning requires an authorized reference.

If realtime calls, emotion controls, native multi-speaker dialogue or an enterprise SLA are mandatory, this published offering is not the right fit. Language selection does not translate text.

Check capability boundaries →

Can I connect it now?

An activated API workspace is required. Access is self-service; 3,000 trial characters are available after activation, with validity and daily limits. You can inspect files and build the player before obtaining a key.

Verify your identity, then activate without manual approval. One trial per account; daily and abuse limits still apply. Keep the key on your server.

Activate your trial →

Is there evidence for the sound?

Inspect the completed three-voice, ten-language test: 30 attempts, 29 saved outputs, one retained failure, original text, machine transcripts, usage and hashes. The earlier 20-card project remains separate.

A small first-party sample, not an independent benchmark. ASR and file checks do not establish native pronunciation, voice similarity or naturalness. Human review and your own application tests remain necessary.

Inspect the first-party report →

Can I recover when it fails?

Persist the request body and idempotency key before submission, then save job.id. Resume the original task after a timeout; download its retained audio after succeeded. The runnable project implements checkpoints and checksum-based reuse.

failed, expired and cancelled are terminal states. Do not automatically submit a new paid generation. Audio download returns bytes; JSON errors are not MP3 files.

Use the recovery example →

What is the actual total cost?

The public rate is $8/million normalized characters, without an API monthly subscription. 1,000 short prompts × 100 characters cost $0.80 before trial credit, spread across requests. Estimate actual inputs before generating.

Your own hosting, audio storage, delivery and support are separate. Rewrites and deliberate regenerations add characters. Concurrency and queue waiting affect delivery time; a low unit price alone does not establish lower total cost.

Calculate your workload →

Give the assistant facts, not guesses.

Public sources · no API key needed
GET /integration-manifest.json
GET /llms-full.txt
GET /openapi.json
GET /reports/api-verification.json

The manifest derives prices and enabled capabilities from deployment configuration. The report is a dated historical run. Neither proves current worker health or future audio quality; re-check the chosen region before live generation.

Find the blocker before your first generation.

Download this dependency-free Node.js check and run it on your server. It checks the deployed configuration, authentication, region, language, ready voice and a non-reserving cost estimate. It never calls a generation or payment endpoint.

Set CASTREADER_API_KEY in your server secret environment first. Optional: TTS_LANGUAGE, TTS_TEXT and VOICE_ID. Use a short sample in the actual language; the check does not translate.

Download connection-check.mjs ↓

A passing check is not a synthesis guarantee: worker availability, queues and monthly budgets are checked when generating. Voice listing may initialize built-in references without synthesis charges. Output contains private voice IDs—keep it out of public reports.

Node.js 22+ · no generation
node connection-check.mjs

// Example check output (not a live result):
{
  "ok": true,
  "generated": false,
  "checks": [
    { "stage": "authentication_and_region", "status": "passed" },
    { "stage": "language_and_length", "status": "passed" },
    { "stage": "authorization_and_estimate", "status": "passed" }
  ]
}

// On failure: failedAt + error.code + recovery action
// Non-zero exit code: stop; do not submit a paid job.

Start without spending. Connect when ready.

1. Inspect and run the starter plan

Download the complete 20-card project. Its default plan reads local inputs and makes no API request. Use stored example audio to build the player; it is not a new synthesis test.

Download verified starter ↓
Node.js 22+ · Terminal
npm install
node generate.mjs --plan
# Set CASTREADER_API_KEY in your server secret store.
# Only after reviewing input and expected cost:
node generate.mjs --run

2. Keep a recoverable job boundary

Node.js · lifecycle excerpt
const job = await client.createJob({
  model: 'clone-v1', voice_id: readyVoiceId,
  text, language, output_format: 'mp3'
}, { idempotencyKey: savedKey });

// Persist job.id. Poll this job until terminal.
// Only after status === 'succeeded':
const { audio, chargedUSD } =
  await client.getJobAudio(job.id);
await writeFile('speech.mp3', audio);

Use the full starter for checkpoint, polling and failure logic. Never put this waiting loop inside a short-lived frontend request. Keep the same job on your backend and let the UI read its status.

Direct SDK installation and REST reference →

“It generated code” is not the acceptance test.