Enrollments

English only

Use Cases

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.

Enroll users in an event (bulk)

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
  }
}

Update enrollment status

mutation {
  updateOfferEventEnrollments(
    offerEventEnrollmentIds: ["enrollment-uuid-1", "enrollment-uuid-2"]
    status: APPROVED
    sendMail: true
  ) {
    id
    status
    user { name }
  }
}

Delete enrollments (unenroll)

mutation {
  deleteOfferEventEnrollments(
    offerEventEnrollmentIds: ["enrollment-uuid-1"]
  ) {
    ok
  }
}

Self-enrollment (current user)

mutation {
  offerEventEnrollCurrentUser(offerEventId: "uuid-event") {
    ok
  }
}

Self-unenrollment

mutation {
  offerEventUnenrollCurrentUser(
    offerEventId: "uuid-event"
    reason: "Schedule conflict"
  ) {
    ok
  }
}

GraphQL Definitions

Enrollment Mutations

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
): OfferEventUnenrollCurrentUser

Enrollment Status

enum OfferEventSubscriptionStatus {
  PENDING
  APPROVED
  WAITLISTED
  CANCELLED
  DECLINED
}

Notes

  • Use createOfferEventEnrollments for programmatic enrollment — it supports both id and ref for events and users, and allows bulk enrollment.
  • Enrollment IDs are needed for updates and deletes. Get them from the create mutation response or from the offer event's enrollment list.
  • sendMail: false is recommended for bulk operations to prevent email spam.
  • groupId can be passed to enroll all members of a group at once.
  • The self-enrollment mutations (offerEventEnrollCurrentUser) are intended for end-user flows, not integrations.
  • Enrollment webhooks (OFFER_EVENT_ENROLLED, OFFER_EVENT_ENROLLMENT_STATUS_UPDATED, OFFER_EVENT_UNENROLLED) fire automatically when enrollments change.
Sluit melding