Webhooks
For long-running renders or batch jobs you can register a webhook URL that Audome calls when each generation completes. Webhooks save you from holding open HTTP connections and let you build async pipelines.
Configuring a webhook
- Go to
https://audome.io/render/api-tokens. - Click Webhooks next to a token.
- Add a destination URL (must be HTTPS) and a secret.
You can register up to 5 webhook destinations per account.
Payload
Every webhook delivery is a POST with body:
{
"id": "evt_01HX9Y...",
"type": "render.completed",
"createdAt": "2026-05-07T12:34:56.000Z",
"data": {
"generationId": "gen_01HX9Y...",
"projectId": "8fce2c7e-...",
"imageUrl": "https://cdn.audome.io/renders/2026/05/abc.png",
"width": 1080,
"height": 1080,
"format": "png",
"creditsUsed": 1,
"metadata": { /* whatever you passed at request time */ }
}
}Other event types:
render.completed— render succeeded.render.failed— render permanently failed.token.created— a new API token was minted on the account.token.revoked— a token was deleted.
Verifying signatures
Each delivery includes:
Audome-Signature: t=1715098496,v1=<hex hmac sha256>
Audome-Event: render.completedCompute the HMAC of <timestamp>.<raw_body> with your webhook secret:
import crypto from 'node:crypto';
function verify(rawBody, header, secret) {
const [tPart, sigPart] = header.split(',');
const t = tPart.split('=')[1];
const expected = crypto
.createHmac('sha256', secret)
.update(`${t}.${rawBody}`)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(expected),
Buffer.from(sigPart.split('=')[1])
);
}Reject any request older than 5 minutes to prevent replay attacks.
Retries
Audome retries non-2xx responses with exponential backoff for up to 24 hours: 1 min, 5 min, 30 min, 2 h, 6 h, 24 h. After that the event is marked failed and visible in the dashboard's webhook log.
Local testing
Use any tunnel (ngrok, cloudflared, tailscale funnel) to expose your local server, then send a test event from https://audome.io/render/api-tokens -> Webhooks -> Send test.