# SDK de servidor: el consentimiento en el backend

Lee la decisión de consentimiento en tu código de servidor y verifica los webhooks firmados.

> Canonical: https://www.flowconsent.com/es/doc/server-sdk
> Last updated: 2026-07-29
## Por qué

El banner bloquea el navegador, pero la mitad de los tratamientos salen del servidor: GA4 Measurement Protocol, sincronización con el CRM, cookies de atribución. `@flowconsent/server-sdk` lee la cookie first-party colocada por el banner (contrato v1, versionado) y devuelve una decisión tipada — **rechazo por defecto** si la cookie falta, es ilegible o está caducada.

## Instalación

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

Cero dependencias, compatible con edge (Vercel, Cloudflare Workers, Node ≥ 18).

## Leer la decisión

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

const decision = readConsent(request)
if (decision.can('analytics')) {
  // enviar el evento GA4 Measurement Protocol
}
// decision.reason: 'ok', 'no_cookie', 'expired', 'version_mismatch'…
```

`decision.can('google-analytics')` también funciona por servicio. Pasa `expectedConfigHash` (el de tu banner) para invalidar automáticamente las elecciones anteriores a un cambio de configuración.

## Verificar los webhooks

Los webhooks de consentimiento van firmados (HMAC-SHA256, cabecera `X-FlowConsent-Signature`, al estilo Stripe):

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

El secreto solo se muestra una vez, al crear el webhook (app o MCP `configure_consent_webhook`).
