Kajabi tiene una API pública para conectar Kajabi con otros sistemas. Puedes añadir contactos desde el formulario de tu propia web. Puedes dar acceso a un curso a personas que pagaron en otro lugar. Puedes reunir los datos de compras en tu propio panel. Si herramientas como Zapier o Make no son suficientes, la API te da más control.

Este artículo explica qué puede hacer la API de Kajabi y qué no puede hacer. Se basa en la referencia oficial de la API (versión 1.1.0, a noviembre de 2026).

Resumen: qué puede hacer la API de Kajabi

La API pública de Kajabi destaca en cuatro áreas: datos de clientes, derechos de acceso (ofertas), datos de ventas y notificaciones de eventos (webhooks).

CategoríaQué puedes hacerEndpoints principales
ContactosListar, buscar, crear, actualizar y eliminar contactos. Añadir etiquetas. Conceder ofertas./v1/contacts
EtiquetasObtener la lista y los detalles de las etiquetas. Añadir o quitar etiquetas de un contacto./v1/contact_tags
Campos personalizadosObtener la lista y los detalles de los campos personalizados./v1/custom_fields
Notas de contactoListar, crear, actualizar y eliminar notas./v1/contact_notes
ClientesListar clientes, ver detalles, conceder y revocar ofertas./v1/customers
FormulariosObtener formularios y envíos. Enviar un formulario./v1/forms
Productos, cursos, ofertasObtener listas y detalles (solo lectura)./v1/products /v1/courses /v1/offers
ComprasListar y ver detalles. Activar, desactivar y cancelar una suscripción./v1/purchases
Pedidos y transaccionesObtener pedidos, artículos de pedido y transacciones (cobros, reembolsos y disputas)./v1/orders /v1/transactions
Pagos (payouts)Obtener el historial de pagos de Kajabi Payments.Endpoints de Payouts (para usuarios de Kajabi Payments)
Sitios y páginasObtener sitios, páginas web, páginas de destino, entradas de blog y pódcasts./v1/sites y otros
WebhooksRegistrar notificaciones de compras, envíos de formularios, cambios de etiquetas y más./v1/hooks

La mayoría de las operaciones de escritura están relacionadas con los contactos. Incluyen contactos, etiquetas, notas, concesión de ofertas y estado de las compras. Los webhooks también se gestionan con la API. El contenido, como los cursos y las entradas de blog, es en su mayoría de solo lectura. Esta diferencia es importante cuando planificas un caso de uso. Se explica en detalle más adelante en este artículo.

Requisito: el plan Pro o superior

Necesitas el plan Pro o superior para usar la API pública.

Según el artículo de ayuda oficial, la API está incluida en el plan Pro actual. Si tienes un plan Pro heredado (una suscripción Pro más antigua), la API no está incluida por defecto. Puedes pasar al plan Pro actual o añadir el complemento de API pública por 25 USD al mes.

Sobre los webhooks, el artículo de ayuda indica que están disponibles en los planes Growth y Pro. Sin embargo, para crear webhooks mediante la API (/v1/hooks) necesitas la propia API pública. Por eso, este artículo da por hecho el plan Pro para cualquier integración basada en la API.

Especificaciones básicas

Esta es la información básica que necesitas primero.

ElementoDetalles
URL del servidorhttps://api.kajabi.com
RutaTodas las rutas empiezan por /v1
Comprobar la versiónGET https://api.kajabi.com/v1/version
EspecificaciónOpenAPI 3.1.1 (se puede descargar el archivo openapi.yaml)
Formato de datosJSON:API (application/vnd.api+json)
AutenticaciónCredenciales de cliente de OAuth 2.0 (token Bearer)
PruebasHay una colección oficial de Postman

El formato de datos es JSON:API. Las solicitudes y las respuestas usan la misma estructura: data, y dentro type, attributes y relationships. Al principio puede parecer poco habitual. Sin embargo, todos los endpoints usan la misma estructura, así que resulta fácil tras un rato de práctica.

