For the complete documentation index, see llms.txt. This page is also available as Markdown.

Extended APIs

These endpoints are part of the Extended APIs package, which provides advanced capabilities. Access requires the Extended APIs package to be enabled.

Bulk update Students from a Class

patch
/v2p1/classes/{class_id}/students

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.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
class_idintegerRequired

Unique identifier for class.

Body
Responses
200

Success

application/json
patch/v2p1/classes/{class_id}/students
PATCH /v2p1/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"
    }
  ]
}

Upsert many classes

patch
/v2p1/classes

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.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Body
Responses
200

Success

application/json
or
or
patch/v2p1/classes
PATCH /v2p1/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"
  }
]

Set or Update a Class Attendance for Students

put
/v2p1/classes/{id}/attendance

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).

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
idintegerRequired

Unique identifier for class.

Body
Responses
200

Success

application/json
put/v2p1/classes/{id}/attendance
PUT /v2p1/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"
    }
  ]
}

Bulk Enable Subjects

post
/v2p1/school/programs/{program_code}/subjects/bulk-enable

This endpoint enable school Subjects.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
program_codestringRequired

Program scope

Example: ibpyp
Body
subject_idsinteger[]OptionalExample: [10001,10002]
Responses
200

Success

application/json
subject_idsinteger[]OptionalExample: [10001,10002]
post/v2p1/school/programs/{program_code}/subjects/bulk-enable
POST /v2p1/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
  ]
}

Bulk Disable Subjects

post
/v2p1/school/programs/{program_code}/subjects/bulk-disable

This endpoint disable school Subjects.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
program_codestringRequired

Program scope

Example: ibpyp
Body
subject_idsinteger[]OptionalExample: [10001,10002]
Responses
200

Success

application/json
subject_idsinteger[]OptionalExample: [10001,10002]
post/v2p1/school/programs/{program_code}/subjects/bulk-disable
POST /v2p1/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
  ]
}

Delete Excusal for a Student

delete
/v2p1/students/{student_id}/excusals/{id}

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.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
student_idintegerRequired

Unique identifier for a student.

idintegerRequired

Unique identifier for an excusal.

Responses
200

Success

application/json
delete/v2p1/students/{student_id}/excusals/{id}
DELETE /v2p1/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"
  }
}

Update Excusal for a Student

patch
/v2p1/students/{student_id}/excusals/{id}

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.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
student_idintegerRequired

Unique identifier for a student.

idintegerRequired

Unique identifier for an excusal.

Body
Responses
200

Success

application/json
patch/v2p1/students/{student_id}/excusals/{id}
PATCH /v2p1/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"
  }
}

Set student homeroom attendance

put
/v2p1/students/{id}/set_homeroom_attendance

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.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
idintegerRequired

Unique identifier for a student.

Body
datestring · dateOptional

Attendance date in yyyy-mm-dd format

statusinteger · enumOptional

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

Possible values:
notesstringOptional

Optional free-text notes for the attendance record

Responses
200

Success

application/json
put/v2p1/students/{id}/set_homeroom_attendance
PUT /v2p1/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"
}

Update or Create a Grade for a Student for a Task

patch
/v2p1/tasks/{task_id}/students/{student_id}

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.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
task_idintegerRequired

Unique identifier for a task.

student_idintegerRequired

Unique identifier for a student.

Body
task_gradeone ofOptional
or
Responses
200

Success

application/json
or
patch/v2p1/tasks/{task_id}/students/{student_id}
PATCH /v2p1/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
      }
    ]
  }
}

Bulk Update or Create Grades for Students for a Task

patch
/v2p1/tasks/{task_id}/students

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.

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
task_idintegerRequired

Unique identifier for a task.

Body
Responses
200

Success

application/json
idintegerOptional

Unique identifier for a student in ManageBac

Example: 12343
statusstringOptional

Response status for a student

Example: unprocessable_entity
errorobjectOptional

Error details if any

patch/v2p1/tasks/{task_id}/students
PATCH /v2p1/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": {}
  }
]

Set Teacher memberships for a Class

put
/v2p1/classes/{class_id}/teachers

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).

Authorizations
AuthorizationstringRequired

OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.

Path parameters
class_idintegerRequired

The unique numeric identifier of the class.

Body
Responses
200

Success

application/json
put/v2p1/classes/{class_id}/teachers
PUT /v2p1/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