webhook_url when you create a transcript or a diarization. When it finishes, AirCaps sends a POST:
event is transcript.completed or transcript.failed (for diarizations, diarization.completed or diarization.failed, with a dia_... ID). The payload never contains the result; fetch it with GET /v1/transcripts/{id} or GET /v1/diarizations/{id}.
- To add your own header to each delivery, set
webhook_auth_header_nameandwebhook_auth_header_valueon the request. webhook_urlmust be a public http(s) address. Redirects are not followed.- Canceled jobs send no webhook.
Verify signatures
Deliveries are signed per Standard Webhooks with your account’s webhook secret (whsec_...). Find and rotate it in the console under API keys → Webhook signing secret.
Headers: webhook-id, webhook-timestamp, webhook-signature: v1,<base64>.
- Base64-decode the secret without its
whsec_prefix. - Compute HMAC-SHA256 with it over
{webhook-id}.{webhook-timestamp}.{raw body}and base64-encode the result. - Compare it in constant time with the value after
v1,inwebhook-signature. - Reject timestamps more than 5 minutes old.
Delivery
- Reply with any 2xx within 15 seconds.
- Failures (including timeouts, network errors and 3xx) are retried for about 24 hours: after 30 s, 2 min, 10 min, 30 min, 1 h, 2 h, 4 h, 8 h and 8 h.
- A 4xx other than 408 or 429 stops retries.
webhook-idis stable across retries of one event; use it to deduplicate.- The transcript shows
webhook_status(pending,deliveredorfailed) and the last HTTP status aswebhook_status_code. - Rotating the secret applies to pending retries too.

