# Algemeen

Algemene informatie over de Pynter API. Kijk ook hier voor een lijst van alle API methods.

# Overzicht van API methods

<table id="bkmrk-method-toelichting-a" style="width:100%;height:2003.2px;"><colgroup><col style="width:30.6161%;"></col><col style="width:69.3839%;"></col></colgroup><tbody><tr style="height:29.8px;"><td style="height:29.8px;">**Method**

</td><td style="height:29.8px;">**Toelichting**

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">AvailableCourses

</td><td style="height:29.8px;">Lijst met actieve opleidingen (behalve opleidingsblokken).

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">CompletedCourses

</td><td style="height:29.8px;">Lijst met resultaten incl opleidingsblokken.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">ConnectorError

</td><td style="height:29.8px;">Voor intern gebruik.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">ConnectorStatusUpdatePlanning

</td><td style="height:46.6px;">Voor intern gebruik.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">CourseDates

</td><td style="height:29.8px;">Lijst met inschrijvingen (type B).

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">CourseDatesByModules

</td><td style="height:46.6px;">Lijst met inschrijvingen (type B) voor één of meerdere specifieke opleidingen.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">CourseDatesWithStatus

</td><td style="height:46.6px;">Lijst met inschrijvingen (type B), inclusief de inschrijvingsstatus

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">CoursesOverview

</td><td style="height:46.6px;">Lijst met opleidingen per gebruiker, inclusief voortgangsinformatie voor de gebruiker per opleiding.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">CreateFolder

</td><td style="height:29.8px;">Maak een map aan.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">DeleteFolder

</td><td style="height:29.8px;">Verwijder een map.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetAllFinishedModules

</td><td style="height:46.6px;">Lijst met alle afgeronde opleidingen.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetAllLearningPortfolioContent

</td><td style="height:46.6px;">Lijst met het leerportfolio van alle gebruikers, d.w.z. per gebruiker welke opleidingen die in het aanbod heeft, en de voortgang per trede.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetAllTalents

</td><td style="height:29.8px;">Lijst met alle beschikbare talenten.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetCanceledPlanning

</td><td style="height:46.6px;">Niet in gebruik

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetCatalog

</td><td style="height:46.6px;">Lijst met alle beschikbare opleidingen en hun catalogusindeling (categorie en subcategorie).

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetCatalogFull

</td><td style="height:29.8px;">Zelfde als bovenstaande, met extra filtermogelijkheden.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetClass

</td><td style="height:29.8px;">Haalt informatie op over een specifieke lichting.

</td></tr><tr><td>GetClasses

</td><td>Haalt informatie op over alle lichtingen

</td></tr><tr><td>GetClassesFilteredByDate

</td><td>Haalt informatie op over alle lichtingen binnen een bepaalde periode.

</td></tr><tr><td>GetClassesFilteredByTraining

</td><td>Haalt informatie op over alle lichtingen die bij een bepaalde opleiding horen.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetCompanyELearningModules

</td><td style="height:46.6px;">Lijst met inhoud die aan modules gekoppeld kan worden.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetCompanyLearningModules

</td><td style="height:46.6px;">Lijst met modules. Let op: parameter "identifier" wordt niet gebruikt, maar moet wel ingevuld worden. Hier kan altijd nomanager@pynter.nl worden ingevuld.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetHistoricAbsences

</td><td style="height:29.8px;">Lijst met historische absenties voor opleidingen.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetInterviewCycles

</td><td style="height:29.8px;">Lijst met de status van feedbacks per persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetMandatoryPlanning

</td><td style="height:46.6px;">Lijst met verplichte type-B opleidingen en de status per persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetPaginatedLearningPortfolioContent

</td><td style="height:46.6px;">Hetzelfde als GetAllLearningPortfolioContent, maar met pagination.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetPersonAgenda

</td><td style="height:29.8px;">Lijst met aankomende type-B evenementen voor een specifiek persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetPersonCertificates

