> ## 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：プログラムによるアプリ作成

> POST /organizations/me/{org_id}/applications/ で、顧客、ブランド、環境、事業部門ごとにDiditアプリケーションを1つ作成します。client_idとapi_keyを返します。



アプリケーション作成用プロンプト
        プロンプトをクリップボードにコピー



      
      

\<pre>

\`Create a new Didit application inside one of your organizations — each application has its own client_id and api_key, isolating sessions, webhooks, branding, and billing from sibling applications.

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

Authentication:
Authorization: Bearer <access_token>
The access token must belong to an OWNER or ADMIN of the target organization. Get one via POST /programmatic/login/ or POST /programmatic/verify-email/.

Path parameter:
\- org_id (UUID, required) — Organization that will own the new application. Discover yours via GET /organizations/me/.

Request body (ALL fields optional — omit the body to get a default-named app):
\- name (string, optional) — Display name. Defaults to "<organization name> App".
\- website_url (string, URL, optional) — Public homepage shown in the verification flow.
\- redirect_uris (array of strings, optional) — Allowlisted OAuth-style redirect URIs.
\- terms_url (string, URL, optional) — Terms-of-service link shown in the verification UI.
\- privacy_url (string, URL, optional) — Privacy policy link shown in the verification UI.
\- description (string, optional) — Internal note. Not shown to end users.

When to call:
\- Resellers — one application per end customer to fully isolate credentials, branding, webhooks, and billing.
\- Multi-brand / multi-product — one application per brand, product, region, or environment (dev / staging / prod).
\- Use-case separation — e.g. one application for ID + selfie KYC, another for AML screening only.

curl example:
curl -X POST "https://apx.didit.me/auth/v2/organizations/me/<ORG_ID>/applications/" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Customer App",
"website_url": "https://acme.example",
"redirect_uris": ["https://acme.example/callback"],
"terms_url": "https://acme.example/terms",
"privacy_url": "https://acme.example/privacy"
}'

Response (201 Created):
\{
"uuid": "b2c3d4e5-6789-...",
"name": "Acme Customer App",
"client_id": "S9LIYGSoWNuGMLHsvEt9dQ",
"api_key": "sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"website_url": "https://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",
"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": {} }
]
}

What to do with the response:
\- PERSIST api_key SECURELY — use it as the x-api-key header on every https://verification.didit.me/v3/... call (sessions, workflows, billing).
\- Persist uuid (app_id) — required for /organizations/me/{org_id}/applications/{app_id}/ reads and updates.
\- If you lose the api_key, recover it later via GET /organizations/me/{org_id}/applications/{app_id}/ — see /auth-api/get-credentials.
\- products is read-only and always lists identity, transactions and authentication in that order. A new application has identity enabled with every module on, and transactions and authentication disabled. A products key in the request body is ignored.

Failure modes:
\- 400 — { "<field>": ["Enter a valid URL."] } for malformed website_url / redirect_uris / terms_url / privacy_url.
\- 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.

Next steps:
\- Configure a workflow inside the new application via POST /v3/workflows/ — see /management-api/workflows/create.
\- Update application metadata later via PATCH /organizations/me/{org_id}/applications/{app_id}/ — see /auth-api/update-application.

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

\</pre>



      
      

貼り付け先

同じ組織内で、検証トラフィック、認証情報、ブランディング、レポートを分けて管理したい場合は、このエンドポイントを使用します。特に、顧客ごとに1つのアプリケーションを作成する**リセラー**に役立ちます。また、自社で複数のプロダクト、ブランド、リージョン、ステージング環境と本番環境、ユースケースを運用していて、それぞれが同じAPIキーやアプリケーション単位の設定を共有すべきでない場合にも適しています。> [!NOTE]
>
> Auth APIのすべてのエンドポイントは`https://apx.didit.me/auth/v2`を使用します。セッションやワークフローなどの`https://verification.didit.me/v3/...`エンドポイントを呼び出す際は、返された`api_key`を`x-api-key`として使用してください。


## OpenAPI

