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

# Flujos de trabajo con webhooks

> Otorga acceso a una Oferta desde un checkout de Stripe de terceros, revócalo al cancelar, y envía datos de compras y Formularios de Kajabi a herramientas externas.

Un **webhook** es un mensaje que una app envía a otra en el momento en que algo sucede. En Kajabi, los webhooks funcionan en ambas direcciones: un **webhook entrante** permite que una herramienta externa otorgue o revoque el acceso a una Oferta, y un **webhook saliente** envía datos de compras o Formularios a las herramientas que ya usas.

<Note>
  **Nota:** Los webhooks están disponibles en los planes Growth y Pro. Aprende a [cambiar tu plan de suscripción de Kajabi](/es/articles/account-settings/billing/manage-your-subscription).
</Note>

## Antes de empezar

* Crea la [Oferta](/es/articles/sales/offers/offers-overview) a la que los clientes deberían tener acceso
* Confirma que tu plan incluye webhooks
* Obtén acceso de administrador a la herramienta externa que envía o recibe el webhook
* Para flujos con Stripe, elige un conector como Zapier, Make, o tu propio servidor

## Copia las URLs de Activación y Desactivación de una Oferta

Cada Oferta tiene su propio par de URLs de webhook entrante. La URL de Activación otorga acceso a todos los Productos de esa Oferta, y la URL de Desactivación lo revoca.

1. Desde el Panel, haz clic en **Sales** y luego en **Pricing**.
2. Selecciona tu Oferta.
3. Haz clic en **More** y luego selecciona **Webhooks**.
4. Copia la **Activation URL**, la **Deactivation URL**, o ambas.

Cada URL contiene un token secreto único para esa Oferta, así que cópiala desde esta ventana en lugar de escribirla.

<Warning>
  **Advertencia:** Cualquiera que tenga una URL de Activación puede otorgar acceso gratuito a tu Oferta. Guárdala como una contraseña y nunca la publiques en código del lado del cliente ni en un repositorio público.
</Warning>

### Parámetros requeridos

Toda solicitud a una URL de Activación o Desactivación debe incluir tres valores:

| Parámetro          | Qué enviar                                                                  |
| :----------------- | :-------------------------------------------------------------------------- |
| `name`             | El nombre completo del cliente                                              |
| `email`            | La dirección de correo del cliente                                          |
| `external_user_id` | Un ID estable para el cliente, generalmente su dirección de correo repetida |

Envíalos como una solicitud POST, con los tres al nivel superior del payload:

```json theme={null}
{
  "name": "Jordan Lee",
  "email": "jordan@example.com",
  "external_user_id": "jordan@example.com"
}
```

<Note>
  **Nota:** Kajabi lee estos tres valores solo en el nivel superior. Si tu conector los anida dentro de otro objeto, la solicitud falla con un error `email can't be blank` o `name can't be blank`.
</Note>

## Otorga acceso después de una compra en Stripe en un sitio de terceros

Si vendes en tu propio sitio web — WordPress, Shopify o un checkout personalizado — y cobras a través de Stripe, puedes hacer que Kajabi cree la cuenta del cliente y desbloquee sus Productos en el momento en que Stripe confirme el pago.

Stripe no puede llamar a la URL de Activación por sí solo. Stripe envuelve el nombre y el correo del comprador dentro de su propio objeto de evento, y Kajabi solo lee esos valores en el nivel superior del payload. Coloca un conector entre ambos para transformar los datos: Zapier, Make, o un pequeño script en tu propio servidor.

### Conecta Stripe con Kajabi usando Zapier

Zapier tiene una acción integrada de Kajabi, así que esta ruta no requiere código.

1. Crea un Zap con **Stripe** como app de disparo, y elige el evento de Stripe que se activa cuando se completa un pago.
2. Agrega **Kajabi** como app de acción y selecciona **Grant Access to an Offer**.
3. Conecta tu cuenta de Kajabi y selecciona el **Site** y la **Offer** a otorgar.
4. Asigna los datos del comprador desde Stripe a los campos **Customer Name**, **Email** e **External User ID**.
5. Ejecuta un pago de prueba en Stripe para confirmar que el otorgamiento funciona, y luego activa el Zap.

Para el recorrido completo de conexión, consulta [Usa Zapier con Kajabi](/es/articles/api-integrations/zapier/use-zapier-with-kajabi).

### Llama a la URL de Activación desde tu propio servidor

Usa esta ruta si ya tienes un servidor que escucha los eventos de Stripe.

