Ciclo de vida y versiones
Publicar, despublicar, editar productos publicados, editar contenido por id e historial de versiones.
Written By Jacobo
Last updated 23 days ago
Todos los productos siguen el mismo ciclo: draft → published → unpublished, y cada cambio queda registrado como una versión. En esta página, {tipo} es programs, external, workshops o checkouts.
Publicar y checkout_url
Al publicar, validamos el borrador, lo ponemos en vivo y creamos su precio de venta. La respuesta incluye el checkout_url, el link de pago que puedes compartir con tus compradores:
POST /api/ext/programs/6ab8...f001/publish{
"id": "6ab8...f001",
"type": "program",
"state": "published",
"checkout_url": "https://<dominio-de-checkout>/v2/6ab8...f990",
"version_id": "6ab8...v002",
"updated_at": "2026-01-01T00:00:00Z"
}- Productos:
checkout_url=…/v2/{id-de-precio}. Checkouts:…/c/{slug}. checkout_urlesnullmientras el producto está endraftounpublished.- Si falta algo para publicar, recibes un
422que indica qué falta.
Publicar es idempotente: publicar un producto que ya está en vivo y sin cambios pendientes no hace nada (no crea versión nueva) y devuelve el mismo checkout_url.
Volver a publicar después de despublicar
Un producto unpublished se puede publicar de nuevo con POST /{tipo}/{id}/publish. Se reactiva su precio y vuelve a tener checkout_url.
Editar un producto publicado
Un PATCH sobre un producto published no modifica lo que está en vivo. El cambio queda en un borrador nuevo, y el producto publicado sigue vendiéndose igual hasta que vuelvas a publicar:
publicado → PATCH → en vivo sin cambios; un borrador guarda la edición
→ publish → la edición sale en vivo (nueva versión)Subir una imagen a un producto publicado funciona igual.
Editar contenido: identifica cada elemento por su id
Los módulos y lecciones (programas) y los módulos y sesiones (talleres) se editan enviando el árbol de contenido completo en el PATCH, igual que en el editor del Hub. Cada elemento se identifica por su id, nunca por su posición:
GET /{tipo}/{id}(y las respuestas de crear y editar) devuelven el árbol con elidde cada elemento.- Con
id→ ese módulo/lección/sesión se edita en su lugar y conserva el progreso de tus estudiantes. Puedes reordenar libremente: el orden lo da la posición en la lista, la identidad la da elid. - Sin
id→ se crea un elemento nuevo. - Un
idque no pertenece a este producto →400. Al crear no se envíanid. - Un elemento existente que no envías → se elimina. El árbol que mandas es la versión completa.
Despublicar
Despublicar retira el producto de la venta y limpia su checkout_url. No se borra nada: se puede editar y volver a publicar.
Historial de versiones
GET /{tipo}/{id}/versions devuelve el historial (más reciente primero). Cada crear, editar, publicar, despublicar o cambio comercial genera una versión:
{
"items": [
{
"version_id": "6ab8...v002",
"version": 2,
"status": "approved",
"changed_fields": ["name"],
"created_at": "2026-01-02T00:00:00Z",
"updated_at": "2026-01-02T00:00:00Z"
}
]
}Valores de status más comunes: draft (borrador), approved (la publicada) y superseded (reemplazada por una publicación posterior).
Reintentos
Crear (POST /{tipo}) no es idempotente: si repites la request, puedes crear un duplicado. Si una creación falla por red o timeout, antes de reintentar busca el producto con tu external_ref (GET /{tipo}?external_ref=…).
Was this helpful?
More in API para mentores
Introducción a la API para mentoresAutenticación (API Key)ProgramasProgramas externosStill need help? Share an idea