> ## 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에서 리셀러 고객 앱, 브랜드, 환경 또는 분리된 사용 사례의 애플리케이션 메타데이터를 수정하려면 PATCH /organizations/me/{org_id}/applications/{app_id}/를 호출하세요.



애플리케이션 업데이트 프롬프트
        프롬프트를 클립보드에 복사



      
      

\<pre>

\`Partially update one Didit application's metadata (name, public URLs, redirect URIs, description). Credentials (client_id, api_key, uuid) are NEVER changed by this call.

Endpoint:
PATCH https://apx.didit.me/auth/v2/organizations/me/{org_id}/applications/{app_id}/

Authentication:
Authorization: Bearer <access_token>
The access token must belong to an OWNER or ADMIN of the organization.

Path parameters:
\- org_id (UUID, required) — Organization that owns the application.
\- app_id (UUID, required) — Application UUID to update.

Request body — PATCH semantics. Send ONLY the fields you want to change. Omitted fields are preserved.
\- name (string, optional) — Display name.
\- website_url (string, URL, optional) — Public homepage.
\- redirect_uris (array of strings, optional) — Allowlisted OAuth-style redirect URIs. The array REPLACES the previous value entirely.
\- terms_url (string, URL, optional) — Terms-of-service link.
\- privacy_url (string, URL, optional) — Privacy policy link.
\- description (string, optional) — Internal note (not shown to end users).
\- products is read-only: a products key in the body is ignored.
\- data_location (string, optional) — The application's data location, chosen when it was created. Naming the location it already has is accepted; any other location answers 400. One exception: the live application created with your organization (at sign-up or by POST /programmatic/verify-email/) has its location chosen by the first update that names data_location, once, while none of its API keys has been used and it has no verification session. Only "eu" (European Union, Ireland) is available today.

What does NOT change:
\- uuid, client_id, api_key — credentials stay the same. Existing integrations keep working; no key rotation happens here.
\- data_location — set when the application is created (see above for the one exception).

curl example — rename and move to a new domain:
curl -X PATCH "https://apx.didit.me/auth/v2/organizations/me/<ORG_ID>/applications/<APP_ID>/" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Production App",
"website_url": "https://app.acme.example"
}'

curl example — add a second redirect URI (full replacement of the array):
curl -X PATCH "https://apx.didit.me/auth/v2/organizations/me/<ORG_ID>/applications/<APP_ID>/" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"redirect_uris": [
  "https://acme.example/callback",
  "https://staging.acme.example/callback"
]
}'

Response (200 OK):
The full application record after the change, including products (same shape as GET /organizations/me/{org_id}/applications/{app_id}/). uuid, client_id, and api_key are unchanged.

When to call:
\- Reseller customer rebrands → rename their application.
\- Domain migration → update website_url, terms_url, privacy_url.
\- Add or remove a staging redirect URI.
\- Refresh terms / privacy URLs shown in the verification flow.

Failure modes:
\- 400 — { "<field>": ["Enter a valid URL."] } for malformed website_url / redirect_uris / terms_url / privacy_url.
\- 400 — { "data_location": ["An application's data location can't be changed after it is created."] } for a location other than the application's own, and { "data_location": ["This data location is not available yet."] } for "au" or "mx". Nothing is changed.
\- 503 — { "detail": "We couldn't confirm that this application is unused. Try again in a moment.", "code": "data_location_check_unavailable" } only while choosing the first application's location. Nothing is changed; retry.
\- 401: { "detail": "Invalid access token" } or { "detail": "Expired access token" } when the token is malformed or expired.
\- 403: { "detail": "Only organization owners and admins can manage applications." } when you are a member of the organization but not an owner or admin.
\- 403: { "detail": "Your access to this organization is suspended." } when your membership in the organization is suspended.
\- 403: { "detail": "You do not have permission to perform this action." } when the request has no Authorization header.
\- 404: { "detail": "Organization not found." } when the organization does not exist or you are not a member of it, or { "detail": "Application not found." } when the application is not in that organization.

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

\</pre>



      
      

붙여넣을 곳

이 엔드포인트를 사용하면 각 애플리케이션을 그것이 나타내는 고객, 브랜드, 환경 또는 내부 사용 사례에 맞게 유지할 수 있습니다.리셀러의 경우, 고객 간에 자격 증명을 공유하지 않고도 고객별 애플리케이션의 이름을 바꾸거나 업데이트할 수 있습니다. 직접 고객의 경우, 모든 것을 하나의 조직 아래에 두면서 제품, 리전 또는 환경을 구분하는 데 도움이 됩니다.> [!NOTE]
>
> 이 엔드포인트는 애플리케이션 메타데이터를 업데이트합니다. 자격 증명을 별도로 교체하지 않는 한 `api_key`는 그대로 유지됩니다.## 데이터 위치애플리케이션의 데이터 위치(`data_location`)는 애플리케이션을 생성할 때 선택되며 이후에는 변경할 수 없습니다. 애플리케이션이 이미 가진 위치를 지정하는 업데이트는 허용되며, 그 밖의 위치를 지정하면 400 응답이 반환됩니다.예외는 하나입니다. 가입 시 또는 [이메일 인증](https://docs.didit.me/ko/auth-api/verify-email.md)을 통해 조직과 함께 생성된 라이브 애플리케이션입니다. `data_location`을 지정하는 첫 번째 업데이트가 위치를 한 번만 선택하며, 이는 애플리케이션의 API 키가 하나도 사용되지 않았고 검증 세션이 없는 경우에 한합니다. 콘솔의 **첫 애플리케이션 이름 지정** 단계는 이 기능을 사용하여 여기서 선택한 위치를 저장합니다. 현재 사용 가능한 위치는 유럽 연합(아일랜드)인 `eu`뿐입니다.


## OpenAPI

````yaml ko/openapi-auth.json PATCH /organizations/me/{org_id}/applications/{app_id}/
openapi: 3.0.0
info:
  version: 1.0.0
  title: Didit Auth API
  description: >-
    개발자와 AI 에이전트를 위한 프로그래밍 방식 등록 및 인증 API입니다. 브라우저 없이 API 호출 2번만으로 등록할 수 있습니다.
    에이전트 친화성이 가장 뛰어난 신원 인증 플랫폼입니다.


    ## 기본 URL


    이 사양의 모든 endpoint는 `https://apx.didit.me/auth/v2`에서 호스팅됩니다. 이는 인증
    API(`https://verification.didit.me/v3`)와는 다른 호스트입니다. 혼동하지 않도록 유의하십시오. 이 인증
    호스트는 **JWT 액세스 토큰**을 발급하며 **조직** 및 **애플리케이션**을 나열하고 관리할 수 있도록 합니다. 인증 호스트는 이
    API가 반환한 **`api_key`**로 인증하여 세션, 워크플로, AML 등을 호출하는 곳입니다.


    ## 인증 흐름 작동 방식


    1. `POST /programmatic/register/` — 이메일 + 비밀번호 제출.

    2. 이메일로 6자리 영숫자 코드 수신.

    3. `POST /programmatic/verify-email/` — 코드 제출. JWT `access_token`,
    `refresh_token`, 조직, 그리고 `client_id` + `api_key`가 포함된 기본 애플리케이션을 반환받습니다.

    4. `api_key`를 저장합니다. `https://verification.didit.me/v3/...`에 대한 모든 호출에
    `x-api-key`로 사용하십시오.

    5. 향후 다른 머신에서 `POST /programmatic/login/`으로 이메일 + 비밀번호를 새 JWT로 교환한 다음, `GET
    /organizations/me/` 및 애플리케이션 endpoint를 호출하여 자격 증명을 복구하거나 교체할 수 있습니다.


    JWT는 이 사양의 **계정 관리** endpoint에만 필요합니다. 인증 API 트래픽은 JWT가 아닌 장기 유효 `api_key`를
    사용합니다.


    ## 규칙


    - 모든 요청 및 응답 본문은 JSON(`Content-Type: application/json`)입니다.

    - **`POST /programmatic/register/`를 테스트할 때는 실제로 수신 가능한 이메일 주소를 사용하십시오.**
    endpoint가 인증 코드를 동기식으로 전송하므로 예약된 테스트 도메인(`@example.com`, `@example.org`,
    `@*.test`, `@*.example`, `@*.invalid`)의 주소는 메일 발송이 거부되어 요청에서 `500`이 반환됩니다.
    샘플의 `you@yourdomain.com` 플레이스홀더를 실제로 확인할 수 있는 수신함 주소로 대체하십시오.

    - 유효성 검사 오류는 두 가지 엔벨로프 형식 중 하나와 함께 HTTP `400`을 반환합니다. 필드 수준 문제의 경우
    `{"field": ["message", ...]}` 형식이고, 비즈니스 규칙 오류의 경우 `{"detail": "message"}`
    형식입니다. 소수의 검증기(등록 시 비밀번호 강도, 이메일 인증 시 코드 만료)는 현재 필드 키 형식 대신 기본 배열
    `["message"]`로 응답합니다. 이는 서버 측의 알려진 불일치 사항이므로 클라이언트 코드가 두 형태를 모두 수용하도록 작성해야
    합니다.

    - 인증 오류는 HTTP `401`(유효하지 않은 Bearer 토큰) 또는 `403`(Bearer 토큰 누락 / 권한 부족)과 함께
    `{"detail": "..."}` 형태로 반환됩니다.

    - 속도 제한 응답에는 대기 시간을 초 단위로 나타내는 `wait` 필드가 포함됩니다.
