Skip to content

Authorization API ​

Base URL: /api/v1/authorization

Manage roles, permissions, user role assignments, impersonation, role network rules, institution domains, dashboard tiles, and audit logging.

Endpoints Overview ​

Roles ​

MethodEndpointDescription
GET/rolesList roles
POST/rolesCreate role
GET/roles/{roleID}Get role details
PATCH/roles/{roleID}Update role
DELETE/roles/{roleID}Delete role
GET/roles/{roleID}/permissionsGet permissions for role

Permission Nodes ​

MethodEndpointDescription
GET/permission-nodes/treeGet permission tree hierarchy
GET/permission-nodesList permission nodes
POST/permission-nodesCreate permission node
GET/permission-nodes/{nodeID}Get permission node details
PATCH/permission-nodes/{nodeID}Update permission node
DELETE/permission-nodes/{nodeID}Delete permission node

Role Permissions ​

MethodEndpointDescription
POST/role-permissions/bulk_assignBulk assign permissions to a role
POST/role-permissions/bulkBulk create role permissions
GET/role-permissionsList role permissions
POST/role-permissionsCreate role permission
GET/role-permissions/{rpID}Get role permission details
PATCH/role-permissions/{rpID}Update role permission
DELETE/role-permissions/{rpID}Delete role permission

User Roles ​

MethodEndpointDescription
GET/user-roles/my_rolesGet current user's roles
POST/user-roles/switch_roleSwitch active role
POST/user-roles/derive_rolesDerive roles for a user
POST/user-roles/derive_all_rolesDerive roles for all users
POST/user-roles/start_impersonationStart impersonating a user
POST/user-roles/stop_impersonationStop impersonation
GET/user-roles/current_impersonationGet current impersonation state
GET/user-roles/can_impersonateCheck if user can impersonate
GET/user-rolesList user roles
POST/user-rolesAssign role to user
GET/user-roles/{urID}Get user role details
PATCH/user-roles/{urID}Update user role
DELETE/user-roles/{urID}Delete user role

Role Networks ​

Gated on ADMIN.NETWORKS (migration 291).

MethodEndpointDescription
GET/networksNetworks, every role's rules, the enforcement mode and the caller's address
GET/networks/test?address=Which roles an address could use, and why
POST/networksCreate a network
PUT/networks/{networkID}Replace a network and its ranges
DELETE/networks/{networkID}Delete a network no rule names
PUT/roles/{roleID}/network-rulesReplace every network rule of one role

Role Networks ​

Which roles may be acted under from which source addresses (migration 291). For each role and address: a matching DENY network refuses, else a matching ALLOW network permits, else the role is refused — so a role with no ALLOW cannot be used from anywhere. Nothing is refused unless the server runs with ROLE_NETWORK_ENFORCEMENT=enforce. Every write takes effect on the next request. See Role Networks for the operator's view.

Get the Overview ​

GET /api/v1/authorization/networks

Success Response (200 OK) ​

json
{
  "networks": [
    {
      "network_id": 2,
      "name": "Campus 10.0.50.0/24",
      "is_active": true,
      "cidrs": [{ "network_cidr_id": 3, "cidr": "10.0.50.0/24" }],
      "rule_count": 9,
      "updated_at": "2026-10-26T12:00:00Z"
    }
  ],
  "rules": [{ "role_id": 2, "network_id": 2, "effect": "ALLOW" }],
  "mode": "log",
  "your_address": "10.0.50.17"
}

mode is the server's ROLE_NETWORK_ENFORCEMENT (off, log or enforce); your_address is the caller's source address as the server sees it.

Create or Replace a Network ​

POST /api/v1/authorization/networks
PUT  /api/v1/authorization/networks/{networkID}
FieldTypeRequiredDescription
namestringYesUnique, up to 100 characters (409 on a duplicate)
descriptionstringNoUp to 500 characters
is_activebooleanNoAn inactive network matches nothing
cidrsobject[]No{ "cidr": "10.0.50.0/24", "description": "..." }. The complete set: a range left out is removed. A bare address is stored as a single host, and host bits are masked (10.0.50.7/24 becomes 10.0.50.0/24). An invalid or duplicate range is 400

DELETE /networks/{networkID} is refused with 409 while any role's rules still name the network.

Replace a Role's Rules ​

