> ## Documentation Index
> Fetch the complete documentation index at: https://docs.didit.me/llms.txt
> Use this file to discover all available pages before exploring further.

# 얼굴 대조 API: 1:1 얼굴 비교

> Didit의 1:1 얼굴 비교 API입니다. POST /v3/face-match/로 신원 확인, 접근 제어, 재인증을 수행합니다. 추론 2초 미만, 사용량 기반 요금, 월 최소 사용량 없음.



## OpenAPI

````yaml ko/openapi-25.json POST /v3/face-match/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: 신분증 인증 API입니다. x-api-key 헤더로 인증합니다.
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/face-match/:
    post:
      tags:
        - Standalone APIs
      summary: 얼굴 대조
      description: >-
        두 얼굴 이미지를 비교(1:1)하여 유사도 `score`(0–100)와 `Approved`/`Declined` `status`를
        반환합니다.


        **작동 방식.** 두 이미지는 생체 인식 모델에 의해 디코딩 및 분석되며(캡처가 옆으로 누워 있거나 뒤집혀 있을 수 있는 경우
        `rotate_image=true` 설정), 두 얼굴 간의 유사도 점수가 계산됩니다. 점수가
        `face_match_score_decline_threshold`(기본값 `30`)를 **초과**하면 `status:
        "Approved"`를 반환하고, 이하이면 `LOW_FACE_MATCH_SIMILARITY` 경고와 함께 `Declined`를
        반환합니다. 얼굴 쌍의 점수를 전혀 산출할 수 없는 경우에도 호출은 `200`과 함께 `status: "Declined"` 및
        `NO_REFERENCE_IMAGE` 경고를 반환합니다. 기본 저장 경로에서는 `score`가 `null`이고,
        `save_api_request=false`인 경우 `0`입니다. 최상의 결과를 위해 이미지당 선명한 정면 얼굴 하나를
        제출하세요.


        **결제.** 각 `200` 응답은 얼굴 대조 API 크레딧 1개를 소모합니다(요금제 크레딧 또는 충전 잔액에서 차감). 조직의
        잔액으로 호출 비용을 충당할 수 없는 경우, endpoint는 이미지 처리를 시작하기 전에 크레딧 부족 오류와 함께 `403`을
        반환합니다.


        **세션 지속성(`save_api_request`, 기본값 `true`).** `true`인 경우 호출이 API 유형 세션으로
        지속 저장됩니다. Business Console에 표시되고, 반환된 `request_id`는 `GET
        /v3/session/{sessionId}/decision/`에 전달할 수 있는 실제 세션 id이며, 두 이미지는 세션의 얼굴
        대조 소스/타겟 이미지로 저장되고, 설정된 webhook endpoint로 `status.updated` webhook이
        전송됩니다. `false`인 경우 아무것도 저장되지 않으며 `request_id`는 나중에 조회할 수 없는 일회성 상관관계
        UUID가 됩니다.


        **얼굴 검색 인덱스.** 이 endpoint는 얼굴 검색 인덱스에 얼굴을 등록하지 않으며 차단 목록 또는 중복 스크리닝을
        실행하지 않습니다. 이러한 작업에는 `POST /v3/passive-liveness/` 또는 `POST
        /v3/face-search/`를 사용하세요.


        **샌드박스.** 샌드박스 API 키는 모든 처리와 결제를 건너뜁니다. 요청 유효성 검사 후(형식이 잘못된 입력은 여전히
        `400` 반환), endpoint는 정적 `Approved` 모의 payload를 반환하며 세션이 지속 저장되지 않고 크레딧도
        소모되지 않습니다.


        **인증.** 애플리케이션의 API 키를 `x-api-key` 헤더에 담아 전송하세요. 자격 증명이 누락되었거나 유효하지 않은
        경우 `403`(`{"detail": "You do not have permission to perform this
        action."}`)을 반환합니다. 이 API는 `401`을 반환하지 않습니다.


        **속도 제한.** 모든 POST/PATCH/DELETE endpoint에 걸쳐 API 키당 분당 300개의 쓰기 요청 예산이
        공유되며, 이를 초과하면 `429`를 반환합니다.
      operationId: post_v3face-match
      parameters: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - user_image
                - ref_image
              properties:
                user_image:
                  type: string
                  format: binary
                  description: >-
                    인증할 실제 얼굴 또는 후보 얼굴 이미지(예: 셀피). 주체의 얼굴이 선명하게 보이고 조명이 밝은 단일 정면
                    사진을 제출하십시오. 허용되는 확장자: `tiff`, `jpg`, `jpeg`, `png`, `webp`.
                    최대 업로드 크기: **5 MB**(더 큰 파일은 `400`으로 거부됨). 이미지는 처리 전에 자동으로 약
                    0.5 MB로 압축되므로 초고해상도 이미지가 정확도를 향상시키지는 않습니다.
                ref_image:
                  type: string
                  format: binary
                  description: >-
                    대조할 기준 얼굴 이미지입니다(예: 신분증 문서 사진 또는 이전에 등록된 사진). `user_image`와
                    동일한 형식 및 크기 제한이 적용됩니다.
                face_match_score_decline_threshold:
                  type: number
                  format: float
                  default: 30
                  minimum: 0
                  maximum: 100
                  description: >-
                    응답 `status`를 결정하는 유사도 임계값(0–100)입니다. 계산된 점수가 이 값 **이하**이면
                    `status`가 `Declined`로 설정되고 `LOW_FACE_MATCH_SIMILARITY` 경고가
                    추가됩니다. 점수가 이 값보다 엄격히 높으면 `Approved`가 반환됩니다. 기본값 `30`은 허용적인
                    편입니다. 보다 엄격한 인증을 원하시면 이 값을 높이십시오(예: `50`–`60`). 0–100 범위를
                    벗어나는 값은 `400`을 반환합니다.
                  example: 50
                rotate_image:
                  type: boolean
                  default: false
                  description: >-
                    `true`인 경우 서비스가 입력 이미지들을 90도 단위(0, 90, 180, 270)로 시도하고 최적의
                    얼굴 감지 결과를 내는 방향을 사용합니다. EXIF 방향 정보가 누락된 모바일 촬영에 유용합니다. 지연
                    시간이 추가되므로 똑바른 이미지를 보장할 수 없는 경우에만 활성화하십시오.
                  example: false
                save_api_request:
                  type: boolean
                  default: true
                  description: >-
                    `true`(기본값)인 경우 호출을 API 유형 세션으로 저장합니다 — Business Console에서
                    확인할 수 있고 반환된 `request_id`를 사용하여 `GET
                    /v3/session/{sessionId}/decision/`을 통해 조회할 수 있으며
                    `status.updated` webhook을 통해 알림이 전송됩니다. `false`인 경우 아무것도
                    저장되지 않으며 `request_id`는 응답 상관관계 식별 전용의 일시적인 UUID입니다.
                  example: true
                vendor_data:
                  type: string
                  description: >-
                    저장된 세션에 저장되고 응답에 다시 반환되는 선택적 불투명 문자열(내부 사용자 ID, 이메일, UUID
                    등)입니다. API 호출을 자체 기록과 연관 짓고 나중에 세션을 필터링하는 데 사용합니다.
                  example: user-123
                metadata:
                  type: object
                  additionalProperties: true
                  description: >-
                    세션과 함께 저장되고(`save_api_request=true`인 경우) 응답에 그대로 반환되는 선택적
                    JSON 객체입니다. multipart 요청에서는 JSON 인코딩된 문자열 필드(예:
                    `metadata={"flow":"login"}`)로 전송하십시오. 객체로 파싱됩니다.
                  example:
                    flow: login
                    device_id: abc123
            example:
              user_image: (binary JPEG/PNG of the live selfie)
              ref_image: (binary JPEG/PNG of the reference photo)
              face_match_score_decline_threshold: 50
              rotate_image: false
              save_api_request: true
              vendor_data: user-123
              metadata:
                flow: login
      responses:
        '200':
          description: >-
            얼굴 대조가 계산되었습니다. `face_match.score`는 0–100 범위의 부동 소수점 수이며 소수점 이하 두
            자리까지 표시됩니다. 점수가 `face_match_score_decline_threshold`를 엄격히 초과하면
            `status`는 `Approved`이고, 그렇지 않으면 설명 경고와 함께 `Declined`입니다. 유사도가 낮거나
            점수를 매길 수 없는 쌍이라도 `200`을 반환하므로 HTTP 코드뿐만 아니라 `face_match.status` 및
            `face_match.warnings`를 확인하십시오. `save_api_request=true`인 경우,
            `request_id`는 저장된 세션 ID입니다.
          content:
            application/json:
              examples:
                Approved:
                  summary: 동일 인물 — 임계값을 초과하는 점수
                  value:
                    request_id: f9f5a777-8002-44c6-baaf-128bcfd6e226
                    face_match:
                      status: Approved
                      score: 99.41
                      user_image:
                        entities:
                          - bbox:
                              - 661
                              - 728
                              - 1688
                              - 2188
                            confidence: 0.732973
                            age: 26.91
                            gender: male
                            race: null
                        best_angle: 0
                      ref_image:
                        entities:
                          - bbox:
                              - 653
                              - 745
                              - 1691
                              - 2185
                            confidence: 0.722082
                            age: 27
                            gender: male
                            race: null
                        best_angle: 0
                      warnings: []
                    vendor_data: user-123
                    metadata:
                      flow: login
                    created_at: '2026-06-12T01:04:42.763237+00:00'
                Declined - low similarity:
                  summary: 거부 임계값 이하의 점수
                  value:
                    request_id: 7cdda24e-311a-46d3-a3bb-e5d9b564ce73
                    face_match:
                      status: Declined
                      score: 24.87
                      user_image:
                        entities:
                          - bbox:
                              - 661
                              - 728
                              - 1688
                              - 2188
                            confidence: 0.732973
                            age: 26.91
                            gender: male
                            race: null
                        best_angle: 0
                      ref_image:
                        entities:
                          - bbox:
                              - 156
                              - 234
                              - 679
                              - 898
                            confidence: 0.717775
                            age: 41.2
                            gender: male
                            race: null
                        best_angle: 0
                      warnings:
                        - risk: LOW_FACE_MATCH_SIMILARITY
                          feature: FACEMATCH
                          additional_data: null
                          log_type: error
                          short_description: Low face match similarity
                          long_description: >-
                            The facial features of the provided image don't
                            closely match the reference image, suggesting a
                            potential identity mismatch.
                    vendor_data: user-123
                    metadata: null
                    created_at: '2026-06-12T01:08:19.859116+00:00'
              schema:
                type: object
                properties:
                  request_id:
                    type: string
                    format: uuid
                    description: >-
                      `save_api_request=true`일 때 유지된 세션 ID(`GET
                      /v3/session/{sessionId}/decision/`와 함께 사용 가능), 그렇지 않으면 임시
                      상관관계 UUID입니다.
                  face_match:
                    type: object
                    properties:
                      status:
                        type: string
                        enum:
                          - Approved
                          - Declined
                        description: >-
                          유사도 점수가 `face_match_score_decline_threshold`를 엄격히 초과하고
                          점수를 계산할 수 있었던 경우 `Approved`, 그렇지 않은 경우 `Declined`(경고에
                          이유가 설명됨).
                      score:
                        type: number
                        format: float
                        nullable: true
                        minimum: 0
                        maximum: 100
                        description: >-
                          0부터 100까지의 유사도 점수로, 두 이미지가 동일인을 묘사하는지에 대한 모델의 신뢰도입니다.
                          `save_api_request`가 true인 경우에만 소수점 둘째 자리로 반올림되며,
                          `save_api_request=false`인 경우 원시 float 값이 반환됩니다. 점수를 매길
                          수 있는 얼굴 쌍이 없는 경우(기본값 `save_api_request=true` 적용 시)
                          `null`입니다. `save_api_request=false`인 경우 동일한 상태가
                          `score: 0`으로 나타날 수 있습니다. 어느 경우든 `NO_REFERENCE_IMAGE`
                          경고가 표시되며 `status`는 `Declined`가 됩니다.
                        example: 99.41
                      user_image:
                        type: object
                        description: 분석된 이미지들에 대한 얼굴 감지 결과입니다.
                        properties:
                          entities:
                            type: array
                            items:
                              type: object
                              properties:
                                bbox:
                                  type: array
                                  items:
                                    type: integer
                                  minItems: 4
                                  maxItems: 4
                                  description: >-
                                    처리된 이미지에서 `[x_min, y_min, x_max, y_max]` 픽셀
                                    좌표로 표시된 감지된 얼굴의 경계 상자입니다.
                                  example:
                                    - 661
                                    - 728
                                    - 1688
                                    - 2188
                                confidence:
                                  type: number
                                  format: float
                                  minimum: 0
                                  maximum: 1
                                  description: 얼굴 감지 신뢰도(0–1).
                                  example: 0.732973
                                age:
                                  type: number
                                  format: float
                                  description: >-
                                    감지된 얼굴의 모델 추정 연령(세 단위)입니다. 정보 제공용일 뿐이며 얼굴 대조
                                    결정에는 영향을 미치지 않습니다.
                                  example: 26.91
                                gender:
                                  type: string
                                  description: >-
                                    감지된 얼굴의 모델 예측 성별(`male` 또는 `female`)입니다. 정보
                                    제공용입니다.
                                  example: male
                                race:
                                  type: string
                                  nullable: true
                                  description: 예약된 필드 — 이 endpoint의 응답에서는 항상 `null`입니다.
                                  example: null
                            description: 감지된 얼굴당 항목 1개입니다.
                          best_angle:
                            type: integer
                            description: >-
                              가장 우수한 얼굴 감지를 생성한 회전 각도(도: 0, 90, 180 또는 270).
                              `rotate_image=true`로 방향을 수정한 경우에만 0이 아닙니다.
                            example: 0
                      ref_image:
                        type: object
                        description: 참조 이미지에 대한 얼굴 감지 결과로, `user_image`와 동일한 형식입니다.
                        properties:
                          entities:
                            type: array
                            items:
                              type: object
                              properties:
                                bbox:
                                  type: array
                                  items:
                                    type: integer
                                  minItems: 4
                                  maxItems: 4
                                  description: >-
                                    처리된 이미지에서 `[x_min, y_min, x_max, y_max]` 픽셀
                                    좌표로 표시된 감지된 얼굴의 경계 상자입니다.
                                  example:
                                    - 661
                                    - 728
                                    - 1688
                                    - 2188
                                confidence:
                                  type: number
                                  format: float
                                  minimum: 0
                                  maximum: 1
                                  description: 얼굴 감지 신뢰도(0–1).
                                  example: 0.732973
                                age:
                                  type: number
                                  format: float
                                  description: >-
                                    감지된 얼굴의 모델 추정 연령(세 단위)입니다. 정보 제공용일 뿐이며 얼굴 대조
                                    결정에는 영향을 미치지 않습니다.
                                  example: 26.91
                                gender:
                                  type: string
                                  description: >-
                                    감지된 얼굴의 모델 예측 성별(`male` 또는 `female`)입니다. 정보
                                    제공용입니다.
                                  example: male
                                race:
                                  type: string
                                  nullable: true
                                  description: 예약된 필드 — 이 endpoint의 응답에서는 항상 `null`입니다.
                                  example: null
                            description: 감지된 얼굴당 항목 1개입니다.
                          best_angle:
                            type: integer
                            example: 0
                      warnings:
                        type: array
                        description: >-
                          문제없이 승인된 경우 비어 있습니다. `NO_REFERENCE_IMAGE`(`error`) —
                          점수를 산정할 수 있는 얼굴 쌍이 없음,
                          `LOW_FACE_MATCH_SIMILARITY`(`error`) — 점수가 거부 임계값 이하임.
                          이 중 하나라도 해당되면 `status`가 `Declined`로 설정됩니다.
                        items:
                          type: object
                          properties:
                            risk:
                              type: string
                              enum:
                                - NO_REFERENCE_IMAGE
                                - LOW_FACE_MATCH_SIMILARITY
                              description: 기계 판독 가능한 위험 코드입니다.
                            feature:
                              type: string
                              enum:
                                - FACEMATCH
                              description: 경고를 발생시킨 기능입니다. 이 endpoint에서는 항상 `FACEMATCH`입니다.
                            additional_data:
                              type: object
                              nullable: true
                              additionalProperties: true
                              description: 얼굴 대조 경고의 경우 항상 `null`입니다.
                            log_type:
                              type: string
                              enum:
                                - error
                                - warning
                                - information
                              description: >-
                                심각도입니다. `error` 경고는 `status`를 `Declined`로 변경합니다.
                                `warning` 및 `information` 항목은 참고용이며 단독으로 거부되지
                                않습니다.
                            short_description:
                              type: string
                              description: 사람이 읽을 수 있는 한 줄의 위험 요약입니다.
                            long_description:
                              type: string
                              description: 위험에 대한 사람이 읽기 쉬운 설명입니다.
                  vendor_data:
                    type: string
                    nullable: true
                    description: 전송한 `vendor_data`의 에코 값 또는 `null`입니다.
                  metadata:
                    type: object
                    nullable: true
                    additionalProperties: true
                    description: 전송한 `metadata` 객체의 에코 값 또는 `null`입니다.
                  created_at:
                    type: string
                    format: date-time
                    description: >-
                      응답이 생성된 시점의 ISO 8601 타임스탬프(UTC)(예:
                      `2026-06-12T01:04:42.763237+00:00`)입니다.
        '400':
          description: >-
            유효성 검사 오류입니다. 필수 이미지가 누락되었거나, 5 MB를 초과하거나, 지원되지 않는 확장자이거나, 옵션이 범위를
            벗어난 경우 반환됩니다. 본문은 DRF의 표준 필드 오류 봉투(문제가 있는 필드당 메시지 배열 1개)입니다.
          content:
            application/json:
              examples:
                Missing required image:
                  summary: form data에 `ref_image`(또는 `user_image`)가 포함되지 않음
                  value:
                    ref_image:
                      - No file was submitted.
                Unsupported file extension:
                  summary: tiff/jpg/jpeg/png/webp 이외의 파일 확장자
                  value:
                    user_image:
                      - >-
                        File extension “txt” is not allowed. Allowed extensions
                        are: tiff, jpg, jpeg, png, webp.
                File too large:
                  summary: 업로드가 5MB 제한을 초과함
                  value:
                    user_image:
                      - File size should not exceed 5 MB
                Threshold out of range:
                  summary: '`face_match_score_decline_threshold`가 0–100 범위를 벗어남'
                  value:
                    face_match_score_decline_threshold:
                      - Ensure this value is less than or equal to 100.
        '403':
          description: >-
            권한이 거부되었습니다. `x-api-key` 헤더가 누락되었거나 호출한 조직의 잔액이 호출 비용을 충당할 수 없을 때
            반환됩니다. 잘못되었거나 취소되었거나 만료된 키는 `401`을 반환합니다. 키가 누락된 경우 `{"detail":
            ...}`과 함께 `403`을 반환하고, 잘못되었거나 취소되었거나 만료된 키는 `401`을 반환합니다. 크레딧이 부족한
            경우 어떠한 이미지 처리도 진행되기 전에 `{"error": ...}`과 함께 `403`을 반환합니다.
          content:
            application/json:
              examples:
                Missing or invalid API key:
                  summary: '`x-api-key` 헤더가 없거나, 키가 유효하지 않거나 해지되었습니다'
                  value:
                    detail: You do not have permission to perform this action.
                Not enough credits:
                  summary: 조직 잔액이 호출 비용을 충당할 수 없습니다
                  value:
                    error: >-
                      You don't have enough credits to perform this request.
                      Please top up at https://business.didit.me
        '429':
          description: >-
            속도 제한을 초과했습니다. POST/PATCH/DELETE endpoint는 API 키당 분당 300회의 쓰기 요청 한도를
            공유합니다(거래 생성 및 이벤트 수집은 별도로 600회 한도 적용). 응답에는 `X-RateLimit-Limit`,
            `X-RateLimit-Remaining`, `X-RateLimit-Reset`, `Retry-After` 헤더가
            포함됩니다.
          content:
            application/json:
              examples:
                Write rate limit exceeded:
                  summary: 현재 분 동안 300건을 초과하는 쓰기 요청 발생
                  value:
                    detail: >-
                      Write request rate limit exceeded. You can make up to 300
                      requests per minute.
              schema:
                type: object
                properties:
                  detail:
                    type: string
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: |-
            curl -X POST 'https://verification.didit.me/v3/face-match/' \
              -H 'x-api-key: YOUR_API_KEY' \
              -F 'user_image=@./selfie.jpg' \
              -F 'ref_image=@./id_portrait.jpg' \
              -F 'face_match_score_decline_threshold=50' \
              -F 'save_api_request=true' \
              -F 'vendor_data=user-123'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.face_match.compare(
                user_image=open("user_image.jpg", "rb"),
                ref_image=open("ref_image.jpg", "rb"),
                face_match_score_decline_threshold=50.0,
                rotate_image=False,
                save_api_request=True,
                vendor_data="user-123",
                metadata={"flow": "login"},
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit, { fileFromPath } from "@didit-protocol/sdk-node";

            // Reads DIDIT_API_KEY.
            const didit = new Didit();

            const result = await didit.faceMatch.compare({
              user_image: await fileFromPath("user_image.jpg"),
              ref_image: await fileFromPath("ref_image.jpg"),
              face_match_score_decline_threshold: 50.0,
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "login" },
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.FaceMatch.Compare(ctx, didit.FaceMatchCompareParams{\n\tUserImage:                      didit.FileFromPath(\"user_image.jpg\"),\n\tRefImage:                       didit.FileFromPath(\"ref_image.jpg\"),\n\tFaceMatchScoreDeclineThreshold: didit.Float(50.0),\n\tRotateImage:                    didit.Bool(false),\n\tSaveAPIRequest:                 didit.Bool(true),\n\tVendorData:                     didit.String(\"user-123\"),\n\tMetadata:                       didit.Some(map[string]any{\"flow\": \"login\"}),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.nio.file.Path;

            import java.util.Map;

            import me.didit.Didit;

            import me.didit.types.FaceMatchCompareParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.faceMatch().compare(FaceMatchCompareParams.builder()
                    .userImage(Path.of("user_image.jpg"))
                    .refImage(Path.of("ref_image.jpg"))
                    .faceMatchScoreDeclineThreshold(50.0)
                    .rotateImage(false)
                    .saveApiRequest(true)
                    .vendorData("user-123")
                    .metadata(Map.of("flow", "login"))
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;
            use Didit\File;

            // Reads DIDIT_API_KEY.
            $didit = new DiditClient();

            $result = $didit->faceMatch->compare([
                'user_image' => File::fromPath('user_image.jpg'),
                'ref_image' => File::fromPath('ref_image.jpg'),
                'face_match_score_decline_threshold' => 50.0,
                'rotate_image' => false,
                'save_api_request' => true,
                'vendor_data' => 'user-123',
                'metadata' => ['flow' => 'login'],
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Reads DIDIT_API_KEY.
            didit = Didit::Client.new

            result = didit.face_match.compare(
              user_image: Pathname("user_image.jpg"),
              ref_image: Pathname("ref_image.jpg"),
              face_match_score_decline_threshold: 50.0,
              rotate_image: false,
              save_api_request: true,
              vendor_data: "user-123",
              metadata: { flow: "login" }
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Collections.Generic;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.FaceMatch.CompareAsync(new
            FaceMatchCompareParams

            {
                UserImage = FileUpload.FromPath("user_image.jpg"),
                RefImage = FileUpload.FromPath("ref_image.jpg"),
                FaceMatchScoreDeclineThreshold = 50.0,
                RotateImage = false,
                SaveApiRequest = true,
                VendorData = "user-123",
                Metadata = new Dictionary<string, object> { ["flow"] = "login" },
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        Business Console의 Developers -> API keys에서 발급받은 귀하 애플리케이션의 API 키입니다. 기본
        키는 전체 접근 권한을 갖습니다. 이름이 지정된 키는 리소스별 none, read, write 범위로 권한을 제한할 수 있으며
        특정 워크플로나 승인된 세션, IP 주소 목록, 만료일 등으로 제한할 수도 있습니다. 401은 키가 잘못되었거나 폐기되었거나
        만료되었음을 의미합니다. 403은 키가 전송되지 않았거나, 키에 해당 리소스나 작업에 대한 접근 권한이 없거나, 요청이 허용된
        IP 목록 외부 주소에서 발생했음을 의미합니다. 세션 경로에서의 404는 해당 세션이 키의 허용 워크플로 또는 상태 범위를
        벗어났음을 의미합니다. 미디어 접근 권한이 없는 키는 이미지, 비디오, PDF URL을 null로 수신하며, 세션 write
        권한이 없는 키는 세션 링크와 token을 null로 수신합니다.
        https://docs.didit.me/console/api-keys 를 참고하십시오.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.