Webhooki
Podaj webhookUrl w zadaniu, a wyślemy podpisane zdarzenie po osiągnięciu stanu
końcowego — job.done lub job.failed. Dostarczanie ponawiane z backoffem.
POST twój-url
X-ClipFoundry-Event: job.done
X-ClipFoundry-Signature: t=1718100000,v1=9f86d08...
{ "event": "job.done", "jobId": "…", "status": "done",
"videoUrl": "https://cdn…/clip.mp4", "tokensCharged": 1200 }Zweryfikuj podpis. Nagłówek to t=<unix>,v1=<hex>. Przelicz HMAC-SHA256 z
łańcucha timestamp.rawBody swoim sekretem:
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(rawBody, header, secret) {
const [t, v1] = header.split(',').map((p) => p.split('=')[1]);
const signed = t + '.' + rawBody;
const expected = createHmac('sha256', secret).update(signed).digest('hex');
return timingSafeEqual(Buffer.from(v1), Buffer.from(expected));
}Odpowiedz 2xx, aby potwierdzić; inny status (lub timeout) wyzwala ponowienie.