API Permissions Documentation

Overview

This document provides a comprehensive list of all API endpoints in the KIP People API (Public) and their required permissions. The API uses IdentityServer V2 for authentication and authorization.

Permission System

When multiple permissions are listed in an array, they represent alternative permissions - the user needs to have at least one of the listed permissions to access the endpoint.

For example:

  • ["KIP.People.Users.Me.Items.Read", "KIP.People.Users.Me.Items.Tickets.Read"] means the user needs either the general read permission OR the specific tickets read permission.

Endpoints by Category

My Items

Endpoints for accessing the current authenticated user's items.

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
GET/users/me/ticketsgetUserTicketsGet the current user's ticketsKIP.People.Users.Me.Items.Read
KIP.People.Users.Me.Items.Tickets.Read
GET/users/me/vouchersgetUserVouchersGet the current user's vouchersKIP.People.Users.Me.Items.Read
KIP.People.Users.Me.Items.Vouchers.Read
GET/users/me/loyalty-cardsgetUserLoyaltyCardsGet the current user's loyalty cardsKIP.People.Users.Me.Items.Read
KIP.People.Users.Me.Items.LoyaltyCards.Read
GET/users/me/transactionsgetUserTransactionsGet the current user's transaction historyKIP.People.Users.Me.Items.Read
KIP.People.Users.Me.Items.Transactions.Read
GET/users/me/support-ticketsgetUserSupportTicketsGet the current user's support ticketsKIP.People.Users.Me.Items.Read
KIP.People.Users.Me.Items.SupportTickets.Read

My User Profile

Endpoints for managing the current authenticated user's profile information.

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
DELETE/users/me/profiledeleteUserDelete the current user's profileKIP.People.Users.Me.Profile.Delete
GET/users/me/profilegetBasicProfileGet the current user's basic profile informationKIP.People.Users.Me.Profile.Read
KIP.People.Users.Me.Profile.Basic.Read
PUT/users/me/profileupdateBasicProfileUpdate the current user's basic profile informationKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.Basic.Write
GET/users/me/profile/extendedgetExtendedProfileGet the current user's extended profile informationKIP.People.Users.Me.Profile.Read
KIP.People.Users.Me.Profile.Extended.Read
PUT/users/me/profile/extendedupdateExtendedProfileUpdate the current user's extended profile informationKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.Extended.Write
GET/users/me/profile/preferencesgetUserPreferencesGet the current user's preferencesKIP.People.Users.Me.Profile.Read
KIP.People.Users.Me.Profile.Preferences.Read
PATCH/users/me/profile/preferencesupdateUserPreferencesUpdate the current user's preferencesKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.Preferences.Write
GET/users/me/profile/addresses/{type}getUserAddressesByTypeGet a user's addresses by typeKIP.People.Users.Me.Profile.Read
KIP.People.Users.Me.Profile.Addresses.Read
POST/users/me/profile/addresses/{type}addUserAddressesOfTypeAdd a user's address of typeKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.Addresses.Write
PUT/users/me/profile/addresses/{type}/{id}updateUserAddressesOfTypeUpdate a user's address of typeKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.Addresses.Write
DELETE/users/me/profile/addresses/{type}/{id}removeUserAddressesOfTypeRemove a user's addressKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.Addresses.Write
GET/users/me/profile/student-informationgetUserStudentInformationGet a user's student informationKIP.People.Users.Me.Profile.Read
KIP.People.Users.Me.Profile.StudentInformation.Read
GET/users/me/profile/student-information/{year}getUserCurrentStudentInformationGet a user's student information for a academic specified yearKIP.People.Users.Me.Profile.Read
KIP.People.Users.Me.Profile.StudentInformation.Read
POST/users/me/profile/student-information/{year}addUserCurrentStudentInformationAdd a user's student information for a specific academic yearKIP.People.Users.Profile.Write
KIP.People.Users.Profile.StudentInformation.Write
PUT/users/me/profile/student-information/{year}updateUserCurrentStudentInformationUpdate a user's student information for a specific academic yearKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.StudentInformation.Write
PUT/users/me/profile/membershipupdateMembershipUpdate the current user's membership informationKIP.People.Users.Me.Profile.Write
KIP.People.Users.Me.Profile.Membership.Write

My Movies

