> ## 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のAPIで、OCR、Liveness、Face Match、AML、POA、電話番号など個別の検証ステップを承認・却下、またはレビュー中に変更できます。即時、またはユーザーのフロー完了後に適用されます。



機能ステータス更新プロンプト
        プロンプトをクリップボードにコピー



      
      

\<pre>

\`Approve, decline, or move a SINGLE verification step (feature) of a Didit session to review, now or once the person finishes the flow.

Endpoint:
PATCH https://verification.didit.me/v3/session/{session_id}/features/{node_id}/update-status/

Authentication:
x-api-key (client API key) or a user-auth token. Privilege: write:sessions.

Path parameters:
\- session_id (UUID) — KYC or KYB; Didit resolves it against both session types.
\- node_id — the workflow graph node ID of the step (e.g. feature_ocr_1, feature_liveness_1, feature_aml_1). Use the literal "default" for non-graph (single-step) workflows where the step has no node ID.

Request body:
\- new_status (string, required): one of "Approved", "Declined", "In Review". Must differ from the step's current status.
\- comment (string, optional): your reason, saved in the session's activity and returned as the override's reason.
\- feature_type (string, optional): which kind of step to target, for example "LIVENESS", "AML", "FACE_MATCH", "ID_VERIFICATION". Needed when node_id is "default" (non-graph workflows, where steps have no node ID). An unknown value returns 400 { "feature_type": ["Unknown feature_type '...'."] }.
\- defer_until_flow_finishes (boolean, optional, default false): while the person is still in the flow, wait and apply the override when the flow finishes instead of at once.

When the override applies:
\- Omitted or false: it applies at once. If the person is still in the flow it is recorded as forced=true.
\- true while the person is still in the flow (session Not Started, In Progress or Resubmitted, and not finished): it is stored as "pending_until_flow_finishes" and applies when the flow finishes, after the flow reaches its own decision.
\- true after the flow ended: it applies at once.
\- A waiting override is cancelled instead when the person redoes the step before finishing, a newer override on the same step replaces it, the session leaves the flow unfinished (abandoned, expired, decided mid-flow), or you cancel it with POST /v3/session/{session_id}/features/overrides/{override_id}/cancel/.

Which steps this works on:
Every per-step feature record: OCR/ID, Liveness, Face Match, NFC, AML, Proof of Address (POA), Phone, Email, Database Validation, Questionnaire, and the KYB registry / documents / key-people checks.

Difference vs update-status:
\- update-status changes the OVERALL session decision (Approved/Declined/Resubmitted).
\- THIS endpoint changes ONE step's status. A session that already has a decision keeps it. If the session has no decision yet and its workflow is waiting on exactly this step, applying the override completes the step: the workflow moves on and a status node can set the session decision (and fire status.updated).

Not allowed:
\- Standalone API sessions (session_type = API) return 400.

curl example — approve the ID/OCR step:
curl -X PATCH https://verification.didit.me/v3/session/<SESSION_ID>/features/feature_ocr_1/update-status/ \
-H "x-api-key: <API_KEY>" \
-H "Content-Type: application/json" \
-d '{ "new_status": "Approved", "comment": "Document manually verified" }'

Response: { session_id, node_id, feature_type, new_status, override }.
\- node_id is the step's workflow node, or null for a step without a node ("default" in a non-graph workflow).
\- new_status is the step's stored status: the requested one once the override applied, the unchanged one while it waits.
\- override: { id, node_id, feature_type, feature_model, previous_status, new_status, state ("applied" | "pending_until_flow_finishes" | "cancelled"), forced, reason, requested_by { email, name, type }, requested_at, applied_at, cancelled_at, cancel_reason }.

Side effects:
\- Fires a data.updated webhook when the override applies (at once, or when the flow finishes). Nothing is sent while it waits or when it is cancelled.
\- Records the override in the session's activity as FEATURE_OVERRIDE_PENDING, FEATURE_OVERRIDE_APPLIED or FEATURE_OVERRIDE_CANCELLED, with who made it; the request's entry carries your comment. In the decision's reviews array these entries appear with new_status null, and the request's entry has your reason in comment.

Failure modes:
\- 400: new_status invalid or unchanged, unknown feature_type, or the session is a standalone API session.
\- 401: the scoped API key has expired.
\- 403: missing credentials (a wrong, revoked or expired key gets 401), or the caller lacks write:sessions (a scoped key needs decisions write).
\- 404: session not found, or no feature has the given node_id.

Related: list overrides with GET /v3/session/{session_id}/features/overrides/ (see /sessions-api/list-feature-overrides); cancel a waiting one with POST /v3/session/{session_id}/features/overrides/{override_id}/cancel/ (see /sessions-api/cancel-feature-override).

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

\</pre>



      
      

貼り付け先

## この機能でできること認証セッションは、ID/OCR、ライブネス、顔照合、AML、住所証明、電話番号などの個別の**機能**（ステップ）で構成されています。
このエンドポイントでは、それらのステップのうち**1つ**のステータスを`Approved`、`Declined`、`In Review`のいずれかに設定できます。セッション全体を承認、却下、または再開したい場合は[update-status](https://docs.didit.me/ja/sessions-api/update-status.md)を使用してください。
単一のステップについてのみ判定を記録したい場合、たとえば独自のレビューワークフローのために顔照合ステップを`Declined`としてマークしたい場合は、**この**エンドポイントを使用してください。すでに判定が出ているセッションでは、その判定は維持され、変更されるのはステップのみです。
セッションにまだ判定がなく、ワークフローがまさにこのステップを待っている場合、オーバーライドを適用すると、通常どおりステップを完了した場合と同様にそのステップが完了します。
ワークフローは先に進み、後続のステップが実行され、ステータスノードがセッションの判定を設定して`status.updated` Webhookを送信することがあります。## `node_id`でステップを指定するグラフベースのワークフローでは、各ステップに`node_id`（例：`feature_ocr_1`、`feature_liveness_1`、`feature_aml_1`）があります。これらは[セッションの判定](https://docs.didit.me/ja/sessions-api/retrieve-session.md)で確認できます。V3の判定に含まれる各機能には`node_id`が付与されています。**グラフを使わない（単一ステップの）ワークフロー**では、基盤となる機能にノードIDがありません。対象にするには、`nodeId`としてリテラル値`default`を渡してください。
このようなワークフローのステップにはいずれもノードIDがないため、どのステップを指すかを示すために`feature_type`（例：`LIVENESS`、`AML`、`FACE_MATCH`）もあわせて渡してください。
不明な`feature_type`を指定すると`400`が返されます。## 本人がフローを完了するまで待つデフォルトでは、オーバーライドは即座に適用されます。
本人がまだフローを進めている途中の場合、実行中のフローのステップを変更することになり、その際オーバーライドは`forced: true`として記録されます。待機させるには`defer_until_flow_finishes: true`を設定してください。
セッションが`Not Started`、`In Progress`、`Resubmitted`のいずれかで、本人がまだ完了していない間は、オーバーライドは`pending_until_flow_finishes`として保存されます。
本人がフローを完了し、フロー自体の判定が出た後に適用されます。
フローがすでに終了しているセッションでは、どちらの設定でも即座に適用されます。待機中のオーバーライドは、次の場合には適用されずにキャンセルされます。- 本人が完了前にそのステップをやり直した場合（`check_changed`）
- 同じステップに対する新しいオーバーライドで置き換えられた場合（`replaced`）
- セッションがフロー未完了のまま終了した場合：放棄、期限切れ、またはフローの途中で判定が出た場合（`session_closed`）
- [Cancel Feature Override](https://docs.didit.me/ja/sessions-api/cancel-feature-override.md)でキャンセルした場合（`cancelled_by_reviewer`）レスポンスの`override`で結果を確認できます。`state`は`applied`または`pending_until_flow_finishes`で、適用されると`applied_at`が設定されます。
トップレベルの`new_status`はステップに保存されているステータスであるため、オーバーライドが待機している間は変わりません。
セッションのすべてのオーバーライドと、本人がまだフロー内にいるかどうかを確認するには、[List Feature Overrides](https://docs.didit.me/ja/sessions-api/list-feature-overrides.md)を使用してください。## KYCとKYBへの対応**本人確認（KYC）**と**法人確認 (KYB)**のどちらのセッションでも同じように動作します。Diditは両方を対象に`sessionId`を解決します。対応するステップの種類には、ID/OCR、ライブネス、顔照合、NFC、AML、住所証明、電話番号、メールアドレス、データベース検証、アンケート、およびKYBの登記・書類・主要人物のチェックが含まれます。> [!NOTE]
>
> スタンドアロンAPIセッション（スタンドアロン検証APIで作成されたセッション、`session_type = API`）では、各機能のステータスを変更できません。エンドポイントは`400`を返します。## 例> [tab] ステップを承認する
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/feature_ocr_1/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Approved",
>     "comment": "Document manually verified by compliance"
>   }'
> ```> [tab] 顔照合ステップを却下する
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/feature_face_match/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Declined"
>   }'
> ```> [tab] 単一ステップのワークフロー（デフォルトノード）
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/default/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "In Review",
>     "feature_type": "LIVENESS"
>   }'
> ```> [tab] 本人がフローを完了するまで待つ
>
> ```bash theme={null}
> curl -X PATCH https://verification.didit.me/v3/session/4c5c7f3a-.../features/feature_liveness_1/update-status/ \
>   -H "x-api-key: YOUR_API_KEY" \
>   -H "Content-Type: application/json" \
>   -d '{
>     "new_status": "Approved",
>     "comment": "Liveness retried with a reviewer present",
>     "defer_until_flow_finishes": true
>   }'
> ```## 更新後の動作- **Webhook**：オーバーライドが適用されたとき（即座に、またはフロー完了時）に`data.updated`イベントが送信されます。待機中やキャンセル時には何も送信されません。
- **アクティビティ**：すべてのオーバーライドは、セッションのアクティビティに`FEATURE_OVERRIDE_PENDING`、`FEATURE_OVERRIDE_APPLIED`、`FEATURE_OVERRIDE_CANCELLED`のいずれかとして、実行者（APIキー、ユーザー、または待機中のオーバーライドが適用された場合はシステム）とともに記録されます。リクエストのエントリには、理由として指定した`comment`が記録されます。[セッションの判定](https://docs.didit.me/ja/sessions-api/retrieve-session.md)の`reviews`配列では、これらのエントリは`new_status: null`として表示され、リクエストのエントリには`comment`に理由が含まれます。
- **セッションの判定**：すでに判定が出ているセッションでは、その判定が維持されます。最終判定を変更するには、別途[update-status](https://docs.didit.me/ja/sessions-api/update-status.md)を呼び出してください。## 権限`write:sessions`権限と、クライアントAPIキー（`x-api-key`）またはユーザー認可ヘッダーのいずれかが必要です。
スコープ付きAPIキーには、判定への書き込みアクセスが必要です。## 関連情報- [セッションステータスの更新](https://docs.didit.me/ja/sessions-api/update-status.md)：セッション全体の判定を変更します。
- [AMLヒットステータスの更新](https://docs.didit.me/ja/sessions-api/update-aml-hit-status.md)：個別のAML一致をレビューします。
- [セッションの取得](https://docs.didit.me/ja/sessions-api/retrieve-session.md)：判定（および各機能の`node_id`）を取得します。
- [Webhook](https://docs.didit.me/ja/integration/webhooks.md)：`data.updated`を購読します。
- [List Feature Overrides](https://docs.didit.me/ja/sessions-api/list-feature-overrides.md)：セッションのすべてのオーバーライドとその状態を取得します。
- [Cancel Feature Override](https://docs.didit.me/ja/sessions-api/cancel-feature-override.md)：待機中のオーバーライドの適用を停止します。


## OpenAPI

````yaml ja/openapi-25.json PATCH /v3/session/{sessionId}/features/{nodeId}/update-status/
openapi: 3.0.0
info:
  version: 3.0.0
  title: Didit Verification API
  description: 本人確認API。x-api-keyヘッダーで認証します。
servers:
  - url: https://verification.didit.me
security: []
tags: []
paths:
  /v3/session/{sessionId}/features/{nodeId}/update-status/:
    patch:
      tags:
        - Sessions
      summary: 個別の機能（ステップ）のステータスを更新
      description: >-
        セッション内の単一の認証機能（ステップ）のステータスを設定します。対象の機能はワークフローグラフの`nodeId`で指定します。ステップにノードがないグラフ形式以外のワークフローでは、`default`を使用し、あわせて`feature_type`を渡して対象のステップを指定します。


        ユーザー認証（KYC）と法人確認（KYB）の両方のセッション、およびすべてのステップタイプで利用できます。対象はID/OCR、ライブネス検知、顔照合、NFC、AML、住所証明、電話番号、メールアドレス、データベース検証、アンケート、およびKYBの登記・書類・主要人物のチェックです。このエンドポイントは、スタンドアロンのAPIセッション（`session_type
        = API`）では**利用できません**。


        `new_status`は`Approved`、`Declined`、`In
        Review`のいずれかである必要があり、かつ機能の現在のステータスと異なる必要があります。


        **オーバーライドが適用されるタイミング。**
        `defer_until_flow_finishes`を指定しない場合（または`false`の場合）、オーバーライドは従来どおり即座に適用されます。本人がまだフロー内にいる場合は`forced`として記録されます。本人がまだフロー内にいる間（セッションが`Not
        Started`、`In
        Progress`、`Resubmitted`のいずれかで、まだ完了していない状態）に`defer_until_flow_finishes:
        true`を指定すると、オーバーライドは`pending_until_flow_finishes`として保存され、フローが独自の判定に達した後、フローの完了時に適用されます。フローがすでに終了しているセッションでは、どちらの場合も即座に適用されます。待機中のオーバーライドは、本人が完了前に該当ステップをやり直した場合、同じチェックに対する新しいオーバーライドで置き換えられた場合、セッションが未完了のままフローを離れた場合（放棄、期限切れ、またはフロー途中での判定）、または`POST
        /v3/session/{sessionId}/features/overrides/{overrideId}/cancel/`でキャンセルした場合に、適用されずにキャンセルされます。セッションのオーバーライド一覧は`GET
        /v3/session/{sessionId}/features/overrides/`で取得できます。


        **セッションへの影響。**
        すでに判定があるセッションでは判定はそのまま維持され、変更されるのはチェックのみです。セッションにまだ判定がなく、ワークフローがまさにこのステップを待機している場合、オーバーライドを適用するとそのステップが完了します。ワークフローが先に進み、後続のステップが実行され、ステータスノードがセッションの判定を設定して`status.updated`を発火させることがあります。


        **Webhookとアクティビティ。**
        `data.updated`のWebhookは、オーバーライドが適用されたとき（即座に、またはフローの完了時）に発火し、待機中やキャンセル時には決して発火しません。すべてのオーバーライドは、実行者の情報とともに、セッションのアクティビティに`FEATURE_OVERRIDE_PENDING`、`FEATURE_OVERRIDE_APPLIED`、`FEATURE_OVERRIDE_CANCELLED`のいずれかとして記録されます。リクエストのエントリには指定した`comment`が含まれます。


        APIキー（`x-api-key`）、または`write:sessions`権限を持つユーザー認可ヘッダーで認証します。スコープ付きAPIキーには、判定への書き込みアクセスが必要です。
      operationId: patch_v3_session_update_feature_status
      parameters:
        - in: path
          name: sessionId
          required: true
          description: >-
            検証セッションのUUID。ユーザー(KYC)と企業(KYB)の両方のセッションIDを受け付けます。サービスは両方のセッションタイプにわたってIDを解決します。
          schema:
            type: string
            format: uuid
            example: 11111111-2222-3333-4444-555555555555
        - in: path
          name: nodeId
          required: true
          description: >-
            更新する機能のワークフローグラフのノードID（例:
            `feature_ocr_1`）。機能にノードIDがない非グラフ（単一ステップ）のワークフローでは、リテラル値`default`を使用してください。
          schema:
            type: string
            example: feature_ocr_1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - new_status
              properties:
                new_status:
                  type: string
                  description: この機能の変更後のステータス。現在の値と異なる必要があります。
                  enum:
                    - Approved
                    - Declined
                    - In Review
                  example: Approved
                comment:
                  type: string
                  description: この機能変更について、セッションのレビュー履歴に記録される任意の自由記述のメモです。
                  example: Document manually verified by compliance.
                feature_type:
                  type: string
                  enum:
                    - ID_VERIFICATION
                    - OCR
                    - OCR_BACK
                    - NFC
                    - LIVENESS
                    - FACE
                    - AGE_ESTIMATION
                    - AGE_VERIFICATION
                    - FACE_SEARCH
                    - FACE_MATCH
                    - IP_ANALYSIS
                    - AML
                    - PHONE
                    - PHONE_VERIFICATION
                    - EMAIL
                    - EMAIL_VERIFICATION
                    - POA
                    - PROOF_OF_ADDRESS
                    - DATABASE_VALIDATION
                    - DATA_VALIDATION
                    - QUESTIONNAIRE
                    - DOCUMENT_AI
                    - KYB_REGISTRY
                    - KYB_DOCUMENTS
                    - KYB_KEY_PEOPLE
                    - BANK_VERIFICATION
                    - GEOLOCATION
                  description: >-
                    対象とするステップの種類。グラフ以外のワークフロー（`nodeId` =
                    `default`）では、すべてのステップに個別のノードがないため必須です。それ以外の場合は任意です。不明な値を指定すると`400`が返されます。
                  example: LIVENESS
                defer_until_flow_finishes:
                  type: boolean
                  default: false
                  description: >-
                    本人がまだフロー内にいる間は、オーバーライドを即座に適用せず`pending_until_flow_finishes`として保存し、フローの終了時に適用します。省略した場合または`false`の場合、オーバーライドは即座に適用されます。フローがすでに終了しているセッションでは、どちらの場合も即座に適用されます。
                  example: false
            examples:
              Apply Now:
                summary: IDステップを即座に承認する
                value:
                  new_status: Approved
                  comment: Document manually verified by compliance.
              Wait For The Flow:
                summary: 本人がフローを完了した時点でライブネスステップを承認する
                value:
                  new_status: Approved
                  comment: Liveness retried with a reviewer present.
                  defer_until_flow_finishes: true
              Non-graph Workflow:
                summary: ノードのないワークフローのライブネスステップを対象にする(nodeId = default)
                value:
                  new_status: In Review
                  feature_type: LIVENESS
      responses:
        '200':
          description: >-
            オーバーライドが記録されました。`new_status`は保存されているチェックのステータスです。オーバーライドが適用された場合はリクエストされたステータス、フローの完了を待っている間は変更前のステータスになります。どちらになったかは`override`で示されます。
          content:
            application/json:
              schema:
                type: object
                properties:
                  session_id:
                    type: string
                    format: uuid
                  node_id:
                    type: string
                    nullable: true
                    description: >-
                      更新されたステップのワークフローノード。ノードのないステップ（グラフ形式でないワークフローにおける`default`パス）の場合は`null`。
                    example: feature_ocr_1
                  feature_type:
                    type: string
                    description: '更新された機能のモデル名（例: `KYC`、`Face`、`FaceMatch`、`AML`、`POA`）。'
                    example: KYC
                  new_status:
                    type: string
                    description: >-
                      保存されているチェックのステータス。オーバーライドが適用された後はリクエストされたステータス、オーバーライドがフローの完了を待っている間は変更前のステータスです。
                    example: Approved
                  override:
                    $ref: '#/components/schemas/FeatureStatusOverride'
                required:
                  - session_id
                  - node_id
                  - feature_type
                  - new_status
                  - override
              examples:
                Applied:
                  summary: オーバーライドが即時に適用されました
                  value:
                    session_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                    node_id: feature_ocr_1
                    feature_type: KYC
                    new_status: Approved
                    override:
                      id: 7c9e6679-7425-40de-944b-e07fc1f90ae7
                      node_id: feature_ocr_1
                      feature_type: ''
                      feature_model: KYC
                      previous_status: In Review
                      new_status: Approved
                      state: applied
                      forced: false
                      reason: Document manually verified by compliance.
                      requested_by:
                        email: reviewer@example.com
                        name: Alex Reviewer
                        type: CONSOLE_USER
                      requested_at: '2026-10-13T09:15:00Z'
                      applied_at: '2026-10-13T09:15:00Z'
                      cancelled_at: null
                      cancel_reason: null
                Waiting For The Flow:
                  summary: 本人がまだフロー内にいる間のdefer_until_flow_finishes
                  value:
                    session_id: 3fa85f64-5717-4562-b3fc-2c963f66afa6
                    node_id: feature_liveness_1
                    feature_type: Face
                    new_status: Declined
                    override:
                      id: 9b2f4c1e-8d3a-4e5f-a6b7-c8d9e0f1a2b3
                      node_id: feature_liveness_1
                      feature_type: ''
                      feature_model: Face
                      previous_status: Declined
                      new_status: Approved
                      state: pending_until_flow_finishes
                      forced: false
                      reason: Liveness retried with a reviewer present.
                      requested_by:
                        email: reviewer@example.com
                        name: Alex Reviewer
                        type: CONSOLE_USER
                      requested_at: '2026-10-13T09:15:00Z'
                      applied_at: null
                      cancelled_at: null
                      cancel_reason: null
        '400':
          description: >-
            バリデーションエラー。`new_status`が無効または変更されていない場合、`feature_type`が不明な場合、またはセッションがスタンドアロンのAPIセッションである場合に返されます。
          content:
            application/json:
              examples:
                Same Status:
                  summary: new_statusが現在のステータスと同じ
                  value:
                    new_status:
                      - The new status is the same as the current status.
                API Session:
                  summary: スタンドアロンAPIセッションでは機能のステータスを変更できません
                  value:
                    - Cannot change feature status for API sessions.
                Unknown feature_type:
                  summary: feature_typeが既知のステップタイプではありません
                  value:
                    feature_type:
                      - Unknown feature_type 'SELFIE'.
        '401':
          description: スコープ付きAPIキーの有効期限が切れています。
          content:
            application/json:
              examples:
                Expired API Key:
                  summary: 有効期限を過ぎたスコープ付きAPIキー
                  value:
                    detail: This API key has expired.
        '403':
          description: 認証情報がないか権限が不足しています。
          content:
            application/json:
              examples:
                Invalid Credentials:
                  summary: x-api-keyがないか無効です
                  value:
                    detail: >-
                      Authentication credentials were not provided or are
                      invalid.
                Missing Privilege:
                  summary: APIキーにwrite:sessionsがありません
                  value:
                    detail: You do not have permission to perform this action.
                Scoped Key Without Access:
                  summary: 判定への書き込みアクセス権を持たないスコープ付きAPIキー
                  value:
                    detail: This API key has no write access to decisions.
        '404':
          description: セッションが見つからないか、指定された`nodeId`の機能がセッションにありません。
          content:
            application/json:
              examples:
                Session Not Found:
                  summary: 不明なsession_id
                  value:
                    detail: Session not found.
                Feature Not Found:
                  summary: このnode_idの機能はありません
                  value:
                    detail: >-
                      No feature found with node_id 'feature_ocr_1' in this
                      session.
      security:
        - ApiKeyAuth: []
      x-codeSamples:
        - lang: curl
          label: curl
          source: |-
            curl -X PATCH \
              https://verification.didit.me/v3/session/11111111-2222-3333-4444-555555555555/features/feature_ocr_1/update-status/ \
              -H 'x-api-key: YOUR_API_KEY' \
              -H 'Content-Type: application/json' \
              -d '{
                "new_status": "Approved",
                "comment": "Document manually verified by compliance."
              }'
        - lang: python
          label: Python
          source: |-
            from didit import Didit

            # Reads DIDIT_API_KEY.
            client = Didit()

            result = client.sessions.update_feature_status(
                "11111111-2222-3333-4444-555555555555",
                "feature_ocr_1",
                new_status="Approved",
                comment="Document manually verified by compliance.",
            )
            print(result)
        - lang: javascript
          label: Node.js
          source: |-
            import Didit from "@didit-protocol/sdk-node";

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

            const result = await didit.sessions.updateFeatureStatus(
              "11111111-2222-3333-4444-555555555555",
              "feature_ocr_1",
              {
                new_status: "Approved",
                comment: "Document manually verified by compliance.",
              },
            );
            console.log(result);
        - lang: go
          label: Go
          source: "ctx := context.Background()\n// Reads DIDIT_API_KEY.\nclient := didit.NewClient()\n\nresult, err := client.Sessions.UpdateFeatureStatus(ctx, \"11111111-2222-3333-4444-555555555555\", \"feature_ocr_1\", didit.SessionsUpdateFeatureStatusParams{\n\tNewStatus: \"Approved\",\n\tComment:   didit.String(\"Document manually verified by compliance.\"),\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.SessionsUpdateFeatureStatusParams;


            // Reads DIDIT_API_KEY.

            Didit client = new Didit();


            var result =
            client.sessions().updateFeatureStatus("11111111-2222-3333-4444-555555555555",
            "feature_ocr_1", SessionsUpdateFeatureStatusParams.builder()
                    .newStatus(SessionsUpdateFeatureStatusParams.NewStatus.of("Approved"))
                    .comment("Document manually verified by compliance.")
                    .build());
            System.out.println(result);
        - lang: php
          label: PHP
          source: >-
            <?php


            require 'vendor/autoload.php';


            use Didit\DiditClient;


            // Reads DIDIT_API_KEY.

            $didit = new DiditClient();


            $result =
            $didit->sessions->updateFeatureStatus('11111111-2222-3333-4444-555555555555',
            'feature_ocr_1', [
                'new_status' => 'Approved',
                'comment' => 'Document manually verified by compliance.',
            ]);

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

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

            result = didit.sessions.update_feature_status(
              "11111111-2222-3333-4444-555555555555",
              "feature_ocr_1",
              new_status: "Approved",
              comment: "Document manually verified by compliance."
            )
            puts result.to_h
        - lang: csharp
          label: .NET
          source: >-
            using System;

            using System.Text.Json;

            using Didit;


            // Reads DIDIT_API_KEY.

            using var client = new DiditClient();


            var result = await
            client.Sessions.UpdateFeatureStatusAsync("11111111-2222-3333-4444-555555555555",
            "feature_ocr_1", new SessionsUpdateFeatureStatusParams

            {
                NewStatus = "Approved",
                Comment = "Document manually verified by compliance.",
            });

            Console.WriteLine(JsonSerializer.Serialize(result));
components:
  schemas:
    FeatureStatusOverride:
      type: object
      description: >-
        `PATCH
        /v3/session/{sessionId}/features/{nodeId}/update-status/`で行ったチェック（機能）ステータスの上書き1件です。何を変更するか、適用済みか、まだ本人がフローを完了するのを待っているか、誰がなぜ依頼したかを示します。
      required:
        - id
        - node_id
        - feature_type
        - feature_model
        - previous_status
        - new_status
        - state
        - forced
        - reason
        - requested_by
        - requested_at
        - applied_at
        - cancelled_at
        - cancel_reason
      properties:
        id:
          type: string
          format: uuid
          description: オーバーライドの識別子。キャンセル用エンドポイントに渡してください。
          example: 7c9e6679-7425-40de-944b-e07fc1f90ae7
        node_id:
          type: string
          description: リクエストで指定されたワークフローのノード(ノードのないステップの場合は`default`)。
          example: feature_ocr_1
        feature_type:
          type: string
          description: リクエストで渡された`feature_type`です。何も渡されなかった場合は空文字列です。
          example: ''
        feature_model:
          type: string
          description: オーバーライドされたチェックの種類です。例：`KYC`、`Face`、`AML`、`GeolocationCheck`。
          example: KYC
        previous_status:
          type: string
          enum:
            - Not Finished
            - Approved
            - Declined
            - In Review
            - Resub Requested
          description: オーバーライドがリクエストされた時点のチェックのステータス。
          example: In Review
        new_status:
          type: string
          enum:
            - Approved
            - Declined
            - In Review
          description: オーバーライドが設定するステータス。
          example: Approved
        state:
          type: string
          enum:
            - applied
            - pending_until_flow_finishes
            - cancelled
          description: >-
            `applied`：チェックに新しいステータスが適用されています。`pending_until_flow_finishes`：上書きは待機し、本人がフローを完了した時点で適用されます。`cancelled`：待機したものの、適用されることはありませんでした（`cancel_reason`を参照）。
          example: applied
        forced:
          type: boolean
          description: 本人がまだフロー内にいる間にオーバーライドが即座に適用された場合は`true`です。
          example: false
        reason:
          type: string
          nullable: true
          description: リクエストとともに送信された`comment`、または`null`です。
          example: Document manually verified by compliance.
        requested_by:
          type: object
          nullable: true
          description: オーバーライドを要求した者です。不明な場合は`null`です。
          properties:
            email:
              type: string
              format: email
              nullable: true
              description: コンソールユーザーのメールアドレス。APIキーおよびシステムの場合は`null`。
              example: reviewer@example.com
            name:
              type: string
              nullable: true
              description: リクエスト者の表示名、または`null`です。
              example: Alex Reviewer
            type:
              type: string
              enum:
                - CONSOLE_USER
                - API_KEY
                - SYSTEM
              description: リクエストを行った主体：コンソールユーザー、APIキー、またはDidit自身。
              example: CONSOLE_USER
        requested_at:
          type: string
          format: date-time
          description: オーバーライドがリクエストされた日時。
          example: '2026-10-13T09:15:00Z'
        applied_at:
          type: string
          format: date-time
          nullable: true
          description: チェックが新しいステータスになった日時。待機中、またはキャンセルされた後は`null`。
          example: '2026-10-13T09:15:00Z'
        cancelled_at:
          type: string
          format: date-time
          nullable: true
          description: 待機中のオーバーライドがキャンセルされた日時、または`null`。
          example: null
        cancel_reason:
          type: string
          nullable: true
          enum:
            - cancelled_by_reviewer
            - replaced
            - check_changed
            - session_closed
            - null
          description: >-
            待機中のオーバーライドが適用されなかった理由、または`null`。`cancelled_by_reviewer`：キャンセル用エンドポイントでキャンセルされました。`replaced`：同じチェックに対する新しいオーバーライドに置き換えられました。`check_changed`：本人がフローを完了する前にチェックをやり直しました。`session_closed`：本人がフローを完了する前に、セッションがフローを離れました（放棄、期限切れ、またはフロー途中での判定）。
          example: null
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: >-
        お客様のアプリケーションのAPIキーです。Business ConsoleのDevelopers -> API
        keysで取得できます。プライマリキーはフルアクセス権を持ちます。名前付きキーにはスコープを設定できます。リソースごとのアクセス権（なし、読み取り、書き込み）、一部のワークフローまたは承認済みセッションへの限定、IPアドレスのリストへの限定、有効期限の設定です。401は、キーが誤っている、失効している、または期限切れであることを意味します。403は、キーが送信されていない、キーにこのリソースやアクションへのアクセス権がない、またはIPリスト外のアドレスからリクエストが送信されたことを意味します。セッションのルートでの404は、セッションがキーのワークフローまたはステータスの対象外であることを意味します。メディアへのアクセス権がないキーでは、画像、動画、PDFのURLがnullで返されます。セッションの書き込み権限がないキーでは、セッションのリンクとトークンがnullで返されます。詳細は次を参照してください:
        https://docs.didit.me/console/api-keys

````

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