SchoolSoft API Reference
SchoolSoft does not publish an official public API. This documentation is entirely reverse-engineered by observing network traffic from the SchoolSoft web application. It is the foundation on which SchoolSoft+ is built.
Introduction
SchoolSoft's backend is a Java-based web application running at https://sms.schoolsoft.se. It exposes two types of data surfaces:
- REST API - JSON endpoints under
/rest-api/that return structured data (schedule, lunch, subjects, session info). - HTML pages - Legacy JSP pages (e.g. the news feed, staff directory) that SchoolSoft+ scrapes with Cheerio. Responses are ISO-8859-1 encoded and must be decoded to UTF-8.
Base URL
Every request targets a school-specific subdirectory. The school slug appears in the URL path and is stored client-side in the ssp_school cookie after login.
SchoolSoft+ builds a per-school Axios client for every request:
Encoding & Format
REST endpoints return UTF-8 JSON. HTML JSP pages return ISO-8859-1 (Latin-1) encoded HTML. Always request these as arraybuffer and decode with iconv-lite:
Authentication - Login Flow
SchoolSoft uses form-based authentication. Submitting credentials to the Login JSP endpoint returns a HTTP 302 redirect on success (or HTTP 200 with an error page on failure). The session cookies are extracted from the Set-Cookie response headers.
ssp_ (e.g. ssp_jsessionid). They are reconstructed into the original format before forwarding to SchoolSoft.Session Cookies
Every subsequent request to SchoolSoft must include all three cookies in the Cookie request header, in this exact format:
#Cookie values
Cookie breakdown
Session Endpoint
Schedule
Returns all lesson events for a given ISO week number. The endpoint returns an array (or sometimes an object whose values are the lessons). SchoolSoft+ de-duplicates by startDate+endDate key and sorts ascending.
Lunch Menu
News (HTML Scraping)
SchoolSoft does not expose news as a REST endpoint. Instead, news items are embedded in the student start-page HTML. SchoolSoft+ fetches this page and scrapes it with Cheerio.
Subjects
Subject Entities & Teachers
For each subject, SchoolSoft+ fetches three additional endpoints in parallel to enrich the data:
Assignments
Error Handling
SchoolSoft returns non-standard status codes in some cases. SchoolSoft+ normalises these before returning them to the client. Common scenarios:
Status codes observed from SchoolSoft
Rate Limits & Notes
- The school slug is case-sensitive and must exactly match what SchoolSoft expects.
- REST endpoints require the
Accept: application/jsonheader to receive JSON; without it, some endpoints return HTML. - The JSESSIONID expires after a period of inactivity - SchoolSoft+ re-validates on every API call.
- All times returned by SchoolSoft are in the Europe/Stockholm time zone (CET/CEST).