1. API Purpose
The Academic Calendar API provides a single source of truth for the school’s annual events. It helps parents and staff stay aligned on important dates, reducing scheduling conflicts and missed milestones.2. Endpoint Definition
| Method | Route | Auth | Description |
|---|---|---|---|
| GET | /parent-app/academic-events | 🔐 JWT | View upcoming academic events |
| GET | /teachers-app/academic-calendar | 🔐 JWT | Staff: View all scheduled events |
| POST | /teachers-app/academic-calendar | 🔐 JWT | Staff: Create a new academic event |
| PUT | /teachers-app/academic-calendar/:id | 🔐 JWT | Staff: Update event details |
| DELETE | /teachers-app/academic-calendar/:id | 🔐 JWT | Staff: Soft-delete an event |
| GET | /web-app/academic-calendar | 🔐 JWT | Admin: Comprehensive event list |
| POST | /web-app/academic-calendar | 🔐 JWT | Admin: Create academic event |
| POST | /web-app/bulk-import-academic-calendar-json | 🔐 JWT | Admin: Bulk import from JSON |
3. Authentication Flow
Standard Bearer JWT validation. Access is school-specific (skole_id). Staff require specific RBAC permission to manage the calendar.
4. Request Structure
GET /parent-app/academic-events
Headers:GET /web-app/academic-calendar
Query Parameters:| Field | Type | Required | Description |
|---|---|---|---|
| skole_id | string | Yes | School identifier. |
| event_type | string | No | Filter by type (holiday/event). |
| from_date | string | No | Start date filter (YYYY-MM-DD). |
| to_date | string | No | End date filter (YYYY-MM-DD). |
POST /web-app/academic-calendar
Request Body:PUT /teachers-app/academic-calendar/:id
Request Body:DELETE /teachers-app/academic-calendar/:id
URL Parameters:| Field | Type | Description |
|---|---|---|
| id | number | ID of the event to delete. |
POST /web-app/bulk-import-academic-calendar-json
Request Body:5. Response Structure
Success: Parent Event View (200 OK)
Route:GET /parent-app/academic-events
Success: Staff Calendar List (200 OK)
Route:GET /teachers-app/academic-calendar
Success: Event Created (201 Created)
Route:POST /{module}/academic-calendar
Success: Event Updated (200 OK)
Route:PUT /teachers-app/academic-calendar/:id
Success: Event Deleted (200 OK)
Route:DELETE /teachers-app/academic-calendar/:id
Success: Admin Event Dashboard (200 OK)
Route:GET /web-app/academic-calendar
Success: Bulk Import JSON (200 OK)
Route:POST /web-app/bulk-import-academic-calendar-json
6. Error Responses
| HTTP Code | Description |
|---|---|
| 404 | Event not found |
| 400 | Date format error or missing required fields |
7. Security Considerations
- Scoping: Enforced via
skole_id. - RBAC: Only staff with
calendar.managepermission can create or edit events.
8. Token Usage
9. Token Refresh
N/A.10. Logout / Session Invalidation
N/A.11. Usage Example (cURL)
12. Notes / Special Behaviors
- Multi-day Events: If
event_to_dateis different fromevent_from_date, the mobile app displays the event as a span across the calendar. - Color Coding: Similar to the Noticeboard, event types trigger specific UI highlights (e.g., Red for
exam, Green forholiday).