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

Attendance

This group describes all the APIs relating to attendance records

Set or Update an Attendance Settings for a Class in an Academic Year

put
/v2p1/classes/{class_id}/academic-years/{academic_year_id}/attendance/settings

Define the rotation slots for when and where the given class meets. This operation enables slots in the payload and disables slots not in the payload.

While it does not delete any individual attendance records, it does directly affect how class attendance records for students are counted over the given academic year. For example, if absent records exist at a given slot, they will no longer be tallied when disabled.

Note that the “Start period count from 0” setting should be ignored when forming the payload; the first slot in a day will always be period: 1. There is a known incompatibility with “Get Class Timetable” endpoint that responds with periods zero- or one-indexed, depending on that setting, but will be fixed in v2p3.

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

academic_year_idintegerRequired

Academic Year (Term Set) ID

Body
Responses
200

Success

application/json
put/v2p1/classes/{class_id}/academic-years/{academic_year_id}/attendance/settings
PUT /v2p1/classes/{class_id}/academic-years/{academic_year_id}/attendance/settings HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 53

{
  "settings": [
    {
      "period": 1,
      "day": 1,
      "location": "A101"
    }
  ]
}
{
  "settings": [
    {
      "index": 0,
      "status": "unprocessable_entity",
      "errors": {
        "period": [
          "on day 1 must be in [1, 3, 4, 5, 6]"
        ]
      }
    },
    {
      "index": 1,
      "status": "unprocessable_entity",
      "errors": {
        "day": [
          "must be in [1, 2, 3, 4, 5]"
        ]
      }
    },
    {
      "index": 2,
      "status": "ok"
    }
  ]
}

Get Attendance Categories

get
/v2p1/school/academic-years/{academic_year_id}/attendance_categories

Retrieves the Attendance Categories configured for a given Academic Year. Categories define the possible attendance statuses (e.g. Present, Absent, Late) and their display properties such as abbreviation and color.

Authorizations
AuthorizationstringRequired

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

Path parameters
academic_year_idstringRequired

Academic Year ID

Responses
200

Success

application/json
get/v2p1/school/academic-years/{academic_year_id}/attendance_categories
GET /v2p1/school/academic-years/{academic_year_id}/attendance_categories HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "categories": [
    {
      "status": -1,
      "label": "Present",
      "abbreviation": "P",
      "enabled": true,
      "color_code": "#54e33b"
    },
    {
      "status": 0,
      "label": "Absent",
      "abbreviation": "A",
      "enabled": true,
      "color_code": "#c00"
    },
    {
      "status": 1,
      "label": "Present",
      "abbreviation": "P",
      "enabled": true,
      "color_code": "#008800"
    },
    {
      "status": 2,
      "label": "Late",
      "abbreviation": "L",
      "enabled": false,
      "color_code": "#fa8c00"
    }
  ]
}

Get Class timetable

get
/v2p1/classes/{class_id}/timetable

This endpoint retrieves a class timetable specified by class ID.

The response is organized by academic year and includes all timetable slots with their day, period, location, and enabled status. Custom periods (e.g. Lunch) are excluded from the slot listing.

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.

Query parameters
include_disabledbooleanOptional

Configure response to include or exclude disabled slots.

Responses
200

Success

application/json
get/v2p1/classes/{class_id}/timetable
GET /v2p1/classes/{class_id}/timetable HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "timetable": {
    "academic_years": [
      {
        "id": 19,
        "name": "December 2021 – July 2022",
        "start_date": "2021-12-22",
        "end_date": "2022-07-22",
        "period_starts_count_from": 1,
        "slots": [
          {
            "day": 2,
            "period": 1,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 1,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 1,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 1,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 3,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 3,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 3,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 3,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 3,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 4,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 4,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 4,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 4,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 4,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 5,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 5,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 5,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 5,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 5,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 6,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 6,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 6,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 6,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 6,
            "location": "Classroom E",
            "enabled": true
          }
        ]
      },
      {
        "id": 20,
        "name": "August 2022 – July 2023",
        "start_date": "2022-08-01",
        "end_date": "2023-07-31",
        "period_starts_count_from": 0,
        "slots": [
          {
            "day": 2,
            "period": 0,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 0,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 0,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 0,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 1,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 1,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 1,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 1,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 1,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 3,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 3,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 3,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 3,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 3,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 4,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 4,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 4,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 4,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 4,
            "location": "Classroom E",
            "enabled": true
          },
          {
            "day": 1,
            "period": 5,
            "location": "Classroom A",
            "enabled": true
          },
          {
            "day": 2,
            "period": 5,
            "location": "Classroom B",
            "enabled": true
          },
          {
            "day": 3,
            "period": 5,
            "location": "Classroom C",
            "enabled": true
          },
          {
            "day": 4,
            "period": 5,
            "location": "Classroom D",
            "enabled": true
          },
          {
            "day": 5,
            "period": 5,
            "location": "Classroom E",
            "enabled": true
          }
        ]
      }
    ]
  }
}