PUT /api/v1/authorization/roles/{roleID}/network-rules
json
{
  "rules": [
    { "network_id": 2, "effect": "ALLOW" },
    { "network_id": 5, "effect": "DENY" }
  ]
}

Replaces every rule of the role. A network may appear once (400 otherwise).

Success Response (200 OK) ​

json
{
  "role_id": 2,
  "rules": [
    { "role_id": 2, "network_id": 2, "effect": "ALLOW" },
    { "role_id": 2, "network_id": 5, "effect": "DENY" }
  ],
  "has_allow": true
}

has_allow: false is allowed but means nobody can act under the role from anywhere.

Test an Address ​

GET /api/v1/authorization/networks/test?address=203.0.113.9

Omit address to test the caller's own.

Success Response (200 OK) ​

json
{
  "address": "203.0.113.9",
  "mode": "log",
  "break_glass": false,
  "networks": ["Anywhere"],
  "roles": [
    { "role_id": 7, "role_code": "FACULTY", "name": "Faculty", "permitted": true, "reason": "ALLOW", "network": "Anywhere" },
    { "role_id": 2, "role_code": "REGISTRAR", "name": "Registrar", "permitted": false, "reason": "NO_ALLOW" }
  ]
}

reason is BREAK_GLASS (the address is in ROLE_NETWORK_BREAKGLASS_CIDRS), DENY, ALLOW or NO_ALLOW; network names the deciding network for DENY and ALLOW. The result is the rules' answer regardless of mode.

The network_role_denied error ​

When a request's address permits none of the user's roles, every route except GET /auth/me, POST /auth/logout and the stop/current-impersonation routes answers:

json
{
  "error": {
    "code": "network_role_denied",
    "message": "This role is not available from the network you are connecting from",
    "message_key": "errors.networkRoleDenied"
  }
}

with status 403. The same error refuses a sign-in and a role switch.


User Permissions & Menu ​

MethodEndpointDescription
GET/user-permissionsGet effective permissions for current user
GET/user-menuGet menu items for current user

Department Admins ​

MethodEndpointDescription
Moved. Department administrators became unit administrators in July 2026 and live in
the Organization API at /organization/unit-administrators. They are
still gated on ADMIN.DEPT_ADMINS.

Institution Domains ​

MethodEndpointDescription
GET/domainsList institution domains
POST/domainsCreate institution domain
GET/domains/{domainID}Get domain details
PATCH/domains/{domainID}Update domain
DELETE/domains/{domainID}Delete domain
POST/domains/check_emailCheck email against institution domains

/institution-domains is the same resource under its full name. Reads need ADMIN.DOMAINS; create, update and delete also require an acting superuser (403 otherwise), whatever the grants say: the protected domains decide which email addresses are institutional, and so who can be linked to a login by SSO.

Dashboard Tiles ​

MethodEndpointDescription
GET/dashboard-tilesList dashboard tiles
POST/dashboard-tilesCreate dashboard tile
GET/dashboard-tiles/{tileID}Get dashboard tile details
PATCH/dashboard-tiles/{tileID}Update dashboard tile
DELETE/dashboard-tiles/{tileID}Delete dashboard tile

Role Default Tiles ​

MethodEndpointDescription
GET/role-default-tilesList role default tiles
POST/role-default-tilesCreate role default tile
GET/role-default-tiles/{rdtID}Get role default tile details
PATCH/role-default-tiles/{rdtID}Update role default tile
DELETE/role-default-tiles/{rdtID}Delete role default tile

Dashboard Preferences ​

MethodEndpointDescription
GET/dashboard-preferences/my_dashboardGet current user's dashboard preferences
GET/dashboard-preferencesList dashboard preferences
POST/dashboard-preferencesCreate dashboard preference
GET/dashboard-preferences/{prefID}Get dashboard preference details
PATCH/dashboard-preferences/{prefID}Update dashboard preference
DELETE/dashboard-preferences/{prefID}Delete dashboard preference

Audit Logs ​

MethodEndpointDescription
GET/audit-logs/by_entityGet audit logs filtered by entity
GET/audit-logs/recentGet recent audit logs
GET/audit-logsList all audit logs
GET/audit-logs/{logID}Get audit log details

Roles ​

List Roles ​

GET /api/v1/authorization/roles

Get all authorization roles defined in the system.

Success Response (200 OK) ​

