Skip to main content

Overview

Batch jobs allow you to process multiple TTS synthesis requests asynchronously. This is ideal for bulk audio generation, podcast production, or dataset creation.

Creating a Batch Job

const job = await client.ttsGeneration.batchSynthesizeV1TtsBatchPost({
  items: [
    { speakerId: "speaker-1", text: "First sentence." },
    { speakerId: "speaker-2", text: "Second sentence." },
    { speakerId: "speaker-3", text: "Third sentence." },
  ],
});

console.log(job.jobId);
// "job_abc123xyz"

Job Status

Track job progress:
const status = await client.jobs.getJobV1JobsJobIdGet({
  jobId: "job_abc123xyz",
});

console.log(status);
// {
//   job_id: "job_abc123xyz",
//   status: "processing",
//   progress: 67,
//   total_items: 3,
//   completed_items: 2,
//   created_at: "2024-01-15T10:30:00Z",
//   updated_at: "2024-01-15T10:31:00Z"
// }

Job States

StatusDescription
pendingJob created, waiting to start
processingCurrently generating audio
completedAll items processed successfully
failedJob failed (check error details)
partialSome items failed, others succeeded

Retrieving Results

When a job completes:
const results = await client.jobs.getJobV1JobsJobIdGet({
  jobId: "job_abc123xyz",
});

if (results.status === "completed") {
  for (const item of results.results) {
    console.log(`Speaker: ${item.speakerId}`);
    console.log(`Audio: ${item.audioUrl}`);
  }
}

Listing Jobs

View all your jobs:
const jobs = await client.jobs.listJobsV1JobsGet({
  status: "completed",  // Filter by status
  limit: 20,
  offset: 0,
});

for (const job of jobs.items) {
  console.log(`${job.job_id}: ${job.status} (${job.progress}%)`);
}

WebSocket Updates

For real-time progress updates, connect via WebSocket:
const ws = new WebSocket(`wss://api.destined.ai/ws/jobs/${jobId}`);

ws.onmessage = (event) => {
  const update = JSON.parse(event.data);
  console.log(`Progress: ${update.progress}%`);

  if (update.status === "completed") {
    console.log("Job complete!", update.results);
    ws.close();
  }
};

Best Practices

For 1-2 items, use direct synthesis. For 3+ items, batch is more efficient.
Don’t block on job completion. Use polling with exponential backoff or WebSocket for updates.
Check individual item results even when job shows “completed”. Some items may have failed.
Keep batches under 100 items for faster processing. Split larger jobs into multiple batches.