Get Attendance for a Class during an Academic Term

get
/v2p1/classes/{id}/attendance/term/{term_id}

Retrieves summary attendance data for all students within a class for an academic term. Returns each student's attendance totals broken down by status (Present, Absent, Late) and by attendance category. Also returns timetable configuration for period numbering. Supports filtering by archived student status and specific student IDs.

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.

term_idintegerRequired

Unique identifier for academic term.

Query parameters
archived_studentsbooleanOptional

Filter students by archived status

Default: false
student_idsinteger[]Optional

List of student ids. Accepts repeated params or a comma-separated string.

Example: student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2
Responses
200

Success

application/json
get/v2p1/classes/{id}/attendance/term/{term_id}
GET /v2p1/classes/{id}/attendance/term/{term_id} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "students": [
    {
      "id": 10193652,
      "attendance": {
        "Present": 91,
        "Absent": 3,
        "Late": 2
      },
      "attendance_categories": [
        {
          "label": "Present",
          "status": 1,
          "value": 90
        },
        {
          "label": "Absent",
          "status": 0,
          "value": 3
        },
        {
          "label": "Late",
          "status": 2,
          "value": 2
        },
        {
          "label": "Present",
          "status": -1,
          "value": 1
        }
      ]
    },
    {
      "id": 10193654,
      "attendance": {
        "Present": 96
      },
      "attendance_categories": [
        {
          "label": "Present",
          "status": 1,
          "value": 95
        },
        {
          "label": "Present",
          "status": -1,
          "value": 1
        }
      ]
    }
  ],
  "timetable": {
    "period_starts_count_from": 0,
    "period_offset": -1
  }
}

Get Class Attendance for a Date

get
/v2p1/classes/{id}/attendance/date/{date}

Retrieves per-period attendance data for all students in a class on a specific date. The date must fall within the class's start and end term dates. Each student's attendance is returned as a sparse object keyed by period number, containing the status, note, and category for each recorded period. Non-working days and future dates return empty attendance. For further information, see the help article.

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.

datestringRequired

A date string to define required day as yyyy-mm-dd.

Query parameters
student_idsinteger[]Optional

List of student ids. Accepts repeated params or a comma-separated string.

Example: student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2
Responses
200

Success

application/json
get/v2p1/classes/{id}/attendance/date/{date}
GET /v2p1/classes/{id}/attendance/date/{date} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "students": [
    {
      "id": 10193652,
      "attendance": {
        "1": {
          "status": "Present",
          "note": "",
          "category": {
            "status": 1
          }
        },
        "5": {
          "status": "Absent",
          "note": "Chloe left after the first period for an appointment.",
          "category": {
            "status": 0
          }
        }
      }
    },
    {
      "id": 10193615,
      "attendance": {
        "1": {
          "status": "Present",
          "note": "",
          "category": {
            "status": 1
          }
        },
        "5": {
          "status": "Present",
          "note": "",
          "category": {
            "status": 1
          }
        }
      }
    }
  ],
  "timetable": {
    "period_starts_count_from": 0,
    "period_offset": -1
  }
}

Get all Attendance Excusals for a date

get
/v2p1/students/excusals/{date}

Retrieves all attendance excusals submitted by parents for a given date. An excusal is returned if the date falls within its start and end date range (accounting for multi-day durations). Responses include the student, parent, date range, duration, and the comment provided by the parent.