Los endpoints de lista comparten estos parámetros de consulta:

  • Paginación: page[number] y page[size]
  • Ordenación: sort=name (usa sort=-name para el orden descendente)
  • Selección de campos (sparse fields): fields[contacts]=name,email
  • Filtros: por ejemplo, filter[site_id]=123
  • Inclusión de datos relacionados: include=offers,tags,customer

Autenticación: crea una clave de API y obtén un token

Crea una clave de API (client ID y client secret)

  1. Abre la configuración en el panel de Kajabi

En el panel, ve a “Settings” (Configuración). En la configuración de la cuenta, abre “Public API”.

  1. Haz clic en “Create User API Key”

Se abre la pantalla para crear una nueva clave de API.

  1. Elige un nombre, un usuario y los permisos

Escribe un nombre para la clave. Usa un nombre que indique su finalidad, como “Sincronización de inventario”. Después, elige el usuario de la cuenta y los permisos (scopes).

  1. Haz clic en “Create” y guarda el client ID y el secret

Cuando se crea la clave, se muestran el client_id y el client_secret. Guárdalos en un lugar seguro.

Ten en cuenta estos tres puntos:

  • Solo los Owners y los Subowners pueden crear claves de API.
  • Debes elegir los permisos que necesitas al crear la clave. Un token de una clave con pocos permisos es rechazado en los endpoints protegidos, aunque el token sea válido.
  • Por seguridad, puedes eliminar o rotar una clave en cualquier momento. Al hacerlo, todos los tokens de acceso emitidos con esa clave dejan de ser válidos.

Obtén un token de acceso

Obtienes un token con POST /v1/oauth/token. El método recomendado es client_credentials.

bash
curl -X POST https://api.kajabi.com/v1/oauth/token \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET"

Una respuesta correcta contiene estos valores:

  • access_token: el token que usas cuando llamas a la API
  • refresh_token: un token que cambias por un nuevo token de acceso cuando el anterior caduca
  • token_type: siempre Bearer
  • expires_in: el número de segundos que el token de acceso es válido

Después, añade el token Bearer al encabezado Authorization de cada solicitud.

bash
curl https://api.kajabi.com/v1/me \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Hay tres maneras de cambiar credenciales por tokens.

MétodoParámetrosNota
Credenciales de clienteclient_id, client_secret, grant_type=client_credentialsRecomendado
Token de actualizaciónrefresh_token, grant_type=refresh_tokenRequiere un token no caducado obtenido antes con credenciales de cliente
Usuario y contraseñausername, passwordNo recomendado (se prefieren las credenciales de cliente)

Para cerrar la sesión, usa POST /v1/oauth/revoke. Envía el token de acceso o el token de actualización. Ambos tokens dejan de ser válidos.

Si recibes un error 401 o 403

Si recibes 401 Unauthorized o 403 Forbidden después de obtener un token, revisa estos tres puntos.

Qué comprobarDetalles
Permisos de la clave¿Elegiste los scopes necesarios al crear la clave? Si no, elimina la clave y créala de nuevo.
Tiempo de activaciónDespués de activar el acceso a la API, puede tardar hasta 10 minutos en estar activo.
Encabezado de la solicitudEnvía el token en el encabezado Authorization como token Bearer. No lo envíes como parámetro de consulta.

Qué puedes hacer, por recurso

Esta sección explica cada recurso y las operaciones que admite.

Contactos (Contacts)

Los contactos son el centro de la gestión de clientes en Kajabi.

Qué puedes hacer

  • Listar y buscar (GET /v1/contacts)
  • Ver detalles (GET /v1/contacts/{id})
  • Crear (POST /v1/contacts)
  • Actualizar (PATCH /v1/contacts/{id})
  • Eliminar (DELETE /v1/contacts/{id})

