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_breachedwird 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_requestedwird 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": {}
}