json
{
  "count": 5,
  "results": [
    {
      "role_id": 1,
      "role_code": "SUPER_ADMIN",
      "name": "Super Administrator",
      "description": "Full system access",
      "role_type": "SYSTEM",
      "is_active": true,
      "grants_superuser": true,
      "priority": 1,
      "session_timeout_minutes": null,
      "user_count": 3
    }
  ]
}
FieldMeaning
priorityLower is higher. Picks a user's fallback acting role — when they have not chosen one, or when the chosen one is not usable from their network. New roles default to 100
session_timeout_minutesThe role's own idle-timeout limit, minimum 5; null uses the system value. It can only shorten a session. To remove a limit on update, send "clear_session_timeout": true

Get Role Permissions ​

GET /api/v1/authorization/roles/{roleID}/permissions

Get all permission nodes assigned to a specific role.

Path Parameters ​

ParameterTypeDescription
roleIDintegerRole ID

Success Response (200 OK) ​

json
{
  "success": true,
  "data": [
    {
      "permission_node_id": 10,
      "node_code": "academic.courses.view",
      "node_name": "View Courses",
      "parent_id": 5
    }
  ]
}

Permission Nodes ​

Get Permission Tree ​

GET /api/v1/authorization/permission-nodes/tree

Get the full permission tree hierarchy.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": [
    {
      "permission_node_id": 1,
      "node_code": "academic",
      "node_name": "Academic",
      "node_type": "MODULE",
      "parent_id": null,
      "children": [
        {
          "permission_node_id": 5,
          "node_code": "academic.courses",
          "node_name": "Courses",
          "node_type": "FEATURE",
          "parent_id": 1,
          "children": [
            {
              "permission_node_id": 10,
              "node_code": "academic.courses.view",
              "node_name": "View Courses",
              "node_type": "ACTION",
              "parent_id": 5,
              "children": []
            }
          ]
        }
      ]
    }
  ]
}

List Permission Nodes ​

GET /api/v1/authorization/permission-nodes

Get a flat list of all permission nodes.

Success Response (200 OK) ​

json
{
  "count": 50,
  "results": [
    {
      "permission_node_id": 1,
      "node_code": "academic",
      "node_name": "Academic",
      "node_type": "MODULE",
      "parent_id": null,
      "is_active": true,
      "sort_order": 1
    }
  ]
}

Role Permissions ​

Bulk Assign Permissions ​

POST /api/v1/authorization/role-permissions/bulk_assign

Replace all permissions for a role with a new set of permission node IDs.

Request Body ​

FieldTypeRequiredDescription
role_idintegerYesRole to assign permissions to
permission_node_idsinteger[]YesPermission node IDs to assign

Example Request ​

bash
curl -X POST http://localhost:8000/api/v1/authorization/role-permissions/bulk_assign \
  -b cookies.txt \
  -H "Content-Type: application/json" \
  -d '{
    "role_id": 2,
    "permission_node_ids": [10, 11, 12, 20, 21]
  }'

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "message": "Permissions updated",
    "assigned_count": 5
  }
}

Bulk Create Role Permissions ​

POST /api/v1/authorization/role-permissions/bulk

Create multiple role permission assignments at once.

Request Body ​

FieldTypeRequiredDescription
itemsobject[]YesArray of role permission objects
items[].role_idintegerYesRole ID
items[].permission_node_idintegerYesPermission node ID

User Roles ​

Get My Roles ​

GET /api/v1/authorization/user-roles/my_roles

Get all roles assigned to the currently authenticated user.

Only roles inside their effective/expiration window are listed, so an expired role is never offered by the switcher. While impersonating, these are the impersonated user's roles.

Success Response (200 OK) ​

Abridged:

json
{
  "roles": [
    {
      "user_role_id": 1,
      "user_id": 12,
      "role_id": 2,
      "role_code": "REGISTRAR",
      "role_name": "Registrar",
      "is_manual_override": true,
      "available_from_network": false
    },
    {
      "user_role_id": 2,
      "user_id": 12,
      "role_id": 7,
      "role_code": "FACULTY",
      "role_name": "Faculty",
      "is_manual_override": false,
      "available_from_network": true
    }
  ],
  "active_role": { "role_id": 7, "role_code": "FACULTY", "name": "Faculty", "admin_id": null },
  "network_restricted_role": { "role_id": 2, "role_code": "REGISTRAR", "name": "Registrar" },
  "permissions": { "...": "..." },
  "menu_structure": [],
  "impersonation": null,
  "appointments": [],
  "active_appointment": null,
  "appointment_required": false,
  "appointment_role_ids": []
}