Authorizations
AuthorizationstringRequired

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

Path parameters
datestringRequired

A date string to define required day as yyyy-mm-dd.

Query parameters
pagestringOptional

An integer defining which page to display.

per_pagestringOptional

An integer defining the number of records to display per page.

student_idsinteger[]Optional

List of student ids. Accepts repeated params or a comma-separated string.

Example: student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2
Responses
200

Success

application/json
get/v2p1/students/excusals/{date}
GET /v2p1/students/excusals/{date} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "excusals": [
    {
      "student_id": 210,
      "parent_id": 175,
      "start_date": "2025-01-29",
      "end_date": "2025-01-29",
      "duration": 1,
      "comment": "Chloe has a dentist appointment and will be out of school the entire day.",
      "created_at": "2025-01-29T15:56:10.000Z",
      "updated_at": "2025-01-30T12:30:10.000Z"
    },
    {
      "student_id": 219,
      "parent_id": 185,
      "start_date": "2024-11-28",
      "end_date": "2024-11-28",
      "duration": 1,
      "comment": "John was sick.",
      "created_at": "2024-11-29T10:45:10.000Z",
      "updated_at": "2024-11-29T10:45:10.000Z"
    },
    {
      "student_id": 224,
      "parent_id": 192,
      "start_date": "2024-11-27",
      "end_date": "2024-11-29",
      "duration": 3,
      "comment": "Need to travel for a family event",
      "created_at": "2024-11-29T13:40:10.000Z",
      "updated_at": "2024-11-29T18:22:10.000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "total_pages": 1,
    "total_count": 3,
    "per_page": 100
  }
}

Get Homeroom Attendance for a Year Group and Term

get
/v2p1/year-groups/{year_group_id}/homeroom/attendance/term/{term_id}

Retrieves aggregated homeroom attendance counts for all students in a year group over a given academic term. Each student's response includes a breakdown by attendance status (Present, Absent, Late) and detailed counts per attendance category.

Authorizations
AuthorizationstringRequired

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

Path parameters
year_group_idintegerRequired

Unique identifier for year group.

term_idintegerRequired

Unique identifier for academic term.

Query parameters
archived_studentsbooleanOptional

Filter students by archived status

Default: false
student_idsinteger[]Optional

List of student ids. Accepts repeated params or a comma-separated string.

Example: student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2
Responses
200

Success

application/json
get/v2p1/year-groups/{year_group_id}/homeroom/attendance/term/{term_id}
GET /v2p1/year-groups/{year_group_id}/homeroom/attendance/term/{term_id} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "students": [
    {
      "id": 10193652,
      "attendance": {
        "Present": 57,
        "Late": 2,
        "Absent": 1
      },
      "attendance_categories": [
        {
          "label": "Present",
          "status": 1,
          "value": 56
        },
        {
          "label": "Absent",
          "status": 0,
          "value": 1
        },
        {
          "label": "Late",
          "status": 2,
          "value": 2
        },
        {
          "label": "Present",
          "status": -1,
          "value": 1
        }
      ]
    },
    {
      "id": 12449380,
      "attendance": {
        "Present": 60
      },
      "attendance_categories": [
        {
          "label": "Present",
          "status": 1,
          "value": 59
        },
        {
          "label": "Present",
          "status": -1,
          "value": 1
        }
      ]
    }
  ]
}

Get Homeroom Attendance for a Year Group by Date

get
/v2p1/year-groups/{year_group_id}/homeroom/attendance/date/{date}

Retrieves per-student homeroom attendance for a year group on a specific date. Each student's response includes their attendance status, any notes recorded by the teacher, and the attendance category.

Authorizations
AuthorizationstringRequired

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

Path parameters
year_group_idintegerRequired

Unique identifier for year group.

datestringRequired

A date string

Query parameters
student_idsinteger[]Optional

List of student ids. Accepts repeated params or a comma-separated string.

Example: student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2
Responses
200

Success

