Teachable expone una API REST en https://developers.teachable.com (versión v1) que te permite leer cursos, usuarios, inscripciones y transacciones, y crear o matricular usuarios mediante una API key. Además, sus webhooks notifican en tiempo real eventos como una nueva venta o la finalización de un curso, de modo que puedas automatizar tu negocio sin sondear constantemente la plataforma.
Esta guía está pensada para desarrolladores que quieren integrar Teachable con un CRM, una herramienta de facturación, una comunidad o cualquier flujo a medida. Es técnica pero accesible: si tienes nociones de HTTP y JSON, podrás seguirla. Todos los datos (endpoints, eventos, límites) están tomados de la documentación oficial para desarrolladores; aun así, dado que la plataforma evoluciona, verifica siempre el detalle final en developers.teachable.com antes de poner nada en producción.
Aviso: esta es una guía independiente con fines informativos. No es el sitio oficial de Teachable y algunos enlaces son de afiliado.
Qué es y para qué sirve la API de Teachable
La API de Teachable es una API REST tipo Admin API: actúa en nombre de tu escuela (school) y te da acceso programático a los mismos datos que ves en el panel de administración. En lugar de exportar CSV a mano o copiar datos entre herramientas, escribes código que consulta y modifica esa información directamente.
A grandes rasgos, la API te permite:
- Cursos: listar los cursos de tu escuela, consultar el detalle de uno, ver su estructura de lecciones y el progreso de los alumnos.
- Usuarios (alumnos y administradores): listar usuarios, consultar uno concreto, crear usuarios nuevos y actualizar sus datos.
- Inscripciones (enrollments): ver quién está matriculado en un curso, y matricular o desmatricular a un usuario mediante endpoints específicos.
- Ventas y pagos: consultar las transacciones de tu escuela y los planes de precios (pricing plans) asociados a tus productos.
- Quizzes y respuestas: acceder a los cuestionarios de una lección y a las respuestas enviadas por los alumnos.
- Webhooks: listar los webhooks configurados y revisar los eventos que han disparado.
Si quieres una visión más general del producto antes de meterte en código, puedes leer qué es Teachable y, si tu objetivo es conectar herramientas sin programar, conviene revisar primero las integraciones de Teachable (Zapier, nativas, etc.), que cubren muchos casos sin tocar la API.
API vs. webhooks: dos piezas que se complementan
Es importante no confundirlas:
- La API funciona en modo pull (tú preguntas): tu código hace una petición HTTP y Teachable responde con datos. Útil para sincronizaciones bajo demanda, informes, altas masivas o consultar el estado de algo en un momento dado.
- Los webhooks funcionan en modo push (Teachable te avisa): cuando ocurre algo (una venta, una inscripción), Teachable envía una petición HTTP POST a una URL tuya con los datos del evento. Útil para reaccionar en tiempo real sin estar consultando la API en bucle.
En una integración bien diseñada se usan juntos: los webhooks te avisan de que «algo pasó» y, si necesitas más contexto, llamas a la API para completar la información.
Autenticación: la API key
Teachable autentica las peticiones a la Admin API mediante una API key que viaja en una cabecera HTTP. El formato exacto, según la documentación, es:
apiKey: TU_CLAVE_AQUI
Es decir, no es el típico Authorization: Bearer ..., sino una cabecera propia llamada apiKey. Cualquier petición sin una clave válida será rechazada.
Cómo crear tu API key
El proceso, desde el panel de tu escuela (necesitas acceso de propietario/owner):
- Entra en Settings > API (Ajustes > API) en el administrador de tu escuela.
- Pulsa Create API Key.
- Asígnale un nombre descriptivo (por ejemplo, «Integración CRM» o «Webhook facturación»).
- Pulsa Create.
Puedes revocar una clave en cualquier momento desde la misma pantalla Settings > API: en el menú de tres puntos (More Actions) junto a la clave, elige Revoke Key. Es buena práctica usar claves distintas por integración y nombrarlas bien, para poder revocar solo la que corresponda si algo se ve comprometido.
Seguridad básica
La API key da acceso a datos de tus alumnos y de tus ventas, así que trátala como una contraseña:
- Nunca la incrustes en código de cliente (JavaScript del navegador, apps móviles) ni la subas a un repositorio público.
- Guárdala en variables de entorno o en un gestor de secretos.
- Restringe quién puede verla dentro de tu equipo.
- Rótala periódicamente y revócala en cuanto deje de usarse.
Endpoints principales de la API REST
Todos los endpoints cuelgan de la base https://developers.teachable.com y usan el prefijo de versión /v1. Por ejemplo, para listar cursos la URL completa es https://developers.teachable.com/v1/courses.
La siguiente tabla resume los recursos documentados más útiles. No es necesariamente la lista completa ni sustituye a la referencia oficial, pero te da una idea clara de lo que puedes hacer:
| Recurso | Método y endpoint | Para qué sirve |
|---|---|---|
| Cursos | GET /v1/courses |
Listar los cursos de la escuela |
| Curso | GET /v1/courses/{course_id} |
Detalle de un curso concreto |
| Progreso del curso | GET /v1/courses/{course_id}/progress |
Progreso agregado de los alumnos |
| Inscripciones del curso | GET /v1/courses/{course_id}/enrollments |
Ver quién está matriculado |
| Lección | GET /v1/courses/{course_id}/lectures/{lecture_id} |
Detalle de una lección |
| Quizzes | GET /v1/courses/{course_id}/lectures/{lecture_id}/quizzes |
Cuestionarios de una lección |
| Respuestas de quiz | GET .../quizzes/{quiz_id}/responses |
Respuestas enviadas por alumnos |
| Matricular | POST /v1/enroll |
Inscribir a un usuario en un curso |
| Desmatricular | POST /v1/unenroll |
Quitar una inscripción |
| Planes de precios | GET /v1/pricing_plans |
Listar planes de precios |
| Plan de precios | GET /v1/pricing_plans/{pricing_plan_id} |
Detalle de un plan |
| Transacciones | GET /v1/transactions |
Consultar ventas/pagos |
| Usuarios | GET /v1/users |
Listar usuarios |
| Crear usuario | POST /v1/users |
Dar de alta un usuario |
| Usuario | GET /v1/users/{user_id} |
Detalle de un usuario |
| Actualizar usuario | PUT /v1/users/{user_id} |
Modificar datos de un usuario |
| Webhooks | GET /v1/webhooks |
Listar webhooks configurados |
| Eventos de webhook | GET /v1/webhooks/{webhook_id}/events |
Ver eventos disparados |
También existe un grupo de endpoints /v1/current_user/... orientados a representar al usuario autenticado (sus cursos, su progreso, marcar una lección como completada). Para los detalles exactos de cada parámetro, paginación y formato de respuesta, consulta la referencia oficial en developers.teachable.com.
Ejemplo de llamada con cURL
Una petición mínima para listar tus cursos sería:
curl --request GET \
--url "https://developers.teachable.com/v1/courses" \
--header "accept: application/json" \
--header "apiKey: TU_CLAVE_AQUI"
Y un ejemplo en Node.js usando fetch para listar usuarios:
// Node 18+ trae fetch nativo
const respuesta = await fetch(
"https://developers.teachable.com/v1/users",
{
method: "GET",
headers: {
accept: "application/json",
apiKey: process.env.TEACHABLE_API_KEY, // nunca hardcodear
},
}
);
if (!respuesta.ok) {
throw new Error(`Error de la API: ${respuesta.status}`);
}
const datos = await respuesta.json();
console.log(datos);
Fíjate en dos detalles: la clave se lee de una variable de entorno (process.env.TEACHABLE_API_KEY) y comprobamos respuesta.ok para detectar errores, incluido el 429 por exceso de peticiones que veremos más abajo.
Webhooks: eventos en tiempo real
Los webhooks son, para la mayoría de integraciones, la parte más valiosa. En lugar de preguntar «¿ha habido alguna venta nueva?» cada cinco minutos, configuras una URL en tu servidor y Teachable te envía un POST con el evento en cuanto ocurre.
La documentación para desarrolladores recoge un conjunto amplio de eventos. Estos son los más relevantes agrupados por categoría:
| Evento | Cuándo se dispara |
|---|---|
Sale.created |
Se produce una compra / inscripción de pago |
Sale.subscription_canceled |
Se cancela una suscripción |
Transaction.created |
Se procesa un pago |
Transaction.refunded |
Se reembolsa una transacción |
Enrollment.created |
Un usuario se inscribe en un curso |
Enrollment.completed |
Un alumno completa un curso al 100% |
Enrollment.disabled |
Se desmatricula a un usuario de un curso |
LectureProgress.created |
Se completa una lección |
User.created |
Se crea una cuenta nueva |
User.updated |
Cambian los datos de un usuario |
UserTag.created / UserTag.removed |
Se añade o quita una etiqueta a un usuario |
Comment.created |
Se publica un comentario en un curso |
Response.created |
Se envía un cuestionario calificado |
EmailLead.created |
Se confirma una suscripción a la lista de correo |
AbandonedOrder.created |
Un checkout queda incompleto (carrito abandonado) |
Hay más eventos disponibles (por ejemplo, los relacionados con coaching como Admission.created y Admission.disabled, o las opciones de marketing como User.subscribe_to_marketing_emails). La lista completa y actualizada está en la sección de eventos del Developer Hub.
Estructura del payload
Todos los webhooks comparten un «sobre» (envelope) común, y el contenido específico del evento viaja dentro del campo object. Un ejemplo simplificado para una venta:
{
"type": "Sale.created",
"id": 123456,
"livemode": true,
"created": "2026-01-15T14:46:56+00:00",
"hook_event_id": 7654321,
"object": {
"...": "datos específicos del evento (venta, usuario, curso...)"
}
}
Según el evento, el object incluirá datos del usuario (ID, email, nombre), del curso (ID, título), de la inscripción (estado, porcentaje de progreso, referencia a la venta) o de la transacción (importe, divisa, referencias a Stripe/PayPal, desglose de comisiones). Para conocer la estructura exacta de cada payload, apóyate en la documentación oficial y, sobre todo, registra (logea) los primeros eventos reales que recibas para ver con tus propios ojos qué campos llegan.
Buenas prácticas con webhooks
Hay un par de detalles importantes que conviene tener claros desde el principio:
- No hay firma criptográfica del payload. A diferencia de otras plataformas, Teachable no firma sus webhooks con una cabecera de firma. Esto significa que tu endpoint no puede verificar criptográficamente que la petición venga realmente de Teachable. Como mitigación, usa una URL secreta y difícil de adivinar (con un token largo en la ruta o en un parámetro), sirve siempre por HTTPS y, si te lo puedes permitir, valida cada evento llamando de vuelta a la API para confirmar que el dato existe.
- Pueden llegar eventos duplicados. Teachable puede reenviar un evento si no recibe una respuesta correcta a tiempo. Diseña tu receptor para que sea idempotente: guarda un identificador único del payload (por ejemplo, el
hook_event_id, o el ID de la venta/inscripción) y, antes de actuar, comprueba si ya lo procesaste. Así, si el mismo evento llega dos veces, no duplicarás la factura ni el alta en tu CRM. - Responde rápido y procesa en segundo plano. Devuelve un
200cuanto antes y delega el trabajo pesado (enviar correos, escribir en otros sistemas) a una cola o un proceso asíncrono. Si tardas demasiado en responder, Teachable considerará el envío fallido y reintentará.
Casos de uso habituales
Con la API y los webhooks combinados puedes montar automatizaciones muy potentes. Algunos ejemplos reales:
- Sincronizar alumnos con tu CRM o newsletter. Al recibir
User.createdoEnrollment.created, das de alta o etiquetas al contacto en tu herramienta de email marketing o CRM. - Facturación y contabilidad automáticas. Al recibir
Transaction.created, generas la factura en tu sistema de facturación; conTransaction.refunded, registras el abono. - Acceso a una comunidad o recurso externo. Al detectar
Sale.createdoEnrollment.created, invitas automáticamente al alumno a tu Discord, Slack o área privada; conEnrollment.disabled, le retiras el acceso. - Entrega de certificados o badges. Cuando llega
Enrollment.completed, generas un certificado personalizado y se lo envías por correo. - Recuperación de carritos abandonados. Con
AbandonedOrder.created, lanzas una secuencia de correos de recuperación. - Altas masivas y migraciones. Con
POST /v1/usersyPOST /v1/enrollpuedes importar alumnos desde otra plataforma o matricular a un grupo entero de golpe.
Muchas de estas automatizaciones también se pueden montar sin código a través de conectores como Zapier o Make, que se apoyan en estos mismos webhooks. Si tu caso es sencillo, esa vía puede ahorrarte mantenimiento; lo vemos con más detalle en la guía de integraciones de Teachable. Y si lo que te interesa es la parte de pagos (qué pasarelas hay, comisiones, divisas), te será útil leer cómo cobrar pagos en Teachable antes de programar la lógica de facturación.
¿Quieres una cuenta para empezar a desarrollar y probar la API? Puedes crear tu escuela en Teachable y, si tu plan lo incluye, generar tu primera API key en minutos.
Límites de uso (rate limits)
La Admin API aplica un límite de 100 peticiones por minuto por escuela. Para ayudarte a respetarlo, cada respuesta incluye cabeceras informativas:
RateLimit-Limit: el máximo de peticiones permitidas por minuto.RateLimit-Remaining: cuántas te quedan en el minuto actual.RateLimit-Reset: cuántos segundos faltan para que el contador se reinicie.
Si superas el límite, la API responde con un código HTTP 429 y el mensaje «API rate limit exceeded». La recomendación oficial es esperar el tiempo indicado en RateLimit-Reset antes de reintentar.
En la práctica, esto se traduce en dos consejos: implementa reintentos con espera (backoff) respetando esas cabeceras, y prefiere los webhooks a sondear la API en bucle. Si necesitas procesar grandes volúmenes (por ejemplo, una migración), espacia las peticiones para no chocar contra el límite. Ten en cuenta, además, que según el plan puede existir un límite mensual de volumen de peticiones, así que dimensiona tus sincronizaciones en consecuencia.
En qué planes está disponible la API y los webhooks
Este es un punto que cambia con frecuencia, así que conviene tomarlo como orientación y confirmarlo en la página de precios oficial. En líneas generales, según la documentación:
- Para usar la API necesitas estar, como mínimo, en el plan Growth (o superior). Los planes de entrada más básicos no incluyen acceso a la API.
- Los webhooks también requieren, por norma general, el plan Growth en adelante. Los planes iniciales (de tipo Starter/Builder) no incluyen webhooks ni conectores como Zapier.
- Los planes superiores suelen ofrecer límites de volumen más altos y herramientas adicionales para desarrolladores.
Como los nombres de los planes, los precios y los límites de Teachable se han ido reorganizando (hubo cambios notables en 2025), te recomendamos contrastar la disponibilidad exacta antes de decidirte. Tienes un repaso de las opciones en nuestra guía de precios de Teachable, y si tu objetivo final es monetizar formación, en vender cursos en Teachable verás cómo encaja la parte técnica con la estrategia comercial.
Si vas a necesitar API y webhooks de forma intensiva, asegúrate de elegir un plan que los incluya: puedes comparar las opciones y empezar directamente desde la web de Teachable.
Preguntas frecuentes
¿Es gratis usar la API de Teachable? La API en sí no tiene un coste aparte, pero no está disponible en todos los planes: necesitas, como mínimo, el plan Growth o superior. Es decir, el «coste» es el del plan que te da acceso. Confirma siempre la disponibilidad en la página de precios oficial.
¿Qué tipo de autenticación usa la API?
Una API key que se envía en una cabecera HTTP con el formato apiKey: TU_CLAVE. No usa el clásico Authorization: Bearer. La clave se crea y se revoca desde Settings > API en el panel de tu escuela.
¿Teachable firma sus webhooks para verificar su origen? No. Teachable no incluye una firma criptográfica en los webhooks, por lo que no puedes verificar el origen mediante una cabecera de firma. Protégete usando una URL secreta, HTTPS y, si puedes, validando cada evento contra la API.
¿Qué pasa si recibo el mismo evento de webhook dos veces?
Puede ocurrir: Teachable reintenta los envíos y puede generar duplicados. Haz tu receptor idempotente guardando un identificador único del evento (como el hook_event_id o el ID de la venta) y comprobándolo antes de actuar.
¿Puedo inventarme endpoints o asumir que existen otros?
Mejor no. Trabaja siempre con los endpoints documentados en developers.teachable.com. Si algo no aparece en la referencia oficial, asume que no existe o que no está soportado, y comprueba el comportamiento real con peticiones de prueba antes de depender de ello en producción.
Guía independiente con fines informativos. No es el sitio oficial de Teachable. Algunos enlaces de esta página son de afiliado: si contratas a través de ellos, podemos recibir una comisión sin coste adicional para ti. Verifica siempre los detalles técnicos y los planes en la documentación y la web oficiales.