1. Suscribe tu servidor al evento de Stripe que se dispara cuando se completa un pago.
2. Extrae el nombre y el correo del comprador del evento de Stripe.
3. Envía una solicitud POST a la **Activation URL** de la Oferta con `name`, `email` y `external_user_id` en el nivel superior del payload.
4. Trata una respuesta `{"status":"OK"}` como un otorgamiento exitoso, y registra cualquier otra respuesta para revisión.

<Tip>
  **Consejo:** Usa la dirección de correo del comprador como `external_user_id` a menos que ya tengas un ID de cliente estable. Kajabi busca coincidencias por `external_user_id` primero, y reutilizar el correo mantiene la activación y la desactivación apuntando a la misma persona.
</Tip>

## Controla los correos que Kajabi envía cuando un webhook otorga una Oferta

Lo que recibe el cliente depende de si ya tiene una cuenta en tu sitio.

* Los **clientes nuevos** reciben un correo de bienvenida con sus datos de acceso, porque Kajabi crea la cuenta y les genera una contraseña
* Los **clientes existentes** no reciben nada por defecto, porque el correo de Oferta otorgada está desactivado para los otorgamientos por webhook

Para enviar también el correo de Oferta otorgada, agrega `?send_offer_grant_email=true` al final de la URL de Activación:

```text theme={null}
https://checkout.newkajabi.com/webhooks/offers/XXXXXXXX/000000/activate?send_offer_grant_email=true
```

## Revoca el acceso cuando un cliente cancela o recibe un reembolso

El acceso otorgado por webhook no termina por sí solo. Si una suscripción vence en Stripe, o reembolsas un pedido, envía una segunda solicitud para eliminar el acceso del cliente.

1. Suscribe tu conector al evento de Stripe que se dispara ante una cancelación, un pago fallido o un reembolso.
2. Envía una solicitud POST a la **Deactivation URL** de la Oferta con el mismo `name`, `email` y `external_user_id` que enviaste al otorgar la Oferta.
3. Confirma que el cliente perdió el acceso a todos los Productos de esa Oferta.

En Zapier, usa la acción **Revoke Access to an Offer** en lugar de construir la solicitud tú mismo.

<Note>
  **Nota:** La desactivación busca al cliente solo por `external_user_id`. Si envías un valor diferente al que enviaste en la activación, o lo dejas en blanco, la solicitud devuelve un error `Not found` y el cliente conserva el acceso.
</Note>

## Envía datos de compra a otra herramienta cuando se vende una Oferta

Usa un webhook saliente en una sola Oferta cuando solo esa Oferta necesite notificar a una herramienta externa — un servicio de cumplimiento para un bono físico, por ejemplo, o una hoja de cálculo que le da seguimiento a un solo lanzamiento.

1. Haz clic en **Sales** en tu Panel de Kajabi y luego selecciona tu Oferta.
2. Haz clic en **More** y luego selecciona **Webhooks**.
3. Pega la URL de destino en el campo **Purchase Webhook URL** bajo **Outbound Webhooks**.
4. Haz clic en **Save**.
5. Haz clic en **Send Test**, que aparece junto al campo una vez que se guarda una URL, para enviar datos de muestra a tu endpoint.

Para ver qué campos llegan a tu endpoint, consulta la [referencia de datos de webhooks salientes](/es/articles/api-integrations/webhooks/what-information-is-sent-with-outbound-webhooks).

## Envía eventos de pago de todo el sitio a otra herramienta

Usa un webhook de todo el sitio cuando un sistema externo necesite recibir cada pago, no solo las ventas de una Oferta — una herramienta contable o un panel interno, por ejemplo.

1. Ve a **Settings** > **Integrations & Webhooks**.
2. Haz clic en **Create webhook**.
3. Selecciona **Payment Succeeded** o **Cart Purchase** en la lista de **Event**.
4. Ingresa tu endpoint en el campo **Endpoint URL**.
5. Haz clic en **Add webhook**.

Cada webhook que creas aparece en la lista con su evento y URL, y puedes eliminar cualquier webhook que ya no necesites.

<Note>
  **Nota:** El endpoint debe usar HTTPS y ser compatible con TLS 1.2. Kajabi rechaza cualquier otra URL al guardar el webhook.
</Note>

## Envía envíos de Formularios a otra herramienta

Envía los opt-ins directo a un CRM o plataforma de correo a medida que llegan, sin exportar una lista.

