submit:attendance permission. The subject is always the caller — there is no userId parameter. Returns zones, today's window per applicable slot, the photo policy, selectable reasons with their evidence rules, tolerances, the timezone and server time. This is what makes "the button is only active inside the zone" implementable on the app side.core.session_token: ********************Authorization: Bearer ********************curl --location '/attendance/me/config'{
"success": true,
"message": "string",
"meta": {
"page": 0,
"limit": 0,
"total": 0
},
"errors": [
{
"code": "CR-100001",
"field": "string",
"message": "string"
}
],
"result": {
"serverTime": "2026-07-28T00:12:30.000Z",
"timeZone": "Asia/Makassar",
"zones": [
{
"id": "clz1zone0001",
"name": "Kampus A",
"points": [
{
"lat": -0.4645926,
"lng": 117.1297127
},
{
"lat": -0.4657302,
"lng": 117.1293706
},
{
"lat": -0.4668763,
"lng": 117.1299153
},
{
"lat": -0.4645926,
"lng": 117.1297127
}
]
}
],
"slots": [
{
"slotId": "clz1slot0001",
"code": "DAILY_STUDENT",
"label": "Presensi Harian Siswa",
"kind": "DAILY",
"requiresCheckOut": true,
"requiresGeofence": true,
"photoPolicy": "OPTIONAL",
"window": {
"checkInOpenAt": "06:00",
"startAt": "07:00",
"checkInCloseAt": "10:00",
"checkOutOpenAt": "12:00",
"endAt": "15:30",
"checkOutCloseAt": "22:00",
"lateToleranceMinutes": 15,
"earlyLeaveToleranceMinutes": 30
},
"state": "CHECK_IN",
"outcome": null,
"checkInAt": null,
"checkOutAt": null
}
],
"reasons": [
{
"id": "clz1reason001",
"code": "PERMIT",
"label": "Izin",
"requiresEvidence": false
},
{
"id": "clz1reason002",
"code": "SICK",
"label": "Sakit",
"requiresEvidence": true
}
]
}
}