SweetRouterAPI

Obrázky a videa

Webhooky

Dostanete HTTPS notifikaci, když úloha s obrázkem nebo videem skončí nebo selže, místo neustálého dotazování.

Nastavení

Endpointy přidáte na stránce Webhooky, nebo pošlete webhook_url u jednotlivého požadavku. Každý zapnutý endpoint dostává job.completed a job.failed.

Obsah

http
POST https://your-app.com/webhooks/sweetrouter
SweetRouter-Event: job.completed
SweetRouter-Delivery: cmg9a1...
SweetRouter-Signature: t=1791105133,v1=5f1c...

{
  "id": "cmg9a1...",
  "type": "job.completed",
  "created_at": "2026-10-04T09:12:13.500Z",
  "data": { "id": "cmg8x2k0d0001", "object": "job", "status": "completed", "outputs": [ ... ] }
}

Ověření podpisu

Každý požadavek nese SweetRouter-Signature: t=timestamp,v1=hmac. Spočítejte HMAC-SHA256 z timestamp.rawBody se svým podpisovým klíčem a porovnejte. Odmítněte vše starší než 5 minut.

node.js
import crypto from "node:crypto"

export function verify(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")))
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${parts.t}.${rawBody}`)
    .digest("hex")
  const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300
  return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1))
}

Opakování

Odpovězte libovolným 2xx do 10 sekund. Jinak to zkusíme znovu za 1 minutu, 5 minut, 30 minut, 2 hodiny a 6 hodin a pak přestaneme. Doručení může dorazit víckrát, proto deduplikujte podle id doručení.