# API · Webhooks

> Qué eventos existen, cuántos reintentos hay, en qué formato llegan y cómo confirmar el estado de un cobro.

- kind: api-operation
- status: stable
- api_version: v1
- last_verified: 2026-08-28
- url: https://www.tilopay.com/developers/api/webhooks

## Recurrencia [#recurrencia]

Son 6 campos que se configuran al **crear o editar un plan**. Todos opcionales.

| Campo | Qué es |
|---|---|
| `webhook_subscribe` | Webhook de suscripción |
| `webhook_payment` | Webhook de cobro |
| `webhook_rejected` | Webhook de cobro rechazado |
| `webhook_unsubscribe` | Webhook de baja |
| `webhook_reactive` | Webhook de reactivación |
| `thanks_url` | **No es un webhook:** es un callback GET |

## Links de pago [#links-de-pago]

Se configura `webhook_url` al crear el link.

## Reintentos [#reintentos]

| Origen | Intentos | Cuándo reintenta |
|---|---|---|
| Recurrencia | 5 | Cuando tu respuesta es 400, 404, 502, 504 o 403 |
| Compras | 1 | — |

Se da por entregado con un **HTTP 200**. Respondé 200 en cuanto recibás el evento y procesalo
aparte: cualquier otra cosa cuenta como fallo, y en compras no hay segundo intento.

## Formato [#formato]

JSON.

## El token de tarjeta [#token]

| Origen | Token |
|---|---|
| Recurrencia | **No se envía** |
| Compras | Se envía y **es utilizable** |

## Verificación de origen [#verificacion]

<Callout type="warn">
La única verificación de origen disponible es el `orderHash`, y **su algoritmo no es público**:
se entrega al comercio que lo solicita escribiendo a `sac@tilopay.com`.

Mientras no tengás el algoritmo, no tomés decisiones de negocio irreversibles solo con el
contenido del webhook: confirmá el estado contra el API antes de despachar o liberar un
servicio.
</Callout>

## Webhook del flujo principal [#processpayment]

<Callout type="info">
`processPayment` también tiene webhook. Su contrato **se entrega al comercio que lo solicita**:
escribí a `sac@tilopay.com` para recibirlo.
</Callout>
