Skip to main content

User Data & Pseudonymization — External API Perspective

Overview​

When external tools (e.g., Bettermarks) make requests to the Roster API, all user data is protected through pseudonymization. The API ensures that no real user identities are exposed to third-party services.


Data Returned per Endpoint​

GET /roster/users/{user}/metadata​

FieldValuePseudonymized?
user_idUser's internal database ID❌ No
usernameIframe HTML content✅ Yes (real name hidden)
typeteacher or student❌ No (role only)

Note: This endpoint requires a valid pseudonym in the query parameter. Only authorized requests with a matching pseudonym can retrieve metadata.


GET /roster/users/{user}/groups​

FieldValuePseudonymized?
group_idCourse/Room ID❌ No
nameCourse/Room name❌ No
student_countNumber of students❌ No

Note: Group information is returned, but no individual user data is exposed in this response.


GET /roster/groups/{id}​

For each group member (students and teachers):

FieldValuePseudonymized?
user_idPseudonym string✅ Yes
usernameIframe HTML content✅ Yes

What External Tools Cannot See​

Protected DataReason
Real user IDReplaced with tool-specific pseudonym
Real username/nameReplaced with iframe HTML subject
Email addressNever exposed
Personal detailsNever exposed
School informationNot directly exposed

Pseudonymization Details​

Pseudonym Characteristics​

  • Unique per tool: Each external tool receives a different pseudonym for the same user
  • Consistent: The same tool always receives the same pseudonym for a given user
  • Non-reversible: External tools cannot derive real user data from the pseudonym

Username Field​

The username field does not contain the actual username. Instead, it contains:

  • An iframe HTML subject — a rendered HTML snippet
  • This allows display in the external tool without exposing real identity

Summary Table​

EndpointReal ID ExposedReal Name ExposedUses Pseudonym
/users/{user}/metadataYes (internal ID)No (iframe)Required in request
/users/{user}/groupsN/AN/ARequired in request
/groups/{id}NoNoYes (in response)