Endpoints for managing the current authenticated user's movie-related data.

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
GET/users/me/movies/historygetHistoryGet current user's movie historyKIP.People.Users.Me.Movies.Read
KIP.People.Users.Me.Movies.History.Read
DELETE/users/me/movies/history/{movieId}deleteFromHistoryRemove a movie from the current user's movie historyKIP.People.Users.Me.Movies.Write
KIP.People.Users.Me.Movies.History.Write
GET/users/me/movies/recommendationsgetRecommendationsGet current user's movie recommendationsKIP.People.Users.Me.Movies.Read
KIP.People.Users.Me.Movies.Recommendations.Read
DELETE/users/me/movies/recommendations/{recommendationId}deleteFromRecommendationsRemove a movie from the current user's recommendationsKIP.People.Users.Me.Movies.Write
KIP.People.Users.Me.Movies.Recommendations.Write
GET/users/me/movies/wishlistgetWishlistGet current user's movie wishlistKIP.People.Users.Me.Movies.Read
KIP.People.Users.Me.Movies.Wishlist.Read
POST/users/me/movies/wishlistaddToWishlistAdd a movie from the current user's movie wishlistKIP.People.Users.Me.Movies.Write
KIP.People.Users.Me.Movies.Wishlist.Write
DELETE/users/me/movies/wishlist/{movieId}deleteFromWishlistRemove a movie from the current user's movie wishlistKIP.People.Users.Me.Movies.Write
KIP.People.Users.Me.Movies.Wishlist.Write

My Exports

Endpoints for exporting the current authenticated user's data.

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
POST/users/me/exports/dataexportUserDataCreate an export job for exporting the current user's dataKIP.People.Users.Me.Exports.Read
KIP.People.Users.Me.Exports.GDPR.Read

Companies

Endpoints for managing companies.

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
POST/companiescreateCreate a new companyKIP.People.Companies.Write
PUT/companies/{companyId}updateUpdate an existing companyKIP.People.Companies.Write

User Items

Endpoints for accessing a specific user's items (requires user ID).

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
GET/users/{userId}/ticketsgetUserTicketsGet a user's ticketsKIP.People.Users.Items.Read
KIP.People.Users.Items.Tickets.Read
GET/users/{userId}/vouchersgetUserVouchersGet a user's vouchersKIP.People.Users.Items.Read
KIP.People.Users.Items.Vouchers.Read
GET/users/{userId}/loyalty-cardsgetUserLoyaltyCardsGet a user's loyalty cardsKIP.People.Users.Items.Read
KIP.People.Users.Items.LoyaltyCards.Read
GET/users/{userId}/transactionsgetUserTransactionsGet a user's transaction historyKIP.People.Users.Items.Read
KIP.People.Users.Items.Transactions.Read
GET/users/{userId}/support-ticketsgetUserSupportTicketsGet a user's support ticketsKIP.People.Users.Items.Read
KIP.People.Users.Items.SupportTickets.Read

User Profile

Endpoints for managing a specific user's profile information (requires user ID).

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
DELETE/users/{userId}/profiledeleteUserDelete a user's profileKIP.People.Users.Profile.Delete
GET/users/{userId}/profilegetUserProfileGet a user's basic profile information by user IDKIP.People.Users.Profile.Read
KIP.People.Users.Profile.Basic.Read
PUT/users/{userId}/profileupdateUserProfileUpdate a user's basic profile informationKIP.People.Users.Profile.Write
KIP.People.Users.Profile.Basic.Write
GET/users/{userId}/profile/extendedgetUserExtendedProfileGet a user's extended profile information by user IDKIP.People.Users.Profile.Read
KIP.People.Users.Profile.Extended.Read
PUT/users/{userId}/profile/extendedupdateUserExtendedProfileUpdate a user's extended profile informationKIP.People.Users.Profile.Write
KIP.People.Users.Profile.Extended.Write
GET/users/{userId}/profile/preferencesgetUserPreferencesGet a user's preferences filtered by typeKIP.People.Users.Profile.Read
KIP.People.Users.Profile.Preferences.Read
PATCH/users/{userId}/profile/preferencesupdateUserPreferencesUpdate a user's preferences filtered by typeKIP.People.Users.Profile.Write
KIP.People.Users.Profile.Preferences.Write
GET/users/{userId}/profile/addresses/{type}getUserAddressesByTypeGet a user's addresses by typeKIP.People.Users.Profile.Read
KIP.People.Users.Profile.Addresses.Read
POST/users/{userId}/profile/addresses/{type}addUserAddressesByTypeAdd a user's address of typeKIP.People.Users.Profile.Write
KIP.People.Users.Profile.Addresses.Write
PUT/users/{userId}/profile/addresses/{type}/{id}updateUserAddressesByTypeUpdate a user's address of typeKIP.People.Users.Profile.Write
KIP.People.Users.Profile.Addresses.Write
DELETE/users/{userId}/profile/addresses/{type}/{id}removeUserAddressesOfTypeRemove a user's addressKIP.People.Users.Profile.Write
KIP.People.Users.Profile.Addresses.Write
GET/users/{userId}/profile/student-informationgetUserStudentInformationGet a user's student informationKIP.People.Users.Profile.Read
KIP.People.Users.Profile.StudentInformation.Read
GET/users/{userId}/profile/student-information/{year}getUserCurrentStudentInformationGet a user's student information for a academic specified yearKIP.People.Users.Profile.Read
KIP.People.Users.Profile.StudentInformation.Read
POST/users/{userId}/profile/student-information/{year}addUserCurrentStudentInformationAdd a user's student information for a specific academic yearKIP.People.Users.Profile.Write
KIP.People.Users.Profile.StudentInformation.Write
PUT/users/{userId}/profile/student-information/{year}updateUserCurrentStudentInformationUpdate a user's student information for a specific academic yearKIP.People.Users.Profile.Write
KIP.People.Users.Profile.StudentInformation.Write
PUT/users/{userId}/profile/membershipupdateMembershipUpdate a user's membership informationKIP.People.Users.Profile.Write
KIP.People.Users.Profile.Membership.Write

