RESTful API: 서버에서 장비로 보내는 명령

서버가 게이트웨이를 통해 장비로 보내는 명령과 각 명령의 요청 및 응답 JSON을 설명합니다.

RESTful API 사용자 서버 → 장비 · 오퍼레이션 12–38

#12

LoadLog

RESTful API서버 → 장비

지정한 기간의 근태 기록 로그를 장비에서 가져옵니다. 권장 최대 범위는 30일입니다.

요청 — RESTful 엔드포인트로 POST
{
  "Load": {
    "PunchLog": {
      "Filter": {
        "StartTime": "2020-09-17 00:01:33 GMT +0530",
        "EndTime": "2020-09-17 22:01:33 GMT +0530"
      }
    }
  },
  "OperationID": "j95xfejt3vr1",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 12:01:33 GMT +0530"
}
응답 — 장비에서 반환
{
  "Status": "done",
  "OperationID": "j95xfejt3vr1",
  "PunchLog": {
    "ReturnRowCount": "18",
    "Log": [
      { "Type": "CheckOut", "Temperature": 36.8, "InputType": "Face", "UserID": "2", "LogTime": "2020-09-17 16:53:43 GMT +0530", "FaceMask": false },
      { "Type": "CheckOut", "Temperature": 36.6, "InputType": "Palm", "UserID": "1", "LogTime": "2020-09-17 16:54:15 GMT +0530", "FaceMask": false },
      { "Type": "CheckIn",  "Temperature": 36.5, "InputType": "Fingerprint", "UserID": "3", "LogTime": "2020-09-17 09:01:44 GMT +0530", "FaceMask": false }
    ]
  }
}
#13

LoadDeviceInformation

RESTful API서버 → 장비

하드웨어 정보, 용량 한도, 등록된 사용자/템플릿 수, 라이선스 날짜를 장비에서 가져옵니다.

요청 — RESTful 엔드포인트로 POST
{
  "Load": { "DeviceInformation": "All" },
  "OperationID": "j95xfejt3vr1",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-08-28 12:01:33 GMT +0530"
}
응답 — 장비에서 반환
{
  "Status": "done",
  "OperationID": "j95xfejt3vr1",
  "StatusCode": 0,
  "DeviceInformation": {
    "DeviceModel": "Hawking Plus (f38+)",
    "Manufacturer": "Dheeram Innovations",
    "MacAddress": "00-01-A9-16-27-AB",
    "StartDate": "03/04/2024",
    "EndDate": "03/04/2025",
    "LastConnectedTime": "13-11-2025 18:03:48 GMT +0530",
    "RegisteredUsers": "0",
    "RegisteredFaces": "0",
    "RegisteredFingerprints": "0",
    "MaximumFacesSupported": "5000",
    "MaximumFingerprintsSupported": "10000",
    "MaximumAttendanceLogsSupported": "500000"
  }
}
#14

AddUserWithCard

RESTful API서버 → 장비

카드/RFID 번호만을 인증 정보로 하여 새 사용자를 등록합니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [{ "Type": "Card", "UserID": "100", "Data": "102836" }]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#15

AddUserWithPassword

RESTful API서버 → 장비

숫자 PIN/비밀번호만을 인증 정보로 하여 새 사용자를 등록합니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [{ "Type": "Password", "UserID": "100", "Data": "123456" }]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#16

AddUserWithFace

RESTful API서버 → 장비

얼굴 템플릿으로 사용자를 등록합니다. Data는 Base64로 인코딩된 JPEG 또는 장비 고유의 바이너리입니다. Size는 바이트 길이입니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [{ "Type": "Face", "UserID": "100", "Size": "25072", "Index": "0", "Data": "/9j/4AAQSkZJRgABAQAAAQABAAD..." }]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#17

AddUserWithFingerPrint

RESTful API서버 → 장비

지문 템플릿 1개로 사용자를 등록합니다. Index는 손가락 슬롯(0–9)을 지정합니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [{ "Type": "Fingerprint", "UserID": "100", "Size": "1176", "Index": "0", "Data": "TW9TUzIxAAAELC4ECAUHCc7Q..." }]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#18

AddUserWithPalm

RESTful API서버 → 장비

손바닥 정맥 템플릿으로 사용자를 등록합니다. Data는 Base64로 인코딩된 손바닥 바이너리입니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [{ "Type": "Palm", "UserID": "100", "Index": "0", "Data": "apUBEOAHv98IAAwAAc/qAgzWDlDL..." }]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#19

AddUserWithUserPhoto

RESTful API서버 → 장비

