Varmirdocs
Docs/Guides/Webhooks

Webhooks

Get notified when long transcriptions finish or your credits run low. Signed HMAC payloads delivered to any HTTPS endpoint you control.

Events

TypeDescription
transcription.finishedLong transcription (>5 min) completed.
transcription.failedA transcription job hit an unrecoverable error.
credits.lowCredit balance dropped below 10% of last top-up.
subscription.invoice_paidA monthly invoice was paid successfully.

Payload

All payloads share the same envelope: a type string, a sent_at ISO timestamp and an event-specific data object.

{
  "type": "transcription.finished",
  "sent_at": "2026-06-12T14:05:00Z",
  "data": {
    "id": "tr_8f3a2c",
    "duration_sec": 612.4,
    "language": "en",
    "text_url": "https://files.varmir.com/tr_8f3a2c.txt"
  }
}

Signature verification

Every request carries an X-Varmir-Signature header formatted as sha256=…. Compute the same HMAC over the raw body with your webhook secret and compare in constant time.

verify.ts
import { createHmac } from "crypto";

function verify(rawBody, header, secret) {
  const sig = header.split("sha256=")[1];
  const expected = createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return sig === expected;
}
Webhooks — Varmir docs