Pointeur Backend – Frontend API (2.0.0)

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.

Authentication

Login, logout, token refresh, and password management

Authenticate a user

Validates credentials and returns a JWT access token together with user information. Refresh-token and device-id cookies are set automatically.

Request Body schema: application/json
required
username
required
string non-empty
password
required
string non-empty

Responses

Request samples

Content type
application/json
{
  • "username": "string",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "access_token": "string",
  • "user": {
    }
}

Get the current authenticated user

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "username": "string",
  • "role": "string"
}

Refresh the access token

Uses the refresh_token and device_id cookies to issue a new access token. The refresh-token cookie is rotated.

cookie Parameters
device_id
string
refresh_token
string

Responses

Response samples

Content type
application/json
{
  • "access_token": "string",
  • "user": {
    }
}

Log out the current session

Clears the refresh-token cookie.

cookie Parameters
device_id
string
refresh_token
string

Responses

Change the current user's password

Authorizations:
bearerAuth
Request Body schema: application/json
required
old
required
string non-empty
new
required
string non-empty
confirm
required
string non-empty

Must match new

Responses

Request samples

Content type
application/json
{
  • "old": "string",
  • "new": "string",
  • "confirm": "string"
}

Response samples

Content type
application/json
"string"

Users

User account management (SuperAdmin only)

List all users

Returns all users except the SuperAdmin account. Requires SuperAdmin role.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new admin user

Creates a new user with a randomly generated password. Requires SuperAdmin role.

Authorizations:
bearerAuth
Request Body schema: application/json
required
username
required
string^[a-zA-Z0-9_\-]{1,50}$

Responses

Request samples

Content type
application/json
{
  • "username": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "password": "string",
  • "info": {
    }
}

Get a user by ID

Authorizations:
bearerAuth
path Parameters
userId
required
integer <int64>

User identifier

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "info": {
    }
}

Delete a user

Authorizations:
bearerAuth
path Parameters
userId
required
integer <int64>

User identifier

Responses

Response samples

Content type
application/json
{
  • "timestamp": "2019-08-24T14:15:22Z",
  • "message": "string",
  • "details": "string",
  • "errorCode": "string"
}

API Keys

API key management for the integration surface (SuperAdmin only)

List all API keys

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new API key

The raw token is returned only once in this response. Store it securely — it cannot be retrieved again.

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
required
string [ 3 .. 50 ] characters

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "prefix": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "rawToken": "string"
}

Revoke an API key

Authorizations:
bearerAuth
path Parameters
apiKeyId
required
integer <int64>

API key identifier

Responses

Response samples

Content type
application/json
{
  • "timestamp": "2019-08-24T14:15:22Z",
  • "message": "string",
  • "details": "string",
  • "errorCode": "string"
}

Levels

Academic levels

List all levels with their groups

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a new level

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
required
string non-empty
abbreviation
required
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "abbreviation": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string"
}

Get a level with its groups

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

Responses

Response samples

Content type
application/json
{
  • "level": {
    },
  • "groups": [
    ]
}

Update a level

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

Request Body schema: application/json
required
name
required
string non-empty
abbreviation
required
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "abbreviation": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string"
}

Delete a level

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

Responses

Groups

Student groups within levels

List groups in a level

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a group in a level

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

Request Body schema: application/json
required
name
required
string
type
required
string
classe
required
string
size
required
integer >= 1

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "string",
  • "classe": "string",
  • "size": 1
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "type": "string",
  • "classe": "string",
  • "size": 0,
  • "level": {
    }
}

Get a group

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

groupId
required
integer <int64>

Group identifier

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "type": "string",
  • "classe": "string",
  • "size": 0,
  • "level": {
    }
}

Update a group

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

groupId
required
integer <int64>

Group identifier

Request Body schema: application/json
required
name
required
string
type
required
string
classe
required
string
size
required
integer >= 1

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "string",
  • "classe": "string",
  • "size": 1
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "type": "string",
  • "classe": "string",
  • "size": 0,
  • "level": {
    }
}

Delete a group

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

groupId
required
integer <int64>

Group identifier

Responses

Teachers

Teacher registry

List all teachers

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Register a new teacher

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
required
string
abbreviation
required
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "abbreviation": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string"
}

Get a teacher

Authorizations:
bearerAuth
path Parameters
teacherId
required
integer <int64>

Teacher identifier

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string"
}

Update a teacher

Authorizations:
bearerAuth
path Parameters
teacherId
required
integer <int64>

Teacher identifier

Request Body schema: application/json
required
name
required
string
abbreviation
required
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "abbreviation": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string"
}

Delete a teacher

Authorizations:
bearerAuth
path Parameters
teacherId
required
integer <int64>

Teacher identifier

Responses

Teaching Units

Teaching unit (subject) registry

List all teaching units

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a teaching unit

Authorizations:
bearerAuth
Request Body schema: application/json
required
abbreviation
required
string
name
required
string
levelId
integer <int64>

Optional level association

Responses

Request samples

Content type
application/json
{
  • "abbreviation": "string",
  • "name": "string",
  • "levelId": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "abbreviation": "string",
  • "name": "string",
  • "level": {
    }
}

Get a teaching unit

Authorizations:
bearerAuth
path Parameters
unitId
required
integer <int64>