</td><td style="height:46.6px;">Lijst met certificaten die gekoppeld zijn aan zelf toegevoegde opleidingen voor een specifiek persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetPersonFinishedElearning

</td><td style="height:46.6px;">Lijst met informatie over afgeronde opleidingen voor een specifiek persoon.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetPersonPassport

</td><td style="height:29.8px;">In Pynter beschikbare informatie voor een specifiek persoon.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetPersonPhoto

</td><td style="height:29.8px;">Profielfoto van een specifiek persoon. Let op: returnt data in blob-formaat.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetPersonProgress

</td><td style="height:29.8px;">Lijst met de voortgang per trede voor een specifiek persoon.

</td></tr><tr style="height:63.4px;"><td style="height:63.4px;">GetPersonsOnLearningModules

</td><td style="height:63.4px;">Lijst van gebruikers die een bepaalde module in hun aanbod hebben. Let op: parameter "identifier" wordt niet gebruikt, maar moet wel ingevuld worden. Hier kan altijd nomanager@pynter.nl worden ingevuld.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetPersonTalents

</td><td style="height:29.8px;">Lijst met talenten voor een specifiek persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetPersonTraining

</td><td style="height:46.6px;">Lijst met diploma's en certificaten die buiten Pynter zijn behaald voor een specifiek persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetPersonWorkExperience

</td><td style="height:46.6px;">Lijst met werkervaring voor een specifiek persoon.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetPlanning

</td><td style="height:29.8px;">Niet in gebruik

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">GetROGResults

</td><td style="height:29.8px;">Lijst met antwoorden voor vragenlijsten

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">GetTrainingsInSelectableThemeProfiles

</td><td style="height:46.6px;">Lijst met opleidingen die onderdeel zijn van een thema.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">HealthCheck

</td><td style="height:29.8px;">Voor intern gebruik

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">InsertClass

</td><td style="height:29.8px;">Endpoint waarmee een lichting kan worden aangemaakt.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">Qualifications

</td><td style="height:29.8px;">Lijst met afgeronde opleidingen voor een specifiek persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">QualificationsByCodes

</td><td style="height:46.6px;">Lijst met afgeronde opleidingen voor een specifiek persoon, met extra filtermogelijkheden

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">StartedCourses

</td><td style="height:29.8px;">Lijst met opleidingen per persoon die gestart maar nog niet afgerond zijn.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">UpdateBIG

</td><td style="height:29.8px;">Voegt een BIG-nummer toe voor een specifiek persoon.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">UpdateCatalogus

</td><td style="height:29.8px;">Niet in gebruik

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">UpdateEmployee

</td><td style="height:46.6px;">Voegt een nieuwe gebruiker toe wanneer deze nog niet bestaat, of werkt een bestaande gebruiker bij met nieuwe informatie.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">UpdateEticketAttendance

</td><td style="height:46.6px;">Geeft aan dat een gebruiker bij een evenement waarvoor e-tickets zijn uitgegeven aanwezig is geweest op basis van de hash die bij het e-ticket hoort.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">UpdateLocation

</td><td style="height:46.6px;">Voegt een nieuwe locatie toe wanneer die nog niet bestaat, of werkt een bestaande locatie bij met nieuwe informatie.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">UpdateLocationAndDivision

</td><td style="height:46.6px;">Voegt een nieuwe locatie toe wanneer die nog niet bestaat, of werkt een bestaande locatie bij met nieuwe informatie.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">UpdatePersonManager

</td><td style="height:46.6px;">Verandert de leidinggevende voor een specifiek persoon.

</td></tr><tr style="height:29.8px;"><td style="height:29.8px;">UpdateStudy

</td><td style="height:29.8px;">Niet in gebruik

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">UpdateWindowsUsername

</td><td style="height:46.6px;">Verandert de Windows-gebruikersnaam voor een specifiek persoon.

