Logo StartupKit
DE

Webhook-Ereignis-Referenz

Nutzlaststrukturen, Header und Felddefinitionen für jedes Webhook-Ereignis.

Warum das zählt

Jede Webhook-Zustellung verpackt ereignisspezifische Daten in denselben Umschlag. Diese Referenz dokumentiert die exakte Nutzlaststruktur für jedes Ereignis, damit Sie sie zuverlässig parsen und verarbeiten können.

Nutzlast-Umschlag

{
  "event": "application.submitted",
  "created_at": "2025-01-15T14:30:00Z",
  "data": { }
}
Feld Typ Beschreibung
event string Der Ereignistyp, der diese Zustellung ausgelöst hat
created_at string ISO-8601-Zeitstempel des Ereigniszeitpunkts
data object Ereignisspezifische Nutzlast (variiert je nach Ereignistyp)

Request-Header

Jede Webhook-Anfrage enthält diese Header:

Header Beispiel Beschreibung
Content-Type application/json Immer JSON
X-Webhook-Event application.submitted Der Ereignistyp
X-Webhook-Signature a1b2c3d4... HMAC-SHA256-Hex-Digest
X-Webhook-Timestamp 2025-01-15T14:30:00Z In der Signatur verwendeter ISO-8601-Zeitstempel
User-Agent Kit-Webhooks/1.0 Weist Kit als Absender aus

Einzelheiten zur Signaturprüfung finden Sie unter Webhook-Sicherheit und -Zustellung.

Bewerbungs-Ereignisse

Ereignisse: application.submitted, application.rejected, application.rejection_reverted, application.advanced, application.stage_returned, application.withdrawn, application.offer_extended

application.stage_returned wird ausgelöst, wenn ein Teammitglied eine Bewerbung in eine frühere Phase zurückverschiebt. Das Ereignis verwendet dieselbe Bewerbungsnutzlast wie die übrigen Bewerbungsereignisse.

{
  "event": "application.submitted",
  "created_at": "2025-01-15T14:30:00Z",
  "data": {
    "id": 42,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    },
    "current_stage": "Applied",
    "submitted_at": "2025-01-15T14:30:00Z",
    "rejected": false,
    "withdrawn": false,
    "offered": false
  }
}
Feld Typ Beschreibung
id integer Bewerbungs-ID
candidate.id integer Kandidaten-ID
candidate.name string Vollständiger Name der Kandidatin/des Kandidaten
candidate.email string E-Mail-Adresse der Kandidatin/des Kandidaten
job_posting.id integer ID der Stellenanzeige
job_posting.title string Titel der Stellenanzeige
current_stage string Name der aktuellen Pipeline-Phase
submitted_at string | null ISO-8601-Zeitstempel der Einreichung
rejected boolean Ob die Bewerbung abgelehnt wurde
withdrawn boolean Ob die Kandidatin/der Kandidat zurückgezogen hat
offered boolean Ob ein Angebot unterbreitet wurde

Angebots-Ereignisse

