ClonifyDevelopersAnar al tauler

Començar

  • Autenticació
  • Errors
  • Paginació
  • Límits de peticions
  • Webhooks
  • Per a agents d'IA
  • Servidor MCP

Referència de l'API

  • Seguiment d'alumnes6
  • Lliuraments externs per API6
  • Xat amb el clon1
  • Contactes i etiquetes5
  • Accessos d'acadèmies4
  • Converses4
  • Catàleg de productes11
  • Vendes externes2
  • Coneixement12
  • Multimèdia4
  • Clons (versions a l'API)3
  • Reunions i reserves3
  • Webinars6
  • Compte i consum1
Clonify

Seguiment d'alumnes

GET/api/v1/products/{id}/students

Llistar els alumnes d'un curs i com van

Qui té accés al curs i en quin estat és cadascú: actiu (algun senyal d'estudi els últims 7 dies), en risc (de 7 a 13 dies sense activitat), aturat (14 o més), sense començar (cap activitat) o acabat (totes les classes publicades marcades). Compta com a activitat marcar una classe, obrir-la, veure'n el vídeo, assistir a un directe del curs o veure'n la gravació. Inclou l'última activitat amb la seva classe o directe, les classes marcades i les començades sense marcar, l'accés i un resum del curs sencer. Són les mateixes dades que la pestanya Alumnes del tauler.

Paràmetres de consulta

statusactive | at_risk | stalled | not_started | completed | attention

Només els d'un estat; attention = els que necessiten una empenta (en risc, aturats de fa menys de 90 dies i sense començar amb accés des de fa 7 a 29 dies).

sortattention | recent | oldest | progress | progress-asc | activity | activity-asc

Ordre. attention (per defecte) posa primer qui necessita una empenta; recent/oldest, per data d'alta; progress, per classes marcades; activity, per última activitat.

emailstring

Cerca per correu o nom dins del curs.

starting_afterstring

Cursor rebut a next_starting_after. Ometre'l a la primera pàgina.

limitinteger 1..200

Màxim d'alumnes per pàgina: 1–200; per defecte 50.

bash
curl "https://www.clonify.com/api/v1/products/1/students" \
  -H "Authorization: Bearer clk_live_…"
json
{
  "object": "list",
  "data": [
    {
      "object": "course_student",
      "visitor_id": 88,
      "contact_id": 135,
      "email": "student@example.test",
      "name": "Student",
      "status": "active",
      "status_days": 1,
      "needs_attention": false,
      "last_activity_at": "2026-10-13T21:36:00Z",
      "last_activity": {
        "kind": "video",
        "at": "2026-10-13T21:36:00Z",
        "lesson_id": 1004,
        "lesson_title": "Lesson 4",
        "live_id": null,
        "live_title": null
      },
      "last_marked_at": "2026-09-22T10:00:00Z",
      "completed_lessons": 3,
      "total_lessons": 12,
      "completed_lesson_ids": [
        1001,
        1002,
        1003
      ],
      "started_lesson_ids": [
        1004
      ],
      "access": {
        "source": "purchase",
        "by_tag": true,
        "included_from_product_ids": [],
        "granted_at": "2026-08-30T10:00:00Z",
        "expires_at": null,
        "paused": false
      }
    }
  ],
  "has_more": true,
  "next_starting_after": "bzo1MA",
  "summary": {
    "total": 14,
    "matching": 14,
    "by_status": {
      "active": 5,
      "at_risk": 3,
      "stalled": 3,
      "not_started": 2,
      "completed": 1
    },
    "needs_attention": 7,
    "at_risk_after_days": 7,
    "stalled_after_days": 14
  },
  "measurement": {
    "activity": "Any study signal in this course: completing a lesson, opening it, watching its video, attending one of the course's live sessions or watching its recording.",
    "coverage": "Lesson opens and video watching are recorded since 2026-09-24 and only for campus and Bunny players (not YouTube, Vimeo or other sites); earlier, only completed lessons exist.",
    "paging": "Pages follow the requested order at request time; if students change between calls a page may repeat or skip someone. Re-read all pages to refresh."
  }
}
GET/api/v1/learning/playback

Consultar reproducció de vídeos

Mostres noves dels reproductors observables de classes, emissions i repeticions (Bunny i Mux). Requereix exactament product_id per a classes o webinar_id per a directes/repeticions. Cada fila conté increments, no totals: visible_playing_seconds estima reproducció amb pestanya visible i media_seconds avanç reproduït, ajustat per velocitat quan està disponible. Les repeticions tornen a sumar; no és percentatge únic vist. Saltar de posició no acredita el tram saltat. pause_count compta pauses i seek_count salts/discontinuïtats observades; position_seconds és una posició, no temps vist. Camps enviats pel navegador i limitats amb rellotge del servidor; no proven atenció ni impedeixen tota falsificació. visitor_id identifica sessió verificada; registrant_id sense visitant correspon a enllaç d'inscripció, que pot reenviar-se. No s'unifiquen automàticament els dos tipus d'identitat. S'exclouen pauses, pestanyes ocultes i buits llargs; pot faltar el final en tancar o perdre connexió. Els iframes sense velocitat verificable es mesuren conservadorament a 1x i poden infracomptar o marcar discontinuïtats a altres velocitats. No inclou àudio ni altres proveïdors externs sense adaptador. Els permisos d'enviament duren fins a 12 hores des de l'accés autoritzat i no concedeixen accés al vídeo. resource identifica el contingut observat. No reconstrueix històrics, no canvia completats i no certifica FUNDAE. El cursor serveix per a noves mostres; sense filtres de data o alumne, filtra aquests camps al client.

Paràmetres de consulta

product_idinteger

Curs. Indica aquest paràmetre o webinar_id, mai tots dos.

webinar_idinteger

Directe la emissió o repetició del qual es consulta. Mai s'atribueix automàticament a un curs.

starting_afterinteger

ID de l'última mostra rebuda per continuar l'exportació.

limitinteger 1..200

Màxim de mostres: 1–200; predeterminat 100.

bash
curl "https://www.clonify.com/api/v1/learning/playback" \
  -H "Authorization: Bearer clk_live_…"
json
{
  "object": "list",
  "data": [
    {
      "id": "1",
      "session_id": "6e2c91cc-15a5-4c46-a5cd-1db7703c1d20",
      "visitor_id": 88,
      "registrant_id": null,
      "kind": "course",
      "product_id": 100,
      "unit_id": 1000,
      "block_id": 1001,
      "webinar_id": null,
      "resource": "content-fingerprint",
      "occurred_at": "2026-09-24T12:00:30Z",
      "visible_playing_seconds": 30,
      "media_seconds": 60,
      "position_seconds": 90,
      "pause_count": 0,
      "seek_count": 1,
      "closed": false
    }
  ],
  "has_more": false,
  "next_starting_after": null,
  "measurement": {
    "source": "visible_player_client_reported",
    "limits": "Not proof of attention. Media seconds include repeats, not unique coverage. Missing telemetry is not reconstructed. Server caps concurrent time per known visitor or registration."
  }
}
GET/api/v1/learning/attendance

Consultar connexions a taules de grup

Evidències noves des de l'activació, confirmades per avisos signats de LiveKit. Una fila per inscripció amb les connexions a la sala principal i les seves sales de grup. confirmed_connected_seconds suma intervals complets sense duplicar solapaments entre dispositius o sales d'una mateixa inscripció. entry_only i exit_only indiquen límits desconeguts i no sumen durada; closed té entrada i sortida observades. No inclou emissions, visites a la pàgina ni espera a la porta. identity_source és registration_link o verified_session; visitor_id només es vincula amb sessió verificada del mateix correu i acadèmia. Un enllaç reenviat no demostra qui hi ha al darrere. audience_product_ids conserva el públic configurat, no acredita matrícula ni assigna minuts a cursos. No demostra atenció ni compliment FUNDAE. No reconstrueix històrics ni garanteix conservació documental. No admet filtres de data o product_id. Torna a consultar totes les pàgines per actualitzar connexions, el cursor no ordena canvis.

Paràmetres de consulta

webinar_idintegerobligatori

Identificador de la taula de grup. Obligatori.

visitor_idinteger

Filtra inscripcions vinculades a aquest alumne verificat o les seves identitats del mateix correu a l'acadèmia. Cada connexió conserva la seva pròpia font d'identitat.

starting_afterinteger

ID d'inscripció rebut a next_starting_after. Ometre a la primera pàgina.

limitinteger 1..100

Màxim d'inscripcions: 1–100; predeterminat 50.

bash
curl "https://www.clonify.com/api/v1/learning/attendance" \
  -H "Authorization: Bearer clk_live_…"
json
{
  "object": "list",
  "data": [
    {
      "id": "10",
      "registrant_id": 10,
      "registrant_email": "student@example.test",
      "registrant_name": "Student",
      "webinar_id": 50,
      "confirmed_connected_seconds": 120,
      "has_incomplete_connections": false,
      "connections": [
        {
          "room_name": "webinar-example1",
          "room_sid": "RM_example",
          "participant_sid": "PA_example",
          "visitor_id": 88,
          "identity_source": "verified_session",
          "audience_product_ids": [
            100
          ],
          "joined_at": "2026-09-24T12:00:00Z",
          "left_at": "2026-09-24T12:02:00Z",
          "connected_seconds": 120,
          "join_event_id": "event-join",
          "leave_event_id": "event-leave",
          "status": "closed"
        }
      ]
    }
  ],
  "has_more": false,
  "next_starting_after": null,
  "measurement": {
    "source": "signed_livekit_webhooks",
    "scope": "group_sessions_only",
    "duration": "union of observed closed intervals per registration; incomplete intervals excluded",
    "limitations": "connection evidence, not attention or learning; forwarded links cannot prove the human identity",
    "refresh": "re-read all pages for the webinar; registrant IDs are not a changes cursor"
  }
}
GET/api/v1/learning/events

Consultar evidències d'aprenentatge

Historial nou des de l'activació: lesson_opened, lesson_completed, lesson_uncompleted, quiz_submitted i assignment_submitted. També exam_started, exam_submitted i exam_reviewed per a exàmens independents: el lliurament i les revisions conserven preguntes, respostes i notes; review_status distingeix notes pendents de revisió. certificate_issued conserva cada emissió i els seus requisits comprovats; certificate_pdf_generated identifica el PDF generat amb SHA-256, sense confirmar-ne la recepció. Els exàmens es consulten pel seu propi product_id, no s'assignen automàticament a un curs. No reconstrueix l'activitat anterior, no conserva els arxius per si mateix ni certifica el compliment FUNDAE. En els qüestionaris, source distingeix server_graded de legacy_client_reported.

Paràmetres de consulta

product_idintegerobligatori

Curs o fitxa interna de l'examen que es consulta. Obligatori; els exàmens independents fan servir el seu propi identificador.

visitor_idinteger

Alumne; inclou identitats amb el mateix correu dins de l'acadèmia.

starting_afterinteger

ID de paginació rebut a next_starting_after. Ometre a la primera pàgina.

limitinteger 1..200

Màxim de registres: 1–200; predeterminat 100.

fromISO 8601

Data inclusiva amb zona horària. En sessions filtra la data d'inici; no retalla els seus segons.

untilISO 8601

Data exclusiva amb zona horària. En sessions filtra la data d'inici; no retalla els seus segons.

bash
curl "https://www.clonify.com/api/v1/learning/events" \
  -H "Authorization: Bearer clk_live_…"
json
{
  "object": "list",
  "data": [
    {
      "id": "1",
      "visitor_id": 88,
      "visitor_email": "student@example.test",
      "product_id": 100,
      "unit_id": null,
      "block_id": null,
      "kind": "certificate_pdf_generated",
      "occurred_at": "2026-09-24T12:00:00Z",
      "evidence": {
        "source": "pdf_server",
        "verification_code": "example-code",
        "issued_at": "2026-09-24T11:00:00Z",
        "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
        "bytes": 24000,
        "receipt_confirmed": false
      }
    }
  ],
  "has_more": false,
  "next_starting_after": null
}
GET/api/v1/learning/sessions

Consultar sessions de classe

Temps estimat amb la classe visible i temps actiu amb focus i interacció recent. No equival a vídeo reproduït ni acredita aprenentatge. No acumula pestanyes ocultes i limita la suma entre dispositius. Estats open, closed i timed_out. Les files poden actualitzar-se: torna a consultar el període complet per refrescar sessions; el cursor ordena creacions, no canvis.

Paràmetres de consulta

product_idintegerobligatori

Curs que es consulta. Obligatori.

visitor_idinteger

Alumne; inclou identitats amb el mateix correu dins de l'acadèmia.

starting_afterinteger

ID de paginació rebut a next_starting_after. Ometre a la primera pàgina.

limitinteger 1..200

Màxim de registres: 1–200; predeterminat 100.

fromISO 8601

Data inclusiva amb zona horària. En sessions filtra la data d'inici; no retalla els seus segons.

untilISO 8601

Data exclusiva amb zona horària. En sessions filtra la data d'inici; no retalla els seus segons.

bash
curl "https://www.clonify.com/api/v1/learning/sessions" \
  -H "Authorization: Bearer clk_live_…"
json
{
  "object": "list",
  "data": [
    {
      "id": "1",
      "session_id": "6e2c91cc-15a5-4c46-a5cd-1db7703c1d20",
      "visitor_id": 88,
      "visitor_email": "student@example.test",
      "product_id": 100,
      "unit_id": 1000,
      "started_at": "2026-09-23T12:00:00Z",
      "last_seen_at": "2026-09-23T12:01:00Z",
      "ended_at": null,
      "connected_seconds": 60,
      "active_seconds": 30,
      "status": "open"
    }
  ],
  "has_more": false,
  "next_starting_after": null,
  "measurement": {
    "active_seconds": "visible activity estimate; not video watch time or proof of learning",
    "collection_started": "deployment; no historical reconstruction"
  }
}
GET/api/v1/products/{id}/feedback/responses

Llistar respostes de feedback d'un curs

Les respostes dels alumnes a les enquestes de feedback del curs: la de «A totes les classes» (survey course) i les pròpies d'una classe (survey lesson). Són les mateixes files que el CSV de la pestanya Feedback. Van de l'última resposta a la més antiga. Cadascuna porta l'id de l'alumne (visitor_id, i contact_id si té fitxa a Contactes), de la classe, del mòdul, de l'enquesta i de cada pregunta. Si l'alumne canvia la seva resposta, canvia aquesta mateixa fila (mateix id, nou updated_at). No es retornen respostes a preguntes que ja no són a l'enquesta. Una resposta que canviï mentre recorres les pàgines puja a dalt: si encara no t'havia arribat, aquella passada no la porta, i si era la del cursor, es repeteixen respostes. En acabar, torna a demanar amb since igual a l'updated_at més recent que hagis rebut per recollir aquests canvis, i deduplica per id. 404 si el producte no és un curs del teu compte.

Paràmetres de ruta

idintegerobligatori

Id del curs.

Paràmetres de consulta

sinceISO 8601

Només respostes canviades després d'aquesta data (exclosa), amb zona horària. Per portar només el que és nou, fes servir la data de la sincronització anterior.

untilISO 8601

Només respostes canviades fins a aquesta data (inclosa), amb zona horària.

starting_afterinteger

Id rebut a next_starting_after. Ometre a la primera pàgina. Un id que no sigui d'aquest curs retorna 400.

limitinteger 1..200

Respostes per pàgina: 1–200; predeterminat 50.

bash
curl "https://www.clonify.com/api/v1/products/1/feedback/responses" \
  -H "Authorization: Bearer clk_live_…"
json
{
  "object": "list",
  "data": [
    {
      "object": "feedback_response",
      "id": 31,
      "product_id": 420,
      "survey": "course",
      "common_block_id": 19,
      "block_id": null,
      "unit_id": 71,
      "unit_title": "Lesson 1",
      "module_id": 10,
      "module_title": "Module A",
      "visitor_id": 88,
      "contact_id": 3,
      "visitor_email": "student@example.test",
      "visitor_name": "Student",
      "created_at": "2026-09-27T08:00:00.000Z",
      "updated_at": "2026-09-28T09:00:00.000Z",
      "answers": [
        {
          "question_id": "4b6f0d0e-5d1a-4f0e-9a52-2f3c1e7d9a10",
          "question": "How was this lesson?",
          "kind": "stars",
          "value": 5
        },
        {
          "question_id": "9c1d2e3f-0a4b-4c5d-8e6f-7a8b9c0d1e2f",
          "question": "What would you improve?",
          "kind": "text",
          "value": "More examples"
        }
      ]
    }
  ],
  "has_more": true,
  "next_starting_after": 31
}