Skip to main content

Overview

AudioPod processing is asynchronous: you create a job, it runs, and it finishes a few seconds to a few minutes later. Instead of polling the job status, register a webhook and AudioPod will POST a signed event to your server the moment the job completes or fails. Every delivery is HMAC-signed, retried with exponential backoff, and carries a unique event id so you can safely deduplicate.

Events

Register an endpoint

Create an endpoint with the URL to call and the events you want. The response includes a signing secret — it is shown once, so store it now.
Your endpoint must use HTTPS and must resolve to a public address. AudioPod refuses URLs that resolve to private, loopback, or internal addresses (SSRF protection), re-checked at delivery time.

Event payload

The body is JSON. Every event carries event_id and event_type; job events add the job context.
A job.failed event adds error_message and failure_reason. The job_type field tells you which tool produced the job. Completion webhooks now fire across the audio job types — for example transcription, text_to_speech, voice_cloning, voice_conversion, music_generation, stem_extraction, speaker_diarization, denoise, reader, podcast, media_converter, audiobook, and export_acx.

HTTP headers

Verify the signature

The signature is HMAC-SHA256(secret, "{timestamp}.{raw_request_body}"), hex-encoded. Recompute it over the raw body bytes you received and the X-AudioPod-Timestamp header, then compare in constant time. Reject anything that doesn’t match.
Sign over the raw bytes you received, not a parsed-then-re-serialized object. Re-serializing can reorder keys or change whitespace and break the comparison.

Respond fast, deduplicate, and retry-proof

  • Return 2xx quickly. Acknowledge within 10 seconds, then do slow work asynchronously. Any non-2xx (or a timeout) is treated as a failed attempt.
  • Deduplicate on X-AudioPod-Event-Id. Retries reuse the same event id, so store processed ids and ignore repeats.
  • Retries: failed deliveries retry with exponential backoff — 1m, 2m, 4m, … capped at 1h — up to 5 attempts. After that the delivery is dead-lettered and can be replayed from the delivery log.

Manage endpoints

Test your integration

This delivers a webhook.test event so you can confirm your signature verification and 2xx response before wiring it to real jobs. Check GET …/deliveries to see the recorded status and response code.