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

# セッションの取り消し（サインアウト）| Didit API

> DELETE /session/ はアクセストークンに紐づくセッションを終了し、204を返します。Diditでは、そのリフレッシュトークンは無効になり、以降のセッション確認はただちに失敗します。

> [!WARNING]
>
> 認証機能は新しく導入された機能です。これらのエンドポイントは`https://<name>.auth.didit.me`のようなアプリケーションのissuerによって提供され、DiditのAPIキーは一切受け付けません。

対象者の現在のアクセストークンを送信してください。つまり、有効期限が切れておらず、リフレッシュによって置き換えられていないトークンです。`401`が返された場合はセッションが終了していないため、リフレッシュを行い、新しいアクセストークンで再度サインアウトしてください。

オフラインで検証するアクセストークンは、有効期限が切れるまで、5分以内に有効期限が切れます。サインアウト後、`post_logout_redirect_uri`を設定している場合は、対象者をそのURIへ遷移させてください。詳しくは[サインアウト](https://docs.didit.me/ja/authentication/tokens-and-jwks.md#サインアウト)を参照してください。


## OpenAPI

````yaml ja/openapi-authentication.json DELETE /session/
openapi: 3.0.3
info:
  title: Didit Authentication API
  version: 1.0.0
  description: >-
    Didit Authenticationのサーバー向けエンドポイントです。Didit
    Authenticationは、アプリケーションのエンドユーザー向けのサインイン製品です。Authenticationは**新しい**製品で、2026-11-01リリースで本番環境に提供されます。


    ## ベースURL


    各アプリケーションはそれぞれ独自のOpenID
    Connect発行者（issuer）であり、以下のすべてのエンドポイントはその発行者のルートで提供されます。


    -
    本番環境のアプリケーションでは`https://<name>.auth.didit.me`、サンドボックスのアプリケーションでは`https://<name>.sandbox.auth.didit.me`。

    -
    有効化された独自のカスタムドメイン。有効化されると、デフォルトのホストに代わってこのドメインが発行者になります。新しいトークンの`iss`にはこのドメインが記載され、ディスカバリーはこのドメインを指し、公開可能キー（publishable
    key）が変わります。デフォルトのホストで発行されたアクセストークンは、更新されるまで`/session/`、`/step-up/`、`/monitoring-token/`で失敗します。


    本番環境とサンドボックスは別々のアプリケーションであるため、それぞれ別の発行者となり、キーも別です。公開可能キーは、`pk_live_`（本番環境）または`pk_test_`（サンドボックス）の後に、末尾のスラッシュを除いた発行者をパディングなしのbase64urlでエンコードした文字列が続く形式です。デコードすると発行者がわかります。これは公開識別子であり、認証情報ではありません。


    同じJSONエンドポイントは`https://apx.didit.me/auth/v2/authentication/{application_id}/`でも提供されます。どのアドレスから発行されたかにかかわらず、トークンには常に上記の発行者が記載されます。


    ## 認証情報


    これらのエンドポイントは、DiditのAPIキーやコンソールトークンを受け付けることはありません。


    - ディスカバリー、JWKS、`POST
    /token/`には認証情報は不要です。クライアントはパブリッククライアントです。クライアントシークレットはなく、認可コードはそのPKCE検証子（`S256`）に紐付けられます。`client_id`はアプリケーションIDです。

    -
    `/session/`、`/step-up/`、`/monitoring-token/`には本人のアクセストークンを渡します（`Authorization:
    Bearer
    <access_token>`）。呼び出しが成功するたびにセッションのアクティビティとしてカウントされるため、セッションのアイドルタイムアウトがリセットされます。


    ## リクエストボディ


    ボディを受け取るすべてのエンドポイントは、JSON、フォームエンコード、マルチパートのボディを受け付けます。このドキュメントではJSONを記載し、`POST
    /token/`についてはOAuthクライアントが送信する形式であるフォームエンコードも記載します。エンドポイントが受け付けないフィールドには`400
    {"<field>": "unknown_field"}`が返されます。


    ## トークン


    - **アクセストークン**：ヘッダーが`typ: at+jwt`のES256
    JWTで、有効期間は最大5分であり、セッションの有効期間を超えることはありません。クレーム：`AccessTokenClaims`。

    - **IDトークン**：ヘッダーが`typ: JWT`のES256
    JWTです。クレーム：`IDTokenClaims`。アクセストークンとして受け付けられることはありません。

    -
    **リフレッシュトークン**：使用するたびにローテーションされるランダムな文字列です。使用済みのリフレッシュトークンを再度送信すると、セッションが取り消されます。


    トークンは`GET
    /.well-known/jwks.json`のキーで検証してください。アルゴリズムは`ES256`でなければならず、`typ`はトークンの種類と、`iss`は設定した発行者と、`aud`はアプリケーションIDと一致しなければなりません。オフライン検証では、取り消されたセッションはそのアクセストークンの有効期限が切れた時点で初めて検出されます。即時に確認するには`GET
    /session/`を使用します。


    ## エラー


    | ボディ | 発生条件 |

    | --- | --- |

    | `{"error": "<code>"}` | `POST /token/`のエラーで、すべてステータス`400`、[RFC 6749
    第5.2節](https://www.rfc-editor.org/rfc/rfc6749#section-5.2)のボディ形式です：`invalid_grant`、`invalid_client`、Didit独自の`mfa_required`。サービスエラー：`temporarily_unavailable`、`monitoring_unavailable`、`monitoring_disabled`。
    |

    | `{"<field>": ["<message>"]}`または`{"<field>": "<code>"}` |
    リクエストフィールドの検証に失敗しました。`non_field_errors`は複数のフィールドにまたがるルールを、`unknown_field`はエンドポイントが受け付けないフィールドを示します。
    |

    | `{"detail": "<message>"}` |
    `401`（`invalid_token`）、`403`（`origin_not_allowed`）、`404`（不明なアプリケーションまたはステップアップ）、`429`（レート制限）。また、解析できないボディには`400`（`JSON
    parse error -
    ...`）、エンドポイントが提供していないメソッドには`405`、サポートされていない`Content-Type`には`415`が返されます。 |


    `401`には`WWW-Authenticate: Bearer`も含まれ、`429`には秒単位の`Retry-After`が含まれます。


    JSON以外で返される拒否が2つあります。発行者ではないアドレスは、これらのエンドポイントに到達する前に拒否されます。たとえば、使用されていない`*.auth.didit.me`の名前には空の`404`が返されます。UUIDではない`step_up_id`には`404`ページが返されます。


    ## レート制限


    リクエストは2つのレイヤーを通過する必要があります。


    **エンドポイントの制限**：クライアントのIPアドレスごと、アプリケーションごと、エンドポイントごとにカウントされます。


    - ディスカバリーとJWKS：1分あたり1,200リクエスト、1時間あたり12,000リクエスト。

    - その他すべてのエンドポイント：1分あたり30リクエスト、1時間あたり300リクエスト。`GET`と`DELETE
    /session/`は1つのカウントを共有します。


    制限を超えた場合：`429 {"detail": "Too many requests from this IP address. Please
    wait before trying again. Expected available in 60
    seconds."}`が返されます。1時間あたりの制限では`3600 seconds`になります。


    **ボット対策**：すべての`POST`と`DELETE`に適用されます。そのバケットは、ホスト型のサインインステップを含むアプリケーションのすべての`POST`および`DELETE`リクエストで共有され、継続的に補充されます。


    - クライアントのIPアドレスごとに1分あたり60リクエスト。

    - デバイスを識別するリクエスト（ブラウザSDKやネイティブSDKが送信するもの）について、デバイスごとに1分あたり30リクエスト。

    - アプリケーション全体で、すべてのIPアドレスを合わせて1分あたり1,000リクエスト。


    バケットを超えた場合：`429 {"detail": "rate_limited Expected available in N
    seconds."}`が返されます（Nが1の場合は`1
    second.`）。IPごとのバケットはエンドポイントをまたいで適用されるため、トークン、ステップアップ、サインアウトの呼び出しを混在させる1つのアドレスは、いずれかのエンドポイントの制限に達する前にバケットを使い切る可能性があります。アプリケーションのバケットは、ブラウザを含むアプリケーションのすべてのクライアントをカウントします。


    どちらのレイヤーもエンドポイントが実行される前に応答するため、`429`を受け取ったリクエストは実行されていません。`Retry-After`の経過後に再試行してください。リフレッシュも同様です。


    ## ブラウザからのリクエスト


    `Origin`ヘッダーを含むリクエストは、アプリケーション自身のオリジンまたは許可されたオリジンのいずれかから送信されたものでなければならず、そうでない場合は`403
    origin_not_allowed`が返されます。サーバー間のリクエストは`Origin`を送信しません。


    ## このドキュメントの対象外


    これらのルートは、ホスト型ページ、ブラウザSDKとネイティブSDK、AIエージェントのためのものです。サーバー向けの仕様には含まれず、サーバーSDKはこれらを呼び出しません。


    - サインインステップ：`POST /authorize/`、`POST
    /password/`、`/email/*`、`/phone/*`、`/password-reset/*`、`/passkeys/*`、`/mfa/*`、`/social/*`、`/protection/complete/`。

    -
    ホスト型ページとコールバック：`/sign-in`、`/magic`、`/invite`、`/reset`、`/verify/`、`/sso/*`、`/wallet/callback/`、`/logo/`、および`/.well-known/`配下のネイティブアプリ関連付けファイル。

    - エージェントアクセス：`/agents/*`と`/grants/`。AIエージェントのアクセストークンをリアルタイムで確認する`GET
    /agents/session/`も含みます。エージェントアクセスは、このバージョンの仕様には含まれません。

    - Authenticationのコンソール管理API。コンソールセッションを使用します。


    AuthenticationのイベントはまだWebhookとして配信されないため、このドキュメントではWebhookを定義していません。
servers:
  - url: https://{issuer}
    description: お客様のアプリケーションの発行者で、そのサインインオリジンです。
    variables:
      issuer:
        default: your-app.auth.didit.me
        description: >-
          発行者のホストです。`<name>.auth.didit.me`(本番環境)、`<name>.sandbox.auth.didit.me`(サンドボックス)、または有効なカスタムドメインです。
security: []
tags:
  - name: Issuer
    description: トークンを検証するためのディスカバリー情報と署名鍵です。
  - name: Tokens
    description: 認可コードグラントとリフレッシュグラント。
  - name: Sessions
    description: アクセストークンに紐づくセッションを確認して終了します。
  - name: Step-ups
    description: 機密性の高いアクションの前に行う認証。
  - name: Monitoring
    description: トランザクションモニタリングイベント用のデバイス認証情報です。
paths:
  /session/:
    delete:
      tags:
        - Sessions
      summary: セッションを取り消す
      description: >-
        ユーザーをサインアウトさせます。アクセストークンに紐づくセッションを終了します。そのセッションのアクセストークンでは`GET
        /session/`が直ちに失敗し、リフレッシュトークンも使えなくなります。


        現在のアクセストークン、つまり期限切れでなく、リフレッシュによって置き換えられていないトークンを送信してください。それ以外のトークンでは`401`が返り、セッションは終了しません。その場合はリフレッシュしてから、新しいアクセストークンで再度サインアウトしてください。それ以前に発行されたモニタリングトークンはセッションに紐づいていないため、有効期限が切れるまで(15分以内)引き続き使用できます。オフラインで検証するトークンは、有効期限が切れるまで(5分以内)有効なままです。その後、`post_logout_redirect_uri`を設定している場合は、ユーザーをそこへ遷移させてください。
      operationId: authentication_revoke_session
      responses:
        '204':
          description: セッションが終了しました。
          headers:
            Cache-Control:
              description: 常に`no-store`です。このレスポンスは決してキャッシュしないでください。
              schema:
                type: string
                example: no-store
            Pragma:
              description: 常に`no-cache`です。
              schema:
                type: string
                example: no-cache
        '401':
          $ref: '#/components/responses/InvalidToken'
        '403':
          $ref: '#/components/responses/OriginNotAllowed'
        '404':
          $ref: '#/components/responses/ApplicationNotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/TemporarilyUnavailable'
      security:
        - AccessToken: []
components:
  responses:
    InvalidToken:
      description: >-
        アクセストークンがない、形式が不正、期限切れ、別の発行者やキーで署名されている、IDトークンやエージェントトークンである、またはリフレッシュによって置き換えられています。あるいは、そのセッションが失効した、アイドル状態でタイムアウトした、有効期間を過ぎた、MFAポリシーを満たさなくなった、またはその人物がブロックされたかメールアドレスが未認証になっています。もう一度サインインを行ってもらってください。
      headers:
        WWW-Authenticate:
          description: '`Bearer`です。'
          schema:
            type: string
            example: Bearer
        Cache-Control:
          description: 常に`no-store`です。このレスポンスは決してキャッシュしないでください。
          schema:
            type: string
            example: no-store
        Pragma:
          description: 常に`no-cache`です。
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            InvalidToken:
              summary: 拒否されたアクセストークン
              value:
                detail: invalid_token
    OriginNotAllowed:
      description: >-
        リクエストに、アプリケーション自身のものでも許可されたオリジンに含まれるものでもない`Origin`が含まれていました。サーバーからのリクエストは`Origin`を送信しません。
      headers:
        Cache-Control:
          description: 常に`no-store`です。このレスポンスは決してキャッシュしないでください。
          schema:
            type: string
            example: no-store
        Pragma:
          description: 常に`no-cache`です。
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            OriginNotAllowed:
              summary: 許可されていないオリジンです
              value:
                detail: origin_not_allowed
    ApplicationNotFound:
      description: >-
        このアドレスはアプリケーションに属していますが、そのアプリケーションでAuthenticationが有効になっていません。`apx.didit.me`のアドレスでは、アプリケーションIDが不明です。どのアプリケーションにも属さないアドレスはエンドポイントに到達する前に拒否され、そのレスポンスはJSONではありません。
      headers:
        Cache-Control:
          description: 常に`no-store`です。このレスポンスは決してキャッシュしないでください。
          schema:
            type: string
            example: no-store
        Pragma:
          description: 常に`no-cache`です。
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            ApplicationNotFound:
              summary: 不明なアプリケーション
              value:
                detail: No Configuration matches the given query.
    RateLimited:
      description: >-
        このエンドポイントに対するこのIPアドレスからのリクエストが多すぎるか、`POST`または`DELETE`でボット対策のバケットが空になっています。処理は何も実行されていません。`Retry-After`秒待ってから再試行してください。
      headers:
        Retry-After:
          description: 再試行までに待機する秒数。
          schema:
            type: integer
            example: 60
        Cache-Control:
          description: 常に`no-store`です。このレスポンスは決してキャッシュしないでください。
          schema:
            type: string
            example: no-store
        Pragma:
          description: 常に`no-cache`です。
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Detail'
          examples:
            RateLimited:
              summary: エンドポイントの制限
              value:
                detail: >-
                  Too many requests from this IP address. Please wait before
                  trying again. Expected available in 60 seconds.
            BotProtection:
              summary: ボット対策の制限（POSTおよびDELETE）
              value:
                detail: rate_limited Expected available in 2 seconds.
    TemporarilyUnavailable:
      description: リクエストが依存しているサービスが一時的に利用できません。バックオフを入れて再試行してください。
      headers:
        Cache-Control:
          description: 常に`no-store`です。このレスポンスは決してキャッシュしないでください。
          schema:
            type: string
            example: no-store
        Pragma:
          description: 常に`no-cache`です。
          schema:
            type: string
            example: no-cache
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/OAuthError'
          examples:
            TemporarilyUnavailable:
              summary: 後で再試行
              value:
                error: temporarily_unavailable
  schemas:
    Detail:
      type: object
      required:
        - detail
      properties:
        detail:
          type: string
          example: invalid_token
    OAuthError:
      title: OAuth error
      type: object
      description: OAuthエラー（RFC 6749セクション5.2）またはサービスエラー。
      required:
        - error
      properties:
        error:
          type: string
          example: invalid_grant
  securitySchemes:
    AccessToken:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        `POST /token/`から取得したこの人物のアクセストークンです。ヘッダーが`typ: at+jwt`のES256
        JWTで、有効期間は最長5分です。DiditのAPIキーではありません。

````

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