Al igual que toda nuestra galaxia de software, los conectores diseñados por los equipos de Digiforma evolucionan constantemente. Desde su nacimiento en 2018, han experimentado profundas transformaciones. Para repasar estos cambios a lo largo de los años, aquí tienes un pequeño resumen. ¡Buena lectura!
2026
Septiembre.
Crear un curso con un programa
Desde la llegada de los bloques pedagógicos, un curso creado a partir de un programa genera sus módulos a partir de los bloques pedagógicos de ese programa.
La API se alinea, por tanto, con este comportamiento: programa y módulos ya no se combinan en una misma creación.
⚠️ createTrainingSession ahora devuelve un error si programId y subsessions se envían en la misma mutación. Si tus integraciones crean sus cursos de esta manera, deben evolucionar hacia uno de los dos itinerarios que se indican a continuación.
{
"data": { "createTrainingSession": null },
"errors": [
{
"code": "bad_request",
"status_code": 400,
"message": "Cannot create a training session with both a program and subsessions",
"path": ["createTrainingSession"]
}
]
}
Siguen siendo posibles dos itinerarios, a elegir según tu punto de partida:
Partir del programa: crea el curso con
programId, sus módulos se generan a partir de los bloques del programa, y luego añade tus módulos adicionales concreateSubsession.# 1. El curso toma los bloques del programa para crear sus módulos
mutation {
createTrainingSession(trainingSessionInput: {
name: "Curso de octubre"
programId: <program_id>
}) {
id
name
subsessions { id name }
}
}
# 2. Los módulos adicionales se añaden después, uno por uno
mutation {
createSubsession(
trainingSessionId: <ts_id>
subsessionInput: { name: "Módulo complementario" }
) {
id
name
}
}Partir de los módulos: crea el curso con
subsessions, y luego asocia el programa conupdateTrainingSessiony su campoprogramId.# 1. El curso se crea con sus propios módulos
mutation {
createTrainingSession(trainingSessionInput: {
name: "Curso de octubre"
subsessions: [
{ name: "Módulo 1" },
{ name: "Módulo 2" }
]
}) {
id
subsessions { id name }
}
}
# 2. El programa se asocia en un segundo momento
mutation {
updateTrainingSession(
id: <ts_id>
trainingSessionInput: { programId: <program_id> }
) {
id
program { id name }
}
}
Excluir un curso del catálogo
Ahora es posible excluir un curso del catálogo online
En lectura
query {
trainingSessions {
id
excludeFromCatalog
}
}
En escritura
mutation {
updateTrainingSession(id: <ts_id>, trainingSessionInput: {excludeFromCatalog: true })
{
id
excludeFromCatalog
}
}
Julio
Los bloques pedagógicos llegan a la API. La apertura se realiza en dos partes: la gestión de los bloques y, a continuación, su uso en los programas.
Para familiarizarte con este nuevo funcionamiento, te invitamos a consultar el siguiente artículo: https://help.digiforma.com/fr/articles/3195501-comment-utiliser-les-blocs-de-programmes
Gestionar los bloques pedagógicos
Ahora es posible crear, consultar, modificar y archivar bloques pedagógicos directamente a través de la API. Un bloque existe en dos formas:
Un bloque de tipo
TEMPLATEes un bloque plantilla. Vive de forma autónoma y puede asociarse a uno o varios programas.Un bloque de tipo
VARIANTes una copia de una plantilla. Se genera automáticamente cuando se añade un programa a un curso: el programa se convierte entonces en una variante, que tiene sus propias variantes de bloques.
Esto es lo que se puede hacer y lo que permanece automático:
Crear una plantilla con
createPedagogicalBlock. La creación de un variant no está expuesta: permanece automática al añadir un programa a un curso.Consultar una plantilla con
pedagogicalBlock(por identificador) opedagogicalBlocks(la lista completa). Un variant, por su parte, se lee directamente en la respuesta de su programa.Modificar una plantilla con
updatePedagogicalBlockTemplate, o un variant conupdatePedagogicalBlockVariant.Archivar una plantilla con
deletePedagogicalBlockTemplate, o un variant condeletePedagogicalBlockVariant.
# Queries
pedagogicalBlock(id: ID!): Block
pedagogicalBlocks: [Block]
# Mutations createPedagogicalBlock(blockInput: BlockInput!): Block
updatePedagogicalBlockTemplate(id: ID!, blockInput: BlockInput!): Block
updatePedagogicalBlockVariant(id: ID!, blockInput: BlockInput!): Block
deletePedagogicalBlockTemplate(id: ID!): Boolean
deletePedagogicalBlockVariant(id: ID!): Boolean
Usar los bloques en los programas
El tipo Program ahora expone un campo blocks que lista sus bloques pedagógicos. En escritura, el input ProgramInput acepta un campo blockIds: la lista ordenada de identificadores de plantillas a asociar al programa (sustituye los enlaces existentes).
El comportamiento depende de la operación:
En lectura: los bloques están disponibles en el nuevo campo
blocks. Los antiguos campos (goals,steps,assessments,pedagogicalResources) siguen siendo legibles por ahora, pero están obsoletos.En la creación (
createProgram): dos opciones. EnviarblockIdspara asociar plantillas existentes, o seguir enviando los antiguos campos. En este segundo caso, se crea automáticamente un bloque pedagógico a partir de esta información y luego se asocia al programa.En la actualización (
updateProgram): solo se aceptan losblockIds. El envío de los antiguos campos provoca un error.
Los campos goals, steps, assessments y pedagogicalResources están obsoletos, en favor de blocks en lectura y de blockIds en escritura. Te invitamos a hacer evolucionar tus integraciones: la actualización de un programa mediante estos antiguos campos ya no está permitida.
# Program (lecture)
blocks: [Block]
goals: [ProgramGoals] # déprécié, utiliser blocks
steps: [ProgramStep] # déprécié, utiliser blocks
assessments: [ProgramAssessments] # déprécié, utiliser blocks
pedagogicalResources: [ProgramPedagogicalResources] # déprécié, utiliser
blocks
# ProgramInput (écriture)
blockIds: [ID!] # liste ordonnée de templates à rattacher goals/steps/assessments/pedagogicalResources # dépréciés, utiliser blockIds
Gestionar el registro de asistencia de los alumnos y de los formadores a través de la API
El registro de asistencia llega también a la API. Ahora es posible registrar la asistencia de los alumnos y de los formadores directamente a través de la API, en masa (hasta 50 elementos por solicitud).
⚠️ Esta API gestiona únicamente el registro de asistencia manual (asistencia comprobada: presente / ausente). No afecta a las firmas digitales o electrónicas, ni al registro de asistencia realizado en tableta.
Se cubren tres casos:
- Registro de asistencia de los alumnos con update_trainees_attendance: marcar a un alumno como presente o ausente (has_signed) en una clase dada.
- Registro de asistencia de los formadores con update_instructors_attendance: igual para un formador en una clase.
- Horas en modo intervalo con update_trainees_interval_attendance: declarar, para un módulo en modo intervalo, el número de horas realizadas por un alumno en un mes dado (con, de forma opcional, el formador que ha supervisado estas horas).
# Présence des apprenants
mutation ($id: ID!, $updates: [TraineeAttendanceUpdateInput!]!) { update_trainees_attendance(training_session_id: $id, attendance_updates: $updates) { id } }
# updates: [{ customerTraineeId, trainingSessionSlotId, hasSigned }]
# Présence des formateurs
mutation ($id: ID!, $updates: [InstructorAttendanceUpdateInput!]!) { update_instructors_attendance(training_session_id: $id, attendance_updates: $updates) { id } }
# updates: [{ trainingSessionInstructorId, trainingSessionSlotId, hasSigned }]
# Heures en mode intervalle
mutation ($id: ID!, $updates: [TraineeIntervalAttendanceUpdateInput!]!) { update_trainees_interval_attendance(training_session_id: $id, attendance_updates: $updates) { id } }
# updates: [{ customerTraineeId, subsessionId, date, hours, trainingSessionInstructorId }]
# Lecture des heures saisies
query ($id: ID!) { trainingSession(id: $id) { subsessions { monthlyHours { date hours customerTraineeId trainingSessionInstructorId } } } }
Junio
Los tokens de la API ya no se pueden consultar a posteriori. Solo se muestran una vez durante su creación. Por razones de seguridad, ya no almacenamos los tokens de la API en texto plano en nuestra base de datos. Por tanto, eres el único que puede consultar esta información.
Para ayudarte a identificar tus tokens, mostramos su concepto, sus cuatro últimos caracteres así como la fecha de su último uso.
Mayo
Ahora es posible generar varios tokens de la API por academia
Es posible poner un nombre personalizado a nuestros tokens de la API
Ahora es posible crear preinscripciones mediante las query "createTraineeRegistration" y "createCompanyRegistration"
mutation ($programId: ID!){
createTraineeRegistration(programId: $programId, trainee: {
lastname: "pierre"
firstname: "laplace"
email: "la@place"
}) {
id
entity {
__typename
...on Trainee {
lastname
}
}
}
}
mutation ($programId: ID!) {
createCompanyRegistration(programId: $programId
company: {
name: "entreprise"
}
trainees: [ {
lastname: "lastname"
}]) {
id
entity {
...on Company {
name
}
}
}
}Modificar varios alumnos al mismo tiempo (máx. 50 elementos por solicitud)
mutation($inputs: [TraineeInput]!) {
update_trainees(trainee_inputs: $inputs) {
lastname
firstname
email
}
}
Modificar varias empresas al mismo tiempo (máx. 50 elementos por solicitud)
mutation($inputs: [CompanyInput]!) {
update_companies(company_inputs: $inputs) {
name
email
}
}
Abril
Crear varios alumnos al mismo tiempo (máx. 50 elementos por solicitud)
mutation($inputs: [TraineeInput]!) {
create_trainees(trainee_inputs: $inputs) {
lastname
firstname
email
}
}
Crear varias empresas al mismo tiempo (máx. 50 elementos por solicitud)
mutation($inputs: [CompanyInput]!) {
create_companies(company_inputs: $inputs) {
name
email
}
}
Marzo
Nueva query "accountingInformation" que permite recuperar la información relacionada con las exportaciones contables de la academia.
query MyQuery {
accountingInformation {
customerAccountingCode
defaultProductAccountingCode
defaultProductAccountingCodeConsulting
defaultProductAccountingCodeExpenses
defaultProductAccountingCodeExpensesConsulting
defaultProductAccountingCodeExpensesNoBpf
defaultProductAccountingCodePedagogicalProduct
defaultProductAccountingCodeNoBpf
defaultProductAccountingCodePedagogicalProductConsulting
defaultProductAccountingCodePedagogicalProductNoBpf
salesBook
vatAccountingCode
}
}
Nuevo campo "vatType" para el objeto invoices_item (escritura y consulta).
Este campo se utiliza para el estándar factura-x (BT-151) y según los valores de la norma UNTDID 5305.
mutation {
createInvoice (createInvoiceInput: {
items: [ {
vatType: AE
}]
}) {
items {
vatType
}
}
}
Febrero
Recuperar el estado de exención de IVA de una academia
query {
academy {
id
vatExempted
}
}
Activar o desactivar el extranet de un alumno mediante el campo hidden_extranet (true/false)
mutation UpdateCustomerTrainee($id: ID!, $inputs: UpdateCustomerTraineeInput!) {
update_customer_trainee(customer_trainee_id: $id, update_customer_trainee_input: $inputs) {
extranet_url
hidden_extranet
}
}
Posibilidad de crear y modificar los precios de un programa
mutation CreateProgramWithPrice($programInput: ProgramInput!) {
createProgram(programInput: $programInput) {
id
name
costsInter {
description
cost
vat
type
costMode
monthly
}
}
}
Nuevo campo que permite recuperar la tasa de satisfacción de un programa.
query($id: ID!) {
program(id: $id) {
satisfactionRate {
score
evaluationsCount
}
}
}
Nuevo campo que permite recuperar los documentos asociados a un cliente en un curso.
query {
trainingSession(id: <ID>) {
customers {
documents {
id
url
}
}
}
}
Posibilidad de crear gastos financieros manualmente.
mutation($inputs: [ManualChargeInput]!) {
create_manual_charges(manual_charge_inputs: $inputs) {
name
amount
date
}
}
Enero
Posibilidad de eliminar una solicitud de inscripción procedente del catálogo o de la página de preinscripción pública.
mutation($id: ID!) {
deleteRegistration(id: $id)
}
2025
Octubre
Nuevo campo en las facturas para indicar si se trata de un anticipo y a qué factura está vinculado.
query {
invoices {
id
advanceFromId
}
}
Nuevo campo para acceder al progreso y a la puntuación del alumnado en los módulos de e-learning.
query {
trainingSession(id: XXXXXX) {
customers {
customerTrainees {
elearningStats {
# la moyenne
progression
score
perModule {
score
progression
module {
id
name
}
}
}
}
}
}
}
Posibilidad de especificar el comercial para un cliente.
mutation {
createCustomer(
createCustomerInput: {
accountManagerId: XXXXXX
companyId: XXXXXXX
trainingSessionId: XXXXXXX
}
) {
id
}
}
mutation {
updateCustomer(id: XXXXXX, updateCustomerInput: {accountManagerId: XXXXXXX}) {
id
}
}
Nueva mutación para crear una nota asociada a un cliente (Customer).
mutation {
createCustomerNote(
customerId: XXXXXX
noteInput: {
# pour créer une tâche
checkable: true
# pour associer la note à un compte de votre OF
managerId: XXXXXX
# pour ajouter une date s’il s’agit d’une tâche
nextDate: "2025-10-23"
# le seul champ requis : le contenu de la note
text: "contenu de la note"
}
) {
id
}
}
Nuevo tipo GeneratedFile que da acceso al enlace del documento generado y a la información de la firma electrónica asociada, accesible en los Customers para el contrato y los presupuestos en el objeto Quotation
query {
trainingSession(id: ####) {
customers {
conventionFile {
url
signatureInfo {
state
insertedAt
signers {
firstname
lastname
email
}
}
}
}
}
}query {
quotation(id: #####) {
file {
url
signatureInfo {
state
signers {
firstname
lastname
email
}
}
}
}
}
Septiembre
Nueva mutación para crear inscripciones que aparecerán en la página Solicitudes de inscripción. (https://app.digiforma.com/crm/registrations):
# On commence par créer notre Company en draft (ou un Trainee)
mutation createDraftCompany {
createCompany(companyInput: {
draft: true
email: "test-co@coco.com"
name: "Test Company"
}) {
id
}
}
# On récupère le programme et la training session auxquels on veut associer l’inscription.
query {
programs(filter: {rootLevelOnly: true, soldOnCatalog: true}) {
name
# on aura besoin de cet ID
id
variants {
trainingSession {
# et l'ID de la training session si on veut s’inscrire à une session en particulier.
id
}
}
}
}
# Et pour finir, la création de l’inscription.
mutation registerTestCompany {
createRegistration(
createRegistrationInput: {
apiOrigin: "My awesome webpage"
# un programme "root"/"parent" Qui a été créé dans la bibliothèque ou
# par API avec la mutation createProgram
programId: 2234878
# Optionnel: l'ID de la session sur laquelle on veut inscrire.
trainingSessionId: 2401139
# l'ID d'une Company, ou un Trainee (draftTraineeId) en draft
draftCompanyId: 2195316
# Si l'inscription concerne une entreprise, on peut spécifier
# le nombre d’apprenants
learnerRegistrationCount: 24
}
) {
id
}
}Campo para acceder a la url del documento generado para un programa
query {
program(id: 2234879) {
generatedProgramUrl
}
}Campo para acceder a la URL del contrato generado para un cliente
query {
customers {
conventionUrl
}
}Campos para acceder a la URL del certificado de asistencia y de la convocatoria de un alumno
query {
trainingSession(id: 2314283) {
id
customers {
customerTrainees {
attendanceProofUrl
convocationUrl
}
}
}
Agosto
Se han añadido dos nuevas mutaciones para añadir una nueva clase (llamada slot) al módulo de un curso o bien para eliminar una:
mutation ($subsessionId: ID!, $input: TrainingSessionDateInput!) {
createSubsessionSlot(subsessionId: $subsessionId, trainingSessionDateInput: $input) {
id
}
}mutation ($id: ID!) {
deleteSubsessionSlot(id: $id)
}
adición del campo comercial (aquí llamado accountManager) en los clientes
{
customers(pagination: {page: 0, size: 5}) {
accountManager {
firstname
lastname
}
}
}
Julio
Los presupuestos devuelven más información:
los prefijos y números de presupuesto ahora están disponibles (campos
prefix,numberynumber_str)la fecha de confirmación también (campo
accepted_at)
Ahora es posible recuperar el documento generado en Digiforma para las facturas y presupuestos con el campo
fileUrl.
Para recuperar las facturas, la solicitud es:
query($id: ID!) {
invoice(id: $id) {
fileUrl
}
}
Los campos
forceTotalyforcedTotalse han añadido en los items de factura para poder recuperar los importes manuales de las líneas de facturaPara saber cuándo se ha añadido o modificado un alumno en un curso, se devuelven los campos
inserted_atyupdated_at:query {
trainingSessions {
customers {
customerTrainees {
insertedAt
updatedAt
}
}
}
}Los mismos campos se devuelven en las respuestas a una evaluación para saber cuándo se ha añadido o modificado una respuesta:
query {
trainingSessions {
evaluations {
form {
formAnswers {
insertedAt
updatedAt
}
}
}
}
}Aparece una nueva mutación
updateSubsessionSlot: permite actualizar una clase de módulo (en un curso) de manera unitariaCorrección en la gestión de los gerentes de curso
Corrección en la recuperación de los gastos
Enero
Ahora es posible acceder a los alumnos desde los trainingSessionSlots (¿señal de una futura modularización de los itinerarios en Digiforma?) utilizando el atributo
customerTrainees.query ($id: ID!){
trainingSession(id: $id) {
trainingSessionSlots {
customerTrainees {
__typename
}
}
}
}
2024
Noviembre
Hay dos nuevos campos disponibles en los objetos "trainingSession":
benefit(facturación (BA) del curso) ycharges(gastos del curso)¡Los enlaces de acceso al extranet están disponibles en la API!
Estos enlaces son accesibles a nivel de las
trainingSessionspara recuperar el enlace general y a nivel de loscustomerTraineespara recuperar los enlaces personales.query ($id: ID!){
trainingSession(id: $id) {
extranetUrl
customers {
customerTrainees {
extranetUrl
}
}
}
}
Octubre
Hay una nueva solicitud disponible:
tasklists. Esta te permite recuperar las listas de tareas disponibles en tu cuenta.
Septiembre
Hay una nueva query disponible:
customers(ycustomer). Permite la recuperación de los clientes asociados a un curso de formación.Ahora es posible filtrar los cursos por
code. Este filtro es exclusivo y solo podrá devolver un único resultado.
El campo
pendingEvaluationde los "trainingSession" está obsoleto. Prioriza el uso del campoevaluations.query ($id: ID!) {
trainingSession(id: $id) {
evaluations {
__typename
}
}
}
Los programas se pueden filtrar por 4 nuevos criterios:
soldOnCatalog/soldOnMarketplacepara recuperar únicamente los programas vendidos en el catálogo o el Marketplace.tailoredpara recuperar únicamente los programas "disponibles bajo presupuesto".categoryIdpara recuperar únicamente los programas de una determinada categoría.
Agosto
Ahora es posible encontrar el porcentaje de avance de un alumno en un curso mediante el campo "sessionCompletion" de los objetos "customerTrainee"
query ($id: ID!) {
trainingSession(id: $id) {
customers {
customerTrainees {
sessionCompletion
}
}
}
}
Junio
Los programs ahora se pueden filtrar por los campos
codeCpfycodeLos objetos "invoice" (facturas) tienen dos nuevos campos para acercarse lo más posible al comportamiento de la aplicación web:
payment_limit_dayseis_payment_limit_end_month.
Mayo
Los códigos de los programas ahora están disponibles en todos los programs, incluso para los programs cuyo código no se ha modificado.
Tres nuevos campos en el objeto invoice: «numberStr», «paymentLimitDays» e «isPaymentLimitEndMonth».
Abril
Los campos «insertedAt» y «updatedAt» ahora están disponibles en los objetos quotation, training_session_instructor, training_session_slot, grade, invoice_payement, contact, evaluation and customer_funding.
Las preinscripciones de la gestión comercial ahora se pueden consultar desde la API GraphQL.
Marzo
Además de poder filtrarse por fecha, ¡las solicitudes formuladas en la API GraphQL ahora se pueden filtrar por hora!
Febrero
Un nuevo objeto se integra en la API GraphQL: «AnswerInput». Permite responder a las evaluaciones con la mutación «answerEvaluation». El tipo de respuesta a introducir depende del tipo de pregunta a la que se responde durante la evaluación. Las diferentes preguntas de una evaluación están disponibles desde las training session en el objeto «Form» y luego «Inputs».
Enero
Adición del campo «programId» al objeto «trainingSessionInput». Permite a los usuarios modificar el programa asociado a un curso de formación.
Nuevo campo «Evaluations» para el objeto «trainingSession», que permite recuperar las evaluaciones en un formato sencillo y comprensible para todo el mundo.
Nuevo campo «Inputs» para el objeto «Form» (disponible en el objeto «Evaluation»). Permite recuperar las diferentes preguntas de la evaluación. Las respuestas a las preguntas también están disponibles por alumno.
2023
Diciembre
Nuevas solicitudes «programSpecialties» y «programSpecialty». Permiten a los usuarios recuperar la lista de especialidades asociables a los programas mediante el campo «specialty».
Nueva solicitud «programDiplomas». Permite a los usuarios recuperar la lista de valores posibles para el campo «diploma» del objeto «program».
Adición de los nuevos campos «certificationModalityAccess», «certificationType» y «certificationModality» al objeto «programInput».
Adición del parámetro «dateFilter» a las solicitudes «companies», «fundingAgencies» e «instructors». Permite armonizar los filtros sustituyendo la mayoría de los filtros de fecha presentes en los filtros tradicionales.
Por favor, prioriza el uso de los «dateFilter» en lugar de los filtros para precisar tus búsquedas basándote en las fechas de creación y modificación.Adición de los campos «startedBefore» y «endedAfter» al objeto «trainingSessionFilters».
Adición del campo «subsessions» al objeto «customer». Este campo debe utilizarse en lugar del campo «subsessionIds».
Noviembre
Adición de un nuevo parámetro a las solicitudes «customers», «trainees», «trainingSessions», «invoices» y «programs»: el «dateFilter». Permite armonizar los filtros sustituyendo la mayoría de los filtros de fecha presentes en los filtros tradicionales.
Por favor, prioriza el uso de los «dateFilter» en lugar de los filtros para precisar tus búsquedas basándote en las fechas de creación y modificación.Creación de la nueva solicitud «marketplaceCategories». Permite recuperar la lista de opciones disponibles para el campo «marketplaceCategory» de los programas.
Adición de los nuevos campos «marketplaceEnabledAt», «marketplaceTargetLevel» y «marketplaceCategory» al objeto «program».
Adición de los campos «marketplaceTargetLevel», «sell_on_marketplace», «marketplaceCategoryId», «accessDeleyUnit» y «Capacity» al objeto «programInpt».
Octubre
Actualización de los filtros de programa: adición de los filtros «name», «updated_before», «updated_after», «created_before» y «created_after». Adición también de los campos «inserted_at» y «updated_at» para los programas.
Adición del campo «tailored» para el objeto «program». Permite a los usuarios ver si la casilla «Catálogo online: proponer una opción bajo presupuesto» está disponible para el programa.
Adición del campo «invoices» para el objeto «trainingSession». Permite a los usuarios visualizar la lista de facturas asociadas a un curso de formación.
Actualización de los filtros de las invoices: adición de los filtros «date_after», «date_before», «updated_before», «updated_after», «created_before» y «created_after». Adición de los campos «inserted_at» y «updated_at» para las invoices.
Adición de las solicitudes «manager» y «managers». Permite disponer de la lista de responsables así como de las subsessions asociadas a él. Adición de los campos «manager» y «second_manager» en el objeto «training_session» para acceder a los responsables desde el curso de formación.
Adición del campo «trainingSession» al objeto «program» para acceder al curso de formación asociado a los programas.
Adición del campo «variants» al objeto «program» para permitir a los usuarios recuperar la totalidad de los variants vinculados a un programa. Permite, por extensión, el acceso a todos los cursos de formación asociados a un programa.
Septiembre
Adición del campo «evaluationScore» a los objetos «training_session» para un acceso más sencillo a la puntuación de evaluación. Objetivo: parecerse lo más posible a la página «calidad» de las training sessions en la aplicación.
Agosto
Adición de las solicitudes «addInstructorToSlot» y «removeInstructorToSlot», que permiten añadir a un instructor ya presente en un curso en horarios concretos.
Adición de un filtro «draft» en la solicitud «trainees» para permitir a los usuarios recuperar la lista de inscritos mediante las preinscripciones públicas.
Junio
Actualización de los comentarios en la API. La descripción de numerosos campos se actualiza para ser más clara y comprensible para los usuarios.
Adición de las solicitudes «customers» y «pipeline_state» a la API. Equivalente de la página «gestión comercial», con los filtros asociados (name, status, subuser_id, pipeline_state).
2022
Diciembre
Las notas y las tareas de los cursos de formación son datos accesibles en la API GraphQL.
Los cursos se pueden ordenar por estado (proyecto, planificación en progreso, programado, completado), por fecha o por nombre en la API GraphQL.
Los cursos archivados también se pueden ordenar.
2019
Octubre
Interconexión de Digiforma con otras soluciones Cloud como Google Forms para crear preinscripciones en tus cursos.
2018
Septiembre
Interconexión de tu cuenta Digiforma con soluciones de terceros a través de la API GraphQL o Zapier.




