webhook_url when submitting a job or batch — lyrcs.ai will POST the event payload to that URL.
Events
Retry schedule
lyrcs.ai retries failed webhook deliveries (non-2xx or timeout) on this schedule:
Your endpoint must return a
2xx response within 10 seconds or the delivery is counted as failed.
The
job.complete webhook fired after artist approval in the review flow uses single-attempt delivery — it does not retry. Ensure your review webhook endpoint is reliable.Signature verification
Every webhook delivery includes anX-Lyrcs-Signature header containing an HMAC-SHA256 signature of the request body, keyed with your webhook_secret.
Verify the signature before processing the payload to confirm the request came from lyrcs.ai.
Node.js — signature verification
Event payloads
job.complete
Fires when a job completes successfully.downloads is omitted when align=false was set. cultural_notes may be null.
Authorization header to fetch.
words_original and words_transliterated are present when word_align_requested: true (the default). Jobs submitted with word_align=false include only lrc_* and srt_* in downloads.job.awaiting_review
Fires instead ofjob.complete when review=true and alignment succeeded. No results block — lyrics are held until the artist approves.
review_url to the artist. When they approve, job.complete fires with the full payload.
job.degraded
Fires on the first Gemini 503 retry only. The job is still processing — this is informational. Do not assume the job has failed.job.failed
Fires when a job fails permanently after all retries are exhausted.batch.complete
Fires when all jobs in a batch have finished — whether complete or failed.status is "complete" if all jobs succeeded, "partial" if any failed or timed out.
downloads is included per job only when status === "complete" AND align_requested === true for that job.