servers:
  - url: https://apx.didit.me/auth/v2
    description: 프로덕션 인증 서버
security: []
tags:
  - name: Programmatic Auth
    description: >-
      이메일 및 비밀번호 계정 라이프사이클: 가입, 인증, 로그인. 계정 관리 endpoint에 사용할 JWT `access_token`과
      (인증 완료 시) 첫 번째 애플리케이션의 `client_id` 및 `api_key`를 반환합니다.
  - name: Account Management
    description: >-
      조직 목록을 조회하고 애플리케이션을 생성, 조회 또는 업데이트하는 인증된 endpoint(JWT bearer)입니다. 검증 API
      호출에 인증하는 데 사용하는 `api_key`를 복구하거나 교체할 때 사용하십시오.
paths:
  /organizations/me/{org_id}/applications/{app_id}/:
    patch:
      tags:
        - Account Management
      summary: 애플리케이션 업데이트
      description: >-
        애플리케이션 메타데이터(이름, URL, 리디렉션 URI)를 업데이트합니다. `api_key` 및 `client_id`는 교체되지
        않습니다. `products`는 읽기 전용이므로 본문의 `products` 키는 무시됩니다. `data_location`은
        애플리케이션 생성 후 변경할 수 없으나, 조직과 함께 생성된 미사용 라이브 애플리케이션에 한해 1회 변경할 수 있습니다(요청 본문
        참조). 소유자/관리자 JWT가 필요합니다.
      operationId: update_organization_application
      parameters:
        - name: org_id
          in: path
          required: true
          description: 해당 애플리케이션을 소유한 조직의 UUID입니다.
          schema:
            type: string
            format: uuid
            example: a1b2c3d4-5678-90ab-cdef-111111111111
        - name: app_id
          in: path
          required: true
          description: 업데이트할 애플리케이션의 UUID입니다.
          schema:
            type: string
            format: uuid
            example: b2c3d4e5-6789-01bc-defg-222222222222
      requestBody:
        required: true
        description: '변경하려는 필드만 전송하십시오. PATCH 시맨틱: 누락된 필드는 유지됩니다.'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationUpdateRequest'
            examples:
              RenameCustomerApplication:
                summary: 이름을 바꾸고 새 도메인으로 이동
                value:
                  name: Acme Production App
                  website_url: https://app.acme.example
              UpdateRedirectUris:
                summary: 두 번째 리디렉션 URI 추가
                value:
                  redirect_uris:
                    - https://acme.example/callback
                    - https://staging.acme.example/callback
              UpdatePolicies:
                summary: 이용약관 및 개인정보 처리방침 URL 새로고침
                value:
                  terms_url: https://acme.example/v2/terms
                  privacy_url: https://acme.example/v2/privacy
      responses:
        '200':
          description: >-
            애플리케이션이 업데이트되었습니다. 응답은 `products`를 포함하여 변경 후의 전체 애플리케이션 레코드이며,
            `uuid`, `client_id` 및 `api_key`는 변경되지 않습니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
              examples:
                Success:
                  value:
                    uuid: b2c3d4e5-6789-01bc-defg-222222222222
                    name: Acme Production App
                    client_id: S9LIYGSoWNuGMLHsvEt9dQ
                    api_key: sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    website_url: https://app.acme.example
                    redirect_uris:
                      - https://acme.example/callback
                    terms_url: https://acme.example/terms
                    privacy_url: https://acme.example/privacy
                    description: null
                    created_at: '2025-06-01T10:00:00Z'
                    data_location: eu
                    products:
                      - product: identity
                        status: enabled
                        modules:
                          user_verification: true
                          business_verification: true
                          case_management: true
                      - product: transactions
                        status: disabled
                        modules:
                          travel_rule: true
                          case_management: true
                      - product: authentication
                        status: disabled
                        modules: {}
        '400':
          description: >-
            요청 본문의 검증 오류: 예를 들어 잘못된 형식의 URL, 아직 사용할 수 없는 `data_location`, 또는
            애플리케이션 자체의 위치가 아닌 `data_location`입니다. 아무것도 변경되지 않습니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              examples:
                InvalidUrl:
                  value:
                    website_url:
                      - Enter a valid URL.
                DataLocationFixed:
                  summary: 애플리케이션 자체 위치와 다른 데이터 보관 위치
                  value:
                    data_location:
                      - >-
                        An application's data location can't be changed after it
                        is created.
                DataLocationNotAvailable:
                  summary: 곧 지원 예정인 데이터 위치
                  value:
                    data_location:
                      - This data location is not available yet.
        '401':
          description: >-
            액세스 token의 형식이 잘못되었거나, 유효하지 않거나, 만료되었습니다. `POST
            /programmatic/login/`으로 새 token을 받으십시오.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                InvalidToken:
                  value:
                    detail: Invalid access token
                ExpiredToken:
                  value:
                    detail: Expired access token
        '403':
          description: >-
            이 애플리케이션을 업데이트할 수 없습니다. 소유자나 관리자가 아닌 조직 멤버에게는 `Only organization
            owners and admins can manage applications.` 메시지가 반환됩니다. 조직에 대한 접근이
            정지된 소유자나 관리자에게는 `Your access to this organization is suspended.`
            메시지가 반환됩니다. `Authorization` 헤더가 없는 요청에는 `You do not have permission
            to perform this action.` 메시지가 반환됩니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                NotOwnerOrAdmin:
                  summary: 소유자나 관리자가 아닌 멤버
                  value:
                    detail: >-
                      Only organization owners and admins can manage
                      applications.
                Suspended:
                  summary: 멤버십 정지됨
                  value:
                    detail: Your access to this organization is suspended.
                MissingToken:
                  summary: Authorization 헤더가 없습니다
                  value:
                    detail: You do not have permission to perform this action.
        '404':
          description: 조직이 존재하지 않거나 해당 조직의 멤버가 아니거나, 해당 조직에 애플리케이션이 존재하지 않습니다.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                OrganizationNotFound:
                  summary: 조직을 찾을 수 없거나 멤버가 아닙니다
                  value:
                    detail: Organization not found.
                ApplicationNotFound:
                  summary: 이 조직에 해당 애플리케이션이 없습니다
                  value:
                    detail: Application not found.
        '503':
          description: >-
            업데이트 시 조직과 함께 생성된 프로덕션 애플리케이션의 다른 데이터 위치를 선택한 경우에만 해당합니다: Didit이
            애플리케이션에 아직 인증 세션이 없음을 확인할 수 없어 아무것도 변경되지 않았습니다. 요청을 재시도하십시오.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceUnavailableError'
              examples:
                DataLocationCheckUnavailable:
                  value:
                    detail: >-
                      We couldn't confirm that this application is unused. Try
                      again in a moment.
                    code: data_location_check_unavailable
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl -X PATCH
            "https://apx.didit.me/auth/v2/organizations/me/$ORG_ID/applications/$APP_ID/"
            \
              -H "Authorization: Bearer $ACCESS_TOKEN" \
              -H "Content-Type: application/json" \
              -d '{
                "name": "Acme Production App",
                "website_url": "https://app.acme.example"
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Use the access token that account.login returns.
            client = Didit(account_token="YOUR_ACCESS_TOKEN")

            result = client.account.applications.update(
                "a1b2c3d4-5678-90ab-cdef-111111111111",
                "b2c3d4e5-6789-01bc-defg-222222222222",
                name="Acme Production App",
                website_url="https://app.acme.example",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

            // Use the access token that account.login returns.
            const didit = new Didit({ accountToken: "YOUR_ACCESS_TOKEN" });

            const result = await didit.account.applications.update(
              "a1b2c3d4-5678-90ab-cdef-111111111111",
              "b2c3d4e5-6789-01bc-defg-222222222222",
              {
                name: "Acme Production App",
                website_url: "https://app.acme.example",
              },
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Use the access token that account.login returns.\nclient := didit.NewClient(option.WithAccountToken(\"YOUR_ACCESS_TOKEN\"))\n\nresult, err := client.Account.Applications.Update(ctx, \"a1b2c3d4-5678-90ab-cdef-111111111111\", \"b2c3d4e5-6789-01bc-defg-222222222222\", didit.ApplicationUpdateRequest{\n\tName:       didit.String(\"Acme Production App\"),\n\tWebsiteURL: didit.String(\"https://app.acme.example\"),\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.ApplicationUpdateRequest;


            // Use the access token that account.login returns.

            Didit client =
            Didit.builder().accountToken("YOUR_ACCESS_TOKEN").build();


            var result =
            client.account().applications().update("a1b2c3d4-5678-90ab-cdef-111111111111",
            "b2c3d4e5-6789-01bc-defg-222222222222",
            ApplicationUpdateRequest.builder()
                    .name("Acme Production App")
                    .websiteUrl("https://app.acme.example")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Use the access token that account.login returns.

            $didit = new DiditClient(accountToken: 'YOUR_ACCESS_TOKEN');


            $result =
            $didit->account->applications->update('a1b2c3d4-5678-90ab-cdef-111111111111',
            'b2c3d4e5-6789-01bc-defg-222222222222', [
                'name' => 'Acme Production App',
                'website_url' => 'https://app.acme.example',
            ]);

            print_r($result->toArray());
        - lang: ruby
          label: Ruby
          source: |-
            require "didit"

            # Use the access token that account.login returns.
            didit = Didit::Client.new(account_token: "YOUR_ACCESS_TOKEN")

            result = didit.account.applications.update(
              "a1b2c3d4-5678-90ab-cdef-111111111111",
              "b2c3d4e5-6789-01bc-defg-222222222222",
              name: "Acme Production App",
              website_url: "https://app.acme.example"
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Use the access token that account.login returns.

            using var client = new DiditClient(new DiditClientOptions {
            AccountToken = "YOUR_ACCESS_TOKEN" });


            var result = await
            client.Account.Applications.UpdateAsync("a1b2c3d4-5678-90ab-cdef-111111111111",
            "b2c3d4e5-6789-01bc-defg-222222222222", new ApplicationUpdateRequest

            {
                Name = "Acme Production App",
                WebsiteUrl = "https://app.acme.example",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    ApplicationUpdateRequest:
      type: object
      description: >-
        애플리케이션 메타데이터를 위한 PATCH 본문입니다. 변경하려는 필드만 전송하십시오. 생략된 필드는 유지됩니다. `uuid`,
        `client_id`, `api_key`는 업데이트할 수 없습니다. `products`는 읽기 전용입니다. 본문의
        `products` 키는 무시됩니다. `data_location`은 애플리케이션이 생성된 후에는 변경할 수 없습니다. 이미 설정된
        위치를 지정하면 수락되고, 다른 위치를 지정하면 400으로 응답합니다. 유일한 예외는 조직과 함께 생성된 프로덕션
        애플리케이션입니다. 애플리케이션의 API 키가 사용되지 않았고 인증 세션이 없는 동안 `data_location`을 지정하는 첫
        번째 업데이트에서 해당 위치가 한 번 선택됩니다.
      properties:
        name:
          type: string
          description: 애플리케이션 표시 이름입니다.
          example: Acme Production App
        website_url:
          type: string
          description: 이 애플리케이션과 연결된 웹사이트 또는 앱 URL입니다.
          example: https://app.acme.example
        redirect_uris:
          type: array
          items:
            type: string
          description: OAuth 스타일 및 인증 리디렉션 워크플로에 허용된 리디렉션 URI입니다.
          example:
            - https://acme.example/callback
        terms_url:
          type: string
          description: 인증 흐름에 표시되는 서비스 이용약관 URL입니다.
        privacy_url:
          type: string
          description: 인증 플로우에 표시되는 개인정보 처리방침 URL입니다.
        description:
          type: string
          description: 애플리케이션에 대한 내부 설명입니다.
        data_location:
          $ref: '#/components/schemas/ApplicationDataLocation'
    Application:
      type: object
      description: >-
        전체 애플리케이션 레코드입니다. `uuid`, `client_id`, `api_key`는 생성 후 절대 변경되지 않습니다.
        `data_location` 역시 변경되지 않으나, 조직과 함께 생성된 라이브 애플리케이션에서 사용 전 한 번만 변경할 수
        있습니다(업데이트 요청 참조).
      properties:
        uuid:
          type: string
          format: uuid
          description: 애플리케이션 UUID입니다. 후속 호출에서 `{app_id}`로 사용합니다.
          example: b2c3d4e5-6789-01bc-defg-222222222222
        name:
          type: string
          description: Didit 콘솔에 표시되는 애플리케이션 표시 이름입니다.
          example: Acme Production App
        client_id:
          type: string
          description: OAuth 스타일 플로우에 안전하게 삽입할 수 있는 공개 클라이언트 식별자입니다.
          example: S9LIYGSoWNuGMLHsvEt9dQ
        api_key:
          type: string
          description: >-
            장기간 유지되는 시크릿(`client_secret`이라고도 함).
            `https://verification.didit.me/v3/...`에 대한 모든 호출(세션, 워크플로, AML 등)의
            `x-api-key` 헤더로 사용합니다. 자격 증명으로 취급해야 하며 클라이언트 측에 절대 노출하지 마십시오. 새 키는
            `sk_live_`(프로덕션 애플리케이션) 또는 `sk_test_`(샌드박스 애플리케이션)로 시작하며 그 뒤에 URL에
            안전한 43자리 문자(영문자, 숫자, `-` 및 `_`)가 옵니다. 이 형식 이전에 생성된 키에는 접두사가 없으며 변경
            없이 계속 작동합니다. 계정을 복구한 후 72시간 동안 목록 조회, 단건 조회, 수정 시 키 대신 빈 문자열이 반환됩니다.
          example: sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        website_url:
          type: string
          nullable: true
          description: 이 애플리케이션과 연결된 웹사이트 또는 앱 URL입니다.
          example: https://acme.example
        redirect_uris:
          type: array
          items:
            type: string
          description: OAuth 스타일 및 인증 리디렉션 워크플로에 허용된 리디렉션 URI입니다.
          example:
            - https://acme.example/callback
        terms_url:
          type: string
          nullable: true
          description: 인증 흐름에 표시되는 서비스 이용약관 URL입니다.
          example: https://acme.example/terms
        privacy_url:
          type: string
          nullable: true
          description: 인증 플로우에 표시되는 개인정보 처리방침 URL입니다.
          example: https://acme.example/privacy
        description:
          type: string
          nullable: true
          description: 애플리케이션에 대한 내부 설명(최종 사용자에게는 표시되지 않음).
        created_at:
          type: string
          format: date-time
          example: '2025-06-01T10:00:00Z'
        data_location:
          $ref: '#/components/schemas/ApplicationDataLocation'
        products:
          type: array
          readOnly: true
          description: >-
            애플리케이션의 제품입니다. 항상 세 가지 모두 다음 순서로 포함됩니다: `identity`, `transactions`,
            `authentication`. 새 애플리케이션은 `identity`가 모든 모듈과 함께 활성화되어 있고,
            `transactions` 및 `authentication`은 비활성화되어 있습니다. 읽기 전용: 생성 또는 업데이트
            본문의 `products` 키는 무시됩니다.
          items:
            $ref: '#/components/schemas/ApplicationProduct'
          example:
            - product: identity
              status: enabled
              modules:
                user_verification: true
                business_verification: true
                case_management: true
            - product: transactions
              status: disabled
              modules:
                travel_rule: true
                case_management: true
            - product: authentication
              status: disabled
              modules: {}
    ValidationError:
      description: >-
        검증 오류 본문. 의도된 엔벨로프는 필드 수준 오류의 경우 `{field: ["message", ...]}` 맵이거나 비즈니스
        규칙 오류의 경우 `{detail: "..."}` 단일 키 엔벨로프입니다. 소수의 검증기(회원가입 시 비밀번호 강도,
        verify-email 시 코드 유효성)는 현재 단순 배열 `["message"]`로 응답합니다(알려진 서버 측 불일치). 아래
        스키마는 이 사양에서 생성된 클라이언트 코드가 현재 응답을 역직렬화할 수 있도록 해당 단순 배열 분기를 유지하지만, 새로운
        클라이언트 코드는 이를 관련 필드 키 형식(`{password: [...]}` 또는 `{code: [...]}`)으로 처리해야
        하며 향후 서버 규약도 해당 형태로 통일될 예정입니다.
      oneOf:
        - type: object
          additionalProperties:
            type: array
            items:
              type: string
          example:
            email:
              - Enter a valid email address.
        - type: object
          properties:
            detail:
              type: string
          example:
            detail: An account with this email already exists.
        - type: array
          items:
            type: string
          example:
            - Invalid or expired verification code.
    AuthError:
      type: object
      description: 인증 / 권한 부여 / 찾을 수 없음 오류 엔벨로프입니다.
      properties:
        detail:
          type: string
          example: Invalid access token
    ServiceUnavailableError:
      type: object
      description: 지금은 요청을 완료할 수 없으며 아무것도 변경되지 않았습니다. 잠시 후 다시 시도하세요.
      properties:
        detail:
          type: string
          example: >-
            We couldn't confirm that this application is unused. Try again in a
            moment.
        code:
          type: string
          example: data_location_check_unavailable
    ApplicationDataLocation:
      type: string
      enum:
        - eu
        - au
        - mx
      description: >-
        애플리케이션의 인증 데이터가 저장되고 처리되는 위치로, 애플리케이션 생성 시 선택됩니다. 기본값은 `eu`인 유럽
        연합(아일랜드)입니다. `au`(호주, 시드니) 및 `mx`(멕시코)는 곧 지원될 예정입니다. 해당 위치를 지정한 요청에는 400
        `This data location is not available yet.` 응답이 반환됩니다. 조직의 샌드박스 애플리케이션은
        항상 유럽 연합에 위치합니다.
      example: eu
    ApplicationProduct:
      type: object
      description: >-
        애플리케이션의 단일 제품 및 해당 상태입니다. 읽기 전용: 애플리케이션 endpoint가 이를 반환하며 요청 본문에서는
        무시됩니다.
      properties:
        product:
          type: string
          enum:
            - identity
            - transactions
            - authentication
          description: >-
            `identity`(신원 인증), `transactions`(거래 모니터링) 또는
            `authentication`(인증)입니다.
          example: identity
        status:
          type: string
          enum:
            - enabled
            - early_access
            - disabled
          description: >-
            이 애플리케이션에서 해당 제품이 활성화되어 있는지 여부입니다. `early_access`는 Didit이 직접 활성화해 주는
            `authentication`에만 적용됩니다.
          example: enabled
        modules:
          type: object
          additionalProperties:
            type: boolean
          description: >-
            제품의 모듈 스위치로, 각각 `true` 또는 `false`입니다. `identity`에는
            `user_verification`, `business_verification`, `case_management`가
            있습니다. `transactions`에는 `travel_rule`과 `case_management`가 있습니다.
            `authentication`에는 모듈이 없습니다(`{}`). `case_management`는 `identity`와
            `transactions` 모두에 표시되는 단일 설정이므로 두 항목 모두에서 동일한 값을 갖습니다.
          example:
            user_verification: true
            business_verification: true
            case_management: true
      required:
        - product
        - status
        - modules
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        `POST /programmatic/login/` 또는 `POST /programmatic/verify-email/`에서 반환된
        RS256으로 서명된 JWT `access_token`입니다. `Authorization: Bearer
        <access_token>` 형태로 전송합니다. 기본 유효 기간은 86400초(24시간)입니다. 이 token은
        `apx.didit.me/auth/v2`의 계정 관리 endpoint에 대해서만 유효합니다. 인증
        API(`verification.didit.me/v3`)는 대신 장기 `api_key`를 `x-api-key`로 사용합니다.

````

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