````yaml ja/openapi-auth.json POST /organizations/me/{org_id}/applications/
openapi: 3.0.0
info:
  version: 1.0.0
  title: Didit Auth API
  description: >-
    開発者とAIエージェント向けの、プログラムによる登録・認証APIです。2回のAPI呼び出しで登録でき、ブラウザは不要です。最もエージェントに適した本人確認プラットフォームです。


    ## ベースURL


    この仕様のすべてのエンドポイントは`https://apx.didit.me/auth/v2`でホストされています。これは検証API（`https://verification.didit.me/v3`）とは別のホストです。両者を混同しないでください。この認証ホストは**JWTアクセストークン**を発行し、**組織**と**アプリケーション**の一覧表示と管理を行えます。検証ホストはセッション、ワークフロー、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/`とアプリケーションのエンドポイントを呼び出して、認証情報を復元またはローテーションできます。


    JWTが必要なのは、この仕様の**アカウント管理**エンドポイントだけです。検証APIのトラフィックにはJWTではなく、長期間有効な`api_key`を使用します。


    ## 規約


    - すべてのリクエストボディとレスポンスボディはJSON（`Content-Type: application/json`）です。

    - **`POST /programmatic/register/`をテストする際は、実在する配信可能なメールアドレスを使用してください。**
    このエンドポイントは認証コードを同期的に送信するため、予約済みのテスト用ドメイン（`@example.com`、`@example.org`、`@*.test`、`@*.example`、`@*.invalid`）のアドレスはメール配信で拒否され、リクエストは`500`を返します。サンプル内のプレースホルダー`you@yourdomain.com`は、実際に読める受信箱に置き換えてください。

    - バリデーションエラーはHTTP `400`で、2種類のエンベロープのいずれかを返します。フィールド単位の問題には`{"field":
    ["message", ...]}`、ビジネスルールのエラーには`{"detail":
    "message"}`です。一部のバリデーター（登録時のパスワード強度、verify-emailでのコードの有効期限）は現在、フィールドをキーとする形式ではなく、単純な配列`["message"]`で応答します。これはサーバー側の既知の不整合のため、クライアントコードは両方の形式を受け入れる必要があります。

    - 認証エラーは、HTTP
    `401`（無効なBearerトークン）または`403`（Bearerトークンがない、または権限不足）とともに`{"detail":
    "..."}`として返されます。

    - レート制限のレスポンスには、クールダウン時間を秒単位で示す`wait`フィールドが含まれます。
servers:
  - url: https://apx.didit.me/auth/v2
    description: 本番環境の認証サーバー
security: []
tags:
  - name: Programmatic Auth
    description: >-
      メールアドレスとパスワードによるアカウントのライフサイクル：登録、認証、ログイン。Account
      Managementエンドポイントで使用するJWTの`access_token`を返します。また、認証時には最初のアプリケーションの`client_id`と`api_key`も返します。
  - name: Account Management
    description: >-
      組織の一覧取得と、アプリケーションの作成・取得・更新を行う認証付きエンドポイント（JWT
      Bearer）です。検証API呼び出しの認証に使用する`api_key`の再取得やローテーションに利用します。
paths:
  /organizations/me/{org_id}/applications/:
    post:
      tags:
        - Account Management
      summary: アプリケーションの作成
      description: >-
        組織内にアプリケーションを作成します。レスポンスには`api_key`が含まれるため、この時点で保存してください（GETで再取得できます）。owner/adminのJWTが必要です。
      operationId: create_organization_application
      parameters:
        - name: org_id
          in: path
          required: true
          description: 組織のUUIDです。`GET /organizations/me/`で確認できます。
          schema:
            type: string
            format: uuid
            example: a1b2c3d4-5678-90ab-cdef-111111111111
      requestBody:
        required: false
        description: >-
          すべてのフィールドは任意です。ボディを省略すると、デフォルト名`"<organization name>
          App"`で、公開URLが設定されていないアプリケーションが作成されます。
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationCreateRequest'
            examples:
              ResellerCustomer:
                summary: 顧客専用のアプリケーションを作成するリセラー
                value:
                  name: Acme Customer App
                  website_url: https://acme.example
                  redirect_uris:
                    - https://acme.example/callback
                  terms_url: https://acme.example/terms
                  privacy_url: https://acme.example/privacy
              Minimal:
                summary: 最小限の作成：すべてデフォルト値を使用
                value:
                  name: Sandbox App
              Empty:
                summary: ボディがまったくない場合。デフォルトは<org name> Appになります
                value: {}
      responses:
        '201':
          description: >-
            アプリケーションが作成されました。レスポンスには有効期間の長い`api_key`が含まれます。今すぐ保存し、すべての`https://verification.didit.me/v3/...`呼び出しで`x-api-key`ヘッダーとして使用してください。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
              examples:
                Success:
                  value:
                    uuid: b2c3d4e5-6789-01bc-defg-222222222222
                    name: Acme Customer App
                    client_id: S9LIYGSoWNuGMLHsvEt9dQ
                    api_key: sk_live_example_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
                    website_url: https://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'
                    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: リクエストボディの検証エラー（例：不正な形式のリダイレクトURI）。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              examples:
                InvalidUrl:
                  value:
                    website_url:
                      - Enter a valid URL.
        '401':
          description: >-
            アクセストークンの形式が不正、無効、または期限切れです。`POST
            /programmatic/login/`で新しいトークンを取得してください。
          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.`が返されます。アカウントを復旧してから72時間は、リクエストは`code`
            `recovery_hold`と、保留が終了する時刻である`until`とともに拒否されます。
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/AuthError'
                  - $ref: '#/components/schemas/RecoveryHoldError'
              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.
                RecoveryHold:
                  summary: アカウントの復旧から72時間未満です
                  value:
                    detail: This action is on hold because you recovered your account.
                    code: recovery_hold
                    until: '2026-11-04T10:15:00+00:00'
        '404':
          description: 組織が存在しないか、あなたがその組織のメンバーではありません。
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              examples:
                OrganizationNotFound:
                  summary: 組織が見つからないか、あなたがメンバーではありません
                  value:
                    detail: Organization not found.
      security:
        - BearerAuth: []
      x-codeSamples:
        - lang: curl
          label: cURL
          source: >-
            curl -X POST
            "https://apx.didit.me/auth/v2/organizations/me/$ORG_ID/applications/"
            \
              -H "Authorization: Bearer $ACCESS_TOKEN" \
              -H "Content-Type: application/json" \
              -d '{
                "name": "Acme Customer App",
                "website_url": "https://acme.example",
                "redirect_uris": ["https://acme.example/callback"]
              }'
        - 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.create(
                "a1b2c3d4-5678-90ab-cdef-111111111111",
                name="Acme Customer App",
                website_url="https://acme.example",
                redirect_uris=["https://acme.example/callback"],
                terms_url="https://acme.example/terms",
                privacy_url="https://acme.example/privacy",
            )
            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.create("a1b2c3d4-5678-90ab-cdef-111111111111",
            {
              name: "Acme Customer App",
              website_url: "https://acme.example",
              redirect_uris: ["https://acme.example/callback"],
              terms_url: "https://acme.example/terms",
              privacy_url: "https://acme.example/privacy",
            });

            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.Create(ctx, \"a1b2c3d4-5678-90ab-cdef-111111111111\", didit.ApplicationCreateRequest{\n\tName:         didit.String(\"Acme Customer App\"),\n\tWebsiteURL:   didit.String(\"https://acme.example\"),\n\tRedirectURIs: didit.Some([]string{\"https://acme.example/callback\"}),\n\tTermsURL:     didit.String(\"https://acme.example/terms\"),\n\tPrivacyURL:   didit.String(\"https://acme.example/privacy\"),\n})\nif err != nil {\n\tlog.Fatal(err)\n}\nfmt.Printf(\"%+v\\n\", result)"
        - lang: java
          label: Java
          source: >-
            import java.util.List;

            import me.didit.Didit;

            import me.didit.types.ApplicationCreateRequest;


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

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


            var result =
            client.account().applications().create("a1b2c3d4-5678-90ab-cdef-111111111111",
            ApplicationCreateRequest.builder()
                    .name("Acme Customer App")
                    .websiteUrl("https://acme.example")
                    .redirectUris(List.of("https://acme.example/callback"))
                    .termsUrl("https://acme.example/terms")
                    .privacyUrl("https://acme.example/privacy")
                    .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->create('a1b2c3d4-5678-90ab-cdef-111111111111',
            [
                'name' => 'Acme Customer App',
                'website_url' => 'https://acme.example',
                'redirect_uris' => ['https://acme.example/callback'],
                'terms_url' => 'https://acme.example/terms',
                'privacy_url' => 'https://acme.example/privacy',
            ]);

            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.create(
              "a1b2c3d4-5678-90ab-cdef-111111111111",
              name: "Acme Customer App",
              website_url: "https://acme.example",
              redirect_uris: ["https://acme.example/callback"],
              terms_url: "https://acme.example/terms",
              privacy_url: "https://acme.example/privacy"
            )
            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.CreateAsync("a1b2c3d4-5678-90ab-cdef-111111111111",
            new ApplicationCreateRequest

            {
                Name = "Acme Customer App",
                WebsiteUrl = "https://acme.example",
                RedirectUris = new string[] { "https://acme.example/callback" },
                TermsUrl = "https://acme.example/terms",
                PrivacyUrl = "https://acme.example/privacy",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    ApplicationCreateRequest:
      type: object
      description: すべてのフィールドは任意です。空のボディを送信すると、デフォルト名のアプリケーションが作成されます。
      properties:
        name:
          type: string
          description: アプリケーションの表示名。デフォルトは`"<organization name> App"`です。
          example: Acme Customer App
        website_url:
          type: string
          description: このアプリケーションに関連付けられたWebサイトまたはアプリのURL。
          example: https://acme.example
        redirect_uris:
          type: array
          items:
            type: string
          description: OAuth形式および認証リダイレクトフローで許可されるリダイレクトURIです。
          example:
            - https://acme.example/callback
        terms_url:
          type: string
          description: 認証フローに表示される利用規約のURL。
          example: https://acme.example/terms
        privacy_url:
          type: string
          description: 検証フローに表示されるプライバシーポリシーのURL。
          example: https://acme.example/privacy
        description:
          type: string
          description: アプリケーションの内部説明（エンドユーザーには表示されません）。
    Application:
      type: object
      description: アプリケーションの完全なレコード。`uuid`、`client_id`、`api_key`は作成後に変更されることはありません。
      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: このアプリケーションに関連付けられたWebサイトまたはアプリの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'
        products:
          type: array
          readOnly: true
          description: >-
            アプリケーションのプロダクト。常に3つすべてが、`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
    RecoveryHoldError:
      type: object
      description: >-
        アカウントが復旧された(失われたサインイン方法がリセットされた)後、72時間にわたって返されます。組織、アプリケーション、シークレットを作成するアクションは`until`まで拒否されます。読み取り操作は引き続き機能します。
      required:
        - detail
        - code
        - until
      properties:
        detail:
          type: string
          example: This action is on hold because you recovered your account.
        code:
          type: string
          enum:
            - recovery_hold
          example: recovery_hold
        until:
          type: string
          format: date-time
          description: 保留が終了する日時（ISO 8601）。この時刻以降にリクエストを再試行してください。
          example: '2026-11-04T10:15:00+00:00'
    ApplicationProduct:
      type: object
      description: >-
        アプリケーションのプロダクト1つとその状態です。読み取り専用です。アプリケーションのエンドポイントはこれを返し、リクエストボディ内では無視します。
      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`の両方に表示される1つの設定であるため、両方で同じ値になります。
          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時間）です。このトークンは`apx.didit.me/auth/v2`のアカウント管理エンドポイントに対してのみ有効です。認証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.