1. Abre el Formulario desde el que quieres enviar los envíos.
2. Haz clic en el menú de más opciones (...) y luego selecciona **Webhooks**.<br />
   <Frame>
     <img src="https://mintcdn.com/kajabi-support/oRcnAQBkdAfmMkii/images/Screenshot-2026-08-24-at-1.16.29-PM.png?fit=max&auto=format&n=oRcnAQBkdAfmMkii&q=85&s=0b147f9c38bf26de85bf0d2a6ce0a484" alt="Screenshot 2026 08 24 At 1 16 29 PM" width="1020" height="326" data-path="images/Screenshot-2026-08-24-at-1.16.29-PM.png" />
   </Frame>
3. Ingresa la URL que debe recibir los datos del envío.
4. Haz clic en **Save**.

Un enlace de **Send Test** aparece junto al campo una vez que se guarda una URL. Úsalo para verificar que tu endpoint acepte los datos antes de depender de envíos en vivo. Para crear el Formulario en sí, consulta [Crea y arma tu Formulario](/es/articles/marketing/forms/create-and-build-your-form).

## Confirma que un webhook funcionó

Toda solicitud a una URL de Activación o Desactivación queda registrada, sin importar si tuvo éxito o falló. Revisa el registro primero cuando un cliente diga que no obtuvo acceso.

1. Haz clic en **Sales** en tu Panel de Kajabi y luego selecciona tu Oferta.
2. Haz clic en **More** y luego selecciona **Webhooks**.
3. Haz clic en **View your webhook log entries** debajo de la **Deactivation URL**.
4. Filtra por estado, o busca en los parámetros la dirección de correo de un cliente.

Las entradas se marcan como `pending`, `processing`, `complete` o `error`. Una entrada `error` muestra los valores que llegaron y la razón por la que se rechazó la solicitud, lo cual generalmente basta para detectar un parámetro faltante o mal escrito.

## Solución de problemas

* **`invalid webhook token`** — el token en la URL está mal o se cortó al copiar y pegar. Copia la URL de nuevo desde la ventana de **Webhooks** de la Oferta.
* **`Not found`** — la Oferta está archivada, el ID de Oferta en la URL es incorrecto, o la solicitud se envió a una desactivación sin un `external_user_id` coincidente.
* **Una página 404 en tu navegador** — las URLs de Activación y Desactivación solo aceptan solicitudes POST, así que abrir una en un navegador siempre devuelve un 404. Haz la prueba con tu conector o una herramienta que pueda enviar una solicitud POST.
* **`can't be blank`** — falta uno de los tres parámetros requeridos, o el payload los anida dentro de otro objeto en lugar de enviarlos en el nivel superior.
* **El otorgamiento falla en una compra repetida** — un cliente que ya tiene acceso activo a una Oferta no puede recibirla otorgada por segunda vez.

Para errores a nivel de payload y un diagrama de diagnóstico completo, consulta [Soluciona problemas con los Webhooks](/es/articles/api-integrations/webhooks/troubleshooting-webhooks).

## Preguntas frecuentes

### ¿Puedo usar webhooks con un procesador de pagos distinto de Stripe?

Sí. Las URLs de Activación y Desactivación de Kajabi no saben ni les importa qué procesador tomó el pago. Cualquier herramienta que pueda enviar una solicitud POST con `name`, `email` y `external_user_id` en el nivel superior puede otorgar o revocar acceso, incluyendo PayPal, un plugin de membresías, o tu propio checkout.

### ¿Mi cliente recibirá un correo cuando un webhook le otorgue una Oferta?

Un cliente que es nuevo en tu sitio recibe un correo de bienvenida con sus datos de acceso. Un cliente que ya tiene una cuenta no recibe nada a menos que agregues `?send_offer_grant_email=true` al final de la URL de Activación.

### ¿Una URL de Activación puede otorgar más de una Oferta?

No. Cada Oferta tiene sus propias URLs de Activación y Desactivación con su propio token. Para otorgar varias Ofertas al mismo cliente, envía una solicitud separada a la URL de Activación de cada Oferta.

### ¿Necesito un desarrollador para conectar Stripe con Kajabi?

No. La acción **Grant Access to an Offer** de Zapier gestiona la conexión sin código. Solo se necesita un desarrollador si quieres que tu propio servidor llame directamente a la URL de Activación.

### ¿Cuál es la diferencia entre un webhook de Oferta y un webhook de todo el sitio?

La **Purchase Webhook URL** de una Oferta se dispara solo cuando esa Oferta se vende. Un webhook creado en **Settings** > **Integrations & Webhooks** se dispara para el evento que elegiste en todo tu sitio.
