EduMind mobile API
EduMind is a school management system. A company owns its schools and runs on its own database, so two things decide what a call can see: who the token belongs to, and which company the call is aimed at.
Base URL: https://edumind.school. Everything below sits under /api/v1.
Machine-readable spec: https://edumind.school/openapi.json.
Before you start
There is no self-registration and no password. Accounts are created by the school. If the email you hold was never provisioned, every sign-in call will refuse it, and that is the intended answer — do not retry it as if it were a transient failure.
Signing in
Every auth call carries a type of parent or teacher, because one email can
hold both roles and they see different things.
Email code:
POST /api/v1/auth/email/request {"email": "...", "type": "parent"}
POST /api/v1/auth/email/verify {"email": "...", "code": "......", "type": "parent"}
Google or Apple, with a Firebase ID token the client already obtained:
POST /api/v1/auth/social {"id_token": "...", "provider": "google|apple", "type": "parent"}
Either verify call returns a bearer token. It is opaque — not a JWT, so there is
nothing to decode and no JWKS to fetch. Send it as Authorization: Bearer <token>.
Reaching one company
The token works across every company the person belongs to. Which one you are reading is a header:
X-Tenant: <company slug>
Without it, a tenant-scoped route does not resolve. With a slug the person has no membership in, it answers 404 rather than telling you the company exists.
/api/v1/auth/*, /api/v1/devices, and /api/v1/notifications* are central and
need no tenant.
Other headers worth sending
Accept-Language: aroren— decides the language of messages and content.X-App-Version,X-Platform,X-Device-Id— the device registry, and the force-update directive when a client is below the minimum supported version.
What each role may read
- A parent reads only the children linked to them:
/api/v1/parent/childrenand everything under/api/v1/parent/children/{student}/…. - Behavior notes a teacher kept staff only never reach a parent; asking for one answers
404, the same as a note that does not exist. - A portfolio item shared by several children reaches each child's parents without the other children's
names; asking for an item that is not on your child answers
404. - A teacher reads only the sections, Quran groups and students assigned to them,
under
/api/v1/teacher/…. - Fees, invoices, scholarships and staff pay are parent and office data. No teacher endpoint returns them. Do not go looking for one.
Failure modes that mean something
401— the token was revoked, by logout, by account deletion, or by the school. Clear it and sign in again; retrying will not help.403— authenticated, but outside this person's own children or assigned sections.404on a tenant route — either no such record, or one this person may not see. The two are answered the same on purpose.503— maintenance. Wait and retry.
Ending a session
POST /api/v1/auth/logout revokes the token and the device registration
DELETE /api/v1/auth/account deletes the account and revokes everything
DELETE /api/v1/auth/account is not reversible. Never call it to clear a failed
sign-in.
Every endpoint
Generated from the route table this application dispatches, so it cannot describe a route that is not there. Machine-readable: https://edumind.school/openapi.json.
| Method | Path | Token | Tenant |
|---|---|---|---|
| GET | /api/v1/app/status |
no | — |
| DELETE | /api/v1/auth/account |
bearer | — |
| POST | /api/v1/auth/email/request |
no | — |
| POST | /api/v1/auth/email/verify |
no | — |
| POST | /api/v1/auth/logout |
bearer | — |
| GET | /api/v1/auth/me |
bearer | — |
| POST | /api/v1/auth/social |
no | — |
| POST | /api/v1/devices |
bearer | — |
| DELETE | /api/v1/devices |
bearer | — |
| GET | /api/v1/documents/{document} |
no | — |
| GET | /api/v1/homework-files/{attachment} |
no | — |
| GET | /api/v1/locales |
no | — |
| GET | /api/v1/locales/{code} |
no | — |
| GET | /api/v1/notifications |
bearer | — |
| GET | /api/v1/notifications/preferences |
bearer | — |
| PUT | /api/v1/notifications/preferences |
bearer | — |
| POST | /api/v1/notifications/read-all |
bearer | — |
| GET | /api/v1/notifications/unread-count |
bearer | — |
| POST | /api/v1/notifications/{id}/read |
bearer | — |
| GET | /api/v1/parent/announcements |
bearer | X-Tenant |
| GET | /api/v1/parent/announcements/{announcement} |
bearer | X-Tenant |
| GET | /api/v1/parent/children |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/activities |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/activities/catalog |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/activities/{activity} |
bearer | X-Tenant |
| POST | /api/v1/parent/children/{student}/activities/{activity}/consent |
bearer | X-Tenant |
| POST | /api/v1/parent/children/{student}/activities/{activity}/request |
bearer | X-Tenant |
| DELETE | /api/v1/parent/children/{student}/activities/{activity}/waitlist |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/attendance |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/attendance/summary |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/behavior |
bearer | X-Tenant |
| POST | /api/v1/parent/children/{student}/behavior/{note}/acknowledge |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/contacts |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/documents |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/grades |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/homework |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/homework/{homework} |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/invoices |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/invoices/{invoice} |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/justifications |
bearer | X-Tenant |
| POST | /api/v1/parent/children/{student}/justifications |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/library |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/messages |
bearer | X-Tenant |
| POST | /api/v1/parent/children/{student}/messages |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/overview |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/pickups |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/portfolio |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/portfolio/{item} |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/profile |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/quran |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/report |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/report/pdf-link |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/reviews |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/reviews/{review} |
bearer | X-Tenant |
| POST | /api/v1/parent/children/{student}/reviews/{review}/acknowledge |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/reviews/{review}/attachments/{attachment} |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/reviews/{review}/replies |
bearer | X-Tenant |
| POST | /api/v1/parent/children/{student}/reviews/{review}/replies |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/scholarships |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/timeline |
bearer | X-Tenant |
| GET | /api/v1/parent/children/{student}/timetable |
bearer | X-Tenant |
| GET | /api/v1/parent/forms |
bearer | X-Tenant |
| GET | /api/v1/parent/forms/{form} |
bearer | X-Tenant |
| POST | /api/v1/parent/forms/{form}/submissions |
bearer | X-Tenant |
| GET | /api/v1/parent/surveys |
bearer | X-Tenant |
| GET | /api/v1/parent/surveys/{survey} |
bearer | X-Tenant |
| POST | /api/v1/parent/surveys/{survey}/responses |
bearer | X-Tenant |
| POST | /api/v1/parent/sync |
bearer | X-Tenant |
| GET | /api/v1/ping |
no | — |
| GET | /api/v1/portfolio-files/{file} |
no | — |
| GET | /api/v1/report-card/{student} |
no | — |
| GET | /api/v1/teacher/activities |
bearer | X-Tenant |
| POST | /api/v1/teacher/activities/{activity}/requests/{enrollment}/decide |
bearer | X-Tenant |
| GET | /api/v1/teacher/activities/{activity}/roster |
bearer | X-Tenant |
| GET | /api/v1/teacher/activities/{activity}/sessions |
bearer | X-Tenant |
| POST | /api/v1/teacher/activities/{activity}/sessions |
bearer | X-Tenant |
| PATCH | /api/v1/teacher/activity-sessions/{session} |
bearer | X-Tenant |
| PUT | /api/v1/teacher/activity-sessions/{session}/attendance |
bearer | X-Tenant |
| GET | /api/v1/teacher/announcements |
bearer | X-Tenant |
| POST | /api/v1/teacher/announcements |
bearer | X-Tenant |
| GET | /api/v1/teacher/announcements/{announcement} |
bearer | X-Tenant |
| POST | /api/v1/teacher/attendance |
bearer | X-Tenant |
| GET | /api/v1/teacher/behavior/categories |
bearer | X-Tenant |
| POST | /api/v1/teacher/behavior/notes |
bearer | X-Tenant |
| PATCH | /api/v1/teacher/behavior/notes/{note} |
bearer | X-Tenant |
| DELETE | /api/v1/teacher/behavior/notes/{note} |
bearer | X-Tenant |
| GET | /api/v1/teacher/contacts |
bearer | X-Tenant |
| GET | /api/v1/teacher/exams |
bearer | X-Tenant |
| POST | /api/v1/teacher/exams/{exam}/results |
bearer | X-Tenant |
| GET | /api/v1/teacher/exams/{exam}/roster |
bearer | X-Tenant |
| GET | /api/v1/teacher/homework |
bearer | X-Tenant |
| GET | /api/v1/teacher/homework/{homework} |
bearer | X-Tenant |
| POST | /api/v1/teacher/homework/{homework}/attachments |
bearer | X-Tenant |
| DELETE | /api/v1/teacher/homework/{homework}/attachments/{attachment} |
bearer | X-Tenant |
| GET | /api/v1/teacher/me/attendance |
bearer | X-Tenant |
| GET | /api/v1/teacher/me/documents |
bearer | X-Tenant |
| GET | /api/v1/teacher/me/profile |
bearer | X-Tenant |
| GET | /api/v1/teacher/portfolio |
bearer | X-Tenant |
| GET | /api/v1/teacher/portfolio/options |
bearer | X-Tenant |
| GET | /api/v1/teacher/portfolio/{item} |
bearer | X-Tenant |
| POST | /api/v1/teacher/portfolio/{item}/files |
bearer | X-Tenant |
| DELETE | /api/v1/teacher/portfolio/{item}/files/{file} |
bearer | X-Tenant |
| GET | /api/v1/teacher/quran/groups |
bearer | X-Tenant |
| GET | /api/v1/teacher/quran/groups/{group}/roster |
bearer | X-Tenant |
| GET | /api/v1/teacher/quran/history |
bearer | X-Tenant |
| POST | /api/v1/teacher/quran/progress |
bearer | X-Tenant |
| GET | /api/v1/teacher/quran/students/{student}/progress |
bearer | X-Tenant |
| GET | /api/v1/teacher/quran/surahs |
bearer | X-Tenant |
| GET | /api/v1/teacher/review-templates |
bearer | X-Tenant |
| GET | /api/v1/teacher/review-templates/{template}/eligible-students |
bearer | X-Tenant |
| GET | /api/v1/teacher/reviews |
bearer | X-Tenant |
| POST | /api/v1/teacher/reviews |
bearer | X-Tenant |
| GET | /api/v1/teacher/reviews/{review} |
bearer | X-Tenant |
| PUT | /api/v1/teacher/reviews/{review} |
bearer | X-Tenant |
| DELETE | /api/v1/teacher/reviews/{review} |
bearer | X-Tenant |
| POST | /api/v1/teacher/reviews/{review}/attachments |
bearer | X-Tenant |
| GET | /api/v1/teacher/reviews/{review}/attachments/{attachment} |
bearer | X-Tenant |
| DELETE | /api/v1/teacher/reviews/{review}/attachments/{attachment} |
bearer | X-Tenant |
| GET | /api/v1/teacher/sections |
bearer | X-Tenant |
| GET | /api/v1/teacher/sections/{section}/roster |
bearer | X-Tenant |
| GET | /api/v1/teacher/sections/{section}/students |
bearer | X-Tenant |
| GET | /api/v1/teacher/students/{student} |
bearer | X-Tenant |
| GET | /api/v1/teacher/students/{student}/behavior |
bearer | X-Tenant |
| GET | /api/v1/teacher/students/{student}/contacts |
bearer | X-Tenant |
| POST | /api/v1/teacher/students/{student}/contacts |
bearer | X-Tenant |
| GET | /api/v1/teacher/students/{student}/reviews |
bearer | X-Tenant |
| GET | /api/v1/teacher/surveys |
bearer | X-Tenant |
| GET | /api/v1/teacher/surveys/{survey} |
bearer | X-Tenant |
| POST | /api/v1/teacher/surveys/{survey}/responses |
bearer | X-Tenant |
| POST | /api/v1/teacher/sync |
bearer | X-Tenant |
| GET | /api/v1/teacher/timetable |
bearer | X-Tenant |
| GET | /api/v1/teacher/today |
bearer | X-Tenant |