> ## 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 벤더 User의 변경 가능한 필드(표시 이름, 메타데이터, 태그)를 업데이트합니다. 검증된 신원 필드는 변경할 수 없습니다. 호출당 과금되는 사용자 관리 기능입니다.



사용자 업데이트 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\`Goal: Partial-update a Didit User entity by vendor_data.

Endpoint: PATCH https://verification.didit.me/v3/users/{vendor_data}/
Auth header: x-api-key: <DIDIT_API_KEY>
Content-Type: application/json

Path param:
\- vendor_data (string, REQUIRED) — free-form string, NOT a UUID. URL-encode.

Request body (PARTIAL — only included fields are touched; auto-derived counters and session history are left alone):
\- full_name (string, max 512, nullable)
\- display_name (string, nullable)
\- date_of_birth (string YYYY-MM-DD, nullable)
\- status (enum) — "ACTIVE" | "FLAGGED" | "BLOCKED" (VendorUserStatusChoices). Setting "BLOCKED" auto-adds vendor_data to the system blocklist; flipping away removes it.
\- metadata (object, nullable) — REPLACES existing metadata wholesale; merge client-side if you only want to add keys.
\- approved_emails (object<string, boolean>)
\- approved_phones (object<string, boolean>)
\- issuing_states (object<ISO3, int>)
\- reason (string, optional, max 1000): why the status changed. Recorded as the comment of the STATUS_CHANGED entry in the user's activity (comments[].comment), only when this update actually changes status. Webhooks do not carry it.

curl:
curl -X PATCH 'https://verification.didit.me/v3/users/user-abc-123/' \
-H 'x-api-key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{"display_name": "Jane S.", "status": "FLAGGED", "reason": "Address does not match the billing country"}'

Response 200: full updated UserDetailItem (same shape as GET). See /reference/data-models.

Side effects:
\- Writes to the user's comments activity log (actor derived from the API key): a STATUS_CHANGED entry with reason when status changes, and a PROFILE_UPDATED entry when display_name, full_name, date_of_birth or metadata change.
\- last_activity_at bumped to now().
\- Concurrent updates: last-write-wins per field.
\- Re-sending an unchanged body is safe (no extra audit row).

Failure modes:
\- 400 — validation. Examples:
\{ "status": ["Invalid status. Valid options are: ACTIVE, FLAGGED, BLOCKED"] }
\{ "metadata": ["Metadata must be a JSON object."] }
date_of_birth must be YYYY-MM-DD.
\{ "reason": ["Ensure this field has no more than 1000 characters."] }
\- 401 — missing/invalid x-api-key. { "detail": "Authentication credentials were not provided." }
\- 403 — the API key is revoked or is not valid for this application. { "detail": "You do not have permission to perform this action." }
\- 403: a scoped API key without users write. { "detail": "This API key has no write access to people." }
\- 404 — vendor_data not found. { "detail": "Not found." }
\- 429 — rate-limited.

Notes:
\- vendor_data in the URL itself cannot be changed via this endpoint — create new + delete old to rekey.
\- For status-only flips, prefer the dedicated PATCH /v3/users/{vendor_data}/update-status/.
\- Overriding fields populated by a verified session is allowed but flagged in the audit log.

For end-to-end Didit integration, paste in the full prompt at /integration/integration-prompt.`

\</pre>



      
      

붙여넣을 곳

