Skip to main content
PATCH
/
v3
/
session
/
{sessionId}
/
features
/
{nodeId}
/
update-status
/
curl
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."
  }'
{
  "session_id": "11111111-2222-3333-4444-555555555555",
  "node_id": "feature_ocr_1",
  "feature_type": "KYC",
  "new_status": "Approved"
}

What this does

A verification session is made up of individual features (steps) — ID/OCR, Liveness, Face Match, AML, Proof of Address, Phone, and so on. This endpoint lets you set the status of one of those steps — Approved, Declined, or In Reviewwithout changing the overall session decision. Use update-status when you want to approve, decline, or re-open the whole session. Use this endpoint when you only want to record a decision on a single step (for example, mark the Face Match step as Declined for your own review workflow while leaving the session in its current state).

Targeting a step with node_id

In graph-based workflows each step has a node_id (for example feature_ocr_1, feature_liveness_1, feature_aml_1). You can find these in the session decision — each feature in a V3 decision carries its node_id. For non-graph (single-step) workflows the underlying feature has no node ID. Pass the literal value default as the nodeId to target it.

KYC and KYB support

Works identically for User Verification (KYC) and Business Verification (KYB) sessions — Didit resolves the sessionId across both. Supported step types include ID/OCR, Liveness, Face Match, NFC, AML, Proof of Address, Phone, Email, Database Validation, Questionnaire, and the KYB registry / documents / key-people checks.
Standalone API sessions (those created through the standalone verification APIs, session_type = API) cannot have individual feature statuses changed — the endpoint returns 400.

Examples

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"
  }'

What happens after an update

  • Webhook — a data.updated event fires on the session so your systems and analytics stay in sync.
  • Audit trail — the change is recorded on the session’s review trail with the actor (API key or user) and your optional comment, visible in the console’s activity timeline.
  • Overall session status is untouched — to also change the final decision, call update-status separately.

Permission

Requires the write:sessions privilege, with either a client API key (x-api-key) or a user authorization header.

Authorizations

x-api-key
string
header
required

Path Parameters

sessionId
string<uuid>
required

UUID of the verification session. Accepts both user (KYC) and business (KYB) session IDs — the service resolves the ID across both session types.

Example:

"11111111-2222-3333-4444-555555555555"

nodeId
string
required

Workflow graph node ID of the feature to update (for example feature_ocr_1). Use the literal value default for non-graph (single-step) workflows where the feature has no node ID.

Example:

"feature_ocr_1"

Body

application/json
new_status
enum<string>
required

Target status for this feature. Must differ from the current value.

Available options:
Approved,
Declined,
In Review
Example:

"Approved"

comment
string

Optional free-text note recorded on the session's review trail for this feature change.

Example:

"Document manually verified by compliance."

Response

Feature status updated. Returns the targeted feature, its node ID, and the new status.

session_id
string<uuid>
node_id
string
Example:

"feature_ocr_1"

feature_type
string

Model name of the updated feature (e.g. KYC, Face, FaceMatch, AML, POA).

Example:

"KYC"

new_status
string
Example:

"Approved"