Zum Inhalt springen

Course Registrations

A CourseRegistration (Anmeldung) expresses the intent of one person (the registrant) to attend one or more courses — optionally together with additional participants (e.g. parent registers children). The registration does not yet book anyone into the course and does not trigger invoicing.

Use CourseRegistration when:

  • Staff manually records an incoming paper/email registration.
  • A trusted integration pushes registrations from an external portal.
  • The public API created one through publicEnrollToCourse.

To finalize a registration into real course attendance, create one or more Course Participants from it.

mutation CreateCourseRegistration(
$courseRegistration: CourseRegistrationCreateInput!
$parentID: ID
) {
createCourseRegistration(
courseRegistration: $courseRegistration
parentID: $parentID
) {
status
message
id
courseRegistration {
id
registrationType
dateOfSale
}
}
}
input CourseRegistrationCreateInput {
"UID of the person submitting the registration"
registrantPersonID: UID!
"COURSE for a main course/program, MODULE for a subsequent sub-course booking"
registrationType: CourseRegistrationType!
"At least one course UID"
courseIDs: [UID!]!
"Optional additional participants (e.g. children of the registrant)"
participantPersonIDs: [UID!]
dateOfSale: Date
sellerID: UID
# ...plus all BaseObjectInput fields (remarks, validFrom, validTo, ...)
}
enum CourseRegistrationType {
COURSE
MODULE
}
{
"parentID": "special://COURSEREGFLDROOT",
"courseRegistration": {
"registrantPersonID": "8f3a1a8e-...-1c",
"registrationType": "COURSE",
"courseIDs": ["4a9e2c17-...-b3"]
}
}
{
"courseRegistration": {
"registrantPersonID": "8f3a1a8e-...-1c",
"registrationType": "COURSE",
"courseIDs": [
"4a9e2c17-...-b3",
"dd45e010-...-77"
],
"participantPersonIDs": [
"bb00aa12-...-01",
"bb00aa12-...-02"
],
"dateOfSale": "2026-04-23"
}
}

When participantPersonIDs is omitted, the registrant is the only participant.

enrollCourse is a thin wrapper around createCourseRegistration that uses the currently authenticated user as the registrant. Use it from an authenticated app (student portal, teacher portal) when the JWT already identifies the registrant.

mutation EnrollCourse($input: EnrollCourseInput!) {
enrollCourse(input: $input) {
success
message
}
}
input EnrollCourseInput {
courseID: UID!
participantPersonIDs: [UID!]
}
{
"input": {
"courseID": "4a9e2c17-...-b3"
}
}
query {
courseRegistrations(
options: {
searchTerm: "Müller"
onlyActive: true
orderBy: "dateOfSale"
orderDirection: DESC
limit: 50
}
) {
totalCount
nodes {
id
registrationType
dateOfSale
registrant {
id
lastName
preName
}
courses {
id
name
}
}
}
}
mutation UpdateCourseRegistration(
$id: ID!
$courseRegistration: CourseRegistrationUpdateInput!
) {
updateCourseRegistration(id: $id, courseRegistration: $courseRegistration) {
status
message
}
}

CourseRegistrationUpdateInput does not expose registrantPersonID, courseIDs or participantPersonIDs — those are fixed after creation. To change them, cancel the registration (deleteCourseRegistration) and create a new one.

  • All courseRegistration* mutations and queries require a JWT.
  • createCourseRegistration checks insert-access on parentID.
  • updateCourseRegistration / deleteCourseRegistration checks write-access on the registration itself.