장비에 저장되는 프로필 사진과 함께 사용자를 등록합니다. Data는 Base64로 인코딩된 JPEG입니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [{ "Type": "UserPhoto", "UserID": "100", "Data": "/9j/4AAQSkZJRgABAQAAAQABAAD..." }]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#20

AddUserWithCardAndPassword

RESTful API서버 → 장비

카드 번호와 PIN을 모두 사용하여 사용자를 등록합니다 — Template 배열에 2개 항목이 들어갑니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Card",     "UserID": "100", "Data": "102836" },
      { "Type": "Password", "UserID": "100", "Data": "123456" }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#21

AddUserWithCardAndFingerPrint

RESTful API서버 → 장비

카드 번호와 지문 템플릿 1개로 사용자를 등록합니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Card",        "UserID": "100", "Data": "102836" },
      { "Type": "Fingerprint", "UserID": "100", "Size": "1176", "Index": "0", "Data": "TW9TUzIxAAAELC4E..." }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#22

AddUserWithPalmAndFace

RESTful API서버 → 장비

손바닥 정맥과 얼굴 템플릿을 모두 사용하여 사용자를 등록합니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Palm", "UserID": "100", "Index": "0", "Data": "apUBEOAHv98IAAwA..." },
      { "Type": "Face", "UserID": "100", "Size": "25072", "Index": "0", "Data": "/9j/4AAQSkZJRgAB..." }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#23

AddUserWithCard_FingerPrintAndFace

RESTful API서버 → 장비

카드, 지문, 얼굴로 사용자를 등록합니다 — 템플릿 3개.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Card",        "UserID": "100", "Data": "102836" },
      { "Type": "Fingerprint", "UserID": "100", "Size": "1176", "Index": "0", "Data": "TW9TUzIxAAAELC4E..." },
      { "Type": "Face",        "UserID": "100", "Size": "25072", "Index": "0", "Data": "/9j/4AAQSkZJRgAB..." }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#24

AddUserWithCard_PalmAndUserPhoto

RESTful API서버 → 장비

카드, 손바닥 정맥, 프로필 사진으로 사용자를 등록합니다 — 템플릿 3개.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Card",      "UserID": "100", "Data": "102836" },
      { "Type": "Palm",      "UserID": "100", "Index": "0", "Data": "apUBEOAHv98IAAwA..." },
      { "Type": "UserPhoto", "UserID": "100", "Data": "/9j/4AAQSkZJRgAB..." }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#25

AddUserWithCard_Password_FingerPrintAndFace

RESTful API서버 → 장비

카드, 비밀번호, 지문, 얼굴로 사용자를 등록합니다 — 템플릿 4개.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Card",        "UserID": "100", "Data": "102836" },
      { "Type": "Password",    "UserID": "100", "Data": "123456" },
      { "Type": "Fingerprint", "UserID": "100", "Size": "1176", "Index": "0", "Data": "TW9TUzIxAAAELC4E..." },
      { "Type": "Face",        "UserID": "100", "Size": "25072", "Index": "0", "Data": "/9j/4AAQSkZJRgAB..." }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#26

AddUserWithCard_Password_PalmAndUserPhoto

RESTful API서버 → 장비

카드, 비밀번호, 손바닥 정맥, 프로필 사진으로 사용자를 등록합니다 — 템플릿 4개.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Card",      "UserID": "100", "Data": "102836" },
      { "Type": "Password",  "UserID": "100", "Data": "123456" },
      { "Type": "Palm",      "UserID": "100", "Index": "0", "Data": "apUBEOAHv98IAAwA..." },
      { "Type": "UserPhoto", "UserID": "100", "Data": "/9j/4AAQSkZJRgAB..." }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#27

AddUserWithCard_FingerPrint_Password_Face_PalmAndUserPhoto

RESTful API서버 → 장비

카드, 지문, 비밀번호, 얼굴, 손바닥, 프로필 사진 등 6가지 인증 정보 유형을 모두 사용하여 사용자를 등록합니다.

