Appi es un backend multi-sitio expuesto como servicio HTTP/JSON. Cada sitio es un espacio aislado con sus propios usuarios, contenidos, productos, pedidos y cursos. Tú pones el frontend (Nuxt, Next, Astro, una app móvil…) y appi pone la autenticación, los datos y las reglas de negocio.
Droni.co mismo está construido así: este sitio y su panel de administración son dos clientes de appi.
Registro, inicio de sesión con email o Google, verificación de correo y sesión actual.
Ver referenciaPosts para blogs, noticias o páginas, con etiquetas, atributos personalizados y archivos adjuntos.
Ver referenciaComentarios en hilos sobre tu contenido y foros con temas y respuestas.
Ver referenciaCatálogo de productos, direcciones, pedidos con cupones y registro de pagos.
Ver referenciaCursos con lecciones, actividades entregables, cuestionarios autocalificados e inscripciones con progreso.
Ver referencia Para empezar necesitas que creemos tu sitio. Te entregaremos un siteId (UUID) y una cuenta con rol owner, con la que podrás administrar el contenido desde drodmin o desde tu propio panel usando los endpoints de administración. Si vas a usar el inicio de sesión con Google, indícanos también las URLs de callback de tu frontend.
Todas las rutas cuelgan de https://appi.droni.co y requieren el header x-site-id. Sin él (o con un id inválido) appi responde 400 Invalid site ID.
| Header | Cuándo | Valor |
|---|---|---|
x-site-id | Siempre | Tu siteId |
Accept | Siempre | application/json |
Content-Type | Peticiones con cuerpo | application/json o multipart/form-data para archivos |
Authorization | Rutas protegidas | Bearer <token> |
curl https://appi.droni.co/content/posts?per_page=5 \
-H "x-site-id: $APPI_SITE_ID" \
-H "Accept: application/json"Appi no está abierto a peticiones directas desde navegadores de dominios de terceros (CORS). La forma soportada es un backend-for-frontend: tu navegador habla con tu servidor y tu servidor habla con appi. Así además:
httpOnly, fuera del alcance de JavaScript del navegador.siteId y la URL de appi se configuran como variables de entorno del servidor.Ejemplo con Nuxt 3 — un proxy genérico en server/api/appi/[...path].ts:
// .env → APPI_URL=https://appi.droni.co APPI_SITE_ID=<tu-site-id>
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const token = getCookie(event, 'appi_token')
const path = event.context.params?.path ?? ''
const method = event.method
return await $fetch(`/${path}`, {
baseURL: config.appiUrl,
method,
query: getQuery(event),
body: ['POST', 'PUT', 'PATCH'].includes(method) ? await readBody(event) : undefined,
headers: {
'x-site-id': config.appiSiteId,
Accept: 'application/json',
...(token ? { Authorization: `Bearer ${token}` } : {}),
},
}).catch((error) => {
throw createError({ statusCode: error.statusCode, data: error.data })
})
})Y un endpoint de login que guarda el token en la cookie:
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig()
const { email, password } = await readBody(event)
const { user, enrollment, token } = await $fetch<any>('/auth/login', {
baseURL: config.appiUrl,
method: 'POST',
headers: { 'x-site-id': config.appiSiteId, Accept: 'application/json' },
body: { email, password },
})
setCookie(event, 'appi_token', token, {
httpOnly: true,
secure: true,
sameSite: 'lax',
path: '/',
maxAge: 60 * 60 * 24 * 7,
})
// Nunca devuelvas el token al navegador
return { user, enrollment }
}) Un usuario se registra con email y contraseña (y verifica su correo) o entra con Google. El login devuelve un token que debes enviar como Authorization: Bearer. Cada endpoint de esta documentación indica qué nivel de acceso necesita:
Público
Solo requiere el header x-site-id.
Sesión opcional
Público, pero si envías un token la respuesta incluye datos del usuario.
Autenticado
Requiere Authorization: Bearer <token>.
Miembro del sitio
Requiere token y que el usuario esté inscrito en el sitio.
Owner del sitio
Requiere token de un usuario con rol owner en el sitio.
Estudiante del curso
Requiere rol student en el curso.
Inscrito en el curso
Requiere rol student, teacher o admin en el curso.
Teacher / Admin del curso
Requiere rol teacher o admin en el curso.
Admin del curso
Requiere rol admin en el curso.
Los roles de curso (student, teacher, admin) son independientes del rol en el sitio (user, owner); se explican en el módulo Learn.
Los cuerpos de las peticiones usan snake_case (coupon_code, per_page) y las respuestas usan camelCase (createdAt, autoEnroll). Los ids son UUID y las fechas, ISO 8601. Los montos y porcentajes pueden llegar como string decimal: conviértelos con Number().
Los listados aceptan page y per_page y responden con meta + data:
{
"meta": {
"total": 42,
"perPage": 10,
"currentPage": 1,
"lastPage": 5,
"firstPage": 1
},
"data": [ … ]
}Las rutas públicas identifican posts, productos, temas, cursos y lecciones por slug (perfecto para URLs amigables). Las rutas de administración usan siempre el id.
| Código | Significado |
|---|---|
| 400 | Petición inválida para el estado actual (cupón vencido, curso sin autoinscripción, email sin verificar, siteId inválido…). Revisa message. |
| 401 | Falta el token o ya no es válido. |
| 403 | Autenticado, pero sin el rol necesario (por ejemplo, rol de curso) o fuera de la ventana permitida. |
| 404 | El recurso no existe, no pertenece a tu sitio o no es tuyo. Las rutas protegidas por rol de sitio también pueden responder 404 en lugar de 403. |
| 422 | Error de validación del cuerpo o query: revisa errors[].field y errors[].message. |
HTTP/1.1 400 Bad Request
{ "message": "El cupón ha expirado." }HTTP/1.1 422 Unprocessable Entity
{
"errors": [
{ "field": "email", "rule": "email", "message": "The email field must be a valid email address" }
]
}Appi expone sus módulos como servidores MCP (Model Context Protocol), el estándar abierto para conectar asistentes como Claude con servicios externos. Conectas un servidor y puedes pedirle en lenguaje natural cosas como "publica un borrador con este texto", "¿qué pedidos siguen pendientes?" o "califica las respuestas de la lección 3".
Cada tool del MCP llama al mismo endpoint de la API que documenta esta página, con tu token. Por eso aplican exactamente los mismos permisos y validaciones: el asistente solo puede hacer lo que tu usuario puede hacer en ese sitio.
Hay un servidor por módulo, para que el asistente trabaje con pocas tools y bien enfocadas. Conecta solo los que necesites: un asistente de atención al cliente no necesita store-admin.
/mcp/contentPosts publicados y archivos propios; con rol owner, CRUD de posts, atributos y archivos del sitio.
Cualquier usuario · owner para admin_*
/mcp/socialComentarios y foro (topics y respuestas); con rol owner, moderación.
Cualquier usuario · owner para admin_*
/mcp/storeCatálogo de productos y la cuenta del cliente: direcciones, pedidos y pagos.
Clientes
/mcp/store-adminProductos, atributos, pedidos, pagos, cupones y reglas de envío.
Owner del sitio
/mcp/learnCatálogo y progreso, lecciones, actividades y cuestionarios; los profesores gestionan lecciones, banco de preguntas y calificaciones. Cursos y lecciones por slug.
Estudiantes · teacher/admin del curso para teacher_*
/mcp/learn-adminGestión completa de cursos por id: lecciones, banco de preguntas, cuestionarios, respuestas e inscripciones.
Owner del sitio
| Modo | URL | Cómo elige el sitio |
|---|---|---|
| Varios sitios (recomendado) | https://appi.droni.co/mcp/<módulo> | Cada tool recibe site_id. Incluye la tool list_my_sites. |
| Un sitio fijo | https://appi.droni.co/mcp/<siteId>/<módulo> | El sitio va en la URL; las tools no piden site_id. |
Usa el modo de un sitio fijo para un asistente dedicado a un solo sitio (por ejemplo, el soporte de tu tienda). Usa el de varios sitios si administras más de uno: registras cada módulo una sola vez, sin importar cuántos sitios tengas.
Los servidores MCP usan el mismo token que la API. Haz login con el siteId de un sitio en el que ya estés inscrito y copia el token de la respuesta. Un mismo token sirve para todos tus sitios: lo que cambia por sitio es tu rol.
curl https://appi.droni.co/auth/login \
-H "x-site-id: $APPI_SITE_ID" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"email": "[email protected]", "password": "…"}'
# → { "user": { … }, "enrollment": { … }, "token": "oat_…" }POST /auth/logout (enviando ese token) cuando ya no lo uses.admin_*. Para un asistente que solo debe leer o atender clientes, usa una cuenta con rol user. Agrega cada servidor con claude mcp add. --scope user lo deja disponible en todos tus proyectos. Comprueba la conexión con /mcp dentro de Claude Code.
# Un módulo, modo varios sitios
claude mcp add --transport http --scope user appi-content \
https://appi.droni.co/mcp/content \
--header "Authorization: Bearer $APPI_TOKEN"
# Todos los módulos de una vez
for m in content social store store-admin learn learn-admin; do
claude mcp add --transport http --scope user "appi-$m" \
"https://appi.droni.co/mcp/$m" \
--header "Authorization: Bearer $APPI_TOKEN"
done
# Modo un sitio fijo
claude mcp add --transport http --scope user mitienda-store \
https://appi.droni.co/mcp/<siteId>/store \
--header "Authorization: Bearer $APPI_TOKEN" Para compartir la configuración en un repositorio, usa un .mcp.json y deja el token en una variable de entorno, nunca en el archivo:
{
"mcpServers": {
"appi-content": {
"type": "http",
"url": "https://appi.droni.co/mcp/content",
"headers": { "Authorization": "Bearer ${APPI_TOKEN}" }
}
}
} Claude Desktop no permite enviar headers a un servidor remoto, así que se usa mcp-remote como puente. Edita claude_desktop_config.json (Settings → Developer → Edit Config) y reinicia la app:
{
"mcpServers": {
"appi-content": {
"command": "npx",
"args": [
"mcp-remote",
"https://appi.droni.co/mcp/content",
"--header",
"Authorization:${APPI_AUTH}"
],
"env": { "APPI_AUTH": "Bearer oat_…" }
}
}
} Los conectores personalizados de claude.ai (y de otros asistentes web) solo admiten servidores sin autenticación o con OAuth; no dejan configurar un token. Puedes agregar la URL de un módulo y usar las tools públicas (listar posts, productos o cursos), pero las que requieren sesión responderán 401. El soporte de OAuth, para iniciar sesión desde el propio conector, aún no está disponible.
En el modo de varios sitios no hay un sitio "activo" guardado en el servidor: el asistente envía site_id en cada llamada. Al conectarse recibe la instrucción de usar list_my_sites cuando no sepa en qué sitio trabajar, preguntarte cuál usar y mantenerlo hasta que le pidas cambiar. En la práctica:
Tú: Publica un borrador con el resumen de la reunión.
Claude: (list_my_sites) Tienes acceso a "Droni" (owner) y "Mi tienda" (owner).
¿En cuál lo creo?
Tú: En Droni.
Claude: (admin_create_post, site_id: <Droni>) Listo, quedó como borrador.
Tú: Ahora muéstrame los pedidos pendientes de Mi tienda.
Claude: (admin_list_orders, site_id: <Mi tienda>, status: pending) …También puede trabajar con dos sitios en la misma conversación, por ejemplo para comparar sus catálogos.
En el modo de varios sitios cada tool recibe además site_id. Los parámetros de cada tool son los del endpoint equivalente de esta documentación.
/mcp/content14 toolslist_postslectura | Listar posts publicados Lista los posts publicados del sitio, del más reciente al más antiguo. |
get_postlectura | Ver post publicado Obtiene un post publicado por su slug, con autor y atributos. |
list_my_attachmentslectura | Listar mis archivos Lista los archivos subidos por el usuario autenticado en este sitio. |
delete_my_attachmentborra | Eliminar mi archivo Elimina un archivo subido por el usuario autenticado (también del storage). |
admin_list_postslectura | [Admin] Listar posts Lista todos los posts del sitio, incluidos los borradores. Requiere ser owner. |
admin_get_postlectura | [Admin] Ver post Obtiene un post por ID (publicado o borrador) con autor y atributos. Requiere ser owner. |
admin_create_postescritura | [Admin] Crear post Crea un post. El slug se genera a partir del nombre. Por defecto queda como borrador (active=false). Requiere ser owner. |
admin_update_postescritura | [Admin] Actualizar post Actualiza solo los campos enviados de un post (tags: null las borra). Requiere ser owner. |
admin_delete_postborra | [Admin] Eliminar post Elimina un post definitivamente. Requiere ser owner. |
admin_list_post_attributeslectura | [Admin] Listar atributos de un post Lista los atributos clave-valor personalizados de un post. Requiere ser owner. |
admin_add_post_attributeescritura | [Admin] Agregar atributo a un post Agrega un atributo clave-valor personalizado a un post. Requiere ser owner. |
admin_delete_post_attributeborra | [Admin] Eliminar atributo de un post Elimina un atributo de un post. Requiere ser owner. |
admin_list_attachmentslectura | [Admin] Listar archivos Lista todos los archivos del sitio (de cualquier usuario). Requiere ser owner. |
admin_delete_attachmentborra | [Admin] Eliminar archivo Elimina un archivo del sitio (también del storage). Requiere ser owner. |
/mcp/social16 toolslist_commentslectura | Listar comentarios Lista los comentarios activos de un recurso (por ejemplo un post). |
get_commentlectura | Ver comentario Obtiene un comentario aprobado con sus respuestas aprobadas. |
create_commentescritura | Comentar Publica un comentario en un recurso, o responde a otro comentario con parent_id. Queda oculto hasta que un admin lo apruebe (admin_moderate_comment). Requiere usuario autenticado. |
update_my_commentescritura | Editar mi comentario Edita un comentario propio. Solo se permite durante los 5 minutos siguientes a publicarlo. |
list_topicslectura | Listar topics Lista los topics (hilos de foro) activos del sitio. |
get_topiclectura | Ver topic Obtiene un topic por slug con sus respuestas paginadas. |
create_topicescritura | Crear topic Abre un nuevo topic en el foro. Queda oculto hasta que un admin lo active (admin_update_topic). Requiere estar inscrito en el sitio. |
reply_to_topicescritura | Responder topic Publica una respuesta en un topic. Requiere estar inscrito en el sitio. |
admin_list_commentslectura | [Admin] Listar comentarios Lista todos los comentarios del sitio, incluidos los ocultos. Requiere ser owner. |
admin_get_commentlectura | [Admin] Ver comentario Obtiene un comentario con su hilo completo. Requiere ser owner. |
admin_moderate_commentescritura | [Admin] Moderar comentario Muestra (active=true) u oculta (active=false) un comentario. Requiere ser owner. |
admin_delete_commentborra | [Admin] Eliminar comentario Elimina un comentario definitivamente. Requiere ser owner. |
admin_list_topicslectura | [Admin] Listar topics Lista todos los topics del sitio, incluidos los inactivos. Requiere ser owner. |
admin_get_topiclectura | [Admin] Ver topic Obtiene un topic por ID. Requiere ser owner. |
admin_update_topicescritura | [Admin] Actualizar topic Edita el nombre o contenido de un topic, o lo activa/desactiva. Requiere ser owner. |
admin_list_topic_replieslectura | [Admin] Listar respuestas de un topic Lista las respuestas de un topic. Requiere ser owner. |
/mcp/store13 toolslist_productslectura | Listar productos Lista los productos activos del catálogo. |
get_productlectura | Ver producto Obtiene un producto activo por su slug, con sus atributos. |
list_my_addresseslectura | Listar mis direcciones Lista las direcciones del usuario autenticado en este sitio. |
get_my_addresslectura | Ver mi dirección Obtiene una dirección propia. |
create_addressescritura | Crear dirección Guarda una nueva dirección para el usuario autenticado. |
update_addressescritura | Actualizar dirección Actualiza solo los campos enviados de una dirección propia. |
delete_addressborra | Eliminar dirección Elimina una dirección propia. |
list_my_orderslectura | Listar mis pedidos Lista los pedidos del usuario autenticado. |
get_my_orderlectura | Ver mi pedido Obtiene un pedido propio con sus items y pago. |
create_orderescritura | Crear pedido Crea un pedido en estado pending. Precios, stock y cupón se validan en el servidor. Confirma con el usuario antes de llamarla. |
list_my_paymentslectura | Listar mis pagos Lista los pagos del usuario autenticado. |
get_my_paymentlectura | Ver mi pago Obtiene un pago propio con su pedido. |
register_paymentescritura | Registrar pago Registra el pago de un pedido propio (por ejemplo tras pagar en la pasarela). Confirma con el usuario antes de llamarla. |
/mcp/store-admin24 toolsadmin_list_productslectura | [Admin] Listar productos Lista todos los productos, incluidos los inactivos. |
admin_get_productlectura | [Admin] Ver producto Obtiene un producto por ID. |
admin_create_productescritura | [Admin] Crear producto Crea un producto. El slug se genera a partir del nombre. |
admin_update_productescritura | [Admin] Actualizar producto Actualiza solo los campos enviados de un producto. |
admin_delete_productborra | [Admin] Eliminar producto Elimina un producto definitivamente. |
admin_list_product_attributeslectura | [Admin] Listar atributos de un producto Lista los atributos (ej: Color, Talla) de un producto. |
admin_add_product_attributeescritura | [Admin] Agregar atributo a un producto Agrega un atributo nombre-valor a un producto. |
admin_delete_product_attributeborra | [Admin] Eliminar atributo de un producto Elimina un atributo de un producto. |
admin_list_orderslectura | [Admin] Listar pedidos Lista los pedidos del sitio. |
admin_get_orderlectura | [Admin] Ver pedido Obtiene un pedido con sus items y pago. |
admin_update_order_statusescritura | [Admin] Cambiar estado de pedido Cambia el estado de un pedido (por ejemplo a shipped cuando se despacha). |
admin_list_paymentslectura | [Admin] Listar pagos Lista los pagos del sitio. |
admin_get_paymentlectura | [Admin] Ver pago Obtiene un pago con su pedido asociado. |
admin_update_payment_statusescritura | [Admin] Cambiar estado de pago Cambia el estado de un pago. |
admin_list_couponslectura | [Admin] Listar cupones Lista los cupones de descuento del sitio. |
admin_get_couponlectura | [Admin] Ver cupón Obtiene un cupón por ID. |
admin_create_couponescritura | [Admin] Crear cupón Crea un cupón de descuento. El código se guarda en mayúsculas. |
admin_update_couponescritura | [Admin] Actualizar cupón Actualiza solo los campos enviados de un cupón. |
admin_delete_couponborra | [Admin] Eliminar cupón Elimina un cupón. |
admin_list_shipping_ruleslectura | [Admin] Listar reglas de envío Lista las reglas de costo de envío del sitio. |
admin_get_shipping_rulelectura | [Admin] Ver regla de envío Obtiene una regla de envío por ID. |
admin_create_shipping_ruleescritura | [Admin] Crear regla de envío Crea una regla de costo de envío, opcionalmente limitada a un estado o ciudad. |
admin_update_shipping_ruleescritura | [Admin] Actualizar regla de envío Actualiza solo los campos enviados de una regla de envío. |
admin_delete_shipping_ruleborra | [Admin] Eliminar regla de envío Elimina una regla de envío. |
/mcp/learn30 toolslist_courseslectura | Listar cursos Lista los cursos activos del sitio. |
get_courselectura | Ver curso Obtiene un curso activo por slug, incluida la inscripción del usuario si existe. |
list_my_courseslectura | Listar mis cursos Lista los cursos en los que el usuario autenticado está inscrito, con su progreso. |
list_my_completed_lessonslectura | Listar mis lecciones vistas Lista las lecciones que el usuario autenticado ya vio, más recientes primero. |
enroll_in_courseescritura | Inscribirme en un curso Inscribe al usuario autenticado como alumno. Solo funciona si el curso tiene auto_enroll. |
list_lessonslectura | Listar lecciones Lista las lecciones de un curso. Los alumnos ven solo las activas; profesores y admins del curso ven todas. |
get_lessonescritura | Ver lección Obtiene una lección con la respuesta y el último intento de cuestionario del usuario, y las preguntas del cuestionario (sin la respuesta correcta). Si el usuario está inscrito, la marca como vista y actualiza su progreso. |
submit_lesson_answerescritura | Responder actividad Envía la respuesta del alumno a la actividad de una lección. Requiere ser alumno del curso. |
get_lesson_answerlectura | Ver respuesta de actividad Obtiene una respuesta de actividad (los alumnos solo ven las propias). |
submit_lesson_quizescritura | Presentar cuestionario Envía de una vez las respuestas a TODAS las preguntas del cuestionario de una lección (obtenlas con get_lesson) y devuelve la calificación. Se permiten varios intentos. Requiere ser alumno del curso. |
get_lesson_quizlectura | Ver intento de cuestionario Obtiene un intento de cuestionario (los alumnos solo ven los propios). |
teacher_create_lessonescritura | [Profesor] Crear lección Crea una lección en el curso. El slug se genera a partir del nombre. Requiere ser profesor o admin del curso. |
teacher_update_lessonescritura | [Profesor] Actualizar lección Actualiza los campos enviados de una lección. Requiere ser profesor o admin del curso. |
teacher_delete_lessonborra | [Admin del curso] Eliminar lección Elimina una lección. Requiere ser admin del curso. |
teacher_list_questionslectura | [Profesor] Listar banco de preguntas Lista el banco de preguntas de selección múltiple del curso. Requiere ser profesor o admin del curso. |
teacher_get_questionlectura | [Profesor] Ver pregunta Obtiene una pregunta del banco, incluida la respuesta correcta. Requiere ser profesor o admin del curso. |
teacher_create_questionescritura | [Profesor] Crear pregunta Agrega una pregunta de selección múltiple (2 a 5 opciones) al banco del curso. Requiere ser profesor o admin del curso. |
teacher_update_questionescritura | [Profesor] Actualizar pregunta Actualiza los campos enviados de una pregunta del banco. Requiere ser profesor o admin del curso. |
teacher_delete_questionborra | [Admin del curso] Eliminar pregunta Elimina una pregunta del banco. Requiere ser admin del curso. |
teacher_list_lesson_exam_questionslectura | [Profesor] Listar preguntas del cuestionario Lista las preguntas del banco vinculadas al cuestionario de una lección. Requiere ser profesor o admin del curso. |
teacher_link_exam_questionescritura | [Profesor] Vincular pregunta al cuestionario Agrega una pregunta del banco del curso al cuestionario de una lección. Requiere ser profesor o admin del curso. |
teacher_unlink_exam_questionborra | [Profesor] Desvincular pregunta del cuestionario Quita una pregunta del cuestionario de una lección (la pregunta sigue en el banco). Requiere ser profesor o admin del curso. |
teacher_list_enrollmentslectura | [Profesor] Listar inscritos Lista los inscritos del curso con su rol, estado y progreso. Requiere ser profesor o admin del curso. |
teacher_get_enrollmentlectura | [Profesor] Ver inscripción Obtiene una inscripción del curso. Requiere ser profesor o admin del curso. |
teacher_list_lesson_answerslectura | [Profesor] Listar respuestas de actividad Lista las respuestas de los alumnos a la actividad de una lección. Requiere ser profesor o admin del curso. |
teacher_grade_lesson_answerescritura | [Profesor] Calificar respuesta de actividad Pone nota y/o retroalimentación a la respuesta de un alumno. Requiere ser profesor o admin del curso. |
teacher_delete_lesson_answerborra | [Admin del curso] Eliminar respuesta de actividad Elimina la respuesta de un alumno. Requiere ser admin del curso. |
teacher_list_lesson_quizzeslectura | [Profesor] Listar intentos de cuestionario Lista los intentos de cuestionario de los alumnos en una lección. Requiere ser profesor o admin del curso. |
teacher_update_lesson_quizescritura | [Profesor] Corregir intento de cuestionario Corrige el estado o la nota de un intento de cuestionario. Requiere ser profesor o admin del curso. |
teacher_delete_lesson_quizborra | [Admin del curso] Eliminar intento de cuestionario Elimina un intento de cuestionario. Requiere ser admin del curso. |
/mcp/learn-admin33 toolsadmin_list_courseslectura | [Admin] Listar cursos Lista todos los cursos del sitio, incluidos los inactivos. |
admin_get_courselectura | [Admin] Ver curso Obtiene un curso por ID. |
admin_create_courseescritura | [Admin] Crear curso Crea un curso. El slug se genera a partir del nombre. |
admin_update_courseescritura | [Admin] Actualizar curso Actualiza los campos enviados de un curso. |
admin_delete_courseborra | [Admin] Eliminar curso Elimina un curso definitivamente. |
admin_list_lessonslectura | [Admin] Listar lecciones Lista todas las lecciones de un curso. |
admin_get_lessonlectura | [Admin] Ver lección Obtiene una lección por ID. |
admin_create_lessonescritura | [Admin] Crear lección Crea una lección en un curso. El slug se genera a partir del nombre. |
admin_update_lessonescritura | [Admin] Actualizar lección Actualiza los campos enviados de una lección. |
admin_delete_lessonborra | [Admin] Eliminar lección Elimina una lección. |
admin_list_questionslectura | [Admin] Listar banco de preguntas Lista el banco de preguntas de un curso. |
admin_get_questionlectura | [Admin] Ver pregunta Obtiene una pregunta del banco, incluida la respuesta correcta. |
admin_create_questionescritura | [Admin] Crear pregunta Agrega una pregunta de selección múltiple (2 a 5 opciones) al banco de un curso. |
admin_update_questionescritura | [Admin] Actualizar pregunta Actualiza los campos enviados de una pregunta del banco. |
admin_delete_questionborra | [Admin] Eliminar pregunta Elimina una pregunta del banco. |
admin_list_lesson_exam_questionslectura | [Admin] Listar preguntas del cuestionario Lista las preguntas vinculadas al cuestionario de una lección. |
admin_link_exam_questionescritura | [Admin] Vincular pregunta al cuestionario Agrega una pregunta del banco del curso al cuestionario de una lección. |
admin_unlink_exam_questionborra | [Admin] Desvincular pregunta del cuestionario Quita una pregunta del cuestionario de una lección (la pregunta sigue en el banco). |
admin_list_lesson_answerslectura | [Admin] Listar respuestas de actividad Lista las respuestas de los alumnos a la actividad de una lección. |
admin_get_lesson_answerlectura | [Admin] Ver respuesta de actividad Obtiene una respuesta de actividad por ID. |
admin_create_lesson_answerescritura | [Admin] Registrar respuesta de actividad Registra manualmente la respuesta de un alumno (el usuario debe estar inscrito en el curso). |
admin_update_lesson_answerescritura | [Admin] Calificar respuesta de actividad Actualiza la respuesta, la nota o la retroalimentación de una respuesta de actividad. |
admin_delete_lesson_answerborra | [Admin] Eliminar respuesta de actividad Elimina una respuesta de actividad. |
admin_list_lesson_quizzeslectura | [Admin] Listar intentos de cuestionario Lista los intentos de cuestionario de una lección. |
admin_get_lesson_quizlectura | [Admin] Ver intento de cuestionario Obtiene un intento de cuestionario por ID. |
admin_update_lesson_quizescritura | [Admin] Corregir intento de cuestionario Corrige el estado o la nota de un intento de cuestionario. |
admin_delete_lesson_quizborra | [Admin] Eliminar intento de cuestionario Elimina un intento de cuestionario. |
admin_list_enrollmentslectura | [Admin] Listar inscripciones Lista las inscripciones a cursos del sitio. |
admin_get_enrollmentlectura | [Admin] Ver inscripción Obtiene una inscripción por ID. |
admin_enroll_userescritura | [Admin] Inscribir usuario Inscribe un usuario del sitio en un curso con un rol (student, teacher o admin del curso). Busca el user_id con admin_search_site_users. |
admin_update_enrollmentescritura | [Admin] Actualizar inscripción Cambia el rol, estado o progreso de una inscripción. |
admin_delete_enrollmentborra | [Admin] Eliminar inscripción Elimina la inscripción de un usuario a un curso. |
admin_search_site_userslectura | [Admin] Buscar usuarios del sitio Busca usuarios inscritos en el sitio por nombre o email, para asignarlos a un curso. |