Ereignisse: offer.accepted, offer.declined

  • offer.accepted / offer.declined: werden ausgelöst, wenn ein Admin ein Angebot annimmt oder ablehnt
{
  "event": "offer.accepted",
  "created_at": "2025-01-20T10:00:00Z",
  "data": {
    "id": 15,
    "status": "accepted",
    "details": "Senior Engineer – $150k base",
    "extended_at": "2025-01-18T09:00:00Z",
    "expires_at": "2025-01-25T23:59:59Z",
    "accepted_at": null,
    "declined_at": null,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Feld Typ Beschreibung
id integer Angebots-ID
status string Einer von: pending, accepted, declined, candidate_accepted, candidate_declined, expired
details string | null Text mit den Angebotsdetails
extended_at string | null Wann das Angebot unterbreitet wurde
expires_at string | null Wann das Angebot abläuft
accepted_at string | null Wann das Angebot von einem Admin angenommen wurde
declined_at string | null Wann das Angebot von einem Admin abgelehnt wurde
candidate object Kandidatendetails (gleiche Struktur wie bei Bewerbungs-Ereignissen)
job_posting object Details der Stellenanzeige (gleiche Struktur wie bei Bewerbungs-Ereignissen)

Interview-Ereignisse

Ereignisse: interview.scheduled, interview.confirmed, interview.completed, interview.cancelled, interview.no_show, interview.no_show_reverted, interview.rebooked

interview.no_show_reverted wird ausgelöst, wenn ein Nichterscheinen rückgängig gemacht wird. interview.rebooked wird ausgelöst, nachdem das alte Interview geschlossen und der Kandidat zur Buchung eines Ersatztermins eingeladen wurde. Beide verwenden die nachstehende Interviewnutzlast.

{
  "event": "interview.scheduled",
  "created_at": "2025-01-16T09:00:00Z",
  "data": {
    "id": 28,
    "status": "pending",
    "scheduled_at": "2025-01-20T14:00:00Z",
    "duration_minutes": 60,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Feld Typ Beschreibung
id integer Interview-ID
status string Interview-Status (pending, confirmed, completed, cancelled, no_show)
scheduled_at string | null ISO-8601-Zeitstempel des angesetzten Termins
duration_minutes integer Interview-Dauer in Minuten
candidate object Kandidatendetails
job_posting object Details der Stellenanzeige

Code-Aufgaben-Ereignisse

Ereignisse: code_assignment.submitted, code_assignment.auto_submitted

{
  "event": "code_assignment.submitted",
  "created_at": "2025-01-22T16:45:00Z",
  "data": {
    "id": 11,
    "repo_url": "https://github.com/org/assignment-jane-smith",
    "submitted_at": "2025-01-22T16:45:00Z",
    "submitted_by": null,
    "deadline_at": "2025-01-25T23:59:59Z",
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Feld Typ Beschreibung
id integer ID der Code-Einreichung
repo_url string URL des GitHub-Repositorys
submitted_at string | null Wann die Code-Aufgabe eingereicht wurde
submitted_by object | null Teammitglied (id, name), das die Aufgabe stellvertretend für den Kandidaten als eingereicht markiert hat; null, wenn der Kandidat selbst eingereicht hat oder die Frist automatisch eingereicht hat
deadline_at string | null Frist für die Code-Aufgabe
candidate object Kandidatendetails
job_posting object Details der Stellenanzeige

Bewertungs-Ereignisse

Ereignisse: review.submitted

{
  "event": "review.submitted",
  "created_at": "2025-01-23T11:00:00Z",
  "data": {
    "id": 9,
    "recommendation": "strong_yes",
    "reviewer": "Alex Johnson",
    "origin": "web",
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    },
    "stage": "Technical Interview"
  }
}
Feld Typ Beschreibung
id integer Bewertungs-ID
recommendation string Empfehlung der Prüferin/des Prüfers
reviewer string Name der Prüferin/des Prüfers
origin string Wie die Bewertung eingereicht wurde: web (in Kit) oder mcp (von einem KI-Tool über hiring_submit_review im Namen der Prüferin/des Prüfers eingereicht, nach deren bzw. dessen Bestätigung)
candidate object Kandidatendetails
job_posting object Details der Stellenanzeige
stage string Name der Pipeline-Phase, in der die Bewertung eingereicht wurde

Stellenanzeigen-Ereignisse

Ereignisse: job_posting.published, job_posting.paused, job_posting.closed, job_posting.reopened

{
  "event": "job_posting.published",
  "created_at": "2025-01-10T08:00:00Z",
  "data": {
    "id": 3,
    "title": "Senior Engineer",
    "status": "published",
    "location": "Remote",
    "department": "Engineering",
    "employment_type": "full_time",
    "published_at": "2025-01-10T08:00:00Z",
    "closed_at": null,
    "public_url": "https://careers.example.com/senior-engineer"
  }
}
Feld Typ Beschreibung
id integer ID der Stellenanzeige
title string Stellentitel
status string Aktueller Status (published, paused, closed)
location string Standort der Stelle
department string Name der Abteilung
employment_type string Form der Zusammenarbeit (full_time, part_time, b2b, contract oder internship)
published_at string | null Wann die Anzeige veröffentlicht wurde
closed_at string | null Wann die Anzeige geschlossen wurde
public_url string Öffentliche Karriereportal-URL für diese Anzeige

CSIRT-Meldungsereignisse

Ereignisse: csirt.report.submitted, csirt.report.triaged, csirt.report.validated, csirt.report.resolved, csirt.report.fix_verified, csirt.report.dismissed, csirt.report.informative, csirt.report.assessed, csirt.report.assigned, csirt.report.bounty_approved, csirt.report.paid, csirt.report.sla_breached, csirt.report.escalation_requested

Diese Ereignisse erfordern das CSIRT-Add-on (Bug-Bounty). Die tatsächlich zugestellten Ereignisse werden bei Statusänderungen einer Meldung ausgelöst und verwenden die nachstehende Meldungsnutzlast.

Warning

csirt.report.assessed, csirt.report.assigned und csirt.report.bounty_approved erscheinen in den Abonnementeinstellungen, sind jedoch reserviert und werden derzeit nicht zugestellt. Bauen Sie keine Automatisierung, die von ihnen abhängt.

csirt.report.dismissed bedeutet, dass die Meldung zurückgewiesen wurde. csirt.report.informative bedeutet, dass sie gültig war, aber keinen Handlungsbedarf auslöste; dafür kann durchaus ein freiwilliger Bonus gezahlt worden sein. Fassen Sie die beiden Fälle nicht zu einem gemeinsamen Zweig „abgeschlossen“ zusammen.

Zwei Ereignisse werden unabhängig von Statusänderungen ausgelöst und verwenden dieselbe Nutzlast:

  • csirt.report.sla_breached wird einmal ausgelöst, wenn eine offene Meldung ihre Bestätigungsfrist überschreitet (standardmäßig 72 Stunden, pro Programm einstellbar). Wird eine Meldung geschlossen und später wieder geöffnet, kann das Ereignis erneut ausgelöst werden. Meldungen mit der Bewertung „Informativ“ lösen es nicht aus.
  • csirt.report.escalation_requested wird ausgelöst, wenn der Forscher im Forscherportal Zwischenstand anfragen verwendet. Seine Notiz ist nie enthalten.
{
  "event": "csirt.report.submitted",
  "created_at": "2026-03-12T10:00:00Z",
  "data": {
    "id": "rpt_abc123",
    "vulnerability_type": "sql_injection",
    "severity_tier": "critical",
    "cvss_score": 9.8,
    "status": "submitted",
    "program_name": "Acme Security Program",
    "submitted_at": "2026-03-12T10:00:00Z"
  }
}
Feld Typ Beschreibung
id string Prefix-ID der Meldung
vulnerability_type string Gemeldete Schwachstellenkategorie
severity_tier string | null Bewerteter Schweregrad (vorhanden, sobald bewertet)
cvss_score number | null CVSS-Score (vorhanden, sobald bewertet)
status string Status der Meldung zum Ereigniszeitpunkt
program_name string Name des Bug-Bounty-Programms
submitted_at string | null Wann die Meldung eingereicht wurde

Hinweis: Titel und Beschreibung der Meldung sind von Webhook-Nutzlasten ausgeschlossen (verschlüsselt gespeichert).

Outreach-Ereignisse

Ereignisse: outreach.prospect.drafted, outreach.message.approved, outreach.message.sent, outreach.message.bounced, outreach.message.failed, outreach.message.deferred, outreach.message.delivery_unknown, outreach.message.confirmation_expired, outreach.message.delivery_resolved

Diese Ereignisse erfordern das Outreach-Add-on.

outreach.prospect.drafted

Wird ausgelöst, sobald die KI die Recherche zu einem Kontakt und den Entwurf einer E-Mail abgeschlossen hat.

{
  "event": "outreach.prospect.drafted",
  "created_at": "2026-03-12T10:00:00Z",
  "data": {
    "id": "op_abc123",
    "campaign_id": "oc_def456",
    "company_name": "Acme Corp",
    "display_name": "Jane Smith",
    "status": "drafted"
  }
}
Feld Typ Beschreibung
id string Prefix-ID des Kontakts
campaign_id string Prefix-ID der Kampagne
company_name string Firmenname des Kontakts
display_name string Anzeigename des Kontakts
status string Status des Kontakts zum Ereigniszeitpunkt

Hinweis: Die E-Mail-Adresse des Kontakts ist von Webhook-Nutzlasten ausgeschlossen (verschlüsselt gespeichert).

outreach.message.approved / sent / bounced / failed / deferred / delivery_unknown / confirmation_expired

Wird ausgelöst, wenn eine Nachricht in den Status approved, sent, bounced, failed, deferred, delivery_unknown oder confirmation_expired übergeht. failed bezeichnet einen bekannten Authentifizierungs-, Absender-, Inhalts- oder Richtlinienfehler und eröffnet eine Prüfung für eine Wiederholung nach der Behebung oder das Schließen. deferred bedeutet, dass die sicheren Wiederholungen für einen bekannten Fehler vor der Übermittlung ausgeschöpft sind. delivery_unknown bedeutet, dass die SMTP-Annahme nicht belegt werden konnte; Kit stoppt deshalb die automatische Wiederholung, um Duplikate zu vermeiden. confirmation_expired bedeutet, dass sich Empfänger, Absenderidentität, Betreff oder Inhalt vor dem SMTP-Start geändert haben. Es begann kein Zustellversuch; die aktuelle Nachricht muss erneut geprüft und genehmigt werden.

{
  "event": "outreach.message.sent",
  "created_at": "2026-03-12T10:15:00Z",
  "data": {
    "id": "om_ghi789",
    "campaign_id": "oc_def456",
    "prospect_id": "op_abc123",
    "step_number": 1,
    "subject": "Quick question about Acme's hiring workflow",
    "status": "sent",
    "sent_at": "2026-03-12T10:15:00Z",
    "approved_at": "2026-03-12T09:30:00Z",
    "retry_count": 0,
    "last_error_code": null
  }
}
Feld Typ Beschreibung
id string Prefix-ID der Nachricht
campaign_id string Prefix-ID der Kampagne
prospect_id string Prefix-ID des Kontakts
step_number integer Nummer des Sequenzschritts (1 = Erstkontakt, 2+ = Folge-E-Mails)
subject string Betreffzeile der E-Mail
status string Einer von: approved, sent, bounced, failed, deferred, delivery_unknown, confirmation_expired
sent_at string | null Wann die E-Mail gesendet wurde
approved_at string | null Wann der Entwurf freigegeben wurde
retry_count integer Anzahl der unternommenen Sendeversuche
last_error_code string | null Analysierter SMTP- oder Zustellstatuscode, sofern verfügbar; null, wenn kein Versuch begann

Hinweis: Der E-Mail-Text der Nachricht ist von Webhook-Nutzlasten ausgeschlossen (verschlüsselt gespeichert).

outreach.message.delivery_resolved

Wird ausgelöst, wenn ein zur Kampagnenverwaltung berechtigtes Teammitglied die unveränderliche Entscheidung festhält, die eine Prüfung mit delivery_unknown, deferred oder failed schließt. Das Ergebnis gibt an, ob Kit eine unklare Zustellung als gesendet erfasst, nach einem Nachweis oder einer Fehlerbehebung einen ausdrücklich freigegebenen Versuch einreiht oder die Prüfung ohne Versand schließt. delivery_attempt_id bezeichnet genau den Versuch, dessen Nachweise entschieden wurden.

{
  "event": "outreach.message.delivery_resolved",
  "created_at": "2026-03-12T10:20:00Z",
  "data": {
    "id": 84,
    "message_id": "om_ghi789",
    "delivery_attempt_id": 312,
    "campaign_id": "oc_def456",
    "prospect_id": "op_abc123",
    "outcome": "confirmed_not_sent",
    "origin": "web",
    "resolved_by_id": 17,
    "resolved_at": "2026-03-12T10:20:00Z",
    "sent_at": null
  }
}
Feld Typ Beschreibung
id integer ID des Prüfdatensatzes zur Zustellentscheidung
message_id string Präfix-ID der Nachricht
delivery_attempt_id integer Zustellversuch, auf den sich die Entscheidung bezieht
campaign_id string Präfix-ID der Kampagne
prospect_id string Präfix-ID des Kontakts
outcome string confirmed_sent, confirmed_not_sent, retry_authorized oder closed_without_delivery
origin string Herkunft der Entscheidung: web, mcp oder assistant
resolved_by_id integer | null Benutzer, der die Entscheidung bestätigt hat; null, wenn dieser Benutzer später gelöscht wurde
resolved_at string ISO-8601-Zeitstempel der Entscheidung
sent_at string | null Bestätigter Versandzeitpunkt; nur bei confirmed_sent vorhanden

Die optionale Notiz des Bearbeiters ist verschlüsselt gespeichert und bewusst ausgeschlossen, da sie aus dem Postfach kopierte Empfängerdaten enthalten kann.

Test-Ereignisse

Ereignisse: test.ping

Das Ereignis test.ping wird gesendet, wenn Sie in den Webhook-Einstellungen auf Test-Ping senden klicken. Verwenden Sie es, um die Erreichbarkeit des Endpunkts und die Signaturprüfung zu verifizieren.

{
  "event": "test.ping",
  "created_at": "2025-01-15T14:30:00Z",
  "data": {}
}

Suchbegriff eingeben...