available_from_network is false for a role the request's source address may not act under (Role Networks). network_restricted_role is set when the user's chosen role is one of those: active_role is then the highest-priority role that is permitted, for this request only. The stored choice is not changed.


Switch Role ​

POST /api/v1/authorization/user-roles/switch_role

Switch the user's active role context.

Request Body ​

FieldTypeRequiredDescription
role_idintegerYesRole ID to switch to

Example Request ​

bash
curl -X POST http://localhost:8000/api/v1/authorization/user-roles/switch_role \
  -b cookies.txt \
  -H "Content-Type: application/json" \
  -d '{"role_id": 3}'

Success Response (200 OK) ​

json
{
  "role_id": 3,
  "role_code": "FACULTY",
  "name": "Faculty",
  "active_appointment": null
}

Switching to a role the request's source network may not use is refused with 403 network_role_denied. The acting role decides what every later request may do — the API, not only the menu — and the session's idle timeout follows it; re-read session_timeout_minutes from GET /auth/me after a switch.


Derive Roles ​

POST /api/v1/authorization/user-roles/derive_roles

Derive and assign roles for a specific user based on their relationships (student, teacher, advisor, etc.).

Request Body ​

FieldTypeRequiredDescription
user_idintegerYesUser ID to derive roles for

Derive All Roles ​

POST /api/v1/authorization/user-roles/derive_all_roles

Derive and assign roles for all users in the system. Admin only.


Start Impersonation ​

POST /api/v1/authorization/user-roles/start_impersonation

Start impersonating another user. Requires appropriate permissions.

Request Body ​

FieldTypeRequiredDescription
target_user_idintegerYesUser ID to impersonate

Example Request ​

bash
curl -X POST http://localhost:8000/api/v1/authorization/user-roles/start_impersonation \
  -b cookies.txt \
  -H "Content-Type: application/json" \
  -d '{"target_user_id": 25}'

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "message": "Now impersonating user",
    "impersonated_user_id": 25,
    "impersonated_email": "student@university.edu",
    "tokens": {
      "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
      "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
    }
  }
}

Stop Impersonation ​

POST /api/v1/authorization/user-roles/stop_impersonation

Stop impersonating and return to original user context.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "message": "Impersonation ended",
    "tokens": {
      "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
      "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
    }
  }
}

Get Current Impersonation ​

GET /api/v1/authorization/user-roles/current_impersonation

Get current impersonation state.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "is_impersonating": true,
    "original_user_id": 1,
    "original_email": "admin@example.com",
    "impersonated_user_id": 25,
    "impersonated_email": "student@university.edu"
  }
}

Check Can Impersonate ​

GET /api/v1/authorization/user-roles/can_impersonate

Check if the current user has permission to impersonate others.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "can_impersonate": true
  }
}

User Permissions & Menu ​

Get User Permissions ​

GET /api/v1/authorization/user-permissions

Get the effective permissions for the currently authenticated user based on their active role.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": [
    {
      "node_code": "academic.courses.view",
      "node_name": "View Courses"
    },
    {
      "node_code": "academic.courses.edit",
      "node_name": "Edit Courses"
    }
  ]
}

Get User Menu ​

GET /api/v1/authorization/user-menu

Get the menu items available to the current user based on their permissions and active role.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": [
    {
      "label": "Academic",
      "icon": "pi pi-book",
      "items": [
        {
          "label": "Courses",
          "to": "/academic/courses"
        },
        {
          "label": "Sections",
          "to": "/academic/sections"
        }
      ]
    }
  ]
}

Department Admins ​

Renamed and moved. The department_administrators table became unit_administrators in July 2026, keyed by org_unit_id and admin_level_id rather than department_id and a free-text level, and the endpoints moved to the Organization API:

MethodEndpoint
GET/api/v1/organization/unit-administrators
POST/api/v1/organization/unit-administrators
GET/api/v1/organization/unit-administrators/{uaID}
PATCH/api/v1/organization/unit-administrators/{uaID}
DELETE/api/v1/organization/unit-administrators/{uaID}

Appointing or removing one re-derives that person's auto-assigned roles (ACADEMIC_ADMIN) immediately. See Organization.


