> ## 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：管理客户应用

> 使用 PATCH /organizations/me/{org_id}/applications/{app_id}/ 更新 Didit 应用元数据，适用于经销商的客户应用、品牌、环境或独立用例。



更新应用提示词
        将提示词复制到剪贴板



      
      

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



      
      

粘贴到

使用此 endpoint 可以让每个应用与其所代表的客户、品牌、环境或内部用例保持一致。对于经销商而言，此功能允许您重命名或更新每个客户的应用，而无需在客户之间共享凭证。对于直接客户而言，它有助于按产品、地区或环境进行区分，同时将所有内容保留在同一个组织下。> [!NOTE]
>
> 此 endpoint 用于更新应用元数据。除非您另行轮换凭证，否则 `api_key` 保持不变。## 数据位置应用的数据位置（`data_location`）在创建应用时选定，之后无法更改：如果更新请求指定的位置与应用现有位置相同，则会被接受；指定任何其他位置则返回 400。唯一的例外是与您的组织一同创建的生产环境应用，它是在注册时创建的，或通过[邮箱验证](https://docs.didit.me/zh/auth-api/verify-email.md)创建的。只要该应用的所有 API 密钥均未使用过，且没有任何验证会话，第一次指定 `data_location` 的更新请求即可选定其位置，且仅此一次。控制台中的 **为首个应用命名** 步骤正是利用此机制来保存您在该步骤中选择的位置。目前唯一可用的位置是 `eu`，即欧盟（爱尔兰）。


## OpenAPI

````yaml zh/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。仅需 2 次 API 调用即可完成注册，无需浏览器。对代理最友好的身份证件验证平台。


    ## Base URL


    本规范中的所有 endpoint 均托管在 `https://apx.didit.me/auth/v2`。该主机与验证
    API（`https://verification.didit.me/v3`）不同。请务必区分它们：此认证主机负责签发您的 **JWT 访问
    token**，并允许您列出和管理您的**组织**与**应用**。验证主机则是您调用会话、工作流、AML 等服务的地方，使用此 API 返回的
    **`api_key`** 进行身份验证。


    ## 认证流程运作方式


    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 的流量使用的是长期有效的 `api_key`，而非 JWT。


    ## 约定


    - 所有请求体和响应体均为 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"]`
    而不是以字段为键的形式，这是已知的服务端不一致性，因此客户端代码应同时支持这两种结构。

    - 身份验证错误将作为 `{"detail": "..."}` 返回，状态码为 HTTP `401`（无效的 bearer token）或
    `403`（缺少 bearer token / 权限不足）。

    - 速率限制响应包含一个以秒为单位的冷却时间字段 `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）。使用这些 endpoint 可以恢复或轮换用于验证 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`
        在应用创建后无法更改，但随组织一起创建的生产环境应用在尚未使用时可更改一次（参见请求体）。需要所有者/管理员 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_`（沙盒应用）开头，后接 43 个 URL 安全字符（字母、数字、`-` 和
            `_`）。在此格式之前创建的密钥没有前缀，仍可继续使用。在恢复账户后的 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: "..."}` 单键包装格式。少数验证器（注册时的密码强度、邮箱验证时的验证码有效性）当前会返回单纯的数组
        `["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` 仅适用于 `authentication`，由 Didit 为您开启。
          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.