Get one run
Detail shape - includes checks, reviews, and the decision fields.
Pass ?view=report to replace the response body with the report's content model: the same document GET /v1/runs/{id}/report.pdf is printed from, before rendering. Use it to display results in your own UI without parsing a PDF.
curl -X GET "https://api.deepvue.link/v1/runs/123e4567-e89b-12d3-a456-426614174000?view=report" \
-H "Content-Type: application/json" \
-H "client-id: YOUR_API_KEY" \
-H "x-api-key: YOUR_API_KEY"
import requests
import json
url = "https://api.deepvue.link/v1/runs/123e4567-e89b-12d3-a456-426614174000?view=report"
headers = {
"Content-Type": "application/json",
"client-id": "YOUR_API_KEY",
"x-api-key": "YOUR_API_KEY"
}
response = requests.get(url, headers=headers)
print(response.json())
const response = await fetch("https://api.deepvue.link/v1/runs/123e4567-e89b-12d3-a456-426614174000?view=report", {
method: "GET",
headers: {
"Content-Type": "application/json",
"client-id": "YOUR_API_KEY",
"x-api-key": "YOUR_API_KEY"
}
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
)
func main() {
req, err := http.NewRequest("GET", "https://api.deepvue.link/v1/runs/123e4567-e89b-12d3-a456-426614174000?view=report", nil)
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("client-id", "YOUR_API_KEY")
req.Header.Set("x-api-key", "YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.deepvue.link/v1/runs/123e4567-e89b-12d3-a456-426614174000?view=report')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Get.new(uri)
request['Content-Type'] = 'application/json'
request['client-id'] = 'YOUR_API_KEY'
request['x-api-key'] = 'YOUR_API_KEY'
response = http.request(request)
puts response.body
{
"id": "1e30a341-cb3b-48b8-9992-99a1b436b8d9",
"workflow_id": "e97e7d78-4ceb-4283-8080-5c5e0b72ddac",
"reference_id": "user_123",
"status": "completed",
"started_at": "2026-07-30T09:14:02Z",
"completed_at": "2026-07-30T09:16:41Z",
"action_required": null,
"checks": [
{
"key": "pan",
"label": "PAN verification",
"status": "passed",
"data": {
"valid": true,
"name_on_pan": "ANUJ RAWAT"
}
},
{
"key": "eaadhaar",
"label": "e-Aadhaar",
"status": "passed",
"data": {
"name": "ANUJ RAWAT",
"dob": "1995-04-12"
}
},
{
"key": "face_match",
"label": "Face match",
"status": "passed",
"data": {
"match": true,
"score": 0.94
}
}
],
"decision": null,
"resolved_at": null,
"error": null
}
{
"id": "8c1f0b22-a5d1-4d3e-9a77-0f2b6e4c1a90",
"workflow_id": "e97e7d78-4ceb-4283-8080-5c5e0b72ddac",
"reference_id": "user_456",
"status": "failed",
"started_at": "2026-07-30T10:02:11Z",
"completed_at": "2026-07-30T10:02:19Z",
"action_required": null,
"checks": [
{
"key": "pan",
"label": "PAN verification",
"status": "failed",
"data": {
"valid": false
}
}
],
"decision": null,
"resolved_at": null,
"error": {
"code": "CHECK_FAILED",
"check": "pan",
"message": "A verification step did not pass."
}
}
{
"id": "5b7c9d10-3e4f-4a2b-8c6d-1f0e2a3b4c5d",
"workflow_id": "e97e7d78-4ceb-4283-8080-5c5e0b72ddac",
"reference_id": "user_789",
"status": "expired",
"started_at": "2026-07-29T08:00:00Z",
"completed_at": "2026-07-30T08:00:03Z",
"action_required": null,
"checks": [
{
"key": "pan",
"label": "PAN verification",
"status": "passed",
"data": {
"valid": true,
"name_on_pan": "ANUJ RAWAT"
}
}
],
"decision": null,
"resolved_at": null,
"error": {
"code": "LINK_EXPIRED",
"message": "The customer did not complete the journey before it expired."
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
{
"error": "missing credentials: send client-id + x-api-key headers"
}
{
"error": "invalid Deepvue credentials"
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
{
"error": "Service Unavailable",
"message": "The service is temporarily unavailable. Please try again later",
"code": 503
}
/v1/runs/{id}Target server for requests. Edit to use your own host.
Your Deepvue client identifier.
Your Deepvue API key. Secret - keep it server-side.
The run's UUID.
Set to report to return the report content model instead of the run.
Request Preview
Response
Response will appear here after sending the request
Authentication
API Key for authentication. Your Deepvue client identifier.
API Key for authentication. Your Deepvue API key. Secret - keep it server-side.
Path Parameters
The run's UUID.
Query Parameters
Responses
Echoed from the trigger request.
Six statuses that partition runs - every run is exactly one of them. Terminal: completed, failed, expired, cancelled. Non-terminal: in_progress, abandoned.
abandoned is the only status that can un-happen: the run stays live and resumes the moment the customer returns. abandoned and expired are computed at read time.
in_progressabandonedcompletedfailedexpiredcancellednull until terminal.
Non-null only on a non-terminal status.
Non-null only when status is failed or expired.
Detail endpoint only; omitted when empty.
Always present - a value or an explicit null - so you test a value rather than a key's existence. null means no verdict is owed.
What the reviewer typed. Omitted (never null) when they typed nothing.
null until a verdict is recorded.
Detail endpoint only; omitted when the run is flagged for nothing.