curl -X GET \
https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/ \
-H 'x-api-key: YOUR_API_KEY'import requests
response = requests.get(
"https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/",
headers={"x-api-key": "YOUR_API_KEY"},
)
response.raise_for_status()
print(response.json())const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://verification.didit.me/v3/session/{sessionId}/features/overrides/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/session/{sessionId}/features/overrides/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/session/{sessionId}/features/overrides/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/session/{sessionId}/features/overrides/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/session/{sessionId}/features/overrides/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"person_in_flow": true,
"flow_finished_at": null,
"overrides": [
{
"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
},
{
"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": true,
"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
}
]
}List Feature Overrides
List every override of a single step’s status on a session, newest first: applied, waiting for the person to finish the flow, or cancelled.
curl -X GET \
https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/ \
-H 'x-api-key: YOUR_API_KEY'import requests
response = requests.get(
"https://verification.didit.me/v3/session/3fa85f64-5717-4562-b3fc-2c963f66afa6/features/overrides/",
headers={"x-api-key": "YOUR_API_KEY"},
)
response.raise_for_status()
print(response.json())const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://verification.didit.me/v3/session/{sessionId}/features/overrides/', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://verification.didit.me/v3/session/{sessionId}/features/overrides/",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://verification.didit.me/v3/session/{sessionId}/features/overrides/"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://verification.didit.me/v3/session/{sessionId}/features/overrides/")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://verification.didit.me/v3/session/{sessionId}/features/overrides/")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"session_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"person_in_flow": true,
"flow_finished_at": null,
"overrides": [
{
"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
},
{
"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": true,
"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
}
]
}Override states
state | What it means |
|---|---|
applied | The check has the new status. applied_at says when. |
pending_until_flow_finishes | The override waits and applies when the person finishes the flow. |
cancelled | The override waited and never applied. cancel_reason says why. |
forced: true applied at once while the person was still in the flow.
Why a waiting override was cancelled
cancel_reason | What happened |
|---|---|
cancelled_by_reviewer | Someone cancelled it with Cancel Feature Override. |
replaced | A newer override on the same check replaced it. |
check_changed | The person redid the check before finishing the flow, so the result you overrode is gone. |
session_closed | The session left the flow before the person finished it: abandoned, expired, or decided mid-flow. |
Where the person is in the flow
person_in_flow is true while the session is Not Started, In Progress or Resubmitted and the person has not finished the flow.
While it is true, a new override with defer_until_flow_finishes: true waits.
flow_finished_at is when the person last finished the flow.
It is null while they are still in it, a resubmission included, and when the session closed before they finished.
Related
- Update Feature Status: override one step’s status, now or once the flow finishes.
- Cancel Feature Override: stop a waiting override from applying.
- Retrieve Session: each feature’s
node_idand current status.
Authorizations
Your application's API key, from Developers -> API keys in the Business Console. The primary key has full access. A named key can be scoped: none, read or write per resource, limited to some workflows or to approved sessions, to a list of IP addresses, and to an expiry date. 401 means the key is missing, wrong, revoked or expired; 403 means the key has no access to this resource or action, or the request came from an address outside its IP list; 404 on a session route means the session is outside the key's workflows or statuses. A key without media access receives image, video and PDF URLs as null, and a key without sessions write receives session links and tokens as null. See https://docs.didit.me/console/api-keys.
Path Parameters
UUID of the verification session. Accepts both user (KYC) and business (KYB) session IDs.
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
Response
The session's check overrides, newest first.
"3fa85f64-5717-4562-b3fc-2c963f66afa6"
Whether the person is still in the flow, so a new override with defer_until_flow_finishes: true would wait.
true
When the person last finished the flow. null while they are still in it (a resubmission included) and when the session closed before they finished (abandoned, expired or decided mid-flow).
null
Every override of the session, newest first.
Show child attributes
Show child attributes