Extended APIs
These endpoints are part of the Extended APIs package, which provides advanced capabilities. Access requires the Extended APIs package to be enabled.
This endpoint updates students belonging to a class as specified by class ID.
Each student in the request body is processed individually. The response includes a status for each student indicating whether the update was successful, returned a validation error, or the student was not found in the class.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for class.
Success
Unauthorized
Not Found
PATCH /v2/classes/{class_id}/students HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 38
{
"students": [
{
"id": 123,
"level": "HL"
}
]
}{
"students": [
{
"id": 1,
"status": "ok"
},
{
"id": 2,
"status": "unprocessable_entity",
"errors": {
"level": [
"is not included in the list"
]
}
},
{
"id": 3,
"status": "not_found"
}
]
}Creates and updates multiple classes in a single request. Each entry in the array is processed independently: entries with an id field are treated as updates, entries without are treated as creates. Returns an indexed array of results with status (ok, unprocessable_entity, or not_found) for each entry.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Success
Unauthorized
PATCH /v2/classes HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 300
{
"classes": [
{
"id": 123,
"archived": false,
"name": "IB DP Biology (Grade 12)",
"description": "Lorem ipsum dolor sitamet.",
"language": "en",
"uniq_id": "DG333",
"class_section": "A",
"subject_ids": [
123434,
10001
],
"sl": true,
"hl": false,
"subject_option": "Language and literature",
"lock_memberships": "students_only"
}
]
}[
{
"index": 0,
"errors": {},
"status": "unprocessable_entity"
}
]Creates or updates attendance records for students in a class. Each entry in the payload specifies a student, date, period, and status. If an attendance record already exists for that combination, it is updated; otherwise a new record is created. Returns an indexed array of results with per-entry status (ok, unprocessable_entity, or not_found).
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for class.
Success
Unauthorized
Not Found
PUT /v2/classes/{id}/attendance HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 118
{
"attendances": [
{
"student_id": 123,
"date": "2024-06-19",
"period": 1,
"status": 0,
"notes": "Student was five minutes late"
}
]
}{
"attendance": [
{
"index": 0,
"student_id": 1,
"status": "unprocessable_entity",
"errors": {
"date": [
"out of class term date range"
]
}
},
{
"index": 1,
"student_id": 2,
"status": "unprocessable_entity",
"errors": {
"period": [
"must be in [1, 3, 4, 5, 6]"
]
}
},
{
"index": 2,
"student_id": 3,
"status": "unprocessable_entity",
"errors": {
"status": [
"is not included in the list"
]
}
},
{
"index": 3,
"student_id": 4,
"status": "not_found"
},
{
"index": 4,
"student_id": 5,
"status": "ok"
}
]
}This endpoint enable school Subjects.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Program scope
ibpyp[10001,10002]Success
[10001,10002]Unprocessable Entity
POST /v2/school/programs/{program_code}/subjects/bulk-enable HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 29
{
"subject_ids": [
10001,
10002
]
}{
"subject_ids": [
10001,
10002
]
}This endpoint disable school Subjects.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Program scope
ibpyp[10001,10002]Success
[10001,10002]Unprocessable Entity
POST /v2/school/programs/{program_code}/subjects/bulk-disable HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 29
{
"subject_ids": [
10001,
10002
]
}{
"subject_ids": [
10001,
10002
]
}Permanently deletes an attendance excusal for a student. Returns the deleted excusal record in the response body. The excusal will no longer appear in any subsequent queries.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for a student.
Unique identifier for an excusal.
Success
Unauthorized
Not Found
DELETE /v2/students/{student_id}/excusals/{id} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
"excusal": {
"id": 1,
"student_id": 210,
"parent_id": 175,
"start_date": "2025-01-01",
"end_date": "2025-01-01",
"duration": 1,
"comment": "Chloe was sick.",
"created_at": "2025-01-01T15:56:10.000Z",
"updated_at": "2025-01-01T12:30:10.000Z"
}
}Updates an existing attendance excusal for a student. The end date and comment can be modified. The updated date range must not overlap with any other existing excusal for the same student, and the resulting duration must remain between 1 and 12 days.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for a student.
Unique identifier for an excusal.
Success
Unauthorized
Not Found
Unprocessable entity
PATCH /v2/students/{student_id}/excusals/{id} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 70
{
"excusal": {
"end_date": "2024-06-19",
"comment": "Doctor's appointment"
}
}{
"excusal": {
"id": 1,
"student_id": 210,
"parent_id": 175,
"start_date": "2025-01-01",
"end_date": "2025-01-01",
"duration": 1,
"comment": "Chloe was sick.",
"created_at": "2025-01-01T15:56:10.000Z",
"updated_at": "2025-01-01T12:30:10.000Z"
}
}Sets a student's homeroom attendance record for a given date. If no attendance record exists for the specified date, a new one is created. If one already exists, it is updated with the new status and notes. The date and status fields are required. The notes field is optional.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for a student.
Attendance date in yyyy-mm-dd format
Available statuses:
0 - Absent
1 - Present
2 - Late
3 - Dress Code
4 - Late & Dress Code
5 - Dismissed
10 - Health
11 - Sports
12 - Fieldtrip
13 - Excused
14 - Other
15 - Custom 1
16 - Custom 2
17 - Custom 3
18 - Custom 4
Optional free-text notes for the attendance record
Success
Unauthorized
Not Found
PUT /v2/students/{id}/set_homeroom_attendance HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 47
{
"date": "2026-01-01",
"status": 0,
"notes": "text"
}{
"status": "ok"
}Creates or updates a grade for a specific student on a given task. If a grade already exists, it will be updated; otherwise, a new grade will be created.
The Content-Type header must be set to application/json, and the request body should contain the fields you want to update as a JSON payload.
For MYP, only integers are allowed (e.g., '1', 1). For non-MYP programs, floats are allowed (e.g., '1.22', 1.22), and if more than two decimal places are provided, the value will be automatically rounded (e.g., 1.448 -> 1.45).
criterion_grades writes per-criterion results for MYP criteria tasks, rubric criteria tasks and IB Assessment tasks. Identify each criterion by the id that GET /classes/{class_id}/tasks/{id}/students returns in assessments.criteria; only the criteria you send are changed. See the UpdateStudentTaskGrade schema for the full rules.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for a task.
Unique identifier for a student.
Success
Not Authorized
Forbidden
Not Found
PATCH /v2/tasks/{task_id}/students/{student_id} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 167
{
"task_grade": {
"author_id": 123434,
"points": 50,
"comment": "Well done!",
"binary": true,
"criterion_grades": [
{
"id": 4411203,
"score": 7
},
{
"id": 4411204,
"not_applicable": true
}
]
}
}{
"task_grade": {
"author_id": 123434,
"points": 50,
"comment": "Well done!",
"binary": true,
"criterion_grades": [
{
"id": 4411203,
"label": "A",
"criterion": "Criterion A: Knowledge and understanding",
"score": "Good",
"not_applicable": false
},
{
"id": 4411204,
"label": "B",
"criterion": "Criterion B: Application",
"score": "N/A",
"not_applicable": true
},
{
"id": 4411205,
"label": "C",
"criterion": "Criterion C: Communication",
"score": null,
"not_applicable": false
}
]
}
}Creates or updates grades for many students on a given task. If a grade already exists, it will be updated; otherwise, a new grade will be created.
The Content-Type header must be set to application/json, and the request body should contain the fields you want to update as a JSON payload.
For MYP, only integers are allowed (e.g., '1', 1). For non-MYP programs, floats are allowed (e.g., '1.22', 1.22), and if more than two decimal places are provided, the value will be automatically rounded (e.g., 1.448 -> 1.45).
criterion_grades writes per-criterion results for MYP criteria tasks, rubric criteria tasks and IB Assessment tasks. Identify each criterion by the id that GET /classes/{class_id}/tasks/{id}/students returns in assessments.criteria; only the criteria you send are changed. See the UpdateStudentTaskGrade schema for the full rules.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for a task.
Success
Unique identifier for a student in ManageBac
12343Response status for a student
unprocessable_entityError details if any
Not Authorized
Forbidden
Not Found
PATCH /v2/tasks/{task_id}/students HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 193
{
"students": [
{
"id": 12345,
"task_grade": {
"author_id": 123434,
"points": 50,
"comment": "Well done!",
"binary": true,
"criterion_grades": [
{
"id": 4411203,
"score": 7
},
{
"id": 4411204,
"not_applicable": true
}
]
}
}
]
}[
{
"id": 12343,
"status": "unprocessable_entity",
"error": {}
}
]Completely replaces the teacher memberships for a class with the provided list. Any existing teachers not included in the payload are removed. Sending an empty array removes all teachers. Each entry can optionally set show_on_reports to control whether the teacher appears on printed reports. The response includes per-entry status (ok, not_found, or unprocessable_entity with errors).
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
The unique numeric identifier of the class.
Success
Bad Request
PUT /v2/classes/{class_id}/teachers HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 49
{
"teachers": [
{
"id": 123,
"show_on_reports": false
}
]
}{
"teachers": [
{
"index": 0,
"status": "unprocessable_entity",
"errors": {
"id": [
"can't be blank"
]
}
},
{
"index": 1,
"id": 1,
"status": "not_found"
},
{
"index": 2,
"id": 2,
"status": "ok"
}
]
}Last updated