11. API Endpoint Reference
Attendance Callback Endpoint
URL:
POST /api/method/navari_cams_biometric.cams_biometric.controllers.cams_call.attendance
Authentication: None required at the HTTP level. The endpoint is whitelisted for guest access. Authentication is performed internally by validating the AuthToken inside the JSON body against CAMS Biometric Settings.
Content-Type: application/json
Request Body (RealTime Punch — the common case):
{
"RealTime": {
"OperationID": "9nu1wak5616p",
"LabelName": "Main Gate",
"SerialNumber": "ZHM11xxxxxxxx",
"PunchLog": {
"Type": "CheckIn",
"Temperature": "36.8",
"FaceMask": false,
"InputType": "Fingerprint",
"UserId": "EMP-0001",
"LogTime": "2024-09-17 08:00:00 GMT +0300"
},
"AuthToken": "your-32-char-auth-token-here",
"Time": "2024-09-17 05:01:00 GMT +0000"
}
}
Request Body (Historical PunchLog batch):
{
"PunchLog": {
"ReturnRowCount": "3",
"Log": [
{ "Type": "CheckIn", "UserID": "EMP-0001", "LogTime": "2024-09-17 08:00:00 GMT +0300" },
{ "Type": "CheckOut", "UserID": "EMP-0001", "LogTime": "2024-09-17 17:30:00 GMT +0300" },
{ "Type": "CheckIn", "UserID": "EMP-0002", "LogTime": "2024-09-17 08:15:00 GMT +0300" }
]
}
}
Successful Response:
{"status": "done"}
HTTP Status: 200 OK
Error Responses:
| Scenario | HTTP Status | Body |
|---|---|---|
| Empty request body | 200 | {"status": "error", "message": "Empty request body"} |
| Invalid JSON | 200 | {"status": "error", "message": "Invalid JSON"} |
| AuthToken mismatch | 200 | {"status": "error", "message": "Invalid auth token"} |
| Employee not found | 200 | {"status": "done"} (logged internally) |
Note on error responses: The CAMS Gateway expects HTTP 200 in all cases. The app always returns 200 to prevent the gateway from retrying unnecessarily. Errors are captured in the Frappe Error Log instead.
Last updated 4 days ago
Was this helpful?