Teaching unit identifier

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "abbreviation": "string",
  • "name": "string",
  • "level": {
    }
}

Update a teaching unit

Authorizations:
bearerAuth
path Parameters
unitId
required
integer <int64>

Teaching unit identifier

Request Body schema: application/json
required
abbreviation
string
name
string
levelId
integer <int64>

Optional level association

Responses

Request samples

Content type
application/json
{
  • "abbreviation": "string",
  • "name": "string",
  • "levelId": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "abbreviation": "string",
  • "name": "string",
  • "level": {
    }
}

Delete a teaching unit

Authorizations:
bearerAuth
path Parameters
unitId
required
integer <int64>

Teaching unit identifier

Responses

List teaching units for a level

Authorizations:
bearerAuth
path Parameters
levelId
required
integer <int64>

Level identifier

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Rooms

Room registry and availability

List all rooms

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a room

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
required
string
abbreviation
required
string
size
required
integer >= 1

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "abbreviation": "string",
  • "size": 1
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string",
  • "size": 0
}

Get a room

Authorizations:
bearerAuth
path Parameters
roomId
required
integer <int64>

Room identifier

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string",
  • "size": 0
}

Update a room

Authorizations:
bearerAuth
path Parameters
roomId
required
integer <int64>

Room identifier

Request Body schema: application/json
required
name
required
string
abbreviation
required
string
size
required
integer >= 1

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "abbreviation": "string",
  • "size": 1
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "abbreviation": "string",
  • "size": 0
}

Delete a room

Authorizations:
bearerAuth
path Parameters
roomId
required
integer <int64>

Room identifier

Responses

List available rooms in a time range

Returns rooms that are unoccupied between the given start and end times.

Authorizations:
bearerAuth
query Parameters
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)

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Schedule

Schedule item management

Query the schedule

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.

Authorizations:
bearerAuth
query Parameters
startDate
required
string <date>
endDate
required
string <date>
levelId
integer <int64>
groupId
integer <int64>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a schedule item

Authorizations:
bearerAuth
Request Body schema: application/json
required
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>

Responses

Request samples

Content type
application/json
{
  • "groupIds": [
    ],
  • "teacherId": 0,
  • "teachingUnitId": 0,
  • "roomId": 0,
  • "startTime": "2019-08-24T14:15:22Z",
  • "endTime": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "groups": [
    ],
  • "teacher": {
    },
  • "teachingUnit": {
    },
  • "room": {
    },
  • "startTime": "2019-08-24T14:15:22Z",
  • "endTime": "2019-08-24T14:15:22Z"
}

Create multiple schedule items

Processes each item independently. Successfully created items and failed items (with reasons) are returned together.

Authorizations:
bearerAuth
Request Body schema: application/json
required
Array
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>

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
{
  • "successItems": [
    ],
  • "failedItems": [
    ]
}

Get a schedule item

Authorizations:
bearerAuth
path Parameters
scheduleItemId
required
integer <int64>

Schedule item identifier

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "groups": [
    ],
  • "teacher": {
    },
  • "teachingUnit": {
    },
  • "room": {
    },
  • "startTime": "2019-08-24T14:15:22Z",
  • "endTime": "2019-08-24T14:15:22Z"
}

Update a schedule item

Authorizations:
bearerAuth
path Parameters
scheduleItemId
required
integer <int64>

Schedule item identifier

Request Body schema: application/json
required
groupIds
Array of integers <int64> [ items <int64 > ]
teacherId
integer <int64>
teachingUnitId
integer <int64>
roomId
integer <int64>
startTime
string <date-time>
endTime
string <date-time>

Responses

Request samples

Content type
application/json
{
  • "groupIds": [
    ],
  • "teacherId": 0,
  • "teachingUnitId": 0,
  • "roomId": 0,
  • "startTime": "2019-08-24T14:15:22Z",
  • "endTime": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "groups": [
    ],
  • "teacher": {
    },
  • "teachingUnit": {
    },
  • "room": {
    },
  • "startTime": "2019-08-24T14:15:22Z",
  • "endTime": "2019-08-24T14:15:22Z"
}

Delete a schedule item

Authorizations:
bearerAuth
path Parameters
scheduleItemId
required
integer <int64>

Schedule item identifier

Responses

Import

Bulk data import

Import data from files

Accepts one or more files together with a metadata mapping that describes how columns map to entity fields.

Authorizations:
bearerAuth
query Parameters
ignoreConflicts
boolean
Default: true

Whether to skip rows that conflict with existing data

Request Body schema: multipart/form-data
required
required
object (ImportMapping)

Maps file names to their table mappings. Structure: { "<filename>": { "<sheetOrTable>": TableMapping } }

files
required
Array of strings <binary> [ items <binary > ]

Responses

Response samples

Content type
application/json
{
  • "totalRows": 0,
  • "successfulRows": 0,
  • "failedRows": 0,
  • "errors": [
    ],
  • "skippedFiles": [
    ],
  • "entitySummary": {
    }
}

Export

Data export

Export entities

Exports the requested entities in the specified format. The response is a downloadable file (Excel, ZIP of CSVs, or JSON).

Authorizations:
bearerAuth
query Parameters
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

Responses

Response samples

Content type
No sample