Los campos principales son el nombre, el correo electrónico, la dirección (líneas 1 y 2, ciudad, estado o provincia, país y código postal), el teléfono, el teléfono de empresa, el estado de suscripción al correo (subscribed), external_user_id y las fechas de creación y actualización.

Cuando creas un contacto, debes indicar la relación site para señalar a qué sitio pertenece. Si tu cuenta tiene varios sitios, filter[site_id] también es obligatorio al listar contactos.

json
{
  "data": {
    "type": "contacts",
    "attributes": {
      "name": "John Doe",
      "email": "john.doe@example.com"
    },
    "relationships": {
      "site": {
        "data": { "type": "sites", "id": "123" }
      }
    }
  }
}

Los filtros son muy completos. Es uno de los puntos fuertes de esta API. Por ejemplo, puedes encontrar contactos con estas condiciones:

  • Texto en el nombre, el correo, el teléfono o la dirección
  • Tiene o no tiene una etiqueta concreta (has_tag_id, has_no_tag_id, has_all_tag_id)
  • Tiene o no tiene una oferta concreta (has_offer_id, has_no_offer_id)
  • Posee, no posee o poseyó antes un producto concreto (has_product_id y otros)
  • Envió o no envió un formulario concreto
  • Se registró en un evento, o completó, aprobó o suspendió una evaluación
  • Los ingresos netos totales son iguales, superiores o inferiores a un valor
  • Creado, activo o inactivo en los últimos N días
  • Abrió, hizo clic o rebotó en un envío de correo concreto
  • Rebote permanente (hard bounce) o baja reciente

Con estos filtros, una sola llamada a la API puede encontrar, por ejemplo, a “clientes que compraron pero no han estado activos en 60 días”. También puede encontrar a “personas que compraron un curso pero no tienen la etiqueta”.

Comportamientos que conviene conocer

  • external_user_id (el ID de usuario en un sistema externo) se puede actualizar solo en contactos que ya tienen una oferta o una compra (es decir, clientes).
  • Si un contacto tiene una suscripción o un plan de pagos de Kajabi Payments activo, eliminar ese contacto devuelve un error 422. Esto se añadió en la actualización de junio de 2026.
  • Los campos personalizados usan identificadores como custom_1 y custom_2. Usa /v1/custom_fields para ver qué campos están disponibles.

Etiquetas (Contact Tags)

  • Obtener la lista y los detalles de las etiquetas (las etiquetas archivadas no se incluyen)
  • Añadir, quitar o reemplazar etiquetas de un contacto (POST, DELETE y PATCH)

En los endpoints que revisé, no encontré uno para crear etiquetas. Las etiquetas se crean en el panel y la API sirve para añadirlas o quitarlas.

Conceder y revocar ofertas (contactos y clientes)

Esta es probablemente la función más práctica de la API de Kajabi. Puedes conceder o revocar ofertas a un contacto o a un cliente.

OperaciónMétodoDescripción
ConcederPOSTDar una oferta
RevocarDELETECancelar una oferta
ReemplazarPATCHSustituir las ofertas actuales por las que indiques
ListarGETVer las ofertas ya concedidas

Cuando concedes una oferta, estos pasos se ejecutan automáticamente:

  • La API comprueba si la oferta ya se había concedido.
  • La API busca un cliente existente con el mismo correo electrónico. Si no hay ninguno, crea un cliente nuevo.
  • Se envía un correo de bienvenida. Para evitarlo, indica send_customer_welcome_email: false en meta de la solicitud.
  • Si la oferta es un regalo, se envía un correo de regalo.
  • Se activan las automatizaciones configuradas.

Cuando revocas una oferta, solo se ven afectadas las ofertas activas. Se desactivan todas las membresías de producto relacionadas.

json
{
  "data": [{ "type": "offers", "id": "123" }],
  "meta": { "send_customer_welcome_email": false }
}

