Enrollments in Pluvo are processed through an OfferEvent. A user does not enroll directly in a training, but in a specific entry moment within an offering.
mutation {
createOfferEventEnrollments(
offerEventId: "uuid-event"
userIds: ["uuid-user-1", "uuid-user-2"]
sendMail: false
sendNotification: true
) {
id
user { id name email }
status
}
}Using ref instead of id:
mutation {
createOfferEventEnrollments(
offerEventRef: "event-sept-2024"
userRefs: ["EMP-001", "EMP-002"]
sendMail: false
) {
id
user { id name ref }
status
}
}mutation {
updateOfferEventEnrollments(
offerEventEnrollmentIds: ["enrollment-uuid-1", "enrollment-uuid-2"]
status: APPROVED
sendMail: true
) {
id
status
user { name }
}
}mutation {
deleteOfferEventEnrollments(
offerEventEnrollmentIds: ["enrollment-uuid-1"]
) {
ok
}
}mutation {
offerEventEnrollCurrentUser(offerEventId: "uuid-event") {
ok
}
}mutation {
offerEventUnenrollCurrentUser(
offerEventId: "uuid-event"
reason: "Schedule conflict"
) {
ok
}
}createOfferEventEnrollments(
offerEventId: UUID
offerEventRef: String
userIds: [UUID!]
userRefs: [String!]
groupId: UUID
sendMail: Boolean = true
sendNotification: Boolean = true
): [OfferEventEnrollmentManageable!]!
updateOfferEventEnrollments(
offerEventEnrollmentIds: [UUID!]!
status: OfferEventSubscriptionStatus!
reason: String
sendMail: Boolean = true
sendNotification: Boolean = true
): [OfferEventEnrollmentManageable!]!
deleteOfferEventEnrollments(
offerEventEnrollmentIds: [UUID!]!
): DeleteOfferEventEnrollments
offerEventEnrollCurrentUser(
offerEventId: UUID!
forGroupId: UUID
): OfferEventEnrollCurrentUser
offerEventUnenrollCurrentUser(
offerEventId: UUID!
reason: String
): OfferEventUnenrollCurrentUserenum OfferEventSubscriptionStatus {
PENDING
APPROVED
WAITLISTED
CANCELLED
DECLINED
}createOfferEventEnrollments for programmatic enrollment — it supports both id and ref for events and users, and allows bulk enrollment.sendMail: false is recommended for bulk operations to prevent email spam.groupId can be passed to enroll all members of a group at once.offerEventEnrollCurrentUser) are intended for end-user flows, not integrations.OFFER_EVENT_ENROLLED, OFFER_EVENT_ENROLLMENT_STATUS_UPDATED, OFFER_EVENT_UNENROLLED) fire automatically when enrollments change.