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 secretX-Telvine-Event-Id— the event's idempotency keyX-Telvine-Delivery-Id— unique per attemptX-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.