Con esta función puedes crear un sistema que dé acceso automáticamente a los cursos y comunidades de Kajabi después de un registro o un pago en un sistema externo.

Clientes (Customers)

  • Obtener la lista y los detalles
  • Conceder, revocar y reemplazar ofertas (igual que con los contactos)

El nombre y el correo de un cliente se mantienen sincronizados con el contacto vinculado.

Notas de contacto (Contact Notes)

Puedes listar, crear, actualizar y eliminar las notas vinculadas a un contacto. Solo se puede actualizar el texto de la nota (body). El contacto vinculado no se puede cambiar después de crear la nota. Una lista devuelve 20 elementos por defecto y 100 como máximo.

Por ejemplo, puedes escribir en Kajabi registros de ventas o de soporte desde un CRM externo.

Formularios (Forms)

  • Obtener la lista y los detalles de los formularios
  • Obtener la lista y los detalles de los envíos de formularios
  • Enviar un formulario (POST /v1/forms/{id}/submit)

Para enviar un formulario, solo se requieren name y email. El correo debe ser válido y entregable. Si no lo es, la solicitud devuelve un error.

json
{
  "data": {
    "type": "form_submissions",
    "attributes": {
      "name": "John Doe",
      "email": "john.doe@example.com"
    }
  }
}

Un punto importante es que un envío mediante la API ejecuta el mismo procesamiento que un envío desde el panel. La documentación oficial enumera estos efectos secundarios:

  • Comprobar si el correo es desechable y verificar que sea entregable
  • Enviar un correo de doble confirmación (double opt-in) cuando hace falta
  • Suscribir al contacto
  • Añadir las etiquetas y conceder las ofertas configuradas en el formulario
  • Suscribir al contacto a secuencias de correo
  • Entregar webhooks y activar automatizaciones

Esto resulta útil cuando colocas tu propio formulario de registro en tu web y envías los datos a un formulario de Kajabi en segundo plano.

Productos, cursos y ofertas (solo lectura)

  • Productos: lista y detalles (los productos archivados no se incluyen)
  • Cursos: lista y detalles. Con include=modules,lessons,lessons.media,offers puedes obtener módulos, lecciones, medios y ofertas en una sola solicitud.
  • Ofertas: lista y detalles. Puedes obtener el precio, el tipo de pago, la URL de pago (checkout), si es una suscripción, si es gratuita y más.

En los endpoints que revisé, no hay ningún endpoint para crear o actualizar cursos, productos u ofertas. No puedes usar la API para generar contenido de cursos desde un sistema externo.

Compras (Purchases)

Las compras son los registros de las compras de ofertas.

  • Obtener la lista y los detalles
  • Activar (reactivate) y desactivar una compra
  • Cancelar una suscripción

El comportamiento tiene algunas trampas:

  • Desactivar una compra no cancela la suscripción.
  • Reactivar una compra no reanuda la suscripción.
  • Para detener el cobro, usa el endpoint independiente de cancelación de suscripción.

“Detener el acceso” y “detener el cobro” son operaciones distintas. Si automatizas las cancelaciones, puede que tengas que llamar a ambas.

Pedidos, artículos de pedido y transacciones (Orders, Order Items, Transactions)

  • Pedidos: lista y detalles
  • Artículos de pedido: la lista y los detalles de cada producto u oferta de un pedido
  • Transacciones: registros de pagos vinculados a compras reales, como cobros correctos, reembolsos y disputas

La lista de transacciones no incluye transacciones de prueba, compras gratuitas, intentos fallidos ni transacciones pendientes. Esto hace que los datos sean fáciles de usar para la contabilidad y el análisis de ventas. En compras, pedidos y transacciones puedes filtrar por cliente con filter[customer_id].

Una transacción puede cubrir varias ofertas en un solo cobro. Por ejemplo, esto ocurre cuando un pago tiene varios order bumps. Para admitirlo, las transacciones tienen una relación purchases (añadida en junio de 2026). La relación anterior en singular, offer, está obsoleta. Devuelve null en una transacción combinada. En trabajos nuevos, usa purchases.

