Caputchin
Verificación alojada

Referencia del payload del webhook

Cuando un envío supera la verificación, el reenviador envía un POST a tu URL de webhook configurada. Esta página es el contrato exacto de esa petición. Para el recorrido de configuración, mira configura la verificación alojada; para el concepto, mira verifica sin backend.

Línea de petición y headers

El reenviador envía un POST con un cuerpo JSON y estos headers:

HeaderValor
content-typeapplication/json
acceptapplication/json
user-agentCaputchin-Forwarder/0.1
x-caputchin-test1, presente solo en una Test delivery del dashboard; ausente en los envíos reales

La llamada se envía con redirects desactivados y un timeout de unos segundos. La petición no va firmada; el secreto de la URL del webhook es lo que la autentica.

Cuerpo

El cuerpo es un objeto JSON con dos claves de nivel superior, caputchin (metadato de verificación que Caputchin añade) y form (tus campos enviados):

{
  "caputchin": {
    "site_key": "cpt_pub_...",
    "session_id": "...",
    "game_id": "caputchin/games/leaf-memory",
    "score": 847,
    "duration_ms": 4200,
    "verified_at": 1748640000000
  },
  "form": {
    "email": "visitor@example.com",
    "message": "Hello!"
  }
}

El objeto caputchin

CampoTipoSignificado
site_keystringLa clave pública cpt_pub_... de la que vino el envío.
session_idstringUn id de sesión de verificación opaco, útil para correlación o deduplicación. En una entrega de prueba lleva el prefijo test_.
game_idstring o nullEl juego que jugó el visitante. Null cuando la verificación corrió sin juego.
scorenumber o nullLa puntuación del juego. Metadato declarado por el cliente para analítica, nunca una señal de confianza. Null cuando no aplica.
duration_msnumber o nullCuánto pasó el visitante jugando el juego, en milisegundos. Declarado por el cliente, no una señal de confianza. Null cuando no aplica (por ejemplo una verificación sin juego).
verified_atnumberCuándo Caputchin verificó el token, como un epoch Unix en milisegundos.
testboolean (opcional)Presente y true solo en una entrega de prueba del dashboard. Ausente en los envíos reales.

game_id, score y duration_ms son cada uno nullable en un envío real, así que protege contra null antes de leerlos. Ninguno de los campos de caputchin es una decisión de confianza: la confianza es que la petición llegara siquiera, porque un envío que falla la verificación nunca se reenvía.

El objeto form

form es un objeto plano de tus campos enviados como claves string y valores string, exactamente como se postearon, con un cambio: el campo caputchin-token se elimina antes de la entrega, así que nunca aparece aquí. El reenviador acepta solo campos de texto; un envío que lleve una subida de archivo se rechaza antes de cualquier entrega.

Qué debería devolver tu handler

Devuelve cualquier estado 2xx para acusar recibo. El reenviador trata una respuesta de no-2xx, un timeout, o un fallo de conexión como una entrega fallida, y una entrega fallida no se reintenta. Rastrea la salud de entrega en la página de estadísticas.

Véase también

En esta página