- name
- bilimclass
- description
- Access BilimClass school platform (Kazakhstan) for schedule, homework, grades, and diary via API. Triggers on schedule/raspisanie/расписание, homework/domashka/домашка/домашнее задание, grades/ocenki/оценки, diary/dnevnik/дневник, какие уроки завтра/сегодня, четвертные оценки, годовые оценки, and any school-related queries for Kazakhstan students. NOT for general education or non-BilimClass platforms.
- metadata
- emoji
- 📚
- requires
- file
- ~/.openclaw/.env.json
BilimClass — School Schedule, Homework & Grades
Access BilimClass API for Kazakhstan school data. Supports schedule, homework, and quarterly/yearly grades.
Setup
Two tokens required in ~/.openclaw/.env.json:
bilimclass.token— main JWT fromlocalStorage.token(RS256, valid ~1 year). Used for schedule and subject names.bilimclass.journalToken— journal JWT from API headers on grades page (HS512, expires ~2 weeks). Used for grades only.
Both expire — token annually, journalToken biweekly. To refresh journalToken:
- Open bilimclass.kz → grades section
- F12 → Network → find request to
journal-service.bilimclass.kz/diary - Copy the
Authorization: Bearer ...header value
To refresh main token: browser console → localStorage.token
Required config fields in .env.json:
{
"bilimclass": {
"token": "<YOUR_TOKEN>",
"journalToken": "<YOUR_JOURNAL_TOKEN>",
"schoolId": "<YOUR_SCHOOL_ID>",
"eduYear": "<EDUCATION_YEAR>",
"userId": "<YOUR_USER_ID>",
"studentSchoolUuid": "<YOUR_STUDENT_UUID>",
"studentGroups": [
{"uuid": "<UUID>", "name": "Group name"},
{"uuid": "<UUID>", "name": "Group name"}
]
}
}studentGroups — all student groups for the user. The first one should be the current group for grades.Quick Usage
python3 <skill_dir>/scripts/bilimclass.py schedule [DD.MM.YYYY]
python3 <skill_dir>/scripts/bilimclass.py diary [YYYY-MM-DD]
python3 <skill_dir>/scripts/bilimclass.py week [DD.MM.YYYY] # Monday of that week
python3 <skill_dir>/scripts/bilimclass.py grades <YYYY-MM-DD> <YYYY-MM-DD>
python3 <skill_dir>/scripts/bilimclass.py quarter-report [Q3|Q4]
python3 <skill_dir>/scripts/bilimclass.py today
python3 <skill_dir>/scripts/bilimclass.py tomorrowAll output is JSON — format it nicely for the user.
Schedule Format
Each day contains:
date_label— display date (e.g. "06 АПРЕЛЯ")schedule[]— lessons with:
- subject.label — subject name - subject.subjectId — integer ID (used for grade mapping) - teacher — teacher full name - homework.body — homework text - time.label — time range (e.g. "08:00 - 08:40")
Diaries (Homework Detail)
Multiple student groups. The script iterates all studentGroups — it handles dedup automatically.
Grades
Grades use a separate service (journal-service.bilimclass.kz) with the journalToken.
API Endpoints
- Schedule + subject names:
https://api.bilimclass.kz/api/v4/os/clientoffice/schedule
- Auth: Bearer {token} (main JWT) - Headers: X-School-Id, X-Localization: ru
- Grades:
https://journal-service.bilimclass.kz/diary
- Auth: Bearer {journalToken} (journal JWT) - Headers: X-School-Id, X-Localization: ru, external: 1
How grades work
- Query
/diarywithschoolId,eduYear,userId,studentGroupUuid,date(ISO 8601) - Response is
{"data": {<scheduleUuid>: {formattedScore, sor, soch, ...}}} - Each of
formattedScore/sor/sochcontains:
- mark — the score (integer) - markMax — maximum (usually 10, sometimes 24 for СОЧ) - subjectId — integer ID for mapping to subject names - date, markType, comment
scheduleUuid(the key) is a UUID, not the same assubjectId- Subject names come from the schedule API — map via
subjectIdfrom lesson data
Grading scale (4th quarter rules)
- 5: ≥ 87%
- 4: ≥ 65%
- 3: ≥ 50%
- 2: < 50%
Quarter date ranges (approximate for 2025-2026)
- Q3: January 8 — March 22
- Q4: March 31 — current date
Notes
- Some subjects may have no grades in a quarter if no assessments have been given yet
- Absent-due-to-illness marks use
markType: "sick"— exclude from percentage calculations - Always use the first
studentGroup(index 0) for current grades - journalToken expires ~every 2 weeks — check
401responses and prompt user to refresh - When reporting grades, sort alphabetically by subject name
- Always show: subject name, %, predicted grade, number of assessments
Notes
- Both APIs use
Bearer <token>style auth but with different tokens - Schedule API uses main token; Grades API uses journalToken
SUBJECT_NAMESdict is populated dynamically from schedule API — if subject name missing, showПредмет #{id}and note the gap