Institution Domains ​

List Domains ​

GET /api/v1/authorization/domains

List institution email domains used for user classification.

Success Response (200 OK) ​

json
{
  "count": 2,
  "results": [
    {
      "domain_id": 1,
      "domain_name": "university.edu",
      "domain_type": "INSTITUTIONAL",
      "is_active": true,
      "created_at": "2024-01-01T00:00:00Z"
    }
  ]
}

Check Email Domain ​

POST /api/v1/authorization/domains/check_email

Check if an email address matches an institution domain.

Request Body ​

FieldTypeRequiredDescription
emailstringYesEmail address to check

Example Request ​

bash
curl -X POST http://localhost:8000/api/v1/authorization/domains/check_email \
  -b cookies.txt \
  -H "Content-Type: application/json" \
  -d '{"email": "john@university.edu"}'

Success Response (200 OK) ​

json
{
  "success": true,
  "data": {
    "is_institutional": true,
    "domain": "university.edu",
    "domain_type": "INSTITUTIONAL"
  }
}

Dashboard Tiles ​

List Dashboard Tiles ​

GET /api/v1/authorization/dashboard-tiles

List all available dashboard tiles.

Success Response (200 OK) ​

json
{
  "count": 8,
  "results": [
    {
      "tile_id": 1,
      "tile_code": "MY_SCHEDULE",
      "title": "My Schedule",
      "description": "View your current class schedule",
      "component_name": "ScheduleTile",
      "icon": "pi pi-calendar",
      "default_width": 2,
      "default_height": 1,
      "is_active": true
    }
  ]
}

Role Default Tiles ​

List Role Default Tiles ​

GET /api/v1/authorization/role-default-tiles

List default dashboard tile configurations per role.

Success Response (200 OK) ​

json
{
  "count": 3,
  "results": [
    {
      "role_default_tile_id": 1,
      "role_id": 3,
      "role_name": "Student",
      "tile_id": 1,
      "tile_code": "MY_SCHEDULE",
      "tile_title": "My Schedule",
      "position": 1,
      "width": 2,
      "height": 1
    }
  ]
}

Create Role Default Tile ​

POST /api/v1/authorization/role-default-tiles

Request Body ​

FieldTypeRequiredDescription
role_idintegerYesRole ID
tile_idintegerYesDashboard tile ID
positionintegerNoDisplay position
widthintegerNoTile width (grid units)
heightintegerNoTile height (grid units)

Dashboard Preferences ​

Get My Dashboard ​

GET /api/v1/authorization/dashboard-preferences/my_dashboard

Get the current user's personalized dashboard tile preferences.

Success Response (200 OK) ​

json
{
  "success": true,
  "data": [
    {
      "preference_id": 1,
      "tile_id": 1,
      "tile_code": "MY_SCHEDULE",
      "title": "My Schedule",
      "component_name": "ScheduleTile",
      "position": 1,
      "width": 2,
      "height": 1,
      "is_visible": true
    }
  ]
}

Create Dashboard Preference ​

POST /api/v1/authorization/dashboard-preferences

Request Body ​

FieldTypeRequiredDescription
tile_idintegerYesDashboard tile ID
positionintegerNoDisplay position
widthintegerNoTile width
heightintegerNoTile height
is_visiblebooleanNoWhether tile is visible (default: true)

Audit Logs ​

Get Logs by Entity ​

GET /api/v1/authorization/audit-logs/by_entity

Get audit logs filtered by entity type and ID.

Query Parameters ​

ParameterTypeDescription
entity_typestringEntity type (e.g., student, course, person)
entity_idstringEntity ID

Example Request ​

bash
curl -X GET "http://localhost:8000/api/v1/authorization/audit-logs/by_entity?entity_type=student&entity_id=1001" \
  -b cookies.txt

Success Response (200 OK) ​

json
{
  "count": 15,
  "results": [
    {
      "log_id": 500,
      "user_id": 1,
      "user_email": "admin@example.com",
      "action": "UPDATE",
      "entity_type": "student",
      "entity_id": "1001",
      "changes": {
        "student_status_id": {"old": 1, "new": 2}
      },
      "ip_address": "192.168.1.100",
      "created_at": "2024-06-15T10:30:00Z"
    }
  ]
}

Get Recent Logs ​

