Aller au contenu

Webhooks

Les endpoints, chaque tentative de livraison et la manière d'en relancer une.

La vue Webhooks comporte trois onglets : les events produits par votre compte, les deliveries effectuées à partir de ces événements et les endpoints auxquels ils ont été envoyés. Les événements disposent de leur propre page. Celle-ci traite des deux autres onglets.

Webhook deliveries

last hour
MethodEndpointStatusDurationAttempt
POST/webhooks/wajub50010021 ms1
POST/webhooks/wajub500240 ms2
POST/webhooks/wajub200142 ms3

Livraisons

Une ligne correspond à une tentative, pas à un événement. Une livraison relancée trois fois produit trois lignes qui partagent le même identifiant de livraison.

ColonneRemarque
Statutsuccess, retrying ou failed
Code de réponseLa réponse de votre endpoint, vide en cas d'erreur réseau
DuréeLe temps de réponse de votre endpoint. Une ligne à 10 000 ms correspond à un délai dépassé
Tentative1 pour le premier essai, puis un de plus à chaque nouvelle tentative et à chaque relance
EndpointL'URL concernée, lorsque vous en avez plusieurs

Filtres : recherche dans l'événement, statut, endpoint et plage de dates en journées entières. Cinquante résultats par page.

Le panneau de détail contient le payload envoyé et le corps renvoyé par votre endpoint. Vous pouvez ainsi découvrir que votre erreur 500 contient une stack trace lisible directement ici.

Relancer des livraisons

Deux méthodes sont proposées. Toutes deux sont décomptées du quota Répétitions de webhooks par mois de votre plan.

ActionPortée
RetryUne livraison
Bulk retryJusqu'à 100 livraisons échouées en une fois, sur une période et éventuellement pour un seul endpoint

Bulk retry sélectionne uniquement les livraisons dont le statut est failed, dans la période choisie, qui couvre par défaut les dernières 24 heures. Filtrez la liste sur failed pour voir le bouton : avec des lignes cochées, il relance celles-ci ; sans aucune, il demande la période. Chaque livraison du lot consomme une unité du quota. Le lot s'arrête lorsque le quota est épuisé.

Une livraison dont l'endpoint a accepté l'événement depuis n'est pas renvoyée et ne coûte rien : une relance isolée le dit, et un lot l'ignore. Un événement qui a échoué plusieurs fois ne part qu'une fois.

Endpoints

La création d'un endpoint exige une URL et une liste de types d'événement.

ChampRègle
URLUne URL valide, limitée à 2 048 caractères et qui ne pointe pas vers une adresse privée ou interne
ÉvénementsAu moins un type parmi ceux proposés par Konsole
DescriptionDu texte libre, utile lorsque vous avez plusieurs endpoints

Konsole vérifie le nom des événements, contrairement à l'API

Le sélecteur propose uniquement des types valides et refuse les autres. POST /webhooks accepte tout tableau non vide. Une faute de frappe transmise par l'API est donc enregistrée sans jamais produire de correspondance. Consultez le catalogue des événements.

Les adresses privées et internes sont volontairement refusées. Un endpoint qui pointe vers localhost ou vers une plage privée permettrait aux webhooks d'atteindre des réseaux privés. Pour le développement local, utilisez wajub listen.

Le secret

Chaque endpoint possède son propre secret de signature, affiché une seule fois lors de sa création. Ensuite, Reveal secret l'affiche à nouveau après confirmation de votre mot de passe. Cette action est enregistrée.

Pour le renouveler, utilisez Rotate à côté du secret sur la page de l'endpoint, derrière la même confirmation de mot de passe, ou POST /webhooks/{id}/rotate-secret depuis l'API. Le nouveau secret remplace l'ancien immédiatement et n'est affiché qu'une fois. Chaque tentative envoyée ensuite est signée avec lui, y compris les nouvelles tentatives d'événements envoyés avant le renouvellement : tant que votre gestionnaire ne le connaît pas, il les rejette. Faites-lui accepter deux secrets avant de renouveler, ajoutez le nouveau dès qu'il s'affiche, puis retirez l'ancien. Une livraison refusée entre-temps est retentée, signée avec le nouveau secret. La carte « Secret de signature de plus de 6 mois » de la vue d'ensemble compte depuis le dernier renouvellement.

Passer un endpoint en live

Les endpoints de sandbox et de live sont distincts. Pour recevoir les événements live, basculez le Dashboard en live et créez de nouveau l'endpoint avec la même URL et la même liste d'événements. Il reçoit un nouveau secret.

La page d'un endpoint de sandbox porte un bouton Promote to Live qui fait cette copie en une seule action : il crée l'endpoint live avec la même URL et les mêmes événements, bascule le Dashboard en live et affiche une seule fois le nouveau secret live. Il refuse lorsqu'un endpoint live porte déjà cette URL, ou lorsque l'URL n'est pas en https://.

Send test envoie une vraie livraison, avec des données de test

Send test envoie à l'endpoint une livraison construite clé pour clé comme une vraie, signée avec le véritable secret de l'endpoint. Il prouve que l'URL est accessible, que votre vérification de signature réussit et que votre handler accepte l'enveloppe. Seul son contenu est fictif : l'événement est webhook.test et data est un exemple, il n'exerce donc pas le code qui traite un vrai type d'événement.

Le contenu envoyé par Send test
{
"id": "evt_test_kZ3qP8mWvL2xR7tB5nY4hC6d",
"event": "webhook.test",
"data": {
"id": "test_123",
"message": "This is a test webhook from Wajub."
},
"livemode": false,
"pending_webhooks": 1,
"api_version": "2026-10-11",
"request": {
"id": null,
"idempotency_key": null
},
"created": "2026-01-15T10:30:00+00:00"
}

Il porte l'en-tête X-Wajub-Delivery-Id comme toute livraison, livemode suit l'environnement dans lequel se trouve le Dashboard, et la tentative est enregistrée dans les livraisons de l'endpoint avec le statut success ou failed, selon votre réponse. Il n'est pas relancé, et ce n'est pas un événement : GET /events ne le liste pas.

Répondez-y par un 2xx

Un handler qui aiguille sur event doit traiter un type inconnu, webhook.test compris, en répondant 200 sans rien faire. Pour exercer le code d'un vrai type, utilisez wajub trigger, qui produit de vrais événements.

Que pensez-vous de ce contenu ?