Logo StartupKit
FR

Référence des événements webhook

Formats des charges utiles, en-têtes et définitions des champs pour chaque événement webhook.

Pourquoi c’est important

Chaque livraison de webhook encapsule les données propres à l’événement dans une même enveloppe. Cette référence documente le format exact de la charge utile pour chaque événement, afin que vous puissiez les analyser et les traiter en toute confiance.

Enveloppe de la charge utile

{
  "event": "application.submitted",
  "created_at": "2025-01-15T14:30:00Z",
  "data": { }
}
Champ Type Description
event string Le type d’événement qui a déclenché cette livraison
created_at string Horodatage ISO 8601 du moment où l’événement s’est produit
data object Charge utile propre à l’événement (varie selon le type d’événement)

En-têtes de requête

Chaque requête webhook inclut les en-têtes suivants :

En-tête Exemple Description
Content-Type application/json Toujours JSON
X-Webhook-Event application.submitted Le type d’événement
X-Webhook-Signature a1b2c3d4... Condensé hexadécimal HMAC-SHA256
X-Webhook-Timestamp 2025-01-15T14:30:00Z Horodatage ISO 8601 utilisé dans la signature
User-Agent Kit-Webhooks/1.0 Identifie Kit comme l’expéditeur

Consultez Sécurité et livraison des webhooks pour les détails de la vérification de signature.

Événements de candidature

Événements : application.submitted, application.rejected, application.rejection_reverted, application.advanced, application.stage_returned, application.withdrawn, application.offer_extended

application.stage_returned est émis lorsqu’un membre de l’équipe ramène une candidature à une étape antérieure. Il reprend la même charge utile que les autres événements de candidature.

{
  "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
  }
}
Champ Type Description
id integer Identifiant de la candidature
candidate.id integer Identifiant du candidat
candidate.name string Nom complet du candidat
candidate.email string Adresse e-mail du candidat
job_posting.id integer Identifiant de l’offre d’emploi
job_posting.title string Intitulé de l’offre d’emploi
current_stage string Nom de l’étape actuelle du pipeline
submitted_at string | null Horodatage ISO 8601 de la soumission
rejected boolean Indique si la candidature a été rejetée
withdrawn boolean Indique si le candidat s’est retiré
offered boolean Indique si une offre a été proposée

Événements d’offre

Événements : offer.accepted, offer.declined

  • offer.accepted / offer.declined : déclenchés lorsqu’un administrateur accepte ou décline une offre
{
  "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"
    }
  }
}
Champ Type Description
id integer Identifiant de l’offre
status string L’une des valeurs suivantes : pending, accepted, declined, candidate_accepted, candidate_declined, expired
details string | null Texte détaillant l’offre
extended_at string | null Date à laquelle l’offre a été proposée
expires_at string | null Date d’expiration de l’offre
accepted_at string | null Date à laquelle l’offre a été acceptée par un administrateur
declined_at string | null Date à laquelle l’offre a été déclinée par un administrateur
candidate object Détails du candidat (même format que les événements de candidature)
job_posting object Détails de l’offre d’emploi (même format que les événements de candidature)

Événements d’entretien

Événements : interview.scheduled, interview.confirmed, interview.completed, interview.cancelled, interview.no_show, interview.no_show_reverted, interview.rebooked

interview.no_show_reverted est émis lorsque l’absence est annulée. interview.rebooked est émis après la clôture de l’ancien entretien et l’invitation du candidat à réserver un nouveau créneau. Les deux utilisent la charge utile d’entretien ci-dessous.

{
  "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"
    }
  }
}
Champ Type Description
id integer Identifiant de l’entretien
status string Statut de l’entretien (pending, confirmed, completed, cancelled, no_show)
scheduled_at string | null Horodatage ISO 8601 de l’heure prévue
duration_minutes integer Durée de l’entretien en minutes
candidate object Détails du candidat
job_posting object Détails de l’offre d’emploi

Événements d’exercice de code

Événements : 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"
    }
  }
}
Champ Type Description
id integer Identifiant de la soumission de code
repo_url string URL du dépôt GitHub
submitted_at string | null Date de soumission de l’exercice
submitted_by object | null Membre de l’équipe (id, name) ayant marqué l’exercice comme soumis à la place du candidat ; null si le candidat a soumis lui-même ou si la date limite a déclenché la soumission automatique
deadline_at string | null Date limite de l’exercice
candidate object Détails du candidat
job_posting object Détails de l’offre d’emploi

Événements de revue

Événements : 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"
  }
}
Champ Type Description
id integer Identifiant de la revue
recommendation string Recommandation de l’évaluateur
reviewer string Nom de l’évaluateur
origin string Mode de soumission de la revue : web (dans Kit) ou mcp (déposée par un outil d’IA via hiring_submit_review au nom de l’évaluateur, après sa confirmation)
candidate object Détails du candidat
job_posting object Détails de l’offre d’emploi
stage string Nom de l’étape du pipeline où la revue a été soumise

Événements d’offre d’emploi

Événements : 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"
  }
}
Champ Type Description
id integer Identifiant de l’offre d’emploi
title string Intitulé du poste
status string Statut actuel (published, paused, closed)
location string Lieu du poste
department string Nom du département
employment_type string Forme de collaboration (full_time, part_time, b2b, contract ou internship)
published_at string | null Date de publication de l’offre
closed_at string | null Date de clôture de l’offre
public_url string URL publique de cette offre sur le portail carrière

Événements de rapport CSIRT

Événements : 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

