Aller au contenu
Échap
  • Tapez ce que vous cherchez avec vos mots : « Slack », « 503 », « prix ».

Webhook générique

Prévenir PostShip depuis n'importe quel hébergeur ou pipeline de CI avec une adresse, un secret et une ligne de curl.

Plan Pro et au-delàMis à jour le 11 septembre 2026

Sur cette page

Vercel, Netlify et Cloudflare ont chacun leur carte parce que chacun signe et parle à sa façon. Tout le reste — Coolify, Railway, Render, un VPS déployé par rsync, un job de CI — n'a besoin que d'une adresse à appeler après la mise en ligne, avec un secret pour prouver que c'est bien lui. C'est la carte Autre hébergeur de la page Intégrations.

Régler

  1. Ouvrez Projet → Intégrations, carte Autre hébergeur.
  2. Cliquez sur Générer un secret. Il s'affiche une seule fois : rangez-le dans une variable d'environnement de votre déploiement, par exemple POSTSHIP_HOOK_SECRET. Il ne sera plus réaffiché ; Générer un nouveau secret en fabrique un autre et invalide l'ancien.
  3. Copiez L'adressehttps://postship.fr/api/generic/deploy/<id du projet> — ou directement La ligne curl.
  4. Appelez cette adresse à la fin de chaque mise en ligne.

La carte affiche « Pas encore branché », puis « Secret généré, aucun appel reçu pour l'instant », puis « Branché — dernier appel il y a … » dès qu'un appel correctement authentifié arrive. Désactiver efface le secret ; les appels suivants répondent 404 Not configured.

L'appel

Le secret voyage dans l'en-tête X-PostShip-Secret ou, pour les outils qui ne savent poser qu'une URL, en ?token= sur l'adresse. Il est comparé en temps constant. Le corps est facultatif et lu avec bienveillance : un sha (ou commit, commit_sha, COMMIT_SHA, GIT_COMMIT) et une url (ou deployment_url, deploy_url, DEPLOY_URL). Tout le reste est ignoré, et un corps vide ou illisible n'est pas une erreur — c'est un déploiement dont on ne sait rien de plus que « il a eu lieu », ce qui suffit.

À la fin de votre script de déploiement
curl -fsS -X POST https://postship.fr/api/generic/deploy/<id du projet> \
  -H "X-PostShip-Secret: $POSTSHIP_HOOK_SECRET" \
  -H "Content-Type: application/json" \
  -d '{"sha":"'$(git rev-parse HEAD)'"}'

Le sha n'est retenu que s'il ressemble à un sha (hexadécimal, 7 à 64 caractères) : c'est une valeur affichée dans Déplois. L'URL n'est retenue qu'en http ou https.

Ce que PostShip fait de l'appel

Production seulement : un hébergeur inconnu n'a pas de notion de preview que PostShip saurait lire. Ce qui arrive ici est une mise en ligne, et déclenche tout ce qu'une mise en ligne déclenche (vue d'ensemble) : toutes les URL du projet avec l'indice « déploiement 14:32 », la dérive DNS, le Ship Score, la ligne dans Déplois (fournisseur « Webhook générique »), les reprises T+2 / T+8, l'archive, la mesure PageSpeed et le diff visuel, les liens de la page d'accueil.

La réponse résume ce qui s'est passé :

{ "triggered": true, "deployEventId": "…", "checked": 8, "failed": 0, "score": 100 }

Le webhook générique ne publie pas de Check GitHub, même quand un sha est fourni. Un appel qui arrive pendant un gel de déploiement est annoncé sur vos salons comme n'importe quel autre.

Ce qui déclenche une alerte

Le webhook lui-même n'alerte pas. Ce sont les vérifications qu'il lance qui alertent, aux mêmes conditions que sur le cycle (règles), avec la mention « Depuis le dernier déploiement » dans le message. Le radar de mutation ne sonne que sur ces passages-là.

Limites et plans

FreeProTeam
Webhook génériqueNon (403 Plan does not include this)OuiOui
Appels par moisSans plafond dédiéSans plafond dédié

Il n'y a pas de quota propre au webhook : chaque appel fait tourner les vérifications du projet, c'est-à-dire exactement ce que fait un cycle. Un pipeline qui appellerait l'adresse en boucle produirait une ligne Déplois par appel — c'est le webhook qui dédoublonne par identifiant chez Vercel, pas ici.

Dépannage

Pourquoi 401 Invalid secret ?

Le secret envoyé n'est pas celui de la carte, ou il a été régénéré. Vérifiez la variable d'environnement de votre pipeline et l'en-tête exact : X-PostShip-Secret, ou token dans l'URL.

Pourquoi 404 Not configured ?

Aucun secret n'existe pour ce projet : il n'a jamais été généré, ou Désactiver a été cliqué. Générez-en un nouveau.

Pourquoi l'appel prend jusqu'à une minute ?

Il attend la fin des vérifications avant de répondre — c'est ce qui permet de rendre checked, failed et score. Ne le placez pas dans une étape avec un délai plus court, et acceptez son échec sans faire échouer le déploiement : curl -fsS renvoie une erreur sur un 5xx, ajoutez || true si votre pipeline doit continuer quoi qu'il arrive.

Pourquoi la détection par empreinte s'est arrêtée ?

C'est voulu : dès qu'un appel a été reçu, la détection sans webhook s'efface pour ne pas enregistrer deux déploiements par mise en ligne.