# Notifications par webhook

Source: https://instatus.com/help/fr/status-page/notifications/webhook

## Ajouter un abonné webhook

Connectez-vous à Instatus sur [instatus.com/login](https://dashboard.instatus.com/login) puis choisissez votre page de statut.

Allez dans **Abonnés**, puis **Webhook**.

Cliquez sur **Ajouter un abonné webhook**.

Un nouveau formulaire apparaît, dans lequel vous pouvez saisir :

- L’URL du webhook
- Une adresse e-mail

![Abonné webhook](https://instatus.com/help/notification/webhook1.png)

Nous enverrons des requêtes à votre URL selon ce [format](https://instatus.com/help/fr/webhooks)
et un e-mail sera envoyé à l’adresse indiquée en cas de problème avec l’URL.

Vous pouvez nommer votre abonné webhook en cliquant dessus et en saisissant un nom dans le formulaire ; vous pouvez aussi le supprimer en cliquant sur Se désabonner.

## Vérification de la charge utile du webhook

**Il est fortement recommandé de valider la charge utile du webhook dans votre point de terminaison.**

Nous signons les charges utiles des webhooks avec un secret et incluons la signature dans un en-tête nommé `x-instatus-webhook-signature`. Cette signature vous permet de vérifier que le webhook provient bien d’Instatus.

### Étapes pour vérifier un webhook

1. Récupérez votre **secret de webhook** dans le tableau de bord (vous le trouvez lors de la modification ou de la création d’un webhook, où vous pouvez aussi le personnaliser).

![Secret du webhook](https://instatus.com/help/notification/webhook-secret-example.png)

2. Créez sur votre serveur un point de terminaison qui recevra le webhook.

3. Comparez la signature avec celle générée par votre serveur pour la valider.

4. Si les signatures correspondent, traitez le webhook.

#### Exemple de code

```javascript
import crypto from 'crypto'
import express from 'express'

const app = express()
app.use(express.json())

const WEBHOOK_SECRET = 'your-webhook-secret'

function isVerifiedPayload(payload, signature, secret) {
  const hmac = crypto.createHmac('sha256', secret)
  const digest = hmac.update(JSON.stringify(payload)).digest('hex')
  return crypto.timingSafeEqual(Buffer.from(digest), Buffer.from(signature))
}

app.post('/endpoint/to/webhook', (req, res) => {
  const payload = req.body
  const signature = req.header('x-instatus-webhook-signature')

  if (!signature) {
    return res.status(400).send('Signature missing')
  }

  if (!isVerifiedPayload(payload, signature, WEBHOOK_SECRET)) {
    return res.status(401).send('Invalid signature')
  }

  // Process the valid webhook
  res.status(200).send('Webhook received')
})

app.listen(3000, () => console.log('Server running on port 3000'))
```

### Pourquoi la vérification est importante

- **Garantit l’authenticité** : assure que le webhook provient bien de notre plateforme.
- **Empêche l’altération** : détecte toute modification de la charge utile.
- **Renforce la sécurité** : protège contre les attaques par rejeu et les accès non autorisés.

- [Notifications X](https://instatus.com/help/fr/status-page/notifications/x): Découvrez comment envoyer des notifications X.
