메인 콘텐츠로 건너뛰기

개요

얼굴 검색은 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 — 차단 목록 일치

관련 문서

save_api_request=true인 경우, match_image_url 값은 서명된 유효 기간이 짧은 URL입니다. 새 URL을 가져오려면 반환된 request_id로 세션 결정 endpoint를 다시 호출하세요. save_api_request=false인 경우, 내부 저장소 경로이므로 직접 다운로드할 수 없습니다. 시스템에는 일치하는 세션 ID, 상태 및 similarity_percentage만 저장하고, 원본 생체 이미지는 보관하지 마세요.
마지막 수정일 2026년 11월 7일