to select ↑↓ to navigate
CAMS Biometric Integration

CAMS Biometric Integration

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?
Thanks!