</td></tr><tr style="height:46.6px;"><td style="height:46.6px;">ValidateEticket

</td><td style="height:46.6px;">Verifieert de geldigheid van een hash gekoppeld aan een e-ticket, en indien geldig, geeft informatie terug over het e-ticket.

</td></tr></tbody></table>

# Datamodel

# Opleidingen

Opleidingen in Pynter zijn modulair opgebouwd. Aan een opleiding (`LearningModule`) kunnen modules (`LearningTasks`) worden gekoppeld middels de koppeltabel `LearningModuleTasks`. Modules bevatten de verschillende soorten leeraanbod die op Pynter gevolgd kunnen worden, zoals LTI, SCORM en Pynter's eigen e-learning. Daarnaast kunnen modules ook gebruikt worden om andere gegevens bij te houden. Je kunt bijvoorbeeld een module maken waar een formulier moet worden ingevuld, of waarmee aanwezigheid kan worden geregistreerd.

Binnen Pynter is er onderscheid tussen opleidingen mét en zonder fysieke bijeenkomst. Wanneer een opleiding (deels) op locatie is, kunnen deze fysieke bijeenkomsten in Pynter worden geregistreerd. Pynter gebruikt hiervoor *lichtingen* (`GroupClasses`). Een lichting is een groep mensen die allemaal aanwezig is bij dezelfde trainingsmomenten. Per lichting kunnen een of meerdere trainingsdagen (`GroupClassDates`) worden toegevoegd, waarop kan worden aangegeven wanneer dit trainingsmoment plaatsvindt. Ook kan er per trainingsdag aangegeven worden wie die dag de opleiding verzorgt.

Voor het inschrijven voor een training gebruikt Pynter op de achtergrond groepen (`Groups`). Elke opleiding is gekoppeld aan een groep, en wanneer iemand zich inschrijft voor een opleiding wordt deze persoon ook automatisch lid van de groep (`GroupMember`). Wanneer iemand zich inschrijft voor een lichting, wordt naast de `GroupId` ook de `GroupClassId` vastgelegd.

Verder is het ook nog mogelijk om beheerders en trainers voor de gehele opleiding aan te wijzen. Dit gebeurt door mensen lid te maken van de groep met een specifieke rol (`GroupMember.Role`).

