Attendance
This group describes all the APIs relating to attendance records
Set or Update an Attendance Settings for a Class in an Academic Year
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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for class
Academic Year (Term Set) ID
Success
Unauthorized
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"
}
]
}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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Academic Year ID
Success
Unauthorized
Not Found
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"
}
]
}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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for class.
Configure response to include or exclude disabled slots.
Success
Unauthorized
Not Found
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
}
]
}
]
}
}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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for class.
Unique identifier for academic term.
Filter students by archived status
falseList of student ids. Accepts repeated params or a comma-separated string.
student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2Success
Unauthorized
Not Found
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
}
}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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for class.
A date string to define required day as yyyy-mm-dd.
List of student ids. Accepts repeated params or a comma-separated string.
student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2Success
Unauthorized
Not Found
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
}
}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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
A date string to define required day as yyyy-mm-dd.
An integer defining which page to display.
An integer defining the number of records to display per page.
List of student ids. Accepts repeated params or a comma-separated string.
student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2Success
Unauthorized
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
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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for year group.
Unique identifier for academic term.
Filter students by archived status
falseList of student ids. Accepts repeated params or a comma-separated string.
student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2Success
Unauthorized
Not Found
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
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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for year group.
A date string
List of student ids. Accepts repeated params or a comma-separated string.
student_ids=1,2,3 OR student_ids[]=1&student_ids[]=2Success
Unauthorized
Not Found
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
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.
OAuth 2.0 Bearer token obtained via client credentials grant. Pass the token in the Authorization header as Bearer <token>.
Unique identifier for year group.
Unique identifier for academic term.
Success
Unauthorized
Not Found
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
}
]
}
]
}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.
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.
A date string to define required day as yyyy-mm-dd.
An integer defining which page to display.
An integer defining the number of records to display per page.
Success
Unauthorized
Not Found
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
}
}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.
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.
Created
Unauthorized
Not Found
Unprocessable entity
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