개요
얼굴 검색은 1:N 생체 인식 검색입니다. Didit은user_image에서 감지된 가장 큰 얼굴을 추출하여 애플리케이션의 얼굴 검색 색인(인증 세션, 저장된 독립형 API 호출, 사용자 프로필 직접 얼굴 업로드 및 차단/허용 목록에서 등록된 얼굴)을 대상으로 검색합니다. 이는 1:1 비교인 얼굴 대조와 구별됩니다. 얼굴 대조는 셀피를 특정 신분증의 인물 사진과 비교하는 반면, 얼굴 검색은 “이 사람을 이전에 본 적이 있는가?”를 확인합니다.
보고서를 파싱하기 전에 이해해야 할 두 가지 동작 방식이 있습니다.
- 차단 목록 일치 항목만 거부됩니다.
face_search.status는FACE_IN_BLOCKLIST또는POSSIBLE_FACE_IN_BLOCKLIST경고가 발생할 때만Declined가 됩니다. 중복 일치 항목만 있는 경우에는Approved를 반환하므로,status뿐만 아니라matches및warnings도 확인해야 합니다. - 선택적 영속화 및 등록.
save_api_request=true(기본값)인 경우 호출은 API 유형 세션으로 영속화되며 검색된 얼굴이 얼굴 검색 색인에 등록됩니다. 얼굴 검색 호출로 등록된 얼굴은 향후 얼굴 검색 결과에서 제외되므로, 반복된 검색이 서로 일치하지 않습니다. 일회성 조회의 경우save_api_request=false를 전달하면 아무것도 저장되지 않고 얼굴도 등록되지 않습니다.
결과 표시 위치
얼굴 검색은 독립형 API입니다. 검색 결과는POST /v3/face-search/ 응답에서만 동기식으로, 최상위 레벨의 단일 face_search 객체로 반환됩니다.
face_searches[] 배열은 존재하지 않습니다. 세션 결정 endpoint의 id_verifications[], aml_screenings[], liveness_checks[]에서 사용되는 복수형 배열 규칙은 적용되지 않습니다.
save_api_request=true(기본값)인 경우, 호출은 API 유형 세션으로도 영속화됩니다.
- 비즈니스 콘솔 — 세션 목록에 검색 이미지, 일치 항목 및 경고와 함께 세션이 표시됩니다.
GET /v3/session/{sessionId}/decision/— 반환된request_id를 세션 ID로 사용하여 조회할 수 있습니다. 영속화된 데이터는face_search객체가 아닌,features[]의FACE_SEARCH항목 및 저장된matches(새로 서명된match_image_url값 포함)와warnings를 포함하는liveness_checks[]항목으로 나타납니다.
save_api_request=false인 경우, request_id는 일시적인 상관관계 UUID입니다. 세션이 저장되지 않으므로 콘솔이나 결정 endpoint에서 조회할 수 없습니다.
스키마
표준 필드 표는 데이터 모델 참조의 얼굴 검색을 참고하십시오. 아래 구조는 런타임에 endpoint가 실제로 반환하는 형태를 반영합니다.matches[]는 유사도 하한선 이상의 항목 중 최대 5개로 제한되며 유사도 내림차순으로 정렬됩니다(search_type=blocklisted_or_approved는 차단 목록 항목을 먼저 배치한 다음 허용 목록, 그 다음 유사도 순으로 순위를 매깁니다).source는 일치하는 얼굴이 어디에서 등록되었는지를 나타냅니다.session은 인증 세션 또는 저장된 독립형 API 호출,imported는 사용자 프로필에 직접 업로드된 얼굴,list_entry는 목록 중 하나에 연결된 얼굴,retained_template은 원본 세션을 삭제한 후 애플리케이션이 보관한 이미지가 없는 생체 인식 템플릿입니다.imported,list_entry,retained_template일치 항목의 경우session_id,session_number,status,api_service는null입니다.retained_template일치 항목은vendor_user_id,vendor_data,biometric_template_id를 전달하며,match_image_url,user_details및 세션 관련 모든 항목은 항상null입니다. 얼굴을 생성한 세션이 더 이상 존재하지 않으며 템플릿에 이미지나 신원 데이터가 포함되어 있지 않기 때문입니다. 보관된 템플릿의 경우is_blocklisted는 항상false이며, 차단 목록에 등록된 얼굴은list_entry일치 항목으로 별도 보고됩니다.DELETE /v3/biometric-templates/{biometric_template_id}/를 사용하여 템플릿을 영구 삭제할 수 있습니다.api_service는 일치한 세션의 독립형 API 유형(대문자, 예:PASSIVE_LIVENESS)이며, 일치한 얼굴이 일반 워크플로 인증 세션에서 생성된 경우에는null입니다.user_details는 일치한 세션의 신분증 인증에서 가져옵니다.source: imported일치 항목의 경우 사용자 프로필에서 채워지며(full_name설정됨,document_type/document_number는 null), 신원 데이터가 없는 경우(예: 라이브니스 전용 세션)에는null입니다.- 경고는 워크플로 경고에 비해 축소된 구조를 사용합니다.
node_id가 없습니다. 문서화된 응답 명세(FaceSearchResponseSerializer)는risk,additional_data,log_type,short_description,long_description의 5개 필드를 선언하며, 런타임 payload에는 추가로feature가 포함되며 여기서는 항상"LIVENESS"입니다. 얼굴 검색 경고를 참고하십시오. - 동일 사용자 일치 항목은 제외되지 않습니다. 워크플로 중복 감지와 달리 독립형 endpoint는 동일한
vendor_data를 가진 이전 세션을 필터링하지 않으므로, 다시 방문한 정당한 사용자가 자신의 이전 세션과 일치하게 됩니다.
상태 값
최상위 레벨의face_search.status는 warnings[]에서 파생됩니다. 일치 항목 레벨의 status는 일치한 세션의 인증 결과를 반영하며 독립적입니다.
참고: 검색 이미지에 감지 가능한 얼굴이 없는 경우, API는
face_search 객체가 생성되기 전에 {"error": "No face detected in the image"}와 함께 HTTP 400을 반환합니다. 이 경우에는 Declined 상태가 존재하지 않습니다. 크레딧이 부족하면 이미지 처리가 시작되기 전에 HTTP 403을 반환합니다.
예시
Approved — 중복 일치, 차단 목록 없음
Declined — 차단 목록 일치
관련 문서
- 얼굴 검색 경고 — 검색에서 발생할 수 있는 모든 경고 코드
- 얼굴 검색 API 레퍼런스 — 요청 파라미터 및
search_type모드 - 데이터 모델 — 얼굴 검색 — 표준 스키마
- webhook — 저장된 세션의
status.updatedpayload
save_api_request=true인 경우, match_image_url 값은 서명된 유효 기간이 짧은 URL입니다. 새 URL을 가져오려면 반환된 request_id로 세션 결정 endpoint를 다시 호출하세요. save_api_request=false인 경우, 내부 저장소 경로이므로 직접 다운로드할 수 없습니다. 시스템에는 일치하는 세션 ID, 상태 및 similarity_percentage만 저장하고, 원본 생체 이미지는 보관하지 마세요.