curl --request GET \
--url https://api.duvo.ai/v2/clarity-v2/processes/{process_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.duvo.ai/v2/clarity-v2/processes/{process_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.duvo.ai/v2/clarity-v2/processes/{process_id}', 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://api.duvo.ai/v2/clarity-v2/processes/{process_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.duvo.ai/v2/clarity-v2/processes/{process_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.duvo.ai/v2/clarity-v2/processes/{process_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/clarity-v2/processes/{process_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"process": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"team_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "draft",
"visibility": "team",
"version": 0,
"generation_error": "<string>",
"generation_progress": {
"steps": [
{
"key": "<string>",
"label": "<string>",
"status": "pending",
"order": 123,
"count": 123
}
]
},
"generation_started_at": null,
"generation_last_activity_at": null,
"custom_prompt": "<string>",
"created_at": "<string>",
"updated_at": "<string>"
},
"current_process_versions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_current_process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "<string>",
"version_number": 123,
"status": "live",
"creator_type": "human",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sandbox_id": "<string>",
"last_session_id": "<string>",
"user_email": "<string>"
}
],
"current_process_versions_total": 4503599627370495,
"transformation_proposal_versions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clarity_current_process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_transformation_proposal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "<string>",
"version_number": 123,
"status": "live",
"creator_type": "human",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sandbox_id": "<string>",
"last_session_id": "<string>",
"user_email": "<string>",
"extra_capture_requests": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"proposal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "<string>",
"capture_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requested_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "requested",
"gap": "<string>",
"suggested_prompt": "<string>",
"suggested_person": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"role": "<string>",
"reason": "<string>"
},
"priority": "low",
"created_at": "<string>",
"updated_at": "<string>"
}
]
}
],
"transformation_proposal_versions_total": 4503599627370495,
"captures": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"processId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"videoUrl": "<string>",
"videoTranscript": "<string>",
"transcript": [
{
"source": "ai",
"message": "<string>",
"speakerName": "<string>",
"timestamp": 123
}
],
"status": "pending",
"usabilityStatus": "usable",
"usabilityReason": null,
"usabilitySource": null,
"usabilityConfidence": null,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"userName": "<string>",
"documentFileName": "<string>",
"documentTextMetadata": {
"pages": [
{
"pageNumber": 123,
"startOffset": 4503599627370495,
"endOffset": 4503599627370495,
"lines": [
{
"pageNumber": 123,
"lineNumber": 123,
"startOffset": 4503599627370495,
"endOffset": 4503599627370495
}
]
}
],
"sourceArtifactGeneration": "<string>"
},
"hasTranscript": true,
"hasVideoTranscript": true,
"transcriptQuestionCount": 4503599627370495
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Get Clarity Process
Get the v2 read model for a clarity process: the process row (with operational fields like generation_error, generation_progress, generation_started_at, generation_last_activity_at, custom_prompt), its captures, and the lightweight version arrays for both snapshot tabs. The full payload of any specific snapshot is fetched lazily via the unified per-snapshot detail endpoint (GET .../snapshots/:kind/:id); this read model deliberately doesn’t carry it so the response stays small.
curl --request GET \
--url https://api.duvo.ai/v2/clarity-v2/processes/{process_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.duvo.ai/v2/clarity-v2/processes/{process_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.duvo.ai/v2/clarity-v2/processes/{process_id}', 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://api.duvo.ai/v2/clarity-v2/processes/{process_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.duvo.ai/v2/clarity-v2/processes/{process_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.duvo.ai/v2/clarity-v2/processes/{process_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/clarity-v2/processes/{process_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"process": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"team_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "draft",
"visibility": "team",
"version": 0,
"generation_error": "<string>",
"generation_progress": {
"steps": [
{
"key": "<string>",
"label": "<string>",
"status": "pending",
"order": 123,
"count": 123
}
]
},
"generation_started_at": null,
"generation_last_activity_at": null,
"custom_prompt": "<string>",
"created_at": "<string>",
"updated_at": "<string>"
},
"current_process_versions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_current_process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "<string>",
"version_number": 123,
"status": "live",
"creator_type": "human",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sandbox_id": "<string>",
"last_session_id": "<string>",
"user_email": "<string>"
}
],
"current_process_versions_total": 4503599627370495,
"transformation_proposal_versions": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"clarity_current_process_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"parent_transformation_proposal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "<string>",
"version_number": 123,
"status": "live",
"creator_type": "human",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sandbox_id": "<string>",
"last_session_id": "<string>",
"user_email": "<string>",
"extra_capture_requests": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"proposal_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"step_id": "<string>",
"capture_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"requested_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "requested",
"gap": "<string>",
"suggested_prompt": "<string>",
"suggested_person": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"role": "<string>",
"reason": "<string>"
},
"priority": "low",
"created_at": "<string>",
"updated_at": "<string>"
}
]
}
],
"transformation_proposal_versions_total": 4503599627370495,
"captures": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"processId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"userId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"type": "<string>",
"videoUrl": "<string>",
"videoTranscript": "<string>",
"transcript": [
{
"source": "ai",
"message": "<string>",
"speakerName": "<string>",
"timestamp": 123
}
],
"status": "pending",
"usabilityStatus": "usable",
"usabilityReason": null,
"usabilitySource": null,
"usabilityConfidence": null,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"userName": "<string>",
"documentFileName": "<string>",
"documentTextMetadata": {
"pages": [
{
"pageNumber": 123,
"startOffset": 4503599627370495,
"endOffset": 4503599627370495,
"lines": [
{
"pageNumber": 123,
"lineNumber": 123,
"startOffset": 4503599627370495,
"endOffset": 4503599627370495
}
]
}
],
"sourceArtifactGeneration": "<string>"
},
"hasTranscript": true,
"hasVideoTranscript": true,
"transcriptQuestionCount": 4503599627370495
}
]
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
API key authentication. Get your API key from the Duvo dashboard.
Path Parameters
The clarity process id
Query Parameters
Capture payload mode. full (default) embeds each capture's transcript content. lite omits transcript/videoTranscript (returned as null) and relies on the hasTranscript/hasVideoTranscript flags; fetch content on demand via GET .../captures/:capture_id.
full, lite Response
Default Response
Show child attributes
Show child attributes
The newest page of non-deleted current-process snapshots, newest first (at most CLARITY_VERSIONS_PAGE_SIZE rows). Lightweight rows (no data) for the version-picker UI. Clients lazy-fetch the live (or selected) snapshot via the per-snapshot detail endpoint, and page the older history from the snapshots list endpoint.
Show child attributes
Show child attributes
Total non-deleted current-process snapshots for this process. Compare against the embedded array's length to tell whether older versions remain to be paged in.
0 <= x <= 9007199254740991The newest page of non-deleted automation proposal snapshots, newest first (at most CLARITY_VERSIONS_PAGE_SIZE rows). Lightweight rows (no data) for the version-picker UI.
Show child attributes
Show child attributes
Total non-deleted automation proposal snapshots for this process.
0 <= x <= 9007199254740991All captures (videos, interviews, documents) attached to this process. Field names follow the legacy v1 capture wire format (camelCase) so existing capture consumers keep working unchanged.
Show child attributes
Show child attributes
Was this page helpful?