Pagos (Kajabi Payments Payouts)

Puedes obtener la lista y los detalles de los pagos (payouts) de Kajabi Payments, que son las transferencias de Kajabi a tu cuenta bancaria. Los detalles incluyen las transacciones relacionadas.

Como indica el nombre, estos endpoints son para cuentas que usan Kajabi Payments. Kajabi Payments no está disponible en todos los países. Consulta la disponibilidad en la documentación oficial.

Sitios, páginas, entradas de blog y pódcasts (solo lectura)

  • Sitios: la lista y los detalles de los sitios a los que tienes acceso
  • Páginas web: lista y detalles
  • Páginas de destino (landing pages): lista y detalles
  • Entradas de blog: lista y detalles (título, contenido, slug, fecha de publicación, imagen, etiquetas y más)
  • Pódcasts: lista y detalles

Estos recursos también son de solo lectura. No puedes crear ni editar páginas o entradas de blog con la API. Sin embargo, sí puedes obtener las entradas de blog, así que puedes mostrar un blog de Kajabi en un sitio web externo.

Otros: tu propio perfil y la versión

  • GET /v1/me: el perfil del usuario vinculado a la clave de API
  • GET /v1/version: la versión de la API

Puedes usarlos para comprobar la conexión.

Webhooks: recibe eventos en tiempo real

La API es una forma de pedir datos a Kajabi. Los webhooks son una forma de que Kajabi te envíe una notificación a ti.

API públicaWebhooks
FunciónObtener o enviar datos desde tu programaAvisarte de inmediato cuando ocurre un evento en Kajabi
DirecciónBidireccional (lectura y escritura)Principalmente de Kajabi a un sistema externo
Ideal paraAcceso masivo a datos, aplicaciones propias, sincronización con otros sistemasAutomatizaciones que empiezan con un evento, como una compra

Eventos que puedes registrar

EventoCuándo se envíaScopes necesarios
purchaseUn cliente hace una compraview:purchases
payment_succeededSe completa un pagoview:transactions
order_createdSe crea un pedido nuevoview:transactions y view:orders
form_submissionSe envía un formularioview:form_submissions
tag_addedSe añade una etiqueta a un contactoview:contacts
tag_removedSe quita una etiqueta de un contactoview:contacts

Solo puedes registrar los eventos que permiten los scopes de tu clave de API.

Cómo registrar un webhook

Envía POST /v1/hooks con la URL de destino (target_url) y el nombre del evento. Si indicas resource_id, recibes solo los eventos de ese recurso, como una etiqueta concreta. Si lo omites, recibes todos los eventos de ese tipo (un webhook comodín).

json
{
  "data": {
    "type": "hooks",
    "attributes": {
      "target_url": "https://example.com/webhook",
      "event": "tag_added",
      "resource_id": "123"
    },
    "relationships": {
      "site": {
        "data": { "id": "456", "type": "sites" }
      }
    }
  }
}

La notificación que llega a tu URL es una solicitud POST con este formato:

json
{
  "id": "hash_id",
  "event": "tag_added",
  "payload": []
}

id es el ID del recurso que causó el evento. event es el nombre del evento. payload es el contenido. Para ver de antemano la forma del contenido, usa los endpoints de ejemplo. Hay uno para cada evento, como GET /v1/hooks/purchase_sample.

Para gestionar los webhooks hay endpoints para listar, crear, ver detalles y eliminar. No encontré un endpoint de actualización. Para cambiar un webhook, elimínalo y créalo de nuevo.

Limitaciones y puntos a tener en cuenta

