> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ventry.es/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks (próximamente)

> Qué hay previsto y cómo resolverlo mientras tanto.

<Note>
  Los webhooks salientes **todavía no están disponibles**. Esta página describe lo
  previsto para que puedas diseñar tu integración sin tener que rehacerla después.
</Note>

## Mientras tanto: sondeo incremental

Para casi todos los casos, consultar cada 30 segundos con `updated_since` o
`since` da la misma información con una complejidad mucho menor. Ver
[Paginación](/es/pagination).

| Lo que quieres saber | Cómo                                         |
| -------------------- | -------------------------------------------- |
| Quién ha entrado     | `GET /tickets?status=used&updated_since=...` |
| Escaneos denegados   | `GET /checkins?result=denied&since=...`      |
| Ventas nuevas        | `GET /transactions?since=...`                |
| Recargas nuevas      | `GET /topups?since=...`                      |

Con el cupo de 120 peticiones por minuto, sondear cada 30 segundos consume dos.

## Lo previsto

Eventos que se emitirán:

| Evento                     | Cuándo                                              |
| -------------------------- | --------------------------------------------------- |
| `ticket.created`           | Se da de alta una entrada                           |
| `ticket.cancelled`         | Se anula una entrada                                |
| `ticket.checked_in`        | Se acredita una entrada y se le vincula una pulsera |
| `access.denied`            | Se deniega un acceso a una zona                     |
| `wristband.pending_review` | Doble acreditación sin resolver                     |
| `transaction.completed`    | Se registra una consumición                         |
| `topup.completed`          | Se registra una recarga                             |

### Formatos

Además del formato JSON propio, habrá salida directa a **Discord** y **Slack**
mediante sus webhooks entrantes, para poder poner avisos operativos en un canal
del equipo sin escribir código: acreditaciones duplicadas, accesos denegados en
una puerta concreta o pulseras bloqueadas.

### Entrega

* Firma `HMAC-SHA256` en la cabecera `X-Ventry-Signature`, sobre el cuerpo crudo.
* Reintentos con espera creciente ante respuestas distintas de `2xx`.
* Reenvío manual desde el panel de VENTRY.
* **Entrega al menos una vez**: tu receptor tendrá que ser idempotente y
  deduplicar por el identificador del evento.

## Qué puedes hacer ya para prepararte

<AccordionGroup>
  <Accordion title="Haz idempotente tu receptor">
    Sea por sondeo o por webhook, vas a ver el mismo registro más de una vez.
    Deduplica por el `id` del recurso, no por el orden de llegada.
  </Accordion>

  <Accordion title="No supongas orden">
    Un terminal sin cobertura sincroniza en bloque. Puedes recibir una venta de
    las 22:00 después de otra de las 23:00. Ordena por `occurred_at` en tu lado.
  </Accordion>

  <Accordion title="Separa ingesta de proceso">
    Guarda lo que recibes y procésalo aparte. Es lo que te permitirá cambiar el
    sondeo por webhooks sin tocar tu lógica de negocio.
  </Accordion>
</AccordionGroup>
