For AI agents: a documentation index is available at https://developers.jarsave.com/llms.txt, this page as Markdown at https://developers.jarsave.com/attendance.md, and the OpenAPI description at https://developers.jarsave.com/openapi.json.
The attendance object
v1One class session and whether the student came. Send one for every session on the student's timetable, including absences, so the parent sees the whole term. In JarSave a session the child attended counts as a practice day for that subject.
Attributes
session_id string Required
Your id for this session. Sending it again replaces the item (see idempotent requests).
course_id string Required
Your id for the course.
course_name string Required
The course as the parent knows it, for example Junior Coding 2.
subject string Required
What the course teaches, in one or two words: Coding, English, Piano.
starts_at timestamp Required
When the session started, with its offset, for example 2026-11-26T15:00:00+07:00.
ends_at timestamp Required
When it ended.
mode enum Required
in_person or online.
status enum Required
present, late, absent or excused.
meeting_no integer, nullable
The session's number in the course, for example 14 of 21.
The attendance object
{
"session_id": "ses_55120",
"course_id": "crs_junior_coding_2",
"course_name": "Junior Coding 2",
"subject": "Coding",
"starts_at": "2026-11-26T15:00:00+07:00",
"ends_at": "2026-11-26T16:30:00+07:00",
"mode": "in_person",
"status": "present",
"meeting_no": 6
}Send attendance
POST /v1/links/:id/attendance
Send each session once attendance is taken, the same day. For the history, send the past sessions of the current course when the link becomes active.
Parameters
The attendance object's attributes. To send up to 100 at once, put them in an items array.
Returns
The item with its JarSave id, the link, status pending (waiting for the parent) and received. With items, a list: {"object": "list", "data": [...]}, one entry per item in the order sent.
Request
curl https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/attendance \
-H "Authorization: Bearer $JARSAVE_SECRET_KEY" \
-H "JarSave-Version: 2026-10-29" \
-H "Content-Type: application/json" \
-d @session.jsonuse Illuminate\Support\Facades\Http;
// config/services.php: 'jarsave' => ['key' => env('JARSAVE_SECRET_KEY')]
// $session: an array with the fields shown above
$response = Http::withToken(config('services.jarsave.key'))
->withHeaders(['JarSave-Version' => '2026-10-29'])
->post('https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/attendance', $session);// session: an object with the fields shown above
const response = await fetch("https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/attendance", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.JARSAVE_SECRET_KEY}`,
"JarSave-Version": "2026-10-29",
"Content-Type": "application/json",
},
body: JSON.stringify(session),
});
const result = await response.json();import os
import requests
# session: a dict with the fields shown above
response = requests.post(
"https://api.jarsave.com/v1/links/lnk_8Gm2QxT4/attendance",
headers={
"Authorization": f"Bearer {os.environ['JARSAVE_SECRET_KEY']}",
"JarSave-Version": "2026-10-29",
},
json=session,
timeout=30,
)
result = response.json()Response
{
"id": "itm_3Rk9Vb2W",
"object": "attendance",
"link": "lnk_8Gm2QxT4",
"session_id": "ses_55120",
"status": "pending",
"received": "2026-11-26T16:41:02+07:00"
}