API 레퍼런스: 아키텍처, 필드, 상태 코드

모든 오퍼레이션이 공통으로 사용하는 구성 요소: 요청 흐름, 공통 JSON 필드, 템플릿 유형, 상태 코드, 포트, 페이로드 암호화.

API 아키텍처

항목콜백 APIRESTful API
시작 주체장비 / Biometric Gateway사용자 서버
방향장비 → 사용자 서버사용자 서버 → 장비
지연 시간실시간 (밀리초)약 15초
트리거장비에서 발생한 생체인식 이벤트사용자 코드에서 보내는 HTTP POST
사용자의 역할수신 후 응답명령 전송 후 응답 폴링/대기
응답 본문{"status":"done"}{"Status":"done","OperationID":"…","StatusCode":0}
오프라인 시 동작엔진이 캐시하고 서버가 다시 온라인이 되면 전달엔진이 큐에 보관하고 장비가 다시 연결되면 전달

공통 필드

콜백과 RESTful의 모든 요청은 다음 최상위 필드를 공통으로 사용합니다.

AuthTokenString. 특정 장비의 요청을 식별하고 인증하는 32자리 토큰입니다. API Monitor 포털에서 설정합니다. 수신하는 모든 콜백에서 이 값을 검증하세요.
OperationIDString. 이 오퍼레이션 인스턴스를 고유하게 식별하는 ID입니다(예: "j95xfejt3vr1"). RESTful 응답은 동일한 OperationID를 반환하므로 요청과 응답을 매칭할 수 있습니다.
TimeString. 이벤트가 처리된 시각의 UTC 타임스탬프이며 형식은 YYYY-MM-DD HH:mm:ss GMT +0000입니다. 페이로드 내의 장비 로컬 타임스탬프는 다른 시간대 오프셋을 사용할 수 있습니다.
stgid (쿼리 매개변수)String. Service Tag ID — RESTful API 호출의 대상 장비를 식별합니다. API Monitor 계정에서 확인한 엔드포인트에 URL 쿼리 매개변수로 전달합니다: POST https://<your-endpoint>?stgid=YOUR_TAG_ID.

템플릿 유형

생체 정보와 인증 정보는 Template 배열로 전달됩니다. 각 항목에는 Type 필드가 있습니다:

템플릿 병합 동작 — 콜백 핸들러 구현 시 중요
장비에서 사용자 데이터가 푸시될 때(콜백 오퍼레이션 #3–#9) 템플릿은 여러 콜백에 나뉘어 한 건씩 또는 그룹으로 도착할 수 있습니다. 각 콜백에는 사용자의 전체 템플릿 세트가 포함되지 않으며, 추가되거나 변경된 템플릿만 포함됩니다.

서버는 수신한 템플릿을 해당 사용자의 기존 저장 템플릿과 병합해야 합니다. 각 템플릿의 고유 키는 Type + Index입니다. 예:
• 콜백 1이 Fingerprint Index 0과 함께 도착 → 저장
• 콜백 2가 Face Index 0 + Card와 함께 도착 → 병합하고 지문을 덮어쓰지 않음
• 콜백 3이 Fingerprint Index 0(새 데이터)과 함께 도착 → Index 0의 기존 지문을 업데이트
콜백에서 모든 템플릿을 교체하지 마세요. 항상 Type + Index 기준으로 upsert하세요.
유형설명주요 추가 필드
CardRFID / 근접 카드 번호Data(카드 번호 문자열)
Password숫자 PINData(PIN 문자열)
Fingerprint지문 템플릿 — Base64로 인코딩된 바이너리Index(손가락 인덱스 0–9), Size, Data
Face얼굴 템플릿 — Base64로 인코딩된 JPEG 또는 바이너리Index, Size, Data
Palm손바닥 정맥 템플릿 — Base64로 인코딩된 바이너리Index, Data
UserPhoto사용자 프로필 사진 — Base64로 인코딩된 JPEGData

응답 상태 코드

RESTful API 응답에는 숫자 StatusCode가 포함됩니다. 콜백 API 응답은 결과와 관계없이 항상 간단한 {"status":"done"} 형식을 사용합니다.

코드상태설명
0성공오퍼레이션이 정상적으로 완료되었습니다.
1잘못된 요청 데이터JSON 본문의 형식이 올바르지 않거나 잘못된 값이 포함되어 있습니다.
2잘못된 Service Tag IDstgid 쿼리 매개변수가 등록된 어떤 장비와도 일치하지 않습니다.
3잘못된 요청요청 구조가 예상되는 오퍼레이션 형식과 일치하지 않습니다.
4잘못된 암호화페이로드 암호화(AES-256)를 복호화할 수 없습니다. 암호화 키를 확인하세요.
5장비 오프라인대상 장비가 현재 Biometric Gateway에 연결되어 있지 않습니다.
6오퍼레이션 시간 초과장비가 제한 시간 내에 명령에 응답하지 않았습니다.
7잘못된 인증 토큰요청의 AuthToken이 장비에 설정된 토큰과 일치하지 않습니다.
8이미 존재하는 사용자장비에 이미 존재하는 UserID에 대해 추가 오퍼레이션이 시도되었습니다.
9사용자를 찾을 수 없음지정한 UserID가 장비에 존재하지 않습니다.
10템플릿 오류생체 템플릿 데이터가 손상되었거나 지원되지 않는 형식입니다.
11장비 메모리 부족장비가 최대 사용자 수 또는 템플릿 용량에 도달했습니다.
13잘못된 보안 키API Monitor에 설정된 보안 키가 일치하지 않습니다.
15지원되지 않는 기능요청한 오퍼레이션은 이 장비 모델 또는 통신 모드에서 지원되지 않습니다.
999알 수 없는 오류예기치 않은 오류가 발생했습니다. OperationID와 함께 Cams 지원팀에 문의하세요.

지원 포트

실시간 근태 정보를 수신하려면 서버가 Cams Protocol Engine에서 접근할 수 있는 HTTP(S) 엔드포인트를 노출해야 합니다.

포트프로토콜용도
80HTTP운영 환경. 콜백 URL을 80번 포트에 바인딩합니다. API Monitor에서 설정하며 기록이 발생할 때마다 자동으로 호출됩니다.
443HTTPS운영 환경(보안). 유효한 SSL 인증서를 사용하는 HTTPS입니다. 운영 환경에 권장됩니다.
8123HTTP테스트 전용. 개발 중에 임시로 사용할 수 있는 비표준 포트입니다.
HTTPS를 권장합니다. 운영 환경에서는 유효한 SSL 인증서와 함께 HTTPS를 사용하세요. 서버 재시작 없이 자동 갱신되도록 구성하세요.

샘플 데이터

38개 오퍼레이션 전체의 샘플 요청 및 응답 페이로드는 위의 각 오퍼레이션 섹션에 문서화되어 있습니다. 한눈에 보려면:

이 페이지위의 각 오퍼레이션 섹션에는 샘플 데이터가 포함된, 바로 복사해 쓸 수 있는 요청 및 응답 JSON이 있습니다.
이전 샘플 페이지biometric-web-api-sample-request-response.html — 오퍼레이션별 드롭다운 선택기 제공.

암호화

선택적으로 AES-256 암호화를 활성화하면 Cams Protocol Engine과 사용자 서버 간에 교환되는 모든 데이터를 암호화할 수 있습니다.

알고리즘AES-256, ECB 모드, PKCS5 패딩(AES/ECB/PKCS5PADDING).
키 설정API Monitor에서 키를 Security Key로 설정합니다. 설정하면 모든 raw JSON 페이로드가 암호화됩니다.
인코딩암호화된 페이로드는 안전한 HTTP 전송을 위해 Base64로 인코딩됩니다.

Java 예제

암호화 / 복호화 (Java)
// Encryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
SecretKeySpec keySpec = new SecretKeySpec(securityKey.getBytes("UTF-8"), "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);
String encrypted = Base64.getEncoder().encodeToString(cipher.doFinal(rawJson.getBytes("UTF-8")));

// Decryption
cipher.init(Cipher.DECRYPT_MODE, keySpec);
byte[] decoded = Base64.getDecoder().decode(encryptedPayload);
String decrypted = new String(cipher.doFinal(decoded), "UTF-8");
중요: 암호화를 활성화한 경우 수신하는 콜백 페이로드를 복호화하고, 송신하는 RESTful 요청 본문은 동일한 키로 암호화하세요.