Download OpenAPI specification:
REST API for the Pointeur scheduling application. This specification covers the frontend-facing surface. All endpoints require JWT Bearer authentication unless stated otherwise.
Validates credentials and returns a JWT access token together with user information. Refresh-token and device-id cookies are set automatically.
| username required | string non-empty |
| password required | string non-empty |
{- "username": "string",
- "password": "string"
}{- "access_token": "string",
- "user": {
- "username": "string",
- "role": "string"
}
}Uses the refresh_token and device_id cookies to issue a new access
token. The refresh-token cookie is rotated.
| device_id | string |
| refresh_token | string |
{- "access_token": "string",
- "user": {
- "username": "string",
- "role": "string"
}
}| old required | string non-empty |
| new required | string non-empty |
| confirm required | string non-empty Must match |
{- "old": "string",
- "new": "string",
- "confirm": "string"
}"string"Creates a new user with a randomly generated password. Requires SuperAdmin role.
| username required | string^[a-zA-Z0-9_\-]{1,50}$ |
{- "username": "string"
}{- "id": 0,
- "password": "string",
- "info": {
- "username": "string",
- "role": "string"
}
}The raw token is returned only once in this response. Store it securely — it cannot be retrieved again.
| name required | string [ 3 .. 50 ] characters |
{- "name": "string"
}{- "id": 0,
- "name": "string",
- "prefix": "string",
- "createdAt": "2019-08-24T14:15:22Z",
- "rawToken": "string"
}[- {
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}, - "groups": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
]
}
]| name required | string non-empty |
| abbreviation required | string |
{- "name": "string",
- "abbreviation": "string"
}{- "id": 0,
- "name": "string",
- "abbreviation": "string"
}| levelId required | integer <int64> Level identifier |
{- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}, - "groups": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
]
}| levelId required | integer <int64> Level identifier |
| name required | string non-empty |
| abbreviation required | string |
{- "name": "string",
- "abbreviation": "string"
}{- "id": 0,
- "name": "string",
- "abbreviation": "string"
}| levelId required | integer <int64> Level identifier |
[- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
]| levelId required | integer <int64> Level identifier |
| name required | string |
| type required | string |
| classe required | string |
| size required | integer >= 1 |
{- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 1
}{- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}| levelId required | integer <int64> Level identifier |
| groupId required | integer <int64> Group identifier |
{- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}| levelId required | integer <int64> Level identifier |
| groupId required | integer <int64> Group identifier |
| name required | string |
| type required | string |
| classe required | string |
| size required | integer >= 1 |
{- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 1
}{- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}| name required | string |
| abbreviation required | string |
{- "name": "string",
- "abbreviation": "string"
}{- "id": 0,
- "name": "string",
- "abbreviation": "string"
}| teacherId required | integer <int64> Teacher identifier |
| name required | string |
| abbreviation required | string |
{- "name": "string",
- "abbreviation": "string"
}{- "id": 0,
- "name": "string",
- "abbreviation": "string"
}| abbreviation required | string |
| name required | string |
| levelId | integer <int64> Optional level association |
{- "abbreviation": "string",
- "name": "string",
- "levelId": 0
}{- "id": 0,
- "abbreviation": "string",
- "name": "string",
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}| unitId required | integer <int64> Teaching unit identifier |
| abbreviation | string |
| name | string |
| levelId | integer <int64> Optional level association |
{- "abbreviation": "string",
- "name": "string",
- "levelId": 0
}{- "id": 0,
- "abbreviation": "string",
- "name": "string",
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}| name required | string |
| abbreviation required | string |
| size required | integer >= 1 |
{- "name": "string",
- "abbreviation": "string",
- "size": 1
}{- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}| roomId required | integer <int64> Room identifier |
| name required | string |
| abbreviation required | string |
| size required | integer >= 1 |
{- "name": "string",
- "abbreviation": "string",
- "size": 1
}{- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}Returns rooms that are unoccupied between the given start and end times.
| startTime required | string <date-time> Start date-time (ISO 8601) |
| endTime required | string <date-time> End date-time (ISO 8601) |
| size | integer >= 1 Default: 1 Minimum room capacity (defaults to 1) |
[- {
- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}
]Returns schedule items in the given date range. Optionally filter by
level and/or group. If groupId is supplied without levelId, only
that group's timetable is returned.
| startDate required | string <date> |
| endDate required | string <date> |
| levelId | integer <int64> |
| groupId | integer <int64> |
[- {
- "id": 0,
- "groups": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
], - "teacher": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}, - "teachingUnit": {
- "id": 0,
- "abbreviation": "string",
- "name": "string",
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}, - "room": {
- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}, - "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}
]| groupIds required | Array of integers <int64> [ items <int64 > ] |
| teacherId required | integer <int64> |
| teachingUnitId required | integer <int64> |
| roomId required | integer <int64> |
| startTime required | string <date-time> |
| endTime required | string <date-time> |
{- "groupIds": [
- 0
], - "teacherId": 0,
- "teachingUnitId": 0,
- "roomId": 0,
- "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}{- "id": 0,
- "groups": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
], - "teacher": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}, - "teachingUnit": {
- "id": 0,
- "abbreviation": "string",
- "name": "string",
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}, - "room": {
- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}, - "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}Processes each item independently. Successfully created items and failed items (with reasons) are returned together.
| groupIds required | Array of integers <int64> [ items <int64 > ] |
| teacherId required | integer <int64> |
| teachingUnitId required | integer <int64> |
| roomId required | integer <int64> |
| startTime required | string <date-time> |
| endTime required | string <date-time> |
[- {
- "groupIds": [
- 0
], - "teacherId": 0,
- "teachingUnitId": 0,
- "roomId": 0,
- "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}
]{- "successItems": [
- {
- "id": 0,
- "groups": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
], - "teacher": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}, - "teachingUnit": {
- "id": 0,
- "abbreviation": "string",
- "name": "string",
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}, - "room": {
- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}, - "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}
], - "failedItems": [
- {
- "item": {
- "groupIds": [
- 0
], - "teacherId": 0,
- "teachingUnitId": 0,
- "roomId": 0,
- "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}, - "reason": "string"
}
]
}| scheduleItemId required | integer <int64> Schedule item identifier |
{- "id": 0,
- "groups": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
], - "teacher": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}, - "teachingUnit": {
- "id": 0,
- "abbreviation": "string",
- "name": "string",
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}, - "room": {
- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}, - "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}| scheduleItemId required | integer <int64> Schedule item identifier |
| groupIds | Array of integers <int64> [ items <int64 > ] |
| teacherId | integer <int64> |
| teachingUnitId | integer <int64> |
| roomId | integer <int64> |
| startTime | string <date-time> |
| endTime | string <date-time> |
{- "groupIds": [
- 0
], - "teacherId": 0,
- "teachingUnitId": 0,
- "roomId": 0,
- "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}{- "id": 0,
- "groups": [
- {
- "id": 0,
- "name": "string",
- "type": "string",
- "classe": "string",
- "size": 0,
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}
], - "teacher": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}, - "teachingUnit": {
- "id": 0,
- "abbreviation": "string",
- "name": "string",
- "level": {
- "id": 0,
- "name": "string",
- "abbreviation": "string"
}
}, - "room": {
- "id": 0,
- "name": "string",
- "abbreviation": "string",
- "size": 0
}, - "startTime": "2019-08-24T14:15:22Z",
- "endTime": "2019-08-24T14:15:22Z"
}Accepts one or more files together with a metadata mapping that describes how columns map to entity fields.
| ignoreConflicts | boolean Default: true Whether to skip rows that conflict with existing data |
required | object (ImportMapping) Maps file names to their table mappings. Structure:
|
| files required | Array of strings <binary> [ items <binary > ] |
{- "totalRows": 0,
- "successfulRows": 0,
- "failedRows": 0,
- "errors": [
- {
- "entityType": "string",
- "rowIndex": 0,
- "errorMessage": "string",
- "invalidValue": "string"
}
], - "skippedFiles": [
- "string"
], - "entitySummary": {
- "property1": 0,
- "property2": 0
}
}Exports the requested entities in the specified format. The response is a downloadable file (Excel, ZIP of CSVs, or JSON).
| entitiesList required | Array of strings Items Enum: "room" "teacher" "teaching_unit" "group" "level" Entity types to export (e.g. room, teacher, level, group, teaching_unit) |
| format required | string Enum: "excel" "zip_csv" "json" Output format |