GET /api/v1/authorization/audit-logs/recent

Get the most recent audit log entries across the system.

Query Parameters ​

ParameterTypeDescription
limitintegerNumber of entries to return (default: 50)

List Audit Logs ​

GET /api/v1/authorization/audit-logs

List all audit log entries with pagination.

Query Parameters ​

ParameterTypeDescription
user_idintegerFilter by user
actionstringFilter by action (CREATE, UPDATE, DELETE)
entity_typestringFilter by entity type
orderingstringSort by: created_at

Get Audit Log Details ​

GET /api/v1/authorization/audit-logs/{logID}

Get full details of a specific audit log entry.

Path Parameters ​

ParameterTypeDescription
logIDintegerAudit log ID



Complete endpoint reference ​

Every route this domain registers, with the permission node that gates it. Generated from the route table, so it is complete by construction — the sections above explain behaviour, this one guarantees nothing is missing.

Paths are relative to /api/v1/authorization. A node in italics is an exemption rather than a grant: selfservice acts only on the caller's own record, public needs no session at all, and custom carries its own wrapper.

MethodEndpointPermission nodeDescription
GET/audit-logADMIN.AUDITGet audit log
GET/audit-log/{logID}ADMIN.AUDITGet one audit log
GET/audit-logsADMIN.AUDITList audit logs
GET/audit-logs/by_entityADMIN.AUDITGet by entity
GET/audit-logs/recentADMIN.AUDITGet recent
GET/audit-logs/{logID}ADMIN.AUDITGet one audit log
GET/dashboard-preferencesselfserviceList dashboard preferences
POST/dashboard-preferencesselfserviceCreate a dashboard preference
GET/dashboard-preferences/my_dashboardselfserviceGet my dashboard
DELETE/dashboard-preferences/{prefID}selfserviceDelete a dashboard preference
GET/dashboard-preferences/{prefID}selfserviceGet one dashboard preference
PATCH/dashboard-preferences/{prefID}selfserviceUpdate a dashboard preference
GET/dashboard-tilesADMIN.SYSTEM_SETTINGSList dashboard tiles
POST/dashboard-tilesADMIN.SYSTEM_SETTINGSCreate a dashboard tile
DELETE/dashboard-tiles/{tileID}ADMIN.SYSTEM_SETTINGSDelete a dashboard tile
GET/dashboard-tiles/{tileID}ADMIN.SYSTEM_SETTINGSGet one dashboard tile
PATCH/dashboard-tiles/{tileID}ADMIN.SYSTEM_SETTINGSUpdate a dashboard tile
GET/domainsADMIN.DOMAINSList domains
POST/domainsADMIN.DOMAINSCreate a domain
POST/domains/check_emailselfserviceCheck email
DELETE/domains/{domainID}ADMIN.DOMAINSDelete a domain
GET/domains/{domainID}ADMIN.DOMAINSGet one domain
PATCH/domains/{domainID}ADMIN.DOMAINSUpdate a domain
GET/impersonation/activeselfserviceGet active
POST/impersonation/startIMPERSONATE_USERSStart
POST/impersonation/stopselfserviceStop
GET/institution-domainsADMIN.DOMAINSList institution domains
POST/institution-domainsADMIN.DOMAINSCreate a institution domain
DELETE/institution-domains/{domainID}ADMIN.DOMAINSDelete a institution domain
GET/institution-domains/{domainID}ADMIN.DOMAINSGet one institution domain
PATCH/institution-domains/{domainID}ADMIN.DOMAINSUpdate a institution domain
POST/invalidate-cacheADMIN.PERMISSIONSCreate invalidate cache
GET/my-shortcutsselfserviceList my shortcuts
POST/my-shortcutsselfserviceCreate a my shortcut
PUT/my-shortcuts/reorderselfserviceReorder
DELETE/my-shortcuts/{shortcutID}selfserviceDelete a my shortcut
PATCH/my-shortcuts/{shortcutID}selfserviceRename a my shortcut
GET/networksADMIN.NETWORKSGet the role network overview
POST/networksADMIN.NETWORKSCreate a network
GET/networks/testADMIN.NETWORKSTest an address
DELETE/networks/{networkID}ADMIN.NETWORKSDelete a network
PUT/networks/{networkID}ADMIN.NETWORKSReplace a network
GET/permission-nodesADMIN.PERMISSIONSList permission nodes
POST/permission-nodesADMIN.PERMISSIONSCreate a permission node
GET/permission-nodes/treeADMIN.PERMISSIONSGet tree
DELETE/permission-nodes/{nodeID}ADMIN.PERMISSIONSDelete a permission node
GET/permission-nodes/{nodeID}ADMIN.PERMISSIONSGet one permission node
PATCH/permission-nodes/{nodeID}ADMIN.PERMISSIONSUpdate a permission node
GET/permission-nodes/{nodeID}/holdersADMIN.PERMISSIONSList the permission node's holders
GET/permissions/exportADMIN.PERMISSIONS.TRANSFERExport a permission bundle
POST/permissions/import/applyADMIN.PERMISSIONS.TRANSFERApply a bundle (also requires superuser)
POST/permissions/import/previewADMIN.PERMISSIONS.TRANSFERPreview a bundle
GET/role-default-tilesADMIN.ROLESList role default tiles
POST/role-default-tilesADMIN.ROLESCreate a role default tile
DELETE/role-default-tiles/{rdtID}ADMIN.ROLESDelete a role default tile
GET/role-default-tiles/{rdtID}ADMIN.ROLESGet one role default tile
PATCH/role-default-tiles/{rdtID}ADMIN.ROLESUpdate a role default tile
GET/role-permissionsADMIN.PERMISSIONSList role permissions
POST/role-permissionsADMIN.PERMISSIONSCreate a role permission
POST/role-permissions/bulkADMIN.PERMISSIONSCreate bulk
POST/role-permissions/bulk_assignADMIN.PERMISSIONSBulk assign
DELETE/role-permissions/{rpID}ADMIN.PERMISSIONSDelete a role permission
GET/role-permissions/{rpID}ADMIN.PERMISSIONSGet one role permission
PATCH/role-permissions/{rpID}ADMIN.PERMISSIONSUpdate a role permission
GET/rolesADMIN.ROLESList roles
POST/rolesADMIN.ROLESCreate a role
DELETE/roles/{roleID}ADMIN.ROLESDelete a role
GET/roles/{roleID}ADMIN.ROLESGet one role
PATCH/roles/{roleID}ADMIN.ROLESUpdate a role
GET/roles/{roleID}/menu-shortcutsADMIN.ROLESList the role's menu shortcuts
PUT/roles/{roleID}/menu-shortcutsADMIN.ROLESUpdate the role's menu shortcuts
PUT/roles/{roleID}/network-rulesADMIN.NETWORKSReplace the role's network rules
DELETE/roles/{roleID}/permissionsADMIN.PERMISSIONSClear the role's permissions
GET/roles/{roleID}/permissionsADMIN.ROLESList the role's permissions
POST/switch-roleselfserviceSwitch role
GET/user-dashboard-preferencesselfserviceList user dashboard preferences
POST/user-dashboard-preferencesselfserviceCreate a user dashboard preference
DELETE/user-dashboard-preferences/{prefID}selfserviceDelete a user dashboard preference
GET/user-dashboard-preferences/{prefID}selfserviceGet one user dashboard preference
PATCH/user-dashboard-preferences/{prefID}selfserviceUpdate a user dashboard preference
GET/user-menuselfserviceGet user menu
GET/user-permissionsselfserviceList user permissions
GET/user-rolesADMIN.USER_ROLESList user roles
POST/user-rolesADMIN.USER_ROLESCreate a user role
GET/user-roles/assignable_usersADMIN.USER_ROLESList assignable users
GET/user-roles/can_impersonateIMPERSONATE_USERSGet can impersonate
GET/user-roles/current_impersonationselfserviceGet current impersonation
POST/user-roles/derive_all_rolesADMIN.USER_ROLESDerive all roles
POST/user-roles/derive_rolesselfserviceDerive roles
GET/user-roles/my_rolesselfserviceList the caller's roles
POST/user-roles/start_impersonationIMPERSONATE_USERSStart impersonation
POST/user-roles/stop_impersonationselfserviceStop impersonation
POST/user-roles/switch_roleselfserviceSwitch role
DELETE/user-roles/{urID}ADMIN.USER_ROLESDelete a user role
GET/user-roles/{urID}ADMIN.USER_ROLESGet one user role
PATCH/user-roles/{urID}ADMIN.USER_ROLESUpdate a user role

Student Information System Documentation