Endpoint
GET /v1/analyses/{analysisId}
Request
Path parameters
| Parameter | Type | Description |
|---|---|---|
analysisId | string | ID of the analysis to read (analysis_ prefix) |
curl "https://client-omni-api.argosidentity.com/v1/analyses/analysis_lsc7icgm9cjd" \
-H "x-api-key: your-api-key-here"
Response structure
The response fields fall into two groups.| Group | Fields | Nature |
|---|---|---|
| Fixed system fields | Everything else in top-level fields below | Always the same keys, whatever the workflow |
| Output-schema fields | outputSchema · extractedData · extractionStatus | Key names and nesting differ per workflow |
Which fields land in
extractedData is decided by the workflow’s output schema. Omni does not force any common keys. What is fixed is that every leaf value is wrapped in the same envelope (value · reasoning · sourceStep).Top-level fields
| Field | Type | Description |
|---|---|---|
id | string | Analysis ID (analysis_ prefix) |
profileId | string | ID of the profile it belongs to |
folderId | string | null | Target folder ID. null when the whole profile was analyzed |
engineId | string | null | Engine ID when the run pinned a single engine. null when it follows the workflow configuration |
engine | object | null | Engine detail when engineId is set. null otherwise |
playbookId | string | ID of the playbook used for the analysis (PB- prefix) |
playbookVersion | string | null | Frozen playbook version. null when there is no snapshot |
capturedAt | string | null | Time the playbook was frozen. null when there is no snapshot |
snapshotStatus | string | null | Snapshot state: frozen · legacy · missing |
playbookSnapshot | string | null | The playbook body that actually ran |
status | string | Processing status: pending · processing · completed · failed |
processingTimeMs | number | Processing time in milliseconds |
verificationStatus | string | Verdict for the whole analysis: verified · pending_review · rejected |
confidenceScore | number | null | Verdict confidence (0.0–1.0). A different measure from confidence |
confidence | object | Analysis Score. See below |
details | object[] | The reasons the score was reduced. See below |
riskAssessment | object | Risk. See below |
systemMetadata | object | Execution metadata. See below |
outputSchema | object | null | Output schema frozen at run time. null when none was defined |
extractedData | object | Extraction result. Its structure follows outputSchema |
extractionStatus | object | Deprecated. A per-top-level-key map kept for backward compatibility |
rawActionResults | object | Raw per-action results. See below |
agentAuditLog | object | Step-by-step execution audit log. See below |
findings | object[] | Action result summaries for display. See below |
recommendations | object[] | Recommended follow-up actions. See below |
targetItems | object[] | Items referenced by the analysis. See below |
error | object | null | code and message on failure (optionally details). null otherwise |
options | object | null | Options passed with the request. null when there were none |
clientMetadata | object | null | Client metadata passed with the request. null when there was none |
primaryReportId | string | null | ID of the generated primary report (rpt_ prefix) |
reportId | string | null | Legacy field carrying the same value as primaryReportId. Use primaryReportId in new integrations |
requestedAt | string | Time the analysis was requested |
completedAt | string | null | Completion time. null while incomplete |
createdAt | string | Time the record was created |
confidence Analysis Score
The score shown at the top of the analysis detail screen in the dashboard.
| Field | Type | Description |
|---|---|---|
components | object | The three parts that make up the score. null when a part cannot be measured |
score | number | null | Weighted average of the three parts (0–100, rounded) |
level | string | null | HIGH (80–100) · MEDIUM (65–79) · LOW (0–64) |
confidence.components
| Field | Weight | Description |
|---|---|---|
stepExecution | 40% | Share of the steps defined in the playbook that actually ran (0–100) |
stepQuality | 20% | Quality score reflecting the pass status of the steps that ran and whether engines were called (0–100) |
outputCompleteness | 40% | Share of output-schema leaf fields that received a value (0–100). Arrays are counted per element |
score = round(stepExecution × 0.4 + stepQuality × 0.2 + outputCompleteness × 0.4)
null, the weights of the remaining parts are normalized. When all three are null, score and level are null too.
details score deductions
Lists each item that lowered the confidence score. Empty array when nothing was deducted.
| Field | Type | Description |
|---|---|---|
category | string | STEP · JSON_OUTPUT · TOOL |
type | string | Specific type (see the table below) |
target | string | The target — an action name, or the instance path of an output-schema leaf field |
reasonCode | string | (Optional) Why no value was filled in. JSON_OUTPUT items only |
message | string | (Optional) The grounds the responsible step recorded. JSON_OUTPUT items only |
stepId | number | (Optional) agentAuditLog.steps[].step of the responsible step. JSON_OUTPUT items only |
type | category | Meaning |
|---|---|---|
STEP_NEED_REVIEW | STEP | The step ended needing manual review |
STEP_FAILED | STEP | The step ended in failure |
STEP_NOT_EXECUTED | STEP | Defined in the playbook but never ran |
TOOL_NOT_EXECUTED | TOOL | An engine was configured but never called |
OUTPUT_MISSING | JSON_OUTPUT | An output-schema field received no value |
OUTPUT_EMPTY | JSON_OUTPUT | The field exists but its value is empty |
reasonCode is an extensible enum. For the current values and how to read them, see reading analysis results.
riskAssessment
| Field | Type | Description |
|---|---|---|
riskLevel | string | low (0–25) · medium (26–50) · high (51–75) · critical (76–100) |
riskScore | number | Risk score (0–100, higher is riskier) |
riskFactors | string[] | What pushed the score up. Empty array when there is nothing |
How riskScore is calculated
It is computed from the per-action verdicts alone. Document content and extraction results play no part.riskScore = min(100, 25 + failed_actions × 20 + needs_review_actions × 10)
The base is 25, so
riskScore can never fall below 25. When every action passes, it is exactly 25 (low). The 0–25 range in the table above is the level boundary; a value of 0–24 does not occur in practice.| Action outcomes | riskScore | riskLevel |
|---|---|---|
| All passed | 25 | low |
| 1 needs review | 35 | medium |
| 1 failed | 45 | medium |
| 2 failed | 65 | high |
| 4 or more failed | 100 | critical |
riskFactors carries one {actionName} verification failed line per failed action, plus a single {count} action(s) need manual review line when any action needs review.
systemMetadata
| Field | Type | Description |
|---|---|---|
totalIterations | number | Total agent iterations. Not the same as the step count |
completedWorkIds | number[] | IDs of the work items that completed |
workflowHistory | object[] | Summary history of the work that ran. See below |
tokenUsage | object | Token usage for the whole analysis |
tokenUsagePerWorkId | object | Per-work token usage, keyed by work ID |
outputFormatting | object | Result of assembling extractedData. See below |
systemMetadata.outputFormatting
| Field | Type | Description |
|---|---|---|
status | string | skipped · formatted · validation_failed · fallback_raw |
error | string | null | Why assembly failed. null otherwise |
ajvErrors | string[] | JSON Schema validation mismatches. Empty array when there are none |
status | Meaning | Shape of extractedData |
|---|---|---|
skipped | No output schema | Keyed by action name, no envelope |
formatted | Assembled normally | Output-schema structure with envelopes |
validation_failed | Assembled, but does not validate against the schema | Output-schema structure with envelopes |
fallback_raw | Assembly failed, fell back to the raw structure | Keyed by action name, no envelope |
Branch on this
status before you read extractedData. How to branch is covered in reading analysis results.systemMetadata.workflowHistory
Holds only the work that actually ran. The full step definitions are in workflowActions from GET /workflows/:workflowId.
| Field | Type | Description |
|---|---|---|
workId | number | Work sequence number (starts at 1) |
actionName | string | Name of the action function that ran |
actionDescription | string | Action description |
query | string | The query or instruction the agent used |
reason | string | The grounds for the result |
success | boolean | Whether the work succeeded |
verificationStatus | string | Per-action verdict: passed · needs_review · failed |
iteration | number | Iteration number at completion |
timestamp | string | Completion time |
systemMetadata.tokenUsage
| Field | Type | Description |
|---|---|---|
totalTokens | number | Total tokens |
promptTokens | number | Input tokens |
completionTokens | number | Output tokens |
tokenUsagePerWorkId uses work IDs as keys and the structure above as values.
rawActionResults
The raw, pre-assembly results the actions returned. Keys are action names, and which actions exist follows the workflow’s workflowActions definition.
| Field | Type | Description |
|---|---|---|
answer | string | Result text from the action |
workId | number | Work sequence number |
confidence | number | Result confidence (0.0–1.0) |
citationsCount | number | Number of cited chunks used in the answer |
verificationStatus | string | passed · needs_review · failed |
mcpResults | object[] | (Optional) External engine call results. The field is omitted entirely when there were no calls |
error | object | (Optional) An error during the action. Omitted when there was none |
rawActionResults mcpResults
The same calls as agentAuditLog.steps[].mcpcalls[], organized by action. It uses camelCase, like the top level.
| Field | Type | Description |
|---|---|---|
tool | string | Identifier of the tool that was called |
engine | string | null | Engine display name |
purpose | string | null | Why it was called |
input | object | null | The input that was sent |
success | boolean | Whether the call succeeded |
result | object | null | The raw response the tool returned. Its structure differs per engine |
durationMs | number | null | Duration in milliseconds |
errorCode | string | null | Error code on failure (for example MCP_TIMEOUT) |
errorType | string | null | Error type on failure |
errorMessage | string | null | Error message on failure |
fallbackToRag | boolean | Whether it fell back to document search after the engine failed |
agentAuditLog
An object with two keys, steps and summary.
agentAuditLog is an object, not an array, and its inner fields use snake_case (work_id · executed_at · duration_ms). That differs from the camelCase of the top-level fields.agentAuditLog.steps
| Field | Type | Description |
|---|---|---|
step | number | Execution order (starts at 1). Editing the workflow can change the numbering |
work_id | number | null | Stable identifier of the playbook action. Matches workflowActions[].workId |
action | string | Name of the action that ran |
rule | string | The instruction this step carried out |
status | string | passed · needs_review · failed |
category | string | DOCUMENT · IDENTITY · COMPLIANCE · FINANCIAL · OTHER. Empty string when unclassified |
tokens | number | Token usage for this step |
item_ids | string[] | IDs of the items it referenced |
mcpcalls | object[] | External engine calls. Empty array when there were none |
reasoning | string | The grounds for the decision |
executed_at | string | Execution time |
agentAuditLog.steps mcpcalls
| Field | Type | Description |
|---|---|---|
tool | string | Identifier of the tool that was called |
engine | string | Engine display name |
input | object | The input that was sent |
result | object | The raw response the tool returned. Its structure differs per engine |
purpose | string | Why it was called |
duration_ms | number | Duration in milliseconds |
success | boolean | Whether the call succeeded |
fallback_to_rag | boolean | Whether it fell back to document search after the engine failed |
error_code | string | Error code (on failure) |
error_type | string | Error type (on failure) |
error_message | string | Error message (on failure) |
agentAuditLog.summary
| Field | Type | Description |
|---|---|---|
total_steps | number | Total steps that ran |
passed | number | Steps that ended passed |
needs_review | number | Steps that ended needs_review |
failed | number | Steps that ended failed |
total_tokens | number | Token usage for the whole analysis |
overall_decision | string | Aggregate of the step results: passed · needs_review · failed |
started_at | string | Start time of the first step |
ended_at | string | End time of the last step |
subject | object | Summary of the analysis subject |
findings
| Field | Type | Description |
|---|---|---|
id | string | Entry ID (af_ prefix) |
category | string | Same as the action name |
result | string | passed · warning · failed |
confidence | number | Confidence (0.0–1.0) |
details | string | Result detail (may be truncated) |
sortOrder | number | Display order |
result is agentAuditLog.steps[].status mapped for the UI (needs_review becomes warning).
recommendations
| Field | Type | Description |
|---|---|---|
id | string | Entry ID (ar_ prefix) |
content | string | The recommendation |
priority | number | Priority (lower is higher priority) |
sortOrder | number | Display order |
targetItems
| Field | Type | Description |
|---|---|---|
itemId | string | Item ID (item_ prefix) |
name | string | Item name |
type | string | file · text · json |
sourceRef | string | null | Source reference information |
Example response
A real response is much longer. The example below carries every top-level key but shows only one representative entry for each array and nested object.{
"id": "analysis_lsc7icgm9cjd",
"profileId": "pf_6h4y8s2f0v9n",
"folderId": null,
"engineId": null,
"engine": null,
"playbookId": "PB-20260910-VM351L",
"playbookVersion": "1.0.0",
"capturedAt": "2026-09-10T05:41:09.220Z",
"snapshotStatus": "frozen",
"playbookSnapshot": "---\nname: playbook.md\ndescription: Vendor onboarding document verification\n---\n...",
"status": "completed",
"processingTimeMs": 132480,
"verificationStatus": "verified",
"confidenceScore": 0.92,
"confidence": {
"components": { "stepExecution": 100, "stepQuality": 100, "outputCompleteness": 93.75 },
"score": 98,
"level": "HIGH"
},
"details": [
{
"category": "JSON_OUTPUT", "type": "OUTPUT_MISSING", "target": "address_validation.formatted_address",
"reasonCode": "NOT_IN_FINAL_OUTPUT", "stepId": 5,
"message": "The registered address was confirmed as valid, but the normalized address string was not included in the final output."
}
],
"riskAssessment": { "riskLevel": "low", "riskScore": 25, "riskFactors": [] },
"systemMetadata": {
"totalIterations": 11,
"completedWorkIds": [1, 2, 3, 4, 5, 6, 7, 8],
"workflowHistory": [
{
"workId": 1, "actionName": "verify_document_presence", "iteration": 1,
"actionDescription": "Check that all three required documents were submitted",
"query": "Decide whether all three documents are present in the submitted set",
"reason": "All three documents were submitted.",
"success": true, "verificationStatus": "passed",
"timestamp": "2026-09-10T05:41:36.114Z"
}
],
"tokenUsage": { "totalTokens": 48210, "promptTokens": 45880, "completionTokens": 2330 },
"tokenUsagePerWorkId": {
"1": { "totalTokens": 12480, "promptTokens": 11902, "completionTokens": 578 }
},
"outputFormatting": { "status": "formatted", "error": null, "ajvErrors": [] }
},
"outputSchema": {
"type": "object",
"properties": {
"company": {
"type": "object",
"properties": { "legal_name": { "type": "string", "description": "Registered legal name" } }
},
"documents_complete": { "type": "boolean", "description": "Whether all three required documents were submitted" }
}
},
"extractedData": {
"company": {
"legal_name": {
"value": "ACME TRADING LLC", "sourceStep": 1,
"reasoning": "Read from the entity name field on the certificate of good standing."
}
},
"documents_complete": {
"value": true, "sourceStep": 1,
"reasoning": "All three required documents were submitted."
}
},
"extractionStatus": { "company": "extracted", "documents_complete": "extracted" },
"rawActionResults": {
"screen_legal_entity_aml": {
"answer": "Screening ACME TRADING LLC against AML and sanctions lists returned no matches.",
"workId": 8, "confidence": 0.9, "citationsCount": 1, "verificationStatus": "passed",
"mcpResults": [
{
"tool": "aml_search_business", "engine": "AML - Business",
"purpose": "Screen the legal entity name against sanctions lists",
"input": { "name": "ACME TRADING LLC" },
"success": true, "result": { "matches": [], "status": "No Matches" },
"durationMs": 1840, "fallbackToRag": false,
"errorCode": null, "errorType": null, "errorMessage": null
}
]
}
},
"agentAuditLog": {
"steps": [
{
"step": 1, "work_id": 1, "action": "verify_document_presence",
"rule": "Check that all three required documents were submitted",
"status": "passed", "category": "DOCUMENT", "tokens": 12480,
"item_ids": ["item_axfkh2noof85", "item_lxzzl2vedy9y", "item_wfepr5xxo6w2"],
"mcpcalls": [],
"reasoning": "All three documents were present, so the step was marked as passed.",
"executed_at": "2026-09-10T05:41:36.114Z"
}
],
"summary": {
"total_steps": 8, "passed": 8, "needs_review": 0, "failed": 0,
"total_tokens": 48210, "overall_decision": "passed",
"started_at": "2026-09-10T05:41:10.900Z", "ended_at": "2026-09-10T05:43:21.700Z",
"subject": { "name": "example", "type": "business" }
}
},
"findings": [
{
"id": "af_2k9x4m7p1q3z", "category": "verify_document_presence",
"result": "passed", "confidence": 0.95, "sortOrder": 1,
"details": "The certificate of good standing, the bank verification letter, and the beneficial ownership certification were all confirmed."
}
],
"recommendations": [
{
"id": "ar_5b8n2v6c9k1d", "priority": 2, "sortOrder": 1,
"content": "The normalized registered address was not returned. Check the address as written on the certificate."
}
],
"targetItems": [
{ "itemId": "item_axfkh2noof85", "name": "certificate of good standing", "type": "text", "sourceRef": null }
],
"error": null,
"options": null,
"clientMetadata": null,
"primaryReportId": "rpt_7h3k9m1x5p8t",
"reportId": "rpt_7h3k9m1x5p8t",
"requestedAt": "2026-09-10T05:41:09.220Z",
"completedAt": "2026-09-10T05:43:21.700Z",
"createdAt": "2026-09-10T05:43:21.700Z"
}
Enum summary
- status
- verificationStatus
- Step result
- findings result
- riskLevel
- outputFormatting.status
- reasonCode
- snapshotStatus
| Value | Description |
|---|---|
pending | Waiting to be analyzed |
processing | Analysis in progress |
completed | Analysis finished |
failed | Analysis failed |
The system verdict for the analysis as a whole.
| Value | Description |
|---|---|
verified | Every step passed |
pending_review | At least one step needs manual review |
rejected | At least one step failed |
Per-action results.
agentAuditLog.summary.overall_decision uses the same set of values.| Value | Description |
|---|---|
passed | Verification passed |
needs_review | Manual review required |
failed | Verification failed |
| Value | Description |
|---|---|
passed | Normal |
warning | Warning, needs review |
failed | Failed |
| Value | Description |
|---|---|
low | Low risk (0–25) |
medium | Medium risk (26–50) |
high | High risk (51–75) |
critical | Critical (76–100) |
| Value | Description |
|---|---|
skipped | No output schema — extractedData is keyed by action name |
formatted | Assembled normally |
validation_failed | Assembled, but does not validate against the schema (see ajvErrors) |
fallback_raw | Assembly failed, raw structure returned — extractedData is keyed by action name |
An extensible enum. Implement it so that values outside this table are still accepted.
| Value | Description |
|---|---|
PARENT_MISSING | The child was not produced because the parent was absent |
EMPTY_VALUE | The key exists but the value is empty |
NOT_IN_FINAL_OUTPUT | The entry was not included in the final output |
TOOL_ERROR | The responsible step’s external engine call failed |
| Value | Description |
|---|---|
frozen | A snapshot from run time exists |
legacy | Analyzed before snapshots existed — the current playbook is used instead |
missing | No snapshot — the current playbook is used instead |
Error codes
| Status | Code | Description |
|---|---|---|
| 404 | OMNI_3004 | Analysis not found |