application/json
get/v2p1/year-groups/{year_group_id}/homeroom/attendance/date/{date}
GET /v2p1/year-groups/{year_group_id}/homeroom/attendance/date/{date} HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "students": [
    {
      "id": 10193652,
      "attendance": {
        "status": "Present",
        "note": "",
        "category": {
          "status": -1
        }
      }
    },
    {
      "id": 12449380,
      "attendance": {
        "status": "Absent",
        "note": "Chloe was absent due to a dentist appointment.",
        "category": {
          "status": 0
        }
      }
    }
  ]
}

Get Homeroom Attendance Adjustments for a Year Group and Term

get
/v2p1/year-groups/{year_group_id}/homeroom/attendance/term/{term_id}/adjustments

Retrieves attendance adjustments for all students in a year group for a given academic term. Adjustments are manual corrections to attendance counts (e.g. adding or subtracting days) made by administrators to reflect circumstances not captured by daily attendance records.

Authorizations
AuthorizationstringRequired

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

Path parameters
year_group_idintegerRequired

Unique identifier for year group.

term_idintegerRequired

Unique identifier for academic term.

Responses
200

Success

application/json
get/v2p1/year-groups/{year_group_id}/homeroom/attendance/term/{term_id}/adjustments
GET /v2p1/year-groups/{year_group_id}/homeroom/attendance/term/{term_id}/adjustments HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "students": [
    {
      "id": 10949004,
      "attendance_adjustments": [
        {
          "id": 29863,
          "name": "Present",
          "adjustment": 3
        }
      ]
    },
    {
      "id": 10752628,
      "attendance_adjustments": [
        {
          "id": 29870,
          "name": "Absent",
          "adjustment": 2
        },
        {
          "id": 29871,
          "name": "Present",
          "adjustment": 1
        },
        {
          "id": 29872,
          "name": "Late",
          "adjustment": 3
        }
      ]
    }
  ]
}

Get all Attendance Excusals for a student

get
/v2p1/students/{student_id}/excusals

Retrieves all attendance excusals submitted by a parent for a specific student. Optionally filter by a date to return only excusals whose date range includes that day. Responses include the excusal date range, duration, parent who submitted it, and the comment.

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.

Query parameters
applies_onstringOptional

A date string to define required day as yyyy-mm-dd.

pagestringOptional

An integer defining which page to display.

per_pagestringOptional

An integer defining the number of records to display per page.

Responses
200

Success

application/json
get/v2p1/students/{student_id}/excusals
GET /v2p1/students/{student_id}/excusals HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "excusals": [
    {
      "id": 1,
      "student_id": 210,
      "parent_id": 176,
      "start_date": "2024-11-28",
      "end_date": "2024-11-28",
      "duration": 1,
      "comment": "Chloe was sick.",
      "created_at": "2024-11-29T10:45:10.000Z",
      "updated_at": "2024-11-29T10:45:10.000Z"
    },
    {
      "id": 2,
      "student_id": 210,
      "parent_id": 176,
      "start_date": "2024-11-27",
      "end_date": "2024-11-29",
      "duration": 3,
      "comment": "Need to travel for a family event",
      "created_at": "2024-11-29T13:40:10.000Z",
      "updated_at": "2024-11-29T18:22:10.000Z"
    },
    {
      "id": 3,
      "student_id": 210,
      "parent_id": 175,
      "start_date": "2025-01-29",
      "end_date": "2025-01-29",
      "duration": 1,
      "comment": "Chloe has a dentist appointment and will be out of school the entire day.",
      "created_at": "2025-01-29T15:56:10.000Z",
      "updated_at": "2025-01-30T12:30:10.000Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "total_pages": 1,
    "total_count": 3,
    "per_page": 100
  }
}

Create Excusal for a Student

post
/v2p1/students/{student_id}/excusals

Creates an attendance excusal for a student on behalf of a parent. The parent must be linked to the student via a relationship. The excusal date range must not overlap with any existing excusal for the same student, and the duration must be 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.

Body
Responses
201

Created

application/json
post/v2p1/students/{student_id}/excusals
POST /v2p1/students/{student_id}/excusals HTTP/1.1
Host: api.managebac.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 112

{
  "excusal": {
    "parent_id": 456,
    "start_date": "2024-06-17",
    "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"
  }
}

Last updated