# SDK serveur : le consentement côté backend

Lire la décision de consentement dans votre code serveur et vérifier les webhooks signés.

> Canonical: https://www.flowconsent.com/fr/doc/server-sdk
> Last updated: 2026-07-29
## Pourquoi

La bannière bloque le navigateur, mais la moitié des traitements partent du serveur : GA4 Measurement Protocol, synchronisation CRM, cookies d'attribution. `@flowconsent/server-sdk` lit le cookie first-party posé par la bannière (contrat v1, versionné) et rend une décision typée — **refus par défaut** si le cookie est absent, illisible ou périmé.

## Installation

```sh
npm install @flowconsent/server-sdk
```

Zéro dépendance, compatible edge (Vercel, Cloudflare Workers, Node ≥ 18).

## Lire la décision

```ts
import { readConsent } from '@flowconsent/server-sdk'

const decision = readConsent(request)
if (decision.can('analytics')) {
  // envoyer l'événement GA4 Measurement Protocol
}
// decision.reason : 'ok', 'no_cookie', 'expired', 'version_mismatch'…
```

`decision.can('google-analytics')` fonctionne aussi par service. Passez `expectedConfigHash` (celui de votre bannière) pour invalider automatiquement les choix antérieurs à un changement de configuration.

## Vérifier les webhooks

Les webhooks de consentement sont signés (HMAC-SHA256, en-tête `X-FlowConsent-Signature`, style Stripe) :

```ts
import { verifyWebhookSignature } from '@flowconsent/server-sdk'
const check = await verifyWebhookSignature(rawBody, signatureHeader, secret)
if (!check.valid) return new Response('invalid', { status: 400 })
```

Le secret n'est montré qu'une fois, à la création du webhook (app ou MCP `configure_consent_webhook`).