User Movies

Endpoints for managing a specific user's movie-related data (requires user ID).

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
GET/users/{userId}/movies/historygetUserMovieHistoryGet a user's movie historyKIP.People.Users.Movies.Read
KIP.People.Users.Movies.History.Read
DELETE/users/{userId}/movies/history/{movieId}deleteFromUserHistoryRemove a movie from a user's movie historyKIP.People.Users.Movies.Write
KIP.People.Users.Movies.History.Write
GET/users/{userId}/movies/recommendationsgetUserMovieRecommendationsGet a user's movie recommendationsKIP.People.Users.Movies.Read
KIP.People.Users.Movies.Recommendations.Read
DELETE/users/{userId}/movies/recommendations/{recommendationId}deleteFromUserRecommendationsRemove a movie from a user's recommendationsKIP.People.Users.Movies.Write
KIP.People.Users.Movies.Recommendations.Write
GET/users/{userId}/movies/wishlistgetUserMovieWishlistGet a user's movie wishlistKIP.People.Users.Movies.Read
KIP.People.Users.Movies.Wishlist.Read
POST/users/{userId}/movies/wishlistaddToUserWishlistAdd a movie to a user's movie wishlistKIP.People.Users.Movies.Write
KIP.People.Users.Movies.Wishlist.Write
DELETE/users/{userId}/movies/wishlist/{movieId}deleteFromUserWishlistRemove a movie from a user's movie wishlistKIP.People.Users.Movies.Write
KIP.People.Users.Movies.Wishlist.Write

User Exports

Endpoints for exporting a specific user's data (requires user ID).

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
POST/users/{userId}/exports/dataexportUserDataCreate an export job for exporting a user's dataKIP.People.Users.Exports.GDPR.Read

Note: The UserExports interface also has an interface-level permission KIP.People.Users.Exports.Read, but the specific endpoint overrides this with KIP.People.Users.Exports.GDPR.Read.


Metadata

Endpoints for accessing metadata and reference data.

HTTP MethodRouteOperationDescriptionRequired Permissions (Any One)
GET/metadata/users/preference-options/{type}getPreferenceOptionsGet the preference options filtered on typeKIP.People.Metadata.Read
KIP.People.Metadata.Preferences.Read
GET/metadata/users/school-optionsgetSchoolOptionsGet the school optionsKIP.People.Metadata.Read
KIP.People.Metadata.Schools.Read
GET/metadata/users/study-level-optionsgetStudyLevelOptionsGet the possible study levelsKIP.People.Metadata.Read
KIP.People.Metadata.StudyLevels.Read

Permission Patterns

Hierarchical Permission Structure

The permissions follow a hierarchical naming convention:

KIP.People.{Resource}.{Scope}.{Action}[.{SubResource}]

Examples:

  • KIP.People.Users.Me.Profile.Read - General read permission for current user's profile
  • KIP.People.Users.Me.Profile.Basic.Read - Specific read permission for basic profile data
  • KIP.People.Users.Profile.Write - General write permission for any user's profile

Permission Alternatives

Many endpoints accept multiple alternative permissions, typically following this pattern:

  • General permission: Broader scope (e.g., KIP.People.Users.Me.Items.Read)
  • Specific permission: Narrower scope (e.g., KIP.People.Users.Me.Items.Tickets.Read)

This allows for flexible permission management where users can be granted either broad access or fine-grained access to specific resources.

"Me" vs User ID Endpoints

The API provides two sets of similar endpoints:

  • "Me" endpoints (/users/me/*): For the current authenticated user, requiring *.Me.* permissions
  • User ID endpoints (/users/{userId}/*): For accessing any user's data, requiring *.Users.* permissions (without "Me")

This separation allows for different permission models for self-service operations versus administrative operations.


Notes

  1. All endpoints return standard error responses including UnauthorizedError (401) and ForbiddenError (403) when authentication or authorization fails.
  2. The API uses IdentityServer V2 for authentication and authorization.
  3. Permissions are case-sensitive and must match exactly as specified.
  4. When multiple permissions are listed for an endpoint, having any one of them grants access.