GET/api/v1/products
Listar productos
Tu catálogo (la ficha comercial de cada producto). Por defecto solo los activos.
Parámetros de consulta
kindstring
Filtra por tipo (course, masterclass, live_event…).
publish_statusstring
Valores: published · draft · archived
include_inactiveboolean
true para incluir también los pausados.
curl "https://www.clonify.com/api/v1/products" \
-H "Authorization: Bearer clk_live_…"
POST/api/v1/products
Crear un producto
Crea una ficha en el catálogo del clon. Queda activa: el clon podrá recomendarla cuando encaje en la conversación.
Permiso de escritura
Cuerpo (JSON)
titlestring 3..200obligatorio
descriptionstring 40..4000obligatorio
pricenumber | null
Omitido o null = «consultar con el creador».
currencystring ISO-3
ISO de 3 letras. Por defecto EUR.
checkout_urlstring (URL HTTP(S), max. 1000) | null
tagsstring[]obligatorio
Tipo(s) del producto: curso, masterclass, libro, comunidad, coaching… Al menos uno.
curl -X POST "https://www.clonify.com/api/v1/products" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"title":"…","description":"…","tags":["…"]}'
GET/api/v1/products/{id}
Leer un producto
La ficha completa de un producto, con sus FAQs incluidas.
curl "https://www.clonify.com/api/v1/products/1" \
-H "Authorization: Bearer clk_live_…"
PATCH/api/v1/products/{id}
Editar un producto
Solo se tocan los campos que envíes. Cambiar título, descripción o tipos re-indexa el producto para el matching del clon.
Permiso de escritura
Cuerpo (JSON)
replay_visibilitystring
Histórico disponible en cursos, Actualizaciones y repeticiones de directos. all permite todo el histórico; since_joined solo el contenido desde la entrada. Las renovaciones conservan esa fecha; al terminar el acceso se cierra el contenido y una nueva suscripción comienza otra ventana. Omitirlo conserva el ajuste actual. GET devuelve replay_visibility.Valores: all · since_joined
descriptionstring 40..4000
pricenumber | null
null = «consultar con el creador».
checkout_urlstring (URL HTTP(S), max. 1000) | null
cta_labelstring 0..60 | null
Texto del botón de la tarjeta. null = botón genérico.
is_activeboolean
false pausa el producto comercialmente (el clon deja de recomendarlo).
publish_statusstring
Valores: published · draft · archived
curl -X PATCH "https://www.clonify.com/api/v1/products/1" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"replay_visibility":"all","title":"…"}'
POST/api/v1/products/{id}/entries/import
Importar entradas de contenido
Añade de 1 a 50 entradas de texto a un producto existente (course, masterclass, capsules o downloadable), en una única operación. No crea productos ni cambia precios, accesos o el estado del producto, y no envía avisos. HTML saneado, máximo 50.000 caracteres por entrada y 3 MB por petición. Cada entrada queda en borrador salvo status=published. published_at conserva la fecha histórica; no programa la publicación. Una repetición idéntica devuelve 200 y replayed=true; la primera importación devuelve 201. Reutilizar external_id con otro contenido devuelve 409: esta operación no sincroniza correcciones.
Permiso de escritura
Cuerpo (JSON)
external_idstring 1..200obligatorio
Identificador estable del lote dentro de este producto. Reutilízalo al reintentar.
collection_titlestring 1..200
Título opcional de un módulo nuevo que agrupa estas entradas.
entriesobject[]obligatorio
Entradas ordenadas con external_id único dentro del lote, title y html obligatorios; description, published_at (ISO 8601 con zona horaria) y status (draft por defecto o published) opcionales. Conserva exactamente el mismo contenido al reintentar. category (hasta 80 caracteres) y summary_html (hasta 8.000 caracteres, solo negrita y cursiva) son opcionales. Las etiquetas b/i se convierten a strong/em; se eliminan enlaces, estilos y contenido ejecutable.
curl -X POST "https://www.clonify.com/api/v1/products/1/entries/import" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"external_id":"…","entries":[{"…":"…"}]}'
{ "data": { "product_id": 172, "external_id": "edition-2026-09-11", "module_id": 80, "entries": [{ "external_id": "article-1", "unit_id": 501, "status": "draft" }], "replayed": false } }
GET/api/v1/products/{id}/entries/import
Consultar una importación
Devuelve el recibo original con los identificadores de las entradas creadas. Solo consulta importaciones de la cuenta de la llave. 404 si no existe. No refleja modificaciones posteriores de las entradas.
Parámetros de consulta
external_idstring 1..200obligatorio
Identificador del lote utilizado al importar.
curl "https://www.clonify.com/api/v1/products/1/entries/import" \
-H "Authorization: Bearer clk_live_…"
PATCH/api/v1/products/{id}/entries/import
Actualizar la presentación de entradas
Actualiza únicamente categoría y resumen de entradas ya importadas. Conserva cuerpo, fechas, estado, accesos y recibo original. Operación atómica, repetible y limitada a la cuenta y producto de la llave. null elimina un campo; omitirlo lo conserva.
Permiso de escritura
Cuerpo (JSON)
external_idstring 1..200obligatorio
Identificador del lote original.
entriesobject[]obligatorio
De 1 a 50 entradas con external_id original y category o summary_html. No se permiten entradas repetidas.
curl -X PATCH "https://www.clonify.com/api/v1/products/1/entries/import" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"external_id":"…","entries":[{"…":"…"}]}'
GET/api/v1/products/{id}/faqs
Listar FAQs de un producto
Las respuestas que enseñan al clon a resolver dudas y objeciones sobre ese producto.
curl "https://www.clonify.com/api/v1/products/1/faqs" \
-H "Authorization: Bearer clk_live_…"
POST/api/v1/products/{id}/faqs
Crear FAQ de producto
Cuando pregunten algo parecido SOBRE ese producto, el clon responderá lo indicado.
Permiso de escritura
Cuerpo (JSON)
questionstring 3..300obligatorio
answerstring 1..4000obligatorio
answer_modestring
Por defecto 'free': el clon responde con su voz apoyándose en tu texto (la FAQ es guía). 'contexto' lo fija con más fidelidad (enlaces, pasos y datos se respetan).Valores: free · contexto
actionsobject[]
Acciones al dispararse: {type: asset|product|external_link|video_embed|escalate_offer, …}.
curl -X POST "https://www.clonify.com/api/v1/products/1/faqs" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"question":"…","answer":"…"}'
DELETE/api/v1/products/{id}/faqs/{faqId}
Borrar FAQ de producto
Borra la FAQ PERMANENTEMENTE. No hay papelera: si fue un error, vuelve a crearla.
Permiso de borrado
curl -X DELETE "https://www.clonify.com/api/v1/products/1/faqs/1" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{}'
{ "id": 51, "product_id": 172, "deleted": true }
DELETE/api/v1/products/{id}
Borrar un producto
Borra el producto PERMANENTEMENTE, con sus FAQs. Para dejar de recomendarlo sin perderlo, mejor PATCH con is_active=false (pausa) o publish_status='archived'.
Permiso de borrado
curl -X DELETE "https://www.clonify.com/api/v1/products/1" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{}'
{ "id": 172, "deleted": true }