Ces événements nécessitent le module complémentaire CSIRT (programme de primes). Les événements effectivement transmis sont émis lorsque le statut du rapport change et utilisent la charge utile ci-dessous.

Warning

csirt.report.assessed, csirt.report.assigned et csirt.report.bounty_approved apparaissent dans les réglages d’abonnement, mais sont réservés et ne sont pas transmis actuellement. Ne créez aucune automatisation qui en dépend.

csirt.report.dismissed signifie que le rapport a été refusé. csirt.report.informative signifie qu’il était valide mais n’appelait aucune correction, et qu’un bonus discrétionnaire a pu lui être versé : ne fusionnez pas les deux cas dans une même branche « clôturé ».

Deux événements se déclenchent en dehors des changements de statut et utilisent la même charge utile :

  • csirt.report.sla_breached se déclenche une fois, quand un rapport ouvert dépasse son délai d’accusé de réception (72 heures par défaut, réglable par programme). Un rapport fermé puis rouvert peut le déclencher à nouveau. Les rapports évalués comme Informatif ne le déclenchent pas.
  • csirt.report.escalation_requested se déclenche quand le chercheur utilise Demander un point d’avancement dans le portail chercheur. Sa note n’est jamais incluse.
{
  "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"
  }
}
Champ Type Description
id string Identifiant préfixé du rapport
vulnerability_type string Catégorie de vulnérabilité signalée
severity_tier string | null Niveau de sévérité évalué (présent une fois l’évaluation faite)
cvss_score number | null Score CVSS (présent une fois l’évaluation faite)
status string Statut du rapport au moment de l’événement
program_name string Nom du programme de primes
submitted_at string | null Date de soumission du rapport

Remarque : le titre et la description du rapport sont exclus des charges utiles webhook (chiffrés au repos).

Événements Outreach

Événements : 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

Ces événements nécessitent le module complémentaire Outreach.

outreach.prospect.drafted

Déclenché lorsque l’IA termine la recherche sur un prospect et la rédaction d’un e-mail.

{
  "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"
  }
}
Champ Type Description
id string Identifiant préfixé du prospect
campaign_id string Identifiant préfixé de la campagne
company_name string Nom de l’entreprise du prospect
display_name string Nom d’affichage du prospect
status string Statut du prospect au moment de l’événement

Remarque : l’adresse e-mail du prospect est exclue des charges utiles webhook (chiffrée au repos).

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

Déclenché lorsqu’un message passe au statut approved, sent, bounced, failed, deferred, delivery_unknown ou confirmation_expired. failed indique un échec connu d’authentification, d’expéditeur, de contenu ou de politique et ouvre une vérification pour une nouvelle tentative après correction ou pour une clôture. deferred indique que les nouvelles tentatives sans risque ont été épuisées après un échec connu avant soumission. delivery_unknown indique que l’acceptation SMTP n’a pas pu être confirmée ; Kit arrête donc le renvoi automatique pour éviter un doublon. confirmation_expired indique que le destinataire, l’identité de l’expéditeur, l’objet ou le corps relu a changé avant le démarrage de SMTP. Aucune tentative d’envoi n’a commencé et le message actuel doit être relu et approuvé de nouveau.

{
  "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
  }
}
Champ Type Description
id string Identifiant préfixé du message
campaign_id string Identifiant préfixé de la campagne
prospect_id string Identifiant préfixé du prospect
step_number integer Numéro de l’étape dans la séquence (1 = initial, 2+ = relances)
subject string Objet de l’e-mail
status string L’une des valeurs suivantes : approved, sent, bounced, failed, deferred, delivery_unknown, confirmation_expired
sent_at string | null Date d’envoi de l’e-mail
approved_at string | null Date d’approbation du brouillon
retry_count integer Nombre de tentatives d’envoi effectuées
last_error_code string | null Code SMTP ou de statut d’envoi analysé, s’il est disponible ; null si aucune tentative n’a commencé

Remarque : le corps de l’e-mail du message est exclu des charges utiles webhook (chiffré au repos).

outreach.message.delivery_resolved

Déclenché lorsqu’un membre autorisé à gérer la campagne consigne la décision immuable qui clôt une vérification delivery_unknown, deferred ou failed. Le résultat indique si Kit a enregistré un envoi incertain comme envoyé, programmé une tentative explicitement autorisée après preuve ou correction, ou clos la vérification sans envoyer. delivery_attempt_id désigne la tentative exacte dont les preuves ont été tranchées.

{
  "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
  }
}
Champ Type Description
id integer Identifiant du registre d’audit de la résolution
message_id string Identifiant préfixé du message
delivery_attempt_id integer Tentative d’envoi concernée par la décision
campaign_id string Identifiant préfixé de la campagne
prospect_id string Identifiant préfixé du prospect
outcome string confirmed_sent, confirmed_not_sent, retry_authorized ou closed_without_delivery
origin string Origine de la décision : web, mcp ou assistant
resolved_by_id integer | null Utilisateur ayant confirmé la décision ; null si cet utilisateur a ensuite été effacé
resolved_at string Horodatage ISO 8601 de la décision
sent_at string | null Heure d’envoi confirmée, présente uniquement pour confirmed_sent

La note facultative de l’opérateur est chiffrée au repos et volontairement exclue, car elle peut contenir des coordonnées du destinataire copiées depuis la boîte de l’expéditeur.

Événements de test

Événements : test.ping

L’événement test.ping est envoyé lorsque vous cliquez sur Envoyer un ping de test dans les paramètres du webhook. Utilisez-le pour vérifier la connectivité de votre point de terminaison et la validation de la signature.

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

Tapez pour rechercher...