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.withdrawn, application.offer_extended
{
"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
{
"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",
"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 |
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",
"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 |
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 | Beschäftigungsart (Full-time, Part-time, Contract usw.) |
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.paid
Diese Ereignisse erfordern das CSIRT-Add-on (Bug-Bounty). Sie werden ausschließlich bei einer Statusänderung der Meldung ausgelöst – die Bewertung des Schweregrads, die Zuweisung an ein Teammitglied und die Genehmigung einer Prämie lassen den Status unverändert und senden keinen Webhook.
csirt.report.dismissed bedeutet, dass die Meldung zurückgewiesen wurde. csirt.report.informative bedeutet, dass sie gültig war, aber keinen Handlungsbedarf auslöste – und dafür durchaus ein freiwilliger Bonus gezahlt worden sein kann. Fassen Sie die beiden Fälle nicht zu einem gemeinsamen Zweig „abgeschlossen“ zusammen.
{
"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
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
Wird ausgelöst, wenn eine Nachricht in den Status „approved“, „sent“, „bounced“ oder „failed“ übergeht.
{
"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
|
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 | SMTP-Fehlercode (vorhanden bei bounced/failed) |
Hinweis: Der E-Mail-Text der Nachricht ist von Webhook-Nutzlasten ausgeschlossen (verschlüsselt gespeichert).
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": {}
}