[![Untitled(4).png](https://docs.pynter.nl/uploads/images/gallery/2025-10/scaled-1680-/6jZ5xkJdVprl4tGo-untitled4.png)](https://docs.pynter.nl/uploads/images/gallery/2025-10/6jZ5xkJdVprl4tGo-untitled4.png)

<details id="bkmrk-broncode-diagram-hie"><summary>Broncode diagram</summary>

Dit is de broncode van het diagram hierboven. Dit kun je gebruiken om het diagram te bewerken op [dbdiagram.io](https://dbdiagram.io).

```ruby
table Person {
  Id int [pk]
}

table LearningModule {
  Id int [pk]
  GroupId int [ref: - Group.Id, not null]
  Type int
}

table LearningModuleTasks {
  LearningModuleId int [ref: - LearningModule.Id, not null]
  TaskId int [ref: - LearningTask.Id, not null]
}

table LearningTask {
  Id int [pk]
}

table Group {
  Id int [pk]
}

table GroupClass {
  Id int [pk]
  GroupId int [ref: > Group.Id, not null]
}

table GroupClassDate {
  Id int [pk]
  GroupClassId int [ref: > GroupClass.Id, not null]
  Date date
  From string
  Till string
}

table GroupClassDateTrainer {
  Id int [pk]
  GroupClassDateId int [ref: > GroupClassDate.Id, not null]
  TrainerId int [ref: - Person.Id, not null]
}

table GroupMember {
  Id int [pk]
  PersonId int [ref: - Person.Id, not null]
  GroupId int [ref: - Group.Id, not null]
  GroupClassId int [ref: - GroupClass.Id, null]
  Role int
}
```

</details>

# Opleidingsresultaten

Wanneer een cursist een opleiding afrondt wordt dit in Pynter geregistreerd in de tabel `FinishedModule`. Dit noemen we een *resultaat*. Hierin wordt (o.a.) geregistreerd wanneer iemand welke opleiding heeft afgerond. Belangrijk detail hierbij is dat het mogelijk is om per opleiding meerdere resultaten te hebben, bijvoorbeeld wanneer een opleiding periodiek herhaald moet worden.

Om gemakkelijker inzicht te krijgen in de *huidige* status van een opleiding voor een persoon is er de tabel `PersonModuleStatus`. Waar een opleiding in de `FinishedModule` meerdere keren kan voorkomen, bevat de `PersonModuleStatus` altijd één rij per persoon per opleiding, als deze persoon ooit aan deze opleiding begonnen is.

Verder wordt er ook per persoon per module (`LearningTask`) bijgehouden wat de status daarvan is.

[![Untitled(3).png](https://docs.pynter.nl/uploads/images/gallery/2025-10/scaled-1680-/vJLK8JdXHrBOJXHN-untitled3.png)](https://docs.pynter.nl/uploads/images/gallery/2025-10/vJLK8JdXHrBOJXHN-untitled3.png)

<details id="bkmrk-broncode-diagram-tab"><summary>Broncode diagram</summary>

Dit is de broncode van het diagram hierboven. Dit kun je gebruiken om het diagram te bewerken op [dbdiagram.io](https://dbdiagram.io).

```ruby
table Person {
  Id int [pk]
}

table LearningModule {
  Id int [pk]
}

table LearningModuleTasks {
  LearningModuleId int [ref: > LearningModule.Id, not null]
  TaskId int [ref: - LearningTask.Id, not null]
}

table LearningTask {
  Id int [pk]
}

table PersonLearningTask {
  Id int [pk]
  PersonId int [ref: - Person.Id, not null]
  TaskId int [ref: - LearningTask.Id, not null]
  Status enum
}

table FinishedModule {
  Id int [pk]
  PersonId int [ref: > Person.Id, not null]
  ModuleId int [ref: - LearningModule.Id, not null]
  FinishDate date
}

table PersonModuleStatus {
  Id int [pk]
  PersonId int [ref: - Person.Id, not null]
  ModuleId int [ref: - LearningModule.Id, not null]
  Status enum
}
```

</details>

# Evaluaties

<p class="callout info">Deze pagina is nog in aanbouw.</p>

# Correspondentie API-datamodel en Pynter-datamodel

In onderstaand diagram staat voor de belangrijkste API-endpoints uitgelegd hoe deze correspondeert met de originele data in Pynter. In het geel staat de "menselijke" naam voor een item, in het blauw de namen van de API-endpoints waar deze data in terugkomt.

<p class="callout info">Wanneer er in de naam van een API-endpoint een gedeelte tussen blokhaken staat, betekent dat dat hier meerdere endpoints bedoeld worden. Bijvoorbeeld: `CourseDates[*]` betekent alle API-endpoints die beginnen met `CourseDates`, zoals `CourseDatesByModules `en `CourseDatesWithStatus`.</p>

<div drawio-diagram="493"><img src="https://docs.pynter.nl/uploads/images/drawio/2026-02/M1LOkuxwD4x4mlbm-drawing-6-1772012663.png" alt=""/></div>

\* Groepen worden niet direct teruggegeven via de API, maar staan voor de compleetheid hiertussen omdat deze als koppeltabel tussen opleidingen en inschrijvingen (`ExternalEventProposals`/`GroupMembers`) gebruikt wordt.

\*\* De `GroupMembers` tabel wordt voor zowel groepsleden als lichtingsleden gebruikt. Wanneer het een groepsinschrijving betreft staat `gm_classId` op 0.