Esta sección resume los puntos anteriores y las notas del artículo de ayuda oficial.

  • No todos los datos están disponibles en la API. Algunos datos que ves en el panel no están en la referencia de la API. Si necesitas un campo que falta, envía una solicitud de función a través del portal de comentarios de Kajabi.
  • Crear y editar contenido casi no es posible. Los cursos, productos, ofertas, entradas de blog y páginas de destino son de solo lectura (en los endpoints que revisé).
  • Funciones que no aparecen en la lista. No encontré endpoints para gestionar envíos de correo (broadcasts) ni comunidades en la lista pública de endpoints.
  • Hay límites de frecuencia (rate limits). Kajabi los establece para proteger la estabilidad de la plataforma. Para conocer los valores actuales, consulta la documentación oficial o pregunta al soporte de Kajabi.
  • No hay una lista de IP permitidas publicada. Si tu entorno necesita permitir direcciones IP concretas, pide al soporte la información actual.
  • No hay soporte para código personalizado. El soporte puede ayudar con posibles errores y con preguntas sobre las funciones de la API. No ayuda a escribir ni a depurar tu propio código.
Ventajas 5
  • Puedes trabajar desde fuera de Kajabi con datos clave: clientes, compras, envíos de formularios y etiquetas

  • Conceder y revocar ofertas permite conectar pagos y registros externos con los derechos de acceso

  • Muchos filtros permiten búsquedas detalladas de segmentos

  • Los webhooks envían eventos en tiempo real

  • Se publican una especificación OpenAPI y una colección de Postman

Desventajas 4
  • Se necesita el plan Pro o superior (un plan Pro heredado requiere 25 USD adicionales al mes)

  • El contenido, como los cursos y las entradas de blog, es en su mayoría de solo lectura, así que la API no sirve para crearlo ni editarlo

  • No se publica una lista de IP permitidas, por lo que los entornos de red estrictos deben contactar con el soporte

  • El soporte no cubre tu propio código personalizado

Ejemplos de casos de uso

1. Dar acceso a personas que pagaron en un sistema externo Cuando se completa un pago en un servicio externo, crea un contacto con la API y concede una oferta. Kajabi crea el cliente automáticamente. También se envían el correo de bienvenida y se ejecutan las automatizaciones.

2. Conectar tu propio formulario de registro con Kajabi Mantén el diseño de tu web y envía los datos al endpoint de envío de formularios de Kajabi en segundo plano. Las etiquetas, las secuencias de correo y las ofertas se procesan en un solo paso.

3. Enviar notificaciones de compra a Slack o a una herramienta interna Registra un webhook purchase o payment_succeeded. Reenvía los datos que recibas a una herramienta de chat o a un sistema interno.

4. Reunir los datos de ventas en una hoja de cálculo o en una herramienta de BI Obtén datos de los endpoints de pedidos y transacciones de forma programada y añádelos a tus propios informes. Los datos de transacciones no incluyen transacciones de prueba ni fallidas, así que son fáciles de sumar.

5. Detener el acceso automáticamente en cancelaciones y reembolsos Desactiva la compra o revoca la oferta para detener el acceso. Si hace falta, llama también al endpoint de cancelación de suscripción.

Cómo empezar

:::steps

  1. Comprueba tu plan

Confirma que tienes el plan Pro o superior (o un plan Pro heredado con el complemento) y que la API pública está activa.

  1. Crea una clave de API

En “Settings”, abre “Public API”. Elige solo los permisos que necesitas y crea la clave. Solo los Owners y los Subowners pueden crear claves.

  1. Obtén un token

Llama a /v1/oauth/token con tu client_id y tu client_secret para obtener un token de acceso.

  1. Comprueba la conexión

Llama a GET /v1/version o a GET /v1/me con el token Bearer. Puedes usar una herramienta como Postman.

  1. Obtén el ID de tu sitio

Llama a GET /v1/sites para encontrar el ID de tu sitio. Lo necesitas cuando listas o creas contactos.

  1. Empieza con una operación pequeña

Empieza con una búsqueda de contactos o crea un contacto con un correo de prueba.

Documentación oficial utilizada