요청
{
  "Add": {
    "User": { "UserID": "100", "FirstName": "Manu", "LastName": "Mona", "UserType": "USER" },
    "Template": [
      { "Type": "Card",        "UserID": "100", "Data": "102836" },
      { "Type": "Password",    "UserID": "100", "Data": "123456" },
      { "Type": "Fingerprint", "UserID": "100", "Size": "1176", "Index": "0", "Data": "TW9TUzIxAAAELC4E..." },
      { "Type": "Face",        "UserID": "100", "Size": "25072", "Index": "0", "Data": "/9j/4AAQSkZJRgAB..." },
      { "Type": "Palm",        "UserID": "100", "Index": "0",    "Data": "apUBEOAHv98IAAwA..." },
      { "Type": "UserPhoto",   "UserID": "100", "Data": "/9j/4AAQSkZJRgAB..." }
    ]
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#28

AddUserWithoutTemplate

RESTful API서버 → 장비

생체 정보 없이 장비에 사용자 레코드를 생성합니다. 템플릿을 별도로 등록하기 전에 미리 등록할 때 유용합니다.

요청
{
  "Add": {
    "User": { "UserID": "1", "FirstName": "Manu", "LastName": "Mona", "UserType": "User" }
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#29

DeleteUser

RESTful API서버 → 장비

특정 사용자와 해당 사용자의 모든 생체 템플릿을 장비에서 삭제합니다.

요청
{
  "Delete": { "User": { "UserID": "User123" } },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-11 16:15:31 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#30

DeleteAllUser

RESTful API서버 → 장비

모든 사용자와 해당 생체 템플릿을 장비에서 삭제합니다. 되돌릴 수 없습니다.

파괴적인 작업입니다. 등록된 모든 사용자와 템플릿이 장비에서 영구적으로 삭제됩니다.
요청
{
  "Delete": { "User": "All" },
  "OperationID": "j95xfejt3vr1",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 12:01:33 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "j95xfejt3vr1", "StatusCode": 0 }
#31

DeleteLogAll

RESTful API서버 → 장비

장비의 모든 근태 기록 로그를 삭제합니다. 사용자 레코드와 템플릿에는 영향을 주지 않습니다.

요청
{
  "Delete": { "Log": "All" },
  "OperationID": "j95xfejt3vr1",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 12:01:33 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "j95xfejt3vr1", "StatusCode": 0 }
#32

DeleteAttendancePhoto

RESTful API서버 → 장비

장비에 저장된 모든 기록 사진을 삭제합니다. 사진 촬영 기능이 있는 장비에 적용됩니다.

요청
{
  "Delete": { "PunchPhoto": "All" },
  "OperationID": "j95xfejt3vr1",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 12:01:33 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "j95xfejt3vr1", "StatusCode": 0 }
#33

ResendAttendance

RESTful API서버 → 장비

지정한 기간의 근태 로그를 콜백을 통해 사용자 서버로 다시 푸시하도록 장비에 지시합니다. 누락된 레코드를 복구할 때 유용합니다.

요청
{
  "OperationID": "j95xfejt3vr1",
  "Resend": {
    "PunchLog": {
      "Filter": {
        "StartTime": "2020-09-17 15:49:33 GMT +0530",
        "EndTime": "2020-09-17 16:20:33 GMT +0530"
      }
    }
  },
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 12:01:33 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "j95xfejt3vr1", "StatusCode": 0 }
#34

ResendAllUser

RESTful API서버 → 장비

등록된 모든 사용자 데이터(프로필 및 템플릿)를 콜백을 통해 사용자 서버로 다시 푸시하도록 장비에 지시합니다.

요청
{
  "OperationID": "j95xfejt3vr1",
  "Resend": { "User": "All" },
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 12:01:33 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "j95xfejt3vr1", "StatusCode": 0 }
#35

EnrollFingerPrint

RESTful API서버 → 장비

장비에서 지문 등록 세션을 시작하도록 합니다. 사용자가 장비 앞에 직접 있어야 합니다.

요청
{
  "Enroll": {
    "User": { "UserID": "3", "Type": "Fingerprint", "FirstName": "Rajesh", "LastName": "Ragavendhar" }
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2025-09-25 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#36

UpdateAccessTime

RESTful API서버 → 장비

사용자에게 시간 제한이 있는 접근 구간을 설정합니다. 사용자는 지정한 시작–종료 범위 내에서만 인증할 수 있습니다.

요청
{
  "Update": {
    "AccessTime": { "UserID": "20", "Start": "2022-07-11 00:00:00", "End": "2022-07-11 23:59:59" }
  },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-11 16:39:29 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#37

EnableUser

RESTful API서버 → 장비

이전에 비활성화된 사용자를 다시 활성화하여 장비에서 인증할 수 있도록 복원합니다.

요청
{
  "Update": { "User": { "UserID": "1", "Access": "enable" } },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }
#38

DisableUser

RESTful API서버 → 장비

사용자를 삭제하지 않고 비활성화합니다. 레코드와 템플릿은 유지되지만 다시 활성화할 때까지 인증이 차단됩니다.

요청
{
  "Update": { "User": { "UserID": "1", "Access": "disable" } },
  "OperationID": "1jxpjeoasu8wl",
  "AuthToken": "COJJ7eiiPBGUfmIQPvh2PJWWDLX7OuKs",
  "Time": "2020-09-17 11:09:09 GMT +0530"
}
응답
{ "Status": "done", "OperationID": "1jxpjeoasu8wl", "StatusCode": 0 }