# Backend intermediario

> Cómo usar Trevol desde una aplicación web (Next.js, Nuxt, SvelteKit, Angular) sin exponer la llave en el navegador.

Fuente: https://platform.trevol.si/docs/backend-intermediario

**No hay SDK para el navegador**, porque la llave de la API nunca debe estar en el navegador: quien la vea puede emitir documentos a nombre de tu empresa.

El patrón es el de **backend intermediario**:

1. Tu frontend llama a **tu servidor** (una ruta de tu aplicación), con la sesión de tu usuario.
2. Tu servidor comprueba quién es y qué puede hacer, arma el documento **desde tus propios datos** (no reenvía el cuerpo que llegó del navegador), y llama a Trevol.
3. Tu servidor responde al frontend lo que el usuario necesita (el estado y el número, no la llave).

> **Qué no hacer:** - No pongas la llave en una variable pública (`NEXT_PUBLIC_…`, `VITE_…`, `PUBLIC_…`, `environment.ts` de Angular): esas variables viajan al navegador.
> - No hagas un «proxy abierto» que reenvíe cualquier ruta y cuerpo a Trevol: cualquiera podría emitir lo que quiera.
> - Deriva la `Idempotency-Key` de tu venta (`VENTA-2026-000123`), no de un valor que mande el navegador.

Los ejemplos con el SDK de Node.js (Next.js, Nuxt, SvelteKit y Angular) llegan cuando los SDK se publiquen. El patrón es el mismo con cualquier cliente HTTP: la ruta de tu servidor lee `TREVOL_API_KEY` del entorno, arma el documento desde tus datos y llama a `POST https://api.trevol.si/v1/invoices` con `Authorization: Bearer`, un `Idempotency-Key` derivado de tu venta y el cuerpo que describe la [referencia](/docs/api/invoices).

## Y los webhooks

Los avisos de Trevol también llegan a tu servidor, nunca al navegador. Recíbelos en una ruta tuya, verifica la firma con el cuerpo crudo y avisa a tu frontend por tu propio canal (WebSocket, SSE o sondeo de tu base). Ver [Webhooks](/docs/webhooks#firma).
