Telvine Docs

Webhooks

Pipe events into PostHog, Mixpanel, your warehouse, or anywhere else.

telvine webhooks add https://your.tool/telvine-ingest \
  --skill-id skl_abc \
  --event-type skill.invocation.end \
  --event-type feedback.submitted

For whole-plugin delivery, create a webhook with plugin_id through POST /v1/webhooks; this includes the plugin lifecycle/component stream and linked Skill events that carry the same plugin_id.

Each delivery includes:

  • X-Telvine-Signature: sha256=... — HMAC of the request body with your signing secret
  • X-Telvine-Event-Id — the event's idempotency key
  • X-Telvine-Delivery-Id — unique per attempt
  • X-Telvine-Attempt — 1, 2, 3, ...

Verify in Node:

import { createHmac, timingSafeEqual } from "node:crypto";
 
const expected = "sha256=" + createHmac("sha256", secret).update(body).digest("hex");
if (!timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers["x-telvine-signature"]))) {
  return res.status(401).end();
}

We retry with exponential backoff up to 24 hours, then dead-letter. After ~12 consecutive failures we disable the webhook; re-enable it via the API after fixing your endpoint.