Webhooks
Restez synchronisé sans interroger l'API en boucle. Chaque livraison est signée HMAC-SHA256 dans l'en-tête X-Karaba-Signature, dérivée du secret affiché une seule fois à la création.
POST
/v1/webhookswebhook:writeEnregistre un endpoint et ses événements
Requête
{
"url": "https://votre-systeme.com/hooks/karaba",
"events": [
"job.broadcast.completed",
"job.candidate_replied"
]
}Réponse
{
"id": 7,
"url": "https://votre-systeme.com/hooks/karaba",
"events": [
"job.broadcast.completed",
"job.candidate_replied"
],
"signing_secret": "a1b2c3d4e5f60718293a4b5c6d7e8f90"
}GET
/v1/webhookswebhook:writeListe vos endpoints enregistrés
Réponse
[
{
"id": 7,
"url": "https://votre-systeme.com/hooks/karaba",
"events": [
"job.broadcast.completed",
"job.candidate_replied"
],
"is_active": true
}
]DELETE
/v1/webhooks/{id}webhook:writeSupprime un endpoint
Réponse
204 No ContentÉvénements disponibles
match.completedUne requête /v1/match/query a terminé son traitement.
profile.readyUn profil ingéré via /v1/profiles/cv a fini son extraction IA.
trust.scoredUn Trust Score vient d'être calculé.
job.broadcast.completedUne diffusion WhatsApp a fini d'envoyer tous ses messages.
job.candidate_repliedUn candidat a répondu intéressé ou pas à une diffusion.
Vérifier la signature
Chaque livraison porte un en-tête X-Karaba-Signature : HMAC-SHA256 du corps brut, signé avec la clé affichée une seule fois à l'enregistrement du webhook (jamais le secret en clair par la suite).
import hashlib, hmac
def verify(body: bytes, signature: str, signing_key: str) -> bool:
expected = hmac.new(signing_key.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature)