Skip to main content
Retour aux Docs
🔌Automatisation & API

Webhooks

Envoyez des événements vers Discord, Slack, n8n ou vos propres systèmes

Les webhooks poussent les événements de Predite vers votre propre serveur à l'instant où ils surviennent — aucun polling nécessaire. Lorsqu'un bot exécute un trade, qu'un stop-loss se déclenche ou que le scanner trouve un nouvel edge, Predite envoie un POST HTTP vers une URL que vous contrôlez. Les webhooks sont une fonctionnalité du plan Bot et se gèrent depuis les Réglages, sur la page Webhooks.

Créer un webhook

Il vous faut trois choses : une URL qui accepte les requêtes POST, un libellé pour distinguer vos webhooks entre eux, et au moins un événement auquel vous abonner.

Votre URL doit être en https en production. Predite refuse de livrer vers des adresses privées, de loopback ou de réseau interne, et ne suit pas les redirections — cela protège votre compte contre l'usage d'un endpoint mal configuré pour atteindre l'intérieur de notre infrastructure.

Événements

Il existe six événements. Quatre sont actifs aujourd'hui :

  • ev_signal — le scanner a publié un nouveau signal d'Expected Value. Envoyé à tous les abonnés (non spécifique à un utilisateur).
  • arb_opportunity — une nouvelle opportunité d'arbitrage inter-plateformes a été trouvée. Également envoyé à tous les abonnés.
  • bot_trade_executed — l'un de vos bots a ouvert une position, en live ou en paper.
  • stop_loss_triggered — l'une de vos sorties protectrices (stop-loss, take-profit ou stop suiveur) a clôturé une position.

Deux autres sont réservés et marqués soon dans le tableau de bord — whale_move et resolution_imminent. Vous pouvez déjà vous y abonner, mais ils ne livrent encore rien.

Les événements portant sur votre propre activité ne sont envoyés qu'à vous. Les événements à l'échelle du marché sont envoyés à tous ceux qui y sont abonnés.

Format de la charge utile

Chaque livraison est un POST avec un corps JSON de cette forme :

  • event — le nom de l'événement, par exemple bot_trade_executed
  • timestamp — le moment où l'événement s'est produit, au format ISO-8601
  • data — un objet contenant les détails de cet événement

À côté, Predite envoie ces en-têtes :

  • X-Predite-Event — le nom de l'événement
  • X-Predite-Timestamp — le même timestamp
  • X-Predite-Signature — la signature, au format sha256=<hex>

Vérifier la signature

Chaque webhook possède son propre secret, affiché dans le tableau de bord et commençant par whsec_. La signature est un HMAC-SHA256 du corps brut de la requête, calculé avec ce secret, encodé en hexadécimal et préfixé de sha256=.

Pour vérifier, calculez le HMAC du corps que vous avez reçu et comparez-le à l'en-tête X-Predite-Signature. S'ils ne correspondent pas, rejetez la requête — elle ne vient pas de nous. Vérifiez toujours avant d'agir sur une charge utile, et utilisez toujours le corps brut, jamais une version re-sérialisée du JSON analysé.

Livraison, échecs et désactivation automatique

  • Chaque événement est livré en une tentative unique, avec un délai d'expiration de 5 secondes. Il n'y a pas de nouvelle tentative automatique — concevez votre endpoint pour qu'il réponde vite et effectue le travail lourd ensuite.
  • Toute réponse non-2xx, expiration ou erreur de connexion compte comme un échec.
  • Après 10 échecs consécutifs, le webhook est automatiquement désactivé et s'affiche comme AUTO-DISABLED. Un seul succès remet le compteur à zéro.
  • Réactiver un webhook désactivé depuis le tableau de bord efface le compteur d'échecs.

Chaque tentative est enregistrée : le tableau de bord affiche donc le total des livraisons, les échecs consécutifs, le dernier succès, le dernier échec et le motif de l'échec.

Bon à savoir

  • Répondez 2xx dès que vous avez stocké l'événement ; tout ce qui est plus lent risque l'expiration à 5 secondes.
  • Comme il n'y a pas de nouvelle tentative, traitez les webhooks comme un canal de notification rapide plutôt que comme un registre garanti — rapprochez avec l'API publique si vous avez besoin de certitude.
  • Vous pouvez mettre un webhook en pause à tout moment au lieu de le supprimer.