KLASSCI/ Docs

API Reference — KLASSCI LMS

Full catalogue of the public /api/lms/* endpoints for integrating an external LMS with KLASSCI.

This reference documents the public /api/lms/* endpoints exposed by KLASSCI so an external LMS (Learning Management System) can connect to a school, read its academic structure, and sync courses, attendance, and grades.

The internal /api/cli/* and /api/admin/* endpoints are never documented publicly. This page only lists the stable contractual surface meant for integrators.

Conventions

  • Base URLhttps://<tenant>.klassci.com/api/lms (e.g., https://esbtp-abidjan.klassci.com/api/lms)
  • Format — JSON in and out. Content-Type: application/json is required on POST/PUT requests.
  • Auth — most endpoints require a Sanctum bearer token (Authorization: Bearer {token}). The discovery endpoints are public, rate-limited.
  • Default rate limitapi (60 req/min/IP). Discovery endpoints use lms-discovery (10 req/min/IP).
  • Errors — standard HTTP codes. 401 (invalid or expired token), 403 (insufficient rights), 404 (resource not found), 422 (validation), 429 (rate limit), 500 (server error).

Contents


Multi-tenant discovery

Public endpoints that let an LMS client discover which KLASSCI institution it's connecting to. No token required. Strict rate limiting to prevent enumeration.

GET /api/lms/tenant-info

Public information about the institution.

Returns the institution's name, tenant code, public logos, and timezone. Useful for branding the sign-in screen of a client app.

Response

{
  "tenant_code": "esbtp-abidjan",
  "name": "ESBTP Abidjan",
  "logo_url": "https://...",
  "timezone": "Africa/Abidjan"
}

Rate limit api (60 req/min/IP).

POST /api/lms/auth/check-user

Check that a user exists.

Verifies the presence of a username/email on the KLASSCI side without revealing the role or any other sensitive information. Minimal response: exists: true|false.

ParameterInTypeRequiredDescription
identifierbodystringyesUsername or email to check

Response

{ "exists": true }

Rate limit lms-discovery (10 req/min/IP). No role or status field is returned.

POST /api/lms/auth/check-availability

Tenant health check.

Verifies that the KLASSCI tenant is reachable and operational. Returns the current academic year and the status of the enabled modules.

Response

{
  "available": true,
  "current_year": "2025-2026",
  "modules": ["..."]
}

Rate limit lms-discovery.

GET /api/lms/auth/documentation

Machine-readable reference document.

Returns a JSON document describing the available endpoints. Useful for generating a typed client dynamically.


Authentication

Standard Sanctum flow. Get a bearer token via login, then use the Authorization: Bearer {token} header on every protected request.

POST /api/lms/auth/login

Authenticate a user and issue a token.

Accepts an identifier (username or email) and a password. On success, returns a Sanctum token to use on protected routes. The token doesn't expire until it's revoked via /logout.

ParameterInTypeRequiredDescription
identifierbodystringyesUsername or email
passwordbodystringyesPlaintext password (transmitted over HTTPS only)
device_namebodystringnoOptional name to identify the device in personal_access_tokens

Response

{
  "token": "1|abc...xyz",
  "user": { "id": 12, "name": "...", "role": "enseignant" }
}

GET /api/lms/auth/me

Profile of the authenticated user. Auth: Bearer.

Returns the account info tied to the token. Useful for confirming the token is still valid and reading the user's role.

GET /api/lms/auth/check

Token validity probe. Auth: Bearer.

Lightweight health check: returns 200 if the token is valid, 401 otherwise.

POST /api/lms/auth/logout

Revoke the current token. Auth: Bearer.

Deletes the token used in the request. Other tokens for the same user remain active.

POST /api/lms/auth/logout-all

Revoke every token for the user. Auth: Bearer.

Deletes all Sanctum tokens for the account. Useful in case of compromise or password change.


Academic structure

Read-only. Filières, study levels, classes, and courses for the current academic year. Auth: Bearer.

GET /api/lms/structure

Full organisational overview.

Returns the full tree: filières → levels → classes for the current year. Useful for bootstrapping a navigation menu on the client.

GET /api/lms/filieres

List of filières.

Returns every active filière of the institution with its code, academic system (BTS/LMD), and tronc-commun flag.

GET /api/lms/niveaux-etudes

List of study levels.

Returns every study level (BTS1, BTS2, L1, L2, L3, M1, M2) with its parent cycle.

GET /api/lms/matieres

Courses accessible to the user.

Returns courses filtered by role: a faculty member sees only their courses, a student only those in their class, a coordinator only those in their filière. For LMD, includes the UE attachment.

ParameterInTypeRequiredDescription
classe_idqueryintnoFilter by class (subject to permissions)

GET /api/lms/matieres/{id}

Course detail.

Returns the coefficient, hours volume, course cycle, and the list of assessments scheduled for the current year.

GET /api/lms/classes

Accessible classes.

Returns classes filtered by role. Includes the count of enrolled students (only enrollments at Active status, i.e. those that have reached the final workflow step).

GET /api/lms/classes/{id}

Class detail.

Returns the class's properties, real headcount, remaining seats, courses, and schedule.

GET /api/lms/classes/{id}/etudiants

Students enrolled in a class.

Returns only students whose enrollment is Active (workflow validated). Enrollments still at Prospect or In review stages are never exposed.

The caller must have read permission on the target class (checked via Policy).

GET /api/lms/enseignants

Active faculty members.

Returns faculty with their name, matricule, and the courses they teach. Phone number and email are returned only to administrators.


Schedule and assessments

Read-only. Class schedule, course sessions, and scheduled assessments. Auth: Bearer.

GET /api/lms/emploi-temps

Class schedule filtered by role.

For a student, returns their class's sessions. For a faculty member, their sessions. For a coordinator, those of their filière. Format compatible with iCalendar (date, start/end time, room, course).

ParameterInTypeRequiredDescription
date_debutquerydatenoLower bound (ISO 8601)
date_finquerydatenoUpper bound (ISO 8601)

GET /api/lms/evaluations

Scheduled assessments.

Returns upcoming assessments (homework, midterm, final exam) accessible to the user. Includes date, course, coefficient, and type.

GET /api/lms/me/dashboard

Student dashboard (student role only).

Returns a personalized summary: upcoming sessions, latest grades, attendance rate, tuition balance, and any alerts.

GET /api/lms/me/teacher-dashboard

Faculty dashboard (faculty role only).

Returns faculty KPIs: upcoming sessions to sign in, assessments to grade, classes taught, average attendance rate across the courses delivered.


Video conferencing (LMS → KLASSCI sync)

Endpoints that let an external LMS manage video rooms and report video attendance back into KLASSCI. Auth: Bearer.

GET /api/lms/seances/upcoming

Upcoming sessions eligible for a video room.

Returns course sessions starting soon for which the LMS should create a video room.

GET /api/lms/seances/{id}/participants

Expected participants for a session.

Returns the list of students enrolled in the session's class (validated enrollments only).

POST /api/lms/seances/{id}/validate-participant

Validate a participant's connection.

The LMS calls this when a student joins the video room. KLASSCI checks that they belong to the class and returns ok/refused.

ParameterInTypeRequiredDescription
user_idbodyintyesKLASSCI user ID

POST /api/lms/attendances/from-video-session

Sync attendance from a video session.

At the end of a video session, the LMS pushes the actual participant list with each one's connection time. KLASSCI creates the matching attendance records.

ParameterInTypeRequiredDescription
seance_idbodyintyesKLASSCI session identifier
participantsbodyarrayyesArray of { user_id, joined_at, left_at } objects

Write endpoints

Endpoints that let the LMS write into KLASSCI: grades for assessments taken online, attendance for online courses, course-session status updates. Auth: Bearer.

POST /api/lms/evaluations/{id}/notes

Submit grades for an assessment.

The LMS pushes the grades obtained on an assessment taken online. KLASSCI updates existing grades or creates them. Permissions are enforced: only the LMS authenticated as the course's faculty can write.

ParameterInTypeRequiredDescription
notesbodyarrayyesArray of { etudiant_id, note, commentaire } objects

Idempotent: sending the same grade twice doesn't create a duplicate.

POST /api/lms/cours/{id}/presences

Record attendance for a course.

Creates or updates attendance records for an online course session. Reserved to faculty or administrators authorized on the session.

PUT /api/lms/cours/{id}/statut

Update a course's status.

Marks a session as terminee (with the actual end time), annulee, or reportee. Updates the completed-hours tracker.


Notifications

Sending reminders and reading notification preferences. Auth: Bearer.

POST /api/lms/notifications/send-session-reminder

Send a session reminder.

Triggers an email/notification to the participants of an upcoming session. Used by the LMS to automate reminders before an online class.

GET /api/lms/notifications/preferences/{userId}

Notification preferences for a user.

Returns the detailed notification preferences (email/SMS/push) for the target user. Accessible only if the caller has permission to manage that user.


Client libraries

No official library is shipped at this time. The machine-readable document available at GET /api/lms/auth/documentation makes it possible to generate a typed client in any language. For integration questions, write to contact@klassci.com.