GET/api/v1/brain/sources
Listar fuentes del conocimiento
El índice del conocimiento del clon (título, tipo, palabras, estado). El texto completo lo da el detalle.
Parámetros de consulta
starting_afterinteger
Cursor: devuelve fuentes con id mayor que este.
source_typestring
Valores: youtube · text · pdf · video · website · instagram · vimeo
statusstring
Valores: pending · extracting · processing · ready · error
curl "https://www.clonify.com/api/v1/brain/sources" \
-H "Authorization: Bearer clk_live_…"
POST/api/v1/brain/sources
Entrenar al clon con texto
Crea una fuente de texto, la trocea, la embebe y la enlaza a todos tus clones. Igual que subirla por el panel. Consume cuota de palabras del plan (403 words_quota_exceeded si no queda).
Permiso de escritura
Cuerpo (JSON)
titlestring 2..200obligatorio
contentstring 10..200000obligatorio
content_dateYYYY-MM-DD
Fecha del contenido original (no de la subida). Omitir = hoy.
external_idstring
TU identificador estable del contenido. Si ya subiste uno con este id, se REEMPLAZA (upsert idempotente para sincronizar). La respuesta lleva replaced: true.
content_hashstring
Tu huella del contenido original. Te la devolvemos en los listados para detectar qué cambió y resubir solo eso.
curl -X POST "https://www.clonify.com/api/v1/brain/sources" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"title":"…","content":"…"}'
{
"object": "brain_source",
"id": 12438,
"source_type": "text",
"title": "Guía de sentadilla",
"word_count": 210,
"status": "ready",
"chunk_count": 3,
"replaced": false,
"created_at": "2026-07-03T17:00:00.000Z",
"updated_at": "2026-07-03T17:00:04.000Z"
}
POST/api/v1/brain/sources/link
Entrenar al clon con un enlace
Una página web (se extrae su contenido limpio) o un vídeo de YouTube donde habla SOLO el creador (se usa su transcripción). Mismo pipeline y cuota de palabras que el texto. Un vídeo con más voces necesita el archivo original en el panel: 422 youtube_needs_file.
Permiso de escritura
Cuerpo (JSON)
urlstring (URL)obligatorio
URL de la página web o del vídeo de YouTube.
has_other_speakersboolean
Solo vídeos: true si aparece otra persona además del creador (entrevista, podcast).
external_idstring
TU identificador estable del contenido. Si ya subiste uno con este id, se REEMPLAZA (upsert idempotente). La extracción va ANTES del reemplazo: un enlace roto no destruye la fuente anterior.
content_hashstring
Tu huella del contenido original. Te la devolvemos en los listados para detectar qué cambió.
curl -X POST "https://www.clonify.com/api/v1/brain/sources/link" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"…"}'
{
"object": "brain_source",
"id": 12440,
"source_type": "website",
"title": "Guía completa de la sentadilla",
"word_count": 1480,
"status": "ready",
"chunk_count": 9,
"replaced": false,
"created_at": "2026-07-05T10:00:00.000Z",
"updated_at": "2026-07-05T10:00:21.000Z"
}
POST/api/v1/brain/sources/pdf
Entrenar al clon con un PDF
Los bytes del PDF en base64, hasta ~3MB. Solo PDFs con texto seleccionable: uno escaneado (solo imágenes) devuelve 422 pdf_no_text. Pásalo por OCR o envía el texto con POST /brain/sources. Misma cuota de palabras que el texto.
Permiso de escritura
Cuerpo (JSON)
titlestring 2..200obligatorio
file_base64string (base64)obligatorio
Los bytes del PDF codificados en base64 (sin prefijo data:). Límite ~3MB de PDF. Para más grande, el panel.
content_dateYYYY-MM-DD
Fecha del contenido. Omitir = la fecha interna del PDF si la trae. Si no, hoy.
external_idstring
TU identificador estable (p. ej. la ruta del archivo). Si ya subiste uno con este id, se REEMPLAZA (upsert idempotente).
curl -X POST "https://www.clonify.com/api/v1/brain/sources/pdf" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"title":"…","file_base64":"…"}'
GET/api/v1/brain/sources/{id}
Leer una fuente
Una fuente con su texto completo (content_text). Puede pesar: el listado no lo arrastra.
curl "https://www.clonify.com/api/v1/brain/sources/1" \
-H "Authorization: Bearer clk_live_…"
DELETE/api/v1/brain/sources/{id}
Borrar una fuente
Borra la fuente PERMANENTEMENTE, con sus trozos. LIBERA cuota de palabras. Es la pieza del patrón «quitar y resubir» para sincronizar contenido. No hay papelera.
Permiso de borrado
curl -X DELETE "https://www.clonify.com/api/v1/brain/sources/1" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{}'
{ "id": 12438, "deleted": true }
DELETE/api/v1/brain/sources
Borrar una fuente por tu id
Igual que el borrado por id numérico, pero usando TU external_id (el que pasaste al crearla): tu sincronización no necesita conocer nuestros ids.
Permiso de borrado
Parámetros de consulta
external_idstringobligatorio
Tu identificador estable de la fuente.
curl -X DELETE "https://www.clonify.com/api/v1/brain/sources" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{}'
{ "id": 12438, "external_id": "notion-doc-42", "deleted": true }
GET/api/v1/brain/folders
Listar carpetas del conocimiento
Las carpetas donde se organiza el material del clon, con su id. Es lo que necesitas para pasar folder_id al subir una fuente. Lista plana: cada carpeta dice de cuál cuelga en parent_id, y el árbol lo montas tú. Vienen todas, sin paginar.
curl "https://www.clonify.com/api/v1/brain/folders" \
-H "Authorization: Bearer clk_live_…"
{
"object": "list",
"data": [{
"object": "brain_folder",
"id": 88,
"name": "Clases del curso",
"description": null,
"parent_id": null,
"product_id": 172,
"is_course": true,
"created_at": "2026-05-02T08:12:00.000Z",
"updated_at": "2026-07-19T11:40:00.000Z"
}],
"has_more": false,
"next_starting_after": null
}
POST/api/v1/brain/folders
Crear una carpeta
Crea una carpeta para archivar el material que subas. IDEMPOTENTE: si ya existe una con ese nombre en el mismo nivel, te devuelve la que hay (created: false) en vez de duplicarla, así que una sincronización que se ejecute cada noche no te llena el conocimiento de copias.
Permiso de escritura
Cuerpo (JSON)
namestring 2..120obligatorio
parent_idinteger
Carpeta de la que cuelga. Omitir = carpeta de primer nivel.
curl -X POST "https://www.clonify.com/api/v1/brain/folders" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"name":"…"}'
{
"object": "brain_folder",
"id": 91,
"name": "Newsletter 2026",
"description": null,
"parent_id": null,
"product_id": null,
"is_course": false,
"created_at": "2026-07-30T10:00:00.000Z",
"updated_at": "2026-07-30T10:00:00.000Z",
"created": true
}
GET/api/v1/brain/guided-answers
Listar respuestas
Las preguntas frecuentes de tu Conocimiento (primero las fijadas).
curl "https://www.clonify.com/api/v1/brain/guided-answers" \
-H "Authorization: Bearer clk_live_…"
POST/api/v1/brain/guided-answers
Crear respuesta
Dos modos. CON TEXTO (con answer): el clon se apoya en ese texto con fidelidad cuando la pregunta encaje, dicho con su voz y leyendo la conversación. LIBRE (sin answer): el clon habla libre y se disparan las actions declaradas.
Permiso de escritura
Cuerpo (JSON)
questionstring 3..300obligatorio
UNA pregunta natural, como la escribiría un visitante (sin amontonar varias con «/»).
answerstring 1..4000
La respuesta en la que se apoya el clon. Vacío = modo libre (entonces actions es obligatorio).
variantsstring[] (máx 10)
Otras formas de preguntar LO MISMO. Cada una amplía el match por significado.
actionsobject[]
Acciones al dispararse: {type: asset|product|external_link|video_embed|escalate_offer, …}.
curl -X POST "https://www.clonify.com/api/v1/brain/guided-answers" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{"question":"…"}'
DELETE/api/v1/brain/guided-answers/{id}
Borrar respuesta
Borra la respuesta PERMANENTEMENTE, con sus variantes. No hay papelera.
Permiso de borrado
curl -X DELETE "https://www.clonify.com/api/v1/brain/guided-answers/1" \
-H "Authorization: Bearer clk_live_…" \
-H "Content-Type: application/json" \
-d '{}'
{ "id": 204, "deleted": true }