> ## 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

> Didit의 GET /v3/biometric-templates/ 엔드포인트는 애플리케이션이 보관하는 이미지 없는 얼굴 생체 인식 템플릿을 사용자, 상태, 출처, 날짜로 필터링해 페이지 단위로 조회합니다.

애플리케이션이 현재 보유하고 있는 생체 인식 템플릿의 페이지네이션된 목록을 반환합니다. 파기된 템플릿은 목록에 포함되지 않습니다.

## 쿼리 파라미터

| 파라미터 | 유형 | 설명 |
| - | - | - |
| `vendor_data` | string | 소유 사용자의 현재 `vendor_data`에 대해 대소문자를 구분하지 않는 부분 문자열 일치 |
| `vendor_user_uuid` | UUID | 소유 사용자와 정확히 일치 |
| `status` | enum | `pending`, `active`, `expired`, `held_out_of_use`, `purge_pending`, `purge_failed` |
| `source_type` | enum | `session_delete`, `automatic_retention`, `backfill` |
| `retained_from` | datetime | 이 시점부터 보존된 템플릿 |
| `retained_to` | datetime | 이 시점까지 보존된 템플릿. `retained_from`보다 이른 시점일 수 없습니다. |
| `ordering` | enum | `retained_at`, `-retained_at` (기본값), `expires_at`, `-expires_at` |
| `limit` | integer | 페이지 크기 |
| `offset` | integer | 페이지네이션 오프셋 |

## 예시

```bash theme={null}
curl -X GET "https://verification.didit.me/v3/biometric-templates/?vendor_data=user-42&status=active" \
  -H "x-api-key: YOUR_API_KEY"
```

```json theme={null}
{
  "count": 1,
  "next": null,
  "previous": null,
  "results": [
    {
      "uuid": "9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b",
      "vendor_user_uuid": "2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f",
      "vendor_data": "user-42",
      "source_type": "session_delete",
      "provenance_reference": "6b1e8d2f-4a3c-4f9e-8c7d-1a2b3c4d5e6f",
      "retention_policy": "retain_until_user_deleted",
      "retention_override": null,
      "retained_at": "2026-08-28T10:15:42.318402Z",
      "expires_at": "2027-08-28T10:15:42.318402Z",
      "retained_by": "3c9e2b1f-7d4a-4e8b-9c1d-5f6a7b8c9d0e",
      "retained_by_type": "API_KEY",
      "instruction_class": "operational_session_delete",
      "instruction_source": "api",
      "instruction_id": "post-approval-cleanup-2026-08",
      "held_out_of_use": false,
      "status": "active",
      "purged_at": null
    }
  ]
}
```