## 개요[사용자 엔티티](https://docs.didit.me/ko/entities/users/overview.md)의 변경 가능한 필드를 업데이트합니다. 확인된 사용자 인증(KYC) 세션에서 전파된 필드(`full_name`, `date_of_birth`, `portrait_image`, 집계 카운터, `features`)는 읽기 전용입니다.## 사용 시기- **자신의 메타데이터 업데이트** — 사용자를 다른 등급으로 옮기거나, 태그를 변경하거나, 내부 메모를 기록합니다.
- **이름 바꾸기** — 내부용 콘솔 보기에 더 적합한 `display_name`을 설정합니다.
- **확인된 데이터 덮어쓰기**(주의 필요) — 수동 덮어쓰기는 허용되지만 감사 로그에 기록됩니다.## 참고 사항- URL의 `vendor_data`는 이 엔드포인트로 변경할 수 없습니다. 키를 다시 지정해야 하는 경우에는 새 사용자를 생성한 다음 기존 사용자를 삭제합니다.
- `changed_fields` 배열이 포함된 `user.data.updated` webhook을 발송하므로, 소비자가 효율적으로 동기화할 수 있습니다.
- 여기서 `status`를 변경하는 작업은 [사용자 상태 업데이트](https://docs.didit.me/ko/management-api/users/update-status.md)와 같이 동작합니다. 변경 내역은 해당 사람의 활동에 기록되며, 선택 사항인 `reason`(최대 1000자)이 코멘트로 저장됩니다. `BLOCKED`로 설정하면 `vendor_data`가 시스템 차단 목록에 추가됩니다. `user.status.updated` webhook에는 `reason`이 포함되지 않습니다.
- 확인된 세션이 관리하는 필드에 PATCH를 보내면 덮어쓰기는 수락되지만, [감사 로그](https://docs.didit.me/ko/console/audit-logs.md)에 표시됩니다.## 권한기본 시크릿 키와 전체 액세스 권한을 가진 [API 키](https://docs.didit.me/ko/console/api-keys.md)는 언제나 이 엔드포인트를 호출할 수 있습니다. 사용자 지정 액세스 권한을 가진 키에는 **사용자**(`users`) 쓰기 권한이 필요합니다. 일부 워크플로나 승인된 세션으로만 제한된 키는 이 엔드포인트에 접근할 수 없습니다.Console의 [역할 및 권한](https://docs.didit.me/ko/console/roles-permissions.md)은 팀원이 Console에서 수행할 수 있는 작업을 결정합니다. 이 역할 및 권한은 API 키 요청에 대해서는 평가되지 않습니다.## 관련 문서- [사용자 작업](https://docs.didit.me/ko/entities/users/operations.md)
- [데이터 모델](https://docs.didit.me/ko/entities/users/data-model.md)
- [상태 업데이트](https://docs.didit.me/ko/management-api/users/update-status.md)


## OpenAPI

````yaml ko/openapi-25.json PATCH /v3/users/{vendor_data}/
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/users/{vendor_data}/:
    patch:
      tags:
        - Users
      summary: 사용자 업데이트
      description: >-
        사용자 정보의 부분 업데이트: `display_name`, `full_name`, `date_of_birth`, `status`,
        `metadata`, `approved_emails`/`approved_phones`/`issuing_states`.
        `metadata`는 전체가 대체됩니다. 여기서 `status`를 변경하는 것은 [사용자 상태
        업데이트](#patch-/v3/users/-vendor_data-/update-status/)와 동일하게 동작합니다. 선택적
        `reason`과 함께 `STATUS_CHANGED` 활동을 기록하며, `BLOCKED`는 `vendor_data`를 시스템 차단
        목록에 추가합니다(`BLOCKED`에서 다른 상태로 변경하면 해당 항목이 제거됨). `display_name`,
        `full_name`, `date_of_birth` 또는 `metadata`의 변경 사항은 `PROFILE_UPDATED`
        활동으로 기록됩니다.
      operationId: update_user
      parameters:
        - name: vendor_data
          in: path
          required: true
          schema:
            type: string
          description: 귀하가 지정한 사용자의 고유 식별자입니다(자유 형식 문자열, UUID 아님).
          example: user-abc-123
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                full_name:
                  type: string
                  nullable: true
                  maxLength: 512
                  description: 사용자의 성명
                display_name:
                  type: string
                  nullable: true
                  description: 이 사용자의 커스텀 표시 이름
                date_of_birth:
                  type: string
                  format: date
                  nullable: true
                  description: YYYY-MM-DD 형식의 생년월일
                status:
                  type: string
                  enum:
                    - ACTIVE
                    - FLAGGED
                    - BLOCKED
                  description: >-
                    사용자 라이프사이클 상태입니다. 변경 사항은 `STATUS_CHANGED` 활동으로 기록되며,
                    `BLOCKED`는 `vendor_data`를 시스템 차단 목록에 추가합니다(`BLOCKED` 상태에서
                    벗어나면 해당 항목이 제거됨).
                metadata:
                  type: object
                  nullable: true
                  description: >-
                    사용자에게 연결하는 임의의 JSON 객체입니다. 업데이트 시 기존 메타데이터를 **완전히 대체**합니다.
                    키만 추가하려면 클라이언트 측에서 병합하십시오.
                approved_emails:
                  type: array
                  items:
                    type: string
                  description: >-
                    이 사용자의 인증된 이메일 주소입니다(예: `["john@example.com"]`). 저장된 목록을 완전히
                    대체합니다.
                approved_phones:
                  type: array
                  items:
                    type: string
                  description: 이 사용자의 인증된 전화번호입니다. 저장된 목록을 완전히 대체합니다.
                issuing_states:
                  type: array
                  items:
                    type: string
                  description: >-
                    발급 국가 목록(ISO 3166-1 alpha-3, 예: `["USA"]`)입니다. 저장된 목록을 완전히
                    대체합니다.
                reason:
                  type: string
                  nullable: true
                  maxLength: 1000
                  description: >-
                    상태가 변경된 이유입니다. 상태가 실제로 변경될 때만 사용자 활동(`comments[].comment` 및
                    Business Console의 **Activity**)의 상태 변경 항목에 기록됩니다. webhook에는
                    포함되지 않습니다.
            examples:
              Rename:
                summary: 표시 이름 설정
                value:
                  display_name: Jane S.
              Override status:
                summary: 검토를 위해 사용자 플래그 지정
                value:
                  status: FLAGGED
              Add metadata:
                summary: 메타데이터 JSON 대체
                value:
                  metadata:
                    tier: premium
                    risk_level: low
              Fix extracted DOB:
                summary: 정확하게 추출된 프로필 필드
                value:
                  full_name: Jane Elizabeth Smith
                  date_of_birth: '1985-11-22'
              Flag with reason:
                summary: 사용자 플래그 지정 및 사유 기록
                value:
                  status: FLAGGED
                  reason: Address does not match the billing country
      responses:
        '200':
          description: 사용자가 업데이트되었습니다. 업데이트된 전체 사용자 레코드(Get User와 동일한 형식)가 반환됩니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserDetailItem'
              examples:
                Updated:
                  value:
                    didit_internal_id: f4e5e1f2-94a9-4f86-8c16-2b7d9b4db418
                    vendor_data: user-abc-123
                    display_name: Jane S.
                    full_name: Jane Elizabeth Smith
                    date_of_birth: '1985-11-22'
                    effective_name: Jane S.
                    status: FLAGGED
                    metadata:
                      tier: premium
                    portrait_image_url: https://<media-host>/...
                    session_count: 3
                    approved_count: 2
                    declined_count: 0
                    in_review_count: 1
                    issuing_states:
                      - USA
                    approved_emails:
                      - john@example.com
                    approved_phones:
                      - '+14155551234'
                    features:
                      ID_VERIFICATION: Approved
                      LIVENESS: Approved
                      FACE_MATCH: Approved
                      AML: Approved
                    features_list:
                      - feature: ID_VERIFICATION
                        status: Approved
                      - feature: LIVENESS
                        status: Approved
                      - feature: FACE_MATCH
                        status: Approved
                      - feature: AML
                        status: Approved
                    last_session_at: '2025-06-15T10:30:00Z'
                    last_activity_at: '2025-06-15T10:30:00Z'
                    first_session_at: '2025-06-01T08:00:00Z'
                    tags:
                      - uuid: 9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d
                        tag:
                          uuid: e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b
                          name: VIP
                          color: '#2567FF'
                          description: null
                          source: custom
                          created_at: '2025-05-01T09:00:00Z'
                          updated_at: '2025-05-01T09:00:00Z'
                        added_by_email: analyst@acme.com
                        added_by_name: Jane Analyst
                        created_at: '2025-06-02T11:00:00Z'
                    comments: []
                    created_at: '2025-06-01T08:00:00Z'
                    updated_at: '2025-06-15T10:30:00Z'
        '400':
          description: >-
            유효하지 않은 본문 — 일반적으로 알 수 없는 `status`이거나 `date_of_birth`가 `YYYY-MM-DD`
            형식이 아닙니다.
          content:
            application/json:
              examples:
                Bad status:
                  value:
                    status:
                      - '"INVALID" is not a valid choice.'
                Bad date_of_birth:
                  value:
                    date_of_birth:
                      - >-
                        Date has wrong format. Use one of these formats instead:
                        YYYY-MM-DD.
                Reason too long:
                  value:
                    reason:
                      - Ensure this field has no more than 1000 characters.
        '401':
          description: >-
            자격 증명이 제공되지 않았습니다. `x-api-key` 헤더(또는 `Authorization: Bearer` token)가
            없는 `/v3/users/*` 경로에 대한 요청은 API에 도달하기 전에 인증 미들웨어에 의해 거부됩니다.
          content:
            application/json:
              examples:
                Missing credentials:
                  value:
                    detail: >-
                      You must be authenticated with a valid access token to
                      access this endpoint.
        '403':
          description: >-
            키가 이 애플리케이션의 사용자를 업데이트할 수 없습니다. 키가 누락되면 `403`을 반환하고, 잘못되었거나 취소되었거나
            만료된 키는 `401`을 반환합니다.
          content:
            application/json:
              examples:
                Forbidden:
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: 이 애플리케이션에 제공된 `vendor_data`를 가진 사용자가 존재하지 않습니다.
          content:
            application/json:
              examples:
                Not found:
                  value:
                    detail: Not found.
        '429':
          description: 속도 제한 초과. 대기 후 `Retry-After`에 지정된 시간 간격이 지난 뒤 재시도하세요.
          content:
            application/json:
              examples:
                Rate limited:
                  value:
                    detail: Request was throttled. Expected available in 30 seconds.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: >-
            curl -X PATCH 'https://verification.didit.me/v3/users/user-abc-123/'
            \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{"display_name": "Jane S.", "status": "FLAGGED"}'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.users.update(
                "user-abc-123",
                display_name="Jane S.",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

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

            const result = await didit.users.update("user-abc-123", {
              display_name: "Jane S.",
            });
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Users.Update(ctx, \"user-abc-123\", didit.UsersUpdateParams{\n\tDisplayName: didit.String(\"Jane S.\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import me.didit.Didit;

            import me.didit.types.UsersUpdateParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result = client.users().update("user-abc-123",
            UsersUpdateParams.builder()
                    .displayName("Jane S.")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: |-
            <?php

            require 'vendor/autoload.php';

            use Didit\DiditClient;

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

            $result = $didit->users->update('user-abc-123', [
                'display_name' => 'Jane S.',
            ]);
            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

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

            result = didit.users.update(
              "user-abc-123",
              display_name: "Jane S."
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await client.Users.UpdateAsync("user-abc-123", new
            UsersUpdateParams

            {
                DisplayName = "Jane S.",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    UserDetailItem:
      type: object
      description: 전체 사용자 세부정보입니다. UserListItem을 메타데이터, 댓글 및 updated_at으로 확장합니다.
      allOf:
        - $ref: '#/components/schemas/UserListItem'
        - type: object
          properties:
            metadata:
              type: object
              description: 이 사용자에 첨부한 커스텀 메타데이터 JSON입니다. 기본값은 `{}`입니다.
            tags:
              type: array
              description: >-
                태그 할당입니다. 참고: 목록 응답에 사용되는 플랫한 `{uuid, name, color}` 형태와 달리, 상세
                응답의 각 항목은 태그 *링크* 객체(`{uuid, tag: {...}, added_by_email,
                added_by_name, created_at}`)입니다.
              items:
                type: object
                properties:
                  uuid:
                    type: string
                    format: uuid
                    description: 태그 할당의 UUID입니다(태그 자체의 UUID가 아님).
                  tag:
                    type: object
                    properties:
                      uuid:
                        type: string
                        format: uuid
                      name:
                        type: string
                      color:
                        type: string
                      description:
                        type: string
                        nullable: true
                      source:
                        type: string
                        enum:
                          - didit
                          - custom
                      created_at:
                        type: string
                        format: date-time
                      updated_at:
                        type: string
                        format: date-time
                  added_by_email:
                    type: string
                    nullable: true
                  added_by_name:
                    type: string
                    nullable: true
                  created_at:
                    type: string
                    format: date-time
            comments:
              type: array
              items:
                type: object
                properties:
                  uuid:
                    type: string
                    format: uuid
                  comment_type:
                    type: string
                    enum:
                      - COMMENT
                      - STATUS_CHANGED
                      - METADATA_UPDATED
                      - TAG_ADDED
                      - TAG_REMOVED
                      - PROFILE_UPDATED
                  comment:
                    type: string
                    nullable: true
                  actor_email:
                    type: string
                    nullable: true
                  actor_name:
                    type: string
                    nullable: true
                  previous_status:
                    type: string
                    nullable: true
                    enum:
                      - ACTIVE
                      - FLAGGED
                      - BLOCKED
                      - null
                  new_status:
                    type: string
                    nullable: true
                    enum:
                      - ACTIVE
                      - FLAGGED
                      - BLOCKED
                      - null
                  previous_value:
                    type: object
                    nullable: true
                    description: PROFILE_UPDATED 항목의 이전 필드 값입니다.
                  new_value:
                    type: object
                    nullable: true
                    description: PROFILE_UPDATED 항목의 새 필드 값입니다.
                  changed_fields:
                    type: array
                    items:
                      type: string
                    description: PROFILE_UPDATED 항목에 의해 변경된 필드의 이름입니다.
                  metadata:
                    type: object
                    nullable: true
                  mentioned_emails:
                    type: array
                    items:
                      type: string
                  created_at:
                    type: string
                    format: date-time
              description: 이 사용자의 활동 로그 및 댓글입니다(상태 변경, 프로필 수정, 수동 메모).
            updated_at:
              type: string
              format: date-time
    UserListItem:
      type: object
      description: 인증된 사용자입니다.
      properties:
        didit_internal_id:
          type: string
          format: uuid
          description: 이 사용자에 대한 Didit의 고유 내부 UUID입니다.
        vendor_data:
          type: string
          nullable: true
          description: >-
            귀하가 지정한 해당 사용자의 고유 식별자입니다(세션 생성 시 전달됨). 벤더 식별자가 제공되지 않은 경우 null일 수
            있습니다.
        display_name:
          type: string
          nullable: true
          description: 직접 설정한 커스텀 표시 이름
        full_name:
          type: string
          nullable: true
          description: 인증된 문서에서 추출된 성명
        date_of_birth:
          type: string
          format: date
          nullable: true
        effective_name:
          type: string
          nullable: true
          description: '사용 가능한 최적의 이름: display_name이 설정된 경우 해당 값, 그렇지 않으면 full_name'
        status:
          type: string
          enum:
            - ACTIVE
            - FLAGGED
            - BLOCKED
          description: >-
            사용자 레코드의 수명 주기 상태입니다(세션 상태가 아님). 기본값은 `ACTIVE`이며, `FLAGGED`는 사용자를 수동
            확인 필요로 표시하고, `BLOCKED`는 해당 `vendor_data`에 대한 새 세션을 방지합니다.
        portrait_image_url:
          type: string
          nullable: true
          description: 사용자의 사전 서명된 인물 사진 URL(몇 시간 후 만료됨)
        session_count:
          type: integer
          description: 해당 사용자의 총 인증 세션 수
        approved_count:
          type: integer
          description: 승인된 세션 수
        declined_count:
          type: integer
          description: 거부된 세션 수
        in_review_count:
          type: integer
          description: 검토 중인 세션 수
        issuing_states:
          type: array
          items:
            type: string
          description: >-
            이 사용자의 승인된 신분증 문서에서 확인된 발급 국가의 ISO 3166-1 alpha-3 코드 목록입니다(예:
            `["USA", "ESP"]`). 없는 경우 빈 배열입니다.
        approved_emails:
          type: array
          items:
            type: string
          description: '이 사용자의 승인된 세션에서 수집된 인증된 이메일 주소입니다(예: `["john@example.com"]`).'
        approved_phones:
          type: array
          items:
            type: string
          description: '이 사용자의 승인된 세션에서 수집된 인증된 전화번호입니다(예: `["+14155551234"]`).'
        features:
          type: object
          description: >-
            이 사용자의 모든 세션에 걸쳐 집계된 기능별 상태입니다. 가능한 키: `ID_VERIFICATION`, `NFC`,
            `LIVENESS`, `FACE_MATCH`, `POA`, `QUESTIONNAIRE`,
            `EMAIL_VERIFICATION`, `PHONE`, `AML`, `IP_ANALYSIS`,
            `AGE_ESTIMATION`, `DATABASE_VALIDATION`. 가능한 값: `Approved`,
            `Declined`, `In Review`, `Not Finished`, `Resub Requested`.
        features_list:
          type: array
          items:
            type: object
            properties:
              feature:
                type: string
              status:
                type: string
          description: '`features`와 동일한 데이터로, `{feature, status}` 객체의 정렬된 배열입니다.'
        last_session_at:
          type: string
          format: date-time
          nullable: true
          description: 가장 최근 세션의 타임스탬프
        first_session_at:
          type: string
          format: date-time
          nullable: true
          description: 첫 번째 세션의 타임스탬프
        last_activity_at:
          type: string
          format: date-time
          nullable: true
          description: 이 사용자에 대한 가장 최근 활동(세션, 거래, 상태 변경, 데이터 편집 등)의 타임스탬프입니다.
        tags:
          type: array
          items:
            type: object
            properties:
              uuid:
                type: string
                format: uuid
              name:
                type: string
              color:
                type: string
          description: 이 사용자에게 할당된 태그
        created_at:
          type: string
          format: date-time
  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.