What is known in the Pluvo user interface as a learning journey is designated in the API as a Training. All actions related to learning journeys are handled through the Training entity in the GraphQL API.
query {
training(id: "uuid-here") {
id
title
ref
isActive
archived
startDate
endDate
subtitle
introduction
}
}query {
paginatedTrainings(q: "safety", first: 10, archived: false) {
edges {
node {
id
title
ref
isActive
archived
}
}
pageInfo {
hasNextPage
endCursor
}
count
}
}mutation {
createTraining(training: {
title: "Introduction to Safe Working"
isActive: true
ref: "safety-2024"
subtitle: "Mandatory annual training"
startDate: "2024-01-01T00:00:00Z"
endDate: "2024-12-31T00:00:00Z"
showParticipants: true
enableChat: false
}) {
training {
id
title
ref
}
}
}mutation {
updateTraining(
ref: "safety-2024"
training: {
title: "Updated Title"
isActive: false
}
) {
training {
id
title
isActive
}
}
}mutation {
updateTraining(
id: "uuid-here"
training: {
archived: true
}
) {
training {
id
archived
}
}
}type Training {
id: UUID!
title: String!
subtitle: String
introduction: String
ref: String
isActive: Boolean!
archived: Boolean!
overviewImage: File
startDate: Date
endDate: Date
estimatedTimeSpent: String
showParticipants: Boolean
showSharedFiles: Boolean
enableChat: Boolean
portfolioItem: PortfolioItemListItem
participants(...): TrainingUserConnection!
trainers(...): TrainingUserConnection!
modules: [Module!]!
}training(id: UUID, ref: String): Training
trainings(query: String): [TrainingListItem!] @deprecated(reason: "Use paginatedTrainings")
paginatedTrainings(
q: String
active: Boolean
archived: Boolean
first: Int
after: String
offset: Int
sortBy: TrainingSortByInput
): TrainingListItemConnectioncreateTraining(training: CreateTrainingInput!): CreateTraining
updateTraining(id: UUID, ref: String, training: UpdateTrainingInput!): UpdateTraining| Field | Type | Required | Description |
|---|---|---|---|
title | String | Yes | Training title |
ref | String | No | External reference |
subtitle | String | No | Subtitle displayed below the title |
introduction | String | No | Introduction text (HTML) |
isActive | Boolean | No | Whether the training is visible |
startDate | DateTime | No | Training start date |
endDate | DateTime | No | Training end date |
estimatedTimeSpent | String | No | Estimated time to complete |
passThreshold | Float | No | Minimum score to pass |
showParticipants | Boolean | No | Show participant list |
showSharedFiles | Boolean | No | Show shared files section |
enableChat | Boolean | No | Enable chat functionality |
extraFields | JSONString | No | Legacy extra fields |
UpdateTrainingInput additionally supports archived (Boolean).
paginatedTrainings for list views — trainings is deprecated.deleteTraining mutation — use archiving via updateTraining with archived: true.archived and isActive exist for backward compatibility. Prefer archived.ref field is your anchor for synchronization — always set it for externally managed trainings.