모든 필드는 [개요](https://docs.didit.me/ko/management-api/biometric-templates/overview.md#템플릿-객체)에서 확인하십시오.

## 오류

| 상태 | 발생 조건 |
| - | - |
| `400` | 잘못된 필터 값이거나 `retained_to`가 `retained_from`보다 이른 경우 |
| `403` | 콘솔 사용자 토큰이거나 API 키가 허용되지 않은 경우 |


## OpenAPI

````yaml ko/openapi-25.json GET /v3/biometric-templates/
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/biometric-templates/:
    get:
      tags:
        - Biometric Templates
      summary: 보존된 생체 인식 템플릿 목록 조회
      description: >-
        옵트인된 애플리케이션은 세션이 삭제될 때 사용자에 연결된 별도로 관리되는 이미지가 없는 얼굴 생체 인식 템플릿 하나를
        유지합니다(`DELETE /v3/session/{sessionId}/delete/` 참조). 템플릿은 유한한
        `expires_at`을 가진 생체 인식 데이터입니다. 이미지, 세션 데이터 또는 신원 필드를 절대 포함하지 않으며, 사용자
        삭제, 프라이버시 삭제, 만료 또는 명시적 영구 삭제 시 제거됩니다. 이 endpoint들은 애플리케이션 API
        키(`x-api-key`)만 허용하며, Business Console 사용자 token은 `403`으로 거부됩니다.


        애플리케이션이 현재 보유하고 있는 템플릿의 페이지로 구분된 목록을 반환합니다. 영구 삭제된 템플릿은 나열되지 않습니다.
      operationId: list_biometric_templates
      parameters:
        - in: query
          name: vendor_data
          required: false
          description: 소유 사용자의 현재 `vendor_data`에 대해 대소문자를 구분하지 않는 부분 문자열 일치 검색.
          schema:
            type: string
        - in: query
          name: vendor_user_uuid
          required: false
          description: 소유한 사용자에 대한 정확한 일치입니다.
          schema:
            type: string
            format: uuid
        - in: query
          name: status
          required: false
          description: 수명 주기 상태입니다. 제거된 템플릿은 절대 나열되지 않습니다.
          schema:
            type: string
            enum:
              - pending
              - active
              - expired
              - held_out_of_use
              - purge_pending
              - purge_failed
        - in: query
          name: source_type
          required: false
          description: 템플릿이 생성된 방식입니다.
          schema:
            type: string
            enum:
              - session_delete
              - automatic_retention
              - backfill
        - in: query
          name: retained_from
          required: false
          description: 이 시간 이후(해당 시간 포함)에 보존된 템플릿입니다.
          schema:
            type: string
            format: date-time
        - in: query
          name: retained_to
          required: false
          description: 이 시간 이전(해당 시간 포함)에 보존된 템플릿입니다. `retained_from`보다 이전일 수 없습니다(`400`).
          schema:
            type: string
            format: date-time
        - in: query
          name: ordering
          required: false
          description: 정렬 순서입니다.
          schema:
            type: string
            enum:
              - retained_at
              - '-retained_at'
              - expires_at
              - '-expires_at'
            default: '-retained_at'
        - in: query
          name: limit
          required: false
          description: 페이지 크기입니다.
          schema:
            type: integer
        - in: query
          name: offset
          required: false
          description: 페이지네이션 오프셋입니다.
          schema:
            type: integer
      responses:
        '200':
          description: 페이지네이션된 템플릿 목록입니다.
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                  next:
                    type: string
                    nullable: true
                  previous:
                    type: string
                    nullable: true
                  results:
                    type: array
                    items:
                      type: object
                      properties:
                        uuid:
                          type: string
                          format: uuid
                          description: 템플릿 ID입니다. 무작위로 생성되며, 삭제된 세션이나 해당 얼굴에서 파생되지 않습니다.
                        vendor_user_uuid:
                          type: string
                          format: uuid
                          description: 소유한 사용자입니다.
                        vendor_data:
                          type: string
                          nullable: true
                          description: 템플릿을 읽을 때 확인되는 사용자의 현재 `vendor_data`입니다(복사되지 않음).
                        source_type:
                          type: string
                          enum:
                            - session_delete
                            - automatic_retention
                            - backfill
                          description: >-
                            템플릿이 생성된 방식: 세션 삭제(API 또는 콘솔), 애플리케이션의 자동 데이터 보존 기간
                            또는 귀하가 요청한 Didit 운영 백필입니다.
                        provenance_reference:
                          type: string
                          format: uuid
                          description: >-
                            템플릿을 해당 감사 로그와 연결하는 불투명 참조입니다. 삭제된 세션의 id가 아니며 해당
                            id로 확인할 수 없습니다.
                        retention_policy:
                          type: string
                          enum:
                            - delete_with_session
                            - retain_until_user_deleted
                          description: 보존 시점의 애플리케이션 정책입니다.
                        retention_override:
                          type: boolean
                          nullable: true
                          description: >-
                            삭제 시 전송된 `retain_face_embeddings` 값이며, 정책이 적용된 경우
                            `null`입니다.
                        retained_at:
                          type: string
                          format: date-time
                        expires_at:
                          type: string
                          format: date-time
                          description: 템플릿이 만료되어 자동으로 파기되는 시점입니다. 항상 설정됩니다.
                        retained_by:
                          type: string
                          nullable: true
                          description: >-
                            지침을 내린 주체: API 키의 경우 애플리케이션 ID, 콘솔 작업의 경우 콘솔 멤버 ID,
                            자동 보존의 경우 `service:` 식별자입니다. 이메일 주소는 사용할 수 없습니다.
                        retained_by_type:
                          type: string
                          enum:
                            - API_KEY
                            - CONSOLE_USER
                            - SYSTEM
                        instruction_class:
                          type: string
                          enum:
                            - operational_session_delete
                            - privacy_erasure
                        instruction_source:
                          type: string
                          enum:
                            - api
                            - console
                            - automatic_retention
                            - backfill
                            - privacy_erasure
                            - explicit_template_purge
                            - vendor_user_delete
                            - expiry
                            - reconciliation
                            - migration
                            - system
                        instruction_id:
                          type: string
                          description: 삭제 시 전송된 `instruction_id` 또는 Didit에서 생성된 id입니다.
                        held_out_of_use:
                          type: boolean
                          description: >-
                            법적 보존 조치가 적용되는 동안에만 `true`입니다. 보존 조치된 템플릿은 모든 대조에서
                            제외됩니다.
                        status:
                          type: string
                          enum:
                            - pending
                            - active
                            - expired
                            - held_out_of_use
                            - purge_pending
                            - purge_failed
                            - purged
                          description: >-
                            보류되지 않고, `expires_at`이 지나지 않았으며, 해당 사용자가 여전히 존재하는
                            `active` 템플릿만 대조에 참여합니다.
                        purged_at:
                          type: string
                          format: date-time
                          nullable: true
              examples:
                One active template:
                  value:
                    count: 1
                    next: null
                    previous: null
                    results:
                      - uuid: 9d2f4b6e-1c3a-4e8f-b7d5-0a1c2e3f4a5b
                        vendor_user_uuid: 2f7c1a9e-8b4d-4c6a-9e1f-3d5b7a9c1e2f
                        vendor_data: user-42
                        source_type: session_delete
                        provenance_reference: 6b1e8d2f-4a3c-4f9e-8c7d-1a2b3c4d5e6f
                        retention_policy: retain_until_user_deleted
                        retention_override: null
                        retained_at: '2026-08-28T10:15:42.318402Z'
                        expires_at: '2027-08-28T10:15:42.318402Z'
                        retained_by: 3c9e2b1f-7d4a-4e8b-9c1d-5f6a7b8c9d0e
                        retained_by_type: API_KEY
                        instruction_class: operational_session_delete
                        instruction_source: api
                        instruction_id: post-approval-cleanup-2026-08
                        held_out_of_use: false
                        status: active
                        purged_at: null
        '400':
          description: >-
            유효하지 않은 필터 값이거나, `retained_to`가 `retained_from`보다 이전입니다. 필드별 유효성 검사
            오류가 반환됩니다.
          content:
            application/json:
              examples:
                Bad range:
                  value:
                    retained_to:
                      - Must be on or after retained_from.
        '403':
          description: 콘솔 사용자 token이거나 허용되지 않은 API 키입니다. 이 endpoint들은 애플리케이션 API 키만 허용합니다.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X GET
            'https://verification.didit.me/v3/biometric-templates/?vendor_data=user-42&status=active'
            \
              -H 'x-api-key: YOUR_API_KEY'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            for item in client.biometric_templates.list():
                print(item)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

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

            for await (const item of didit.biometricTemplates.list()) {
              console.log(item);
            }
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\niter := client.BiometricTemplates.ListAutoPaging(ctx, didit.BiometricTemplatesListParams{})\nfor iter.Next() {\n\tfmt.Printf(\"%+v\\n\", iter.Current())\n}\nif err := iter.Err(); err != nil {\n\tlog.Fatal(err)\n}"
        - lang: java
          label: Java
          source: |-
            import me.didit.Didit;

            // Reads DIDIT_API_KEY.
            Didit client = new Didit();

            for (var item : client.biometricTemplates().list()) {
                System.out.println(item);
            }
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

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

            foreach ($didit->biometricTemplates->list() as $item) {
                print_r($item->toArray());
            }
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            didit.biometric_templates.list.auto_paging_each do |item|
              puts item.to_h
            end
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            await foreach (var item in await
            client.BiometricTemplates.ListAsync())

            {
                Console.WriteLine(JsonSerializer.Serialize(item));
            }
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.