Skip to main content
Batch processing lets you submit multiple audio files in a single API call. All jobs process concurrently. A single batch.complete webhook fires when every job is done — regardless of whether individual jobs succeeded or failed.

When to use batch vs individual jobs

Submitting a batch

Batches are JSON-only — every job must use audio_url. File uploads are not supported.
  • Minimum 1 job, maximum 20 jobs per request
  • Per-job fields: audio_url (required), language (required), align (optional, default true), review (optional, default false)

Rate limit pre-flight

The rate limit check is performed before any jobs are created. If submitting N jobs would push any window over the limit, the entire batch is rejected with 429 and no jobs are queued.
Check the X-RateLimit-Remaining-* headers on any previous response to know how much headroom you have before submitting a large batch.

Polling GET /batch/[id]

The batch status progresses through:
Poll every 15–30 seconds. For a 20-job batch, expect 2–3 minutes total. The batch finalizes as soon as the last job finishes — it does not wait the full polling budget.

Handling partial failures

A batch.complete webhook with status: "partial" means at least one job failed. The failed field tells you how many. Individual job entries in jobs[] have their own status field.
Failed jobs should be resubmitted individually via POST /transcribe. The batch endpoint requires at least 1 job and you may only have 1 to retry.

Metadata-only batch (align=false)

For catalog workflows where you need lyrics text but not LRC files, set align=false per job. Processing is faster (~60s per job) and the batch completes sooner.
Jobs submitted with align=false will not include downloads in the batch.complete payload or in GET /batch/{id} responses.

Processing large catalogs

The rate limit is 1,000 jobs per day. For a catalog larger than 1,000 tracks, spread submissions across multiple days or contact support@lyrcs.ai to discuss higher limits. For 1,000 tracks:
  • 50 batches of 20 jobs each
  • All within the daily limit
  • Each batch submitted when the previous batch.complete fires (or use a queue)