Quontio.Hilfe
Integrationen

Webhooks

Andere Systeme bei neuen Bewerbungen und veröffentlichten Stellen benachrichtigen.

Unter Integrationen, Abschnitt Benachrichtigungen an andere Systeme, trägst du eine Adresse ein und wählst Ereignisse. Jeder Webhook bekommt ein Geheimnis, das mit whsec_ beginnt und nur einmal angezeigt wird.

EreignisWann
application.submittedEine Bewerbung kommt über die Karriereseite.
job.publishedEine Stelle wird veröffentlicht.
application.stageChanged, application.rejected, application.hiredGeplant, noch nicht aktiv.

Zustellung

Quontio sendet POST mit JSON und den Kopfzeilen x-quontio-event und x-quontio-signature. Antwortet dein System nicht innerhalb von zehn Sekunden mit 2xx, zählt der Versuch als Fehler; die Anzahl steht in der Liste. Wiederholt wird derzeit nicht.

{
  "event": "application.submitted",
  "organizationId": "…",
  "occurredAt": "2026-09-12T10:00:00.000Z",
  "data": {
    "application": {
      "id": "…", "jobId": "…", "jobTitle": "Frontend Developer",
      "stageId": "new", "status": "active", "source": "indeed",
      "candidate": { "firstName": "Anna", "lastName": "Muster", "email": "anna@example.org" },
      "createdAt": "…", "url": "https://app.quontio.com/jobs/…/pipeline?application=…"
    }
  }
}

Signatur prüfen

Die Kopfzeile hat die Form t=<Unix-Sekunden>,v1=<hex>. v1 ist ein HMAC-SHA256 über <t>.<Rohdaten des Bodys> mit deinem Geheimnis. Lehne Zeitstempel ab, die älter als fünf Minuten sind.

import { createHmac, timingSafeEqual } from "node:crypto";

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

Auf dieser Seite