The Administration API provides full control over the structural and academic configuration of Gobarau Academy. It covers everything from the singleton school identity record through the entire academic calendar hierarchy (sessions → terms), physical infrastructure (campuses, wings), academic organisation (departments, class levels), and grading policy (grading scales and bands). All nine endpoint groups require an authenticated user whose role isDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/muhammadbugaje/gobarau_backend/llms.txt
Use this file to discover all available pages before exploring further.
super_admin, principal, or vice_principal.
Authentication Requirements
School Settings
Singleton endpoint for the school’s global identity record. Only oneSchoolSettings instance may exist; attempting to POST a second record raises a validation error. Use PATCH to update individual fields without replacing the whole object.
SchoolSettings inherits from AuditMixin, which adds public_id (UUID), created_at, updated_at, created_by, and updated_by to every response.
| Method | URL |
|---|---|
GET | /api/administration/school-settings/ |
POST | /api/administration/school-settings/ |
GET | /api/administration/school-settings/{id}/ |
PUT | /api/administration/school-settings/{id}/ |
PATCH | /api/administration/school-settings/{id}/ |
DELETE | /api/administration/school-settings/{id}/ |
Request Fields
The full official name of the school (max 200 characters).
School motto (max 200 characters). Defaults to an empty string.
School logo image. Uploaded to the
school/ media path.Physical address of the school. Defaults to an empty string.
Official contact email address.
Official contact phone number (max 20 characters).
Current academic year label, e.g.
"2025/2026" (max 20 characters).Response Fields
Database primary key.
Stable public identifier for this record.
Full official school name.
School motto.
Relative URL of the uploaded logo image, or
null if not set.Physical address.
Official email address.
Official phone number.
Current academic year label.
Timestamp of record creation.
Timestamp of last update.
Primary key of the user who created this record.
Primary key of the user who last modified this record.
Example
Academic Sessions
Academic sessions represent a full school year, e.g.2025/2026. Terms belong to a session via a foreign key. Only one session should have is_current set to true at a time.
AcademicSession inherits BaseModel, providing public_id, created_at, and updated_at on every response.
| Method | URL |
|---|---|
GET | /api/administration/academic-sessions/ |
POST | /api/administration/academic-sessions/ |
GET | /api/administration/academic-sessions/{id}/ |
PUT | /api/administration/academic-sessions/{id}/ |
PATCH | /api/administration/academic-sessions/{id}/ |
DELETE | /api/administration/academic-sessions/{id}/ |
Request Fields
Human-readable session label, e.g.
"2025/2026" (max 50 characters).Session start date in
YYYY-MM-DD format.Session end date in
YYYY-MM-DD format.Marks this session as the active one. Defaults to
false.Response Fields
Database primary key.
Stable public identifier.
Session label.
Start date of the session.
End date of the session.
Whether this is the currently active session.
Timestamp of record creation.
Timestamp of last update.
Example
Response Example
Terms
A term is one of three divisions within an academic session: First, Second, or Third. The combination ofsession + name must be unique — you cannot create duplicate terms for the same session.
| Method | URL |
|---|---|
GET | /api/administration/terms/ |
POST | /api/administration/terms/ |
GET | /api/administration/terms/{id}/ |
PUT | /api/administration/terms/{id}/ |
PATCH | /api/administration/terms/{id}/ |
DELETE | /api/administration/terms/{id}/ |
Request Fields
Primary key of the parent
AcademicSession.Term identifier. Must be one of:
| Value | Label |
|---|---|
first | First Term |
second | Second Term |
third | Third Term |
Term start date in
YYYY-MM-DD format.Term end date in
YYYY-MM-DD format.Marks this term as currently active. Defaults to
false.Response Fields
Database primary key.
Stable public identifier.
Primary key of the parent academic session.
Term value (
first, second, or third).Term start date.
Term end date.
Whether this term is currently active.
Timestamp of record creation.
Timestamp of last update.
Example
Wings
Wings represent organisational divisions within the school: Regular, Islamiyyah, and Tahfeez. Users are assigned to a wing; this model defines the wings themselves with optional visual and descriptive metadata.| Method | URL |
|---|---|
GET | /api/administration/wings/ |
POST | /api/administration/wings/ |
GET | /api/administration/wings/{id}/ |
PUT | /api/administration/wings/{id}/ |
PATCH | /api/administration/wings/{id}/ |
DELETE | /api/administration/wings/{id}/ |
Request Fields
Wing identifier. Must be one of:
| Value | Label |
|---|---|
regular | Regular |
islamiyyah | Islamiyyah |
tahfeez | Tahfeez |
Hex colour code for UI theming, e.g.
"#3B82F6" (max 7 characters). Defaults to an empty string.Optional text describing the wing’s purpose.
Response Fields
Database primary key.
Stable public identifier.
Wing value (
regular, islamiyyah, or tahfeez).Hex colour code string.
Descriptive text for the wing.
Timestamp of record creation.
Timestamp of last update.
Example
Campuses
Campuses represent physical branch locations of the school. Each campus may have a designated principal (aUser foreign key). One campus can be flagged as the main campus via is_main.
| Method | URL |
|---|---|
GET | /api/administration/campuses/ |
POST | /api/administration/campuses/ |
GET | /api/administration/campuses/{id}/ |
PUT | /api/administration/campuses/{id}/ |
PATCH | /api/administration/campuses/{id}/ |
DELETE | /api/administration/campuses/{id}/ |
Request Fields
Campus name (max 200 characters).
Physical address of the campus.
Campus contact phone number (max 20 characters).
Primary key of the
User record assigned as campus principal. Nullable.Whether this is the school’s main campus. Defaults to
false.Whether this campus is currently operational. Defaults to
true.Response Fields
Database primary key.
Stable public identifier.
Campus name.
Physical address.
Contact phone number.
User PK of the assigned principal.
Main campus flag.
Active status of the campus.
Timestamp of record creation.
Timestamp of last update.
Example
Departments
Departments organise academic subjects and staff. Each department has a unique short code and an optionalhead user reference.
| Method | URL |
|---|---|
GET | /api/administration/departments/ |
POST | /api/administration/departments/ |
GET | /api/administration/departments/{id}/ |
PUT | /api/administration/departments/{id}/ |
PATCH | /api/administration/departments/{id}/ |
DELETE | /api/administration/departments/{id}/ |
Request Fields
Department name (max 200 characters).
Unique short code for the department, e.g.
"MATH" (max 20 characters). Must be unique across all departments.Primary key of the
User record assigned as department head. Nullable.Response Fields
Database primary key.
Stable public identifier.
Department name.
Unique department code.
User PK of the department head.
Timestamp of record creation.
Timestamp of last update.
Example
Class Levels
Class levels define the academic grades within the school (e.g. JSS 1, SS 2). Each level belongs to aneducation_tier and carries an order_index for display ordering.
| Method | URL |
|---|---|
GET | /api/administration/class-levels/ |
POST | /api/administration/class-levels/ |
GET | /api/administration/class-levels/{id}/ |
PUT | /api/administration/class-levels/{id}/ |
PATCH | /api/administration/class-levels/{id}/ |
DELETE | /api/administration/class-levels/{id}/ |
Request Fields
Display name of the class level, e.g.
"JSS 1" (max 100 characters).Unique short code, e.g.
"JSS1" (max 20 characters). Must be unique across all class levels.Integer used to sort class levels in the correct progression. Defaults to
0.Tier this class level belongs to. Must be one of:
Defaults to
| Value | Label |
|---|---|
primary | Primary |
jss | JSS |
sss | SSS |
primary.Response Fields
Database primary key.
Stable public identifier.
Display name of the class level.
Unique class level code.
Sort order index.
Tier value:
primary, jss, or sss.Timestamp of record creation.
Timestamp of last update.
Example
Grading Scales
A grading scale is a named policy that groups grading bands and is optionally tied to a specific academic session. Mark one scale asis_active to designate it as the currently applied policy.
GradingScale inherits from AuditMixin, adding created_by and updated_by to the response.
| Method | URL |
|---|---|
GET | /api/administration/grading-scales/ |
POST | /api/administration/grading-scales/ |
GET | /api/administration/grading-scales/{id}/ |
PUT | /api/administration/grading-scales/{id}/ |
PATCH | /api/administration/grading-scales/{id}/ |
DELETE | /api/administration/grading-scales/{id}/ |
Request Fields
Grading scale name, e.g.
"Standard 100-Point Scale" (max 200 characters).Primary key of the
AcademicSession this scale applies to. Nullable — a scale may be session-agnostic.Marks this scale as the currently active grading policy. Defaults to
false.Response Fields
Database primary key.
Stable public identifier.
Grading scale name.
FK to the associated academic session, or
null.Whether this is the active grading scale.
Timestamp of record creation.
Timestamp of last update.
User PK of the creator.
User PK of the last editor.
Example
Grading Bands
Grading bands define the score ranges within a grading scale. Each band maps a numeric score range to a grade letter, optional grade point, and a descriptive remark. A band’smin_score must not exceed its max_score.
The model enforces
min_score <= max_score at the Django model validation layer (clean()). Bands are ordered by max_score descending in all list responses.| Method | URL |
|---|---|
GET | /api/administration/grading-bands/ |
POST | /api/administration/grading-bands/ |
GET | /api/administration/grading-bands/{id}/ |
PUT | /api/administration/grading-bands/{id}/ |
PATCH | /api/administration/grading-bands/{id}/ |
DELETE | /api/administration/grading-bands/{id}/ |
Request Fields
Primary key of the parent
GradingScale.Lower bound of the score range (decimal, max 5 digits with 2 decimal places). Must not be greater than
max_score.Upper bound of the score range (decimal, max 5 digits with 2 decimal places).
Grade letter or symbol awarded in this range, e.g.
"A", "B+" (max 5 characters).GPA-equivalent point value for this grade (decimal, max 3 digits with 2 decimal places). Nullable.
Descriptive label for the grade band, e.g.
"Distinction" (max 200 characters). Defaults to an empty string.Response Fields
Database primary key.
Stable public identifier.
FK to the parent grading scale.
Lower bound of the score range.
Upper bound of the score range.
Grade letter for this band.
GPA equivalent, or
null if not set.Descriptive remark for this grade band.
Timestamp of record creation.
Timestamp of last update.
Example
Endpoint Summary
| Resource | Base URL | Inherits |
|---|---|---|
| School Settings | /api/administration/school-settings/ | AuditMixin (singleton) |
| Academic Sessions | /api/administration/academic-sessions/ | BaseModel |
| Terms | /api/administration/terms/ | BaseModel |
| Wings | /api/administration/wings/ | BaseModel |
| Campuses | /api/administration/campuses/ | BaseModel |
| Departments | /api/administration/departments/ | BaseModel |
| Class Levels | /api/administration/class-levels/ | BaseModel |
| Grading Scales | /api/administration/grading-scales/ | AuditMixin |
| Grading Bands | /api/administration/grading-bands/ | BaseModel |