LynCutLynCut

Get started

Webhooks

Get notified when async publishing jobs settle — no polling required.

Pass webhookUrl when creating a publishing job and LynCut POSTs a signed event to your endpoint when the job reaches a terminal state (COMPLETED, FAILED, or CANCELLED).

Payload

POST your webhookUrljson
{
  "type": "publishing.job.completed",
  "data": {
    "id": "job_8f2",
    "status": "COMPLETED",
    "connectionId": "con_9f3a",
    "providerUrl": "https://youtu.be/dQw4w9WgXcQ",
    "completedAt": "2026-09-23T15:34:10.000Z"
  }
}

Verifying signatures

Every delivery is signed with your webhook secret. Verify before trusting the payload:

HeaderMeaning
X-LynCut-EventEvent type, e.g. publishing.job.completed
X-LynCut-DeliveryUnique delivery id — dedupe on this
X-LynCut-SignatureHMAC-SHA256 of the raw body, hex-encoded
Verify in Node.jsts
import { createHmac, timingSafeEqual } from "node:crypto";

const sig = req.headers["x-lyncut-signature"];
const expected = createHmac("sha256", WEBHOOK_SECRET)
  .update(rawBody)
  .digest("hex");

if (!timingSafeEqual(Buffer.from(sig), Buffer.from(expected))) {
  return res.status(401).end();
}

Retries

  • Respond 2xx within 10 seconds — anything else counts as a failed delivery.
  • Failed deliveries retry up to 5 times with exponential backoff over ~1 hour.
  • Dedupe on X-LynCut-Delivery — retries of the same event share the delivery id.
  • Events are at-least-once; make your handler idempotent.

Was this page helpful?