Orlo Platform API

Application and agent integrations at api.useorlo.com. Authenticate with a runtime key scoped to one organization. Configure people-only actions in the Orlo console. Read the workflow guides at docs.useorlo.com/engineers.

Version 0.2.0 Base URL: https://api.useorlo.com

Authentication

runtimeKey

Type: HTTP bearer

Runtime key created by an admin in Settings → Keys. Each operation lists its required scope.

104 endpoints

Tasks

GET/v1/tasks

List tasks

Required scope: tasks.read.

Parameters

NameLocationTypeDescription
archivedquerystring—
Example: exclude

Responses

200Task list

application/json

object

Fields 10
FieldTypeDescription
tasksarray<object>—
tasks[].idstring (uuid)—
tasks[].namestring—
tasks[].current_version_idstring (uuid) | null—
tasks[].configobject—
tasks[].created_atstring (date-time)—
tasks[].updated_atstring (date-time)—
tasks[].archived_atstring (date-time) | null—
tasks[].current_version_numberinteger | null—
tasks[].current_descriptionstring | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "tasks": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "current_version_id": "11111111-1111-4111-8111-111111111111",
      "created_at": "2026-10-14T12:00:00Z",
      "updated_at": "2026-10-14T12:00:00Z",
      "archived_at": "2026-10-14T12:00:00Z",
      "current_version_number": 0,
      "current_description": "string"
    }
  ]
}
POST/v1/tasks

Create a task and first task version

Required scope: tasks.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 17
FieldTypeDescription
nameRequiredstring—
descriptionstring—
input_schemaobject—
output_schemaobject—
examplesarray<object>—
validation_configobject—
prompt_templatestring—
configobjectTask-level settings. On update, retain other config values; this field replaces the object. Response reuse applies to live requests immediately.
config.response_cacheobject—
config.response_cache.enabledbooleanOpt into eligible exact-response reuse for up to five minutes. Prompt releases only, temperature 0–0.1, without sources, adapters or consensus. Default: false.
config.release_policyobject—
config.release_policy.versionRequiredintegerAllowed: 1.
config.release_policy.modeRequiredstringAllowed: "advisory", "required".
config.release_policy.minimum_samplesRequiredintegerMinimum: 2. Maximum: 100000.
config.release_policy.confidenceRequirednumberMinimum: 0.9. Maximum: 0.999.
config.release_policy.max_score_dropRequirednumberMinimum: 0. Maximum: 1.
skill_version_idsarray<string (uuid)>Published skill version ids to pin, in order. Omit on update to keep the previous references; an empty array removes them.

Nested fields marked required are required when their parent object is present.

Example
{
  "name": "Support ticket routing",
  "description": "Route incoming support tickets.",
  "input_schema": {
    "type": "object",
    "properties": {
      "ticket": {
        "type": "string"
      }
    },
    "required": [
      "ticket"
    ]
  },
  "output_schema": {
    "type": "object",
    "properties": {
      "category": {
        "type": "string"
      }
    }
  },
  "prompt_template": "Classify this ticket: {{ticket}}",
  "examples": [
    {
      "input": {
        "ticket": "I cannot sign in"
      },
      "expected_output": {
        "category": "account_access"
      }
    }
  ]
}

Responses

201Task created

application/json

object

Fields 4
FieldTypeDescription
idstring (uuid)—
namestring—
versionobject—
created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "created_at": "2026-10-14T12:00:00Z"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/tasks/{id}

Get one task

Required scope: tasks.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Task detail

application/json

object

Fields 6
FieldTypeDescription
idstring (uuid)—
namestring—
configobject—
created_atstring (date-time)—
updated_atstring (date-time)—
current_versionobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "created_at": "2026-10-14T12:00:00Z",
  "updated_at": "2026-10-14T12:00:00Z"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PUT/v1/tasks/{id}

Update a task by creating a new task version

Required scope: tasks.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 17
FieldTypeDescription
descriptionstring—
input_schemaobject—
output_schemaobject—
examplesarray<object>—
validation_configobject—
prompt_templatestring—
configobjectTask-level settings. On update, retain other config values; this field replaces the object. Response reuse applies to live requests immediately.
config.response_cacheobject—
config.response_cache.enabledbooleanOpt into eligible exact-response reuse for up to five minutes. Prompt releases only, temperature 0–0.1, without sources, adapters or consensus. Default: false.
config.release_policyobject—
config.release_policy.versionRequiredintegerAllowed: 1.
config.release_policy.modeRequiredstringAllowed: "advisory", "required".
config.release_policy.minimum_samplesRequiredintegerMinimum: 2. Maximum: 100000.
config.release_policy.confidenceRequirednumberMinimum: 0.9. Maximum: 0.999.
config.release_policy.max_score_dropRequirednumberMinimum: 0. Maximum: 1.
skill_version_idsarray<string (uuid)>Published skill version ids to pin, in order. Omit on update to keep the previous references; an empty array removes them.
expected_version_idstring (uuid)The task version you edited. A changed version returns TASK_VERSION_CHANGED (409).

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "description": "string",
  "examples": [],
  "prompt_template": "string",
  "config": {
    "response_cache": {
      "enabled": false
    },
    "release_policy": {
      "version": 1,
      "mode": "advisory",
      "minimum_samples": 2,
      "confidence": 0.9,
      "max_score_drop": 0
    }
  },
  "skill_version_ids": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "expected_version_id": "11111111-1111-4111-8111-111111111111"
}

Responses

200Task updated

application/json

object

Fields 2
FieldTypeDescription
idstring (uuid)—
versionobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
409TASK_VERSION_CHANGED: reload the task and review the latest version before saving.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PATCH/v1/tasks/{id}

Rename a task without creating a version

Required scope: tasks.write.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 1
FieldTypeDescription
nameRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "name": "string"
}

Responses

200Successful response

application/json

object

Fields 4
FieldTypeDescription
taskobject—
task.idstring (uuid)—
task.namestring—
task.updated_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "task": {
    "id": "11111111-1111-4111-8111-111111111111",
    "name": "string",
    "updated_at": "2026-10-14T12:00:00Z"
  }
}
GET/v1/tasks/{id}/versions

List task versions

Required scope: tasks.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Versions

application/json

object

Fields 5
FieldTypeDescription
versionsarray<object>—
versions[].idstring (uuid)—
versions[].versioninteger—
versions[].descriptionstring—
versions[].created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "versions": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "version": 0,
      "description": "string",
      "created_at": "2026-10-14T12:00:00Z"
    }
  ]
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/tasks/{id}/preview-impact

Recheck recorded answers against proposed schema or validation rules

Does not call models or test new instructions. Required scope: tasks.write.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 5
FieldTypeDescription
expected_version_idstring (uuid)—
sample_sizeintegerDefault: 25. Minimum: 1. Maximum: 200.
proposed_changesRequiredobject—
proposed_changes.output_schemaobject—
proposed_changes.validation_configobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "expected_version_id": "11111111-1111-4111-8111-111111111111",
  "sample_size": 25,
  "proposed_changes": {}
}

Responses

200Successful response

application/json

object

Fields 1
FieldTypeDescription
impactobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/tasks/{id}/lifecycle

What a task has and which lifecycle actions apply

Required scope: tasks.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string

Responses

200OK

application/json

object

Fields 14
FieldTypeDescription
archived_atstring (date-time) | null—
archived_bystring | null—
historyobject—
history.releasesboolean—
history.comparisonsboolean—
history.answersboolean—
history.agent_runsboolean—
history.adaptersboolean—
busyobject—
busy.comparisons_runninginteger—
busy.agent_runs_openinteger—
busy.approvals_waitinginteger—
can_deleteboolean—
can_archiveboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "archived_at": "2026-10-14T12:00:00Z",
  "archived_by": "string",
  "history": {
    "releases": false,
    "comparisons": false,
    "answers": false,
    "agent_runs": false,
    "adapters": false
  },
  "busy": {
    "comparisons_running": 0,
    "agent_runs_open": 0,
    "approvals_waiting": 0
  },
  "can_delete": false,
  "can_archive": false
}
GET/v1/tasks/{id}/model-settings

Task model shortlist and judge

Required scope: tasks.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string

Responses

200Successful response

application/json

object

Fields 9
FieldTypeDescription
judge_model_idstring (uuid) | null—
second_judge_model_idstring (uuid) | null—
dual_judgeboolean | null—
compare_modelsarray<string (uuid)>—
effectiveobject—
effective.judgeobject | null—
effective.second_judgeobject | null—
effective.dual_judgeboolean—
effective.sourcestringAllowed: "task", "org", "automatic".

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "judge_model_id": "11111111-1111-4111-8111-111111111111",
  "second_judge_model_id": "11111111-1111-4111-8111-111111111111",
  "dual_judge": false,
  "compare_models": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "effective": {
    "dual_judge": false,
    "source": "task"
  }
}
PUT/v1/tasks/{id}/model-settings

Set task model shortlist and judge

Required scope: tasks.write.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 4
FieldTypeDescription
judge_model_idstring (uuid) | null—
second_judge_model_idstring (uuid) | null—
dual_judgeboolean | null—
compare_modelsarray<string (uuid)>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "judge_model_id": "11111111-1111-4111-8111-111111111111",
  "second_judge_model_id": "11111111-1111-4111-8111-111111111111",
  "dual_judge": false,
  "compare_models": [
    "11111111-1111-4111-8111-111111111111"
  ]
}

Responses

200Successful response

application/json

object

Fields 9
FieldTypeDescription
judge_model_idstring (uuid) | null—
second_judge_model_idstring (uuid) | null—
dual_judgeboolean | null—
compare_modelsarray<string (uuid)>—
effectiveobject—
effective.judgeobject | null—
effective.second_judgeobject | null—
effective.dual_judgeboolean—
effective.sourcestringAllowed: "task", "org", "automatic".

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "judge_model_id": "11111111-1111-4111-8111-111111111111",
  "second_judge_model_id": "11111111-1111-4111-8111-111111111111",
  "dual_judge": false,
  "compare_models": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "effective": {
    "dual_judge": false,
    "source": "task"
  }
}
GET/v1/tasks/{id}/versions/{versionId}

One task version

Required scope: tasks.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
versionId*pathstring—
Example: string

Responses

200OK

application/json

object

Fields 12
FieldTypeDescription
idstring (uuid)—
task_idstring (uuid)—
versioninteger—
descriptionstring—
prompt_templatestring—
input_schemaobject—
output_schemaobject—
examplesarray<object>—
validation_configobject—
skill_countinteger—
skillsarray<object>—
created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "task_id": "11111111-1111-4111-8111-111111111111",
  "version": 0,
  "description": "string",
  "prompt_template": "string",
  "examples": [],
  "skill_count": 0,
  "skills": [],
  "created_at": "2026-10-14T12:00:00Z"
}
POST/v1/tasks/{taskId}/documents/reembed

Embed the task’s sources again with the current embedding model

Required scope: documents.write.

Parameters

NameLocationTypeDescription
taskId*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Responses

200OK

application/json

object

Fields 4
FieldTypeDescription
documentsinteger—
chunksinteger—
embedding_modelstring—
messagestring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "documents": 0,
  "chunks": 0,
  "embedding_model": "string",
  "message": "string"
}
202Successful response

application/json

object

Fields 4
FieldTypeDescription
documentsinteger—
chunksinteger—
embedding_modelstring—
messagestring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "documents": 0,
  "chunks": 0,
  "embedding_model": "string",
  "message": "string"
}
POST/v1/tasks/{id}/suggest-rules

Draft an output schema from saved expected answers

Required scope: tasks.write. Reads at most 200 expected answers from the task-owned dataset. It does not save a version. Review and save the draft explicitly.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 2
FieldTypeDescription
dataset_idRequiredstring (uuid)—
expected_version_idRequiredstring (uuid)—

Nested fields marked required are required when their parent object is present.

Example
{
  "dataset_id": "11111111-1111-4111-8111-111111111111",
  "expected_version_id": "22222222-2222-4222-8222-222222222222"
}

Responses

200Successful response

application/json

object

Fields 8
FieldTypeDescription
output_schemaobject—
dataset_idstring (uuid)—
dataset_versioninteger—
available_countinteger—
limitedboolean—
messagestring—
required_fieldsarray<string>—
example_countinteger—

Nested fields marked required are required when their parent object is present.

Example
{
  "output_schema": {
    "type": "object",
    "properties": {
      "decision": {
        "type": "string"
      }
    },
    "required": [
      "decision"
    ]
  },
  "required_fields": [
    "decision"
  ],
  "example_count": 20,
  "dataset_id": "11111111-1111-4111-8111-111111111111",
  "dataset_version": 1,
  "available_count": 20,
  "limited": false,
  "message": "Review the proposed fields and types before saving."
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Datasets

GET/v1/datasets

List datasets

Required scope: datasets.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Dataset list

application/json

object

Fields 14
FieldTypeDescription
datasetsarray<object>—
datasets[].idstring (uuid)—
datasets[].versioninteger—
datasets[].sample_countinteger—
datasets[].created_atstring (date-time)—
datasets[].task_idstring (uuid)—
datasets[].namestring—
datasets[].parent_dataset_idstring (uuid) | null—
datasets[].added_countinteger—
datasets[].baseline_countinteger—
datasets[].change_kindstring—
datasets[].change_modestring—
datasets[].redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.
datasets[].redacted_sample_countintegerNumber of new or copied samples changed by credential protection during this write.

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "datasets": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "version": 0,
      "sample_count": 0,
      "created_at": "2026-10-14T12:00:00Z",
      "task_id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "parent_dataset_id": "11111111-1111-4111-8111-111111111111",
      "added_count": 0,
      "baseline_count": 0,
      "change_kind": "string",
      "change_mode": "string",
      "redaction_warning": "string",
      "redacted_sample_count": 0
    }
  ]
}
POST/v1/datasets

Create a dataset

Required scope: datasets.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 7
FieldTypeDescription
task_idRequiredstring (uuid)—
nameRequiredstring—
samplesRequiredarray<object>—
samples[].inputRequiredobject—
samples[].expected_outputRequiredobject—
modestringAllowed: "append", "replace". Default: "append".
base_dataset_idstring (uuid) | nullThe latest dataset ID, or null when there is no dataset. Required for replace. A changed baseline returns DATASET_BASE_CHANGED (409).

Nested fields marked required are required when their parent object is present.

Example
{
  "task_id": "22222222-2222-4222-8222-222222222222",
  "name": "Support examples",
  "samples": [
    {
      "input": {
        "ticket": "I cannot sign in"
      },
      "expected_output": {
        "category": "account_access"
      }
    }
  ]
}

Responses

201Dataset created

application/json

object

Fields 13
FieldTypeDescription
idstring (uuid)—
versioninteger—
sample_countinteger—
created_atstring (date-time)—
task_idstring (uuid)—
namestring—
parent_dataset_idstring (uuid) | null—
added_countinteger—
baseline_countinteger—
change_kindstring—
change_modestring—
redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.
redacted_sample_countintegerNumber of new or copied samples changed by credential protection during this write.

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "version": 0,
  "sample_count": 0,
  "created_at": "2026-10-14T12:00:00Z",
  "task_id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "parent_dataset_id": "11111111-1111-4111-8111-111111111111",
  "added_count": 0,
  "baseline_count": 0,
  "change_kind": "string",
  "change_mode": "string",
  "redaction_warning": "string",
  "redacted_sample_count": 0
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
409DATASET_BASE_CHANGED: reload the latest dataset before trying again.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
503EXAMPLE_PROTECTION_UNAVAILABLE: organization credentials could not be checked. No changes were saved.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/datasets/{id}

Get one dataset

Required scope: datasets.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111
limitqueryintegerOmit to return all samples; use a limit for cursor pagination.
Example: 1
afterquerystring (uuid)Sample cursor from next_cursor; requires limit.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Successful response

application/json

object & object

Fields 21
FieldTypeDescription
idstring (uuid)—
versioninteger—
sample_countinteger—
created_atstring (date-time)—
task_idstring (uuid)—
namestring—
parent_dataset_idstring (uuid) | null—
added_countinteger—
baseline_countinteger—
change_kindstring—
change_modestring—
redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.
redacted_sample_countintegerNumber of new or copied samples changed by credential protection during this write.
samplesarray<object>—
samples[].idstring (uuid)—
samples[].inputobject—
samples[].expected_outputobject—
samples[].trace_sample_idstring (uuid) | null—
samples[].provenanceobject—
samples[].created_atstring (date-time)—
next_cursorstring (uuid) | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "version": 0,
  "sample_count": 0,
  "created_at": "2026-10-14T12:00:00Z",
  "task_id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "parent_dataset_id": "11111111-1111-4111-8111-111111111111",
  "added_count": 0,
  "baseline_count": 0,
  "change_kind": "string",
  "change_mode": "string",
  "redaction_warning": "string",
  "redacted_sample_count": 0,
  "samples": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "trace_sample_id": "11111111-1111-4111-8111-111111111111",
      "created_at": "2026-10-14T12:00:00Z"
    }
  ],
  "next_cursor": "11111111-1111-4111-8111-111111111111"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Evaluations

GET/v1/evaluations/templates

List evaluation templates

Required scope: evaluations.read.

Responses

200Template list

application/json

object

Fields 4
FieldTypeDescription
templatesarray<object>—
templates[].keystring—
templates[].namestring—
templates[].descriptionstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "templates": [
    {
      "key": "string",
      "name": "string",
      "description": "string"
    }
  ]
}
GET/v1/evaluations/templates/{key}

Get one evaluation template

Required scope: evaluations.read.

Parameters

NameLocationTypeDescription
key*pathstring—
Example: string

Responses

200Template detail

application/json

object

Fields 16
FieldTypeDescription
namestring—
descriptionstring—
budgetobject—
budget.max_tokensinteger—
budget.max_cost_usdnumber—
budget.max_runtime_minutesnumber—
scoringobject—
scoring.schema_weightnumber—
scoring.semantic_weightnumber—
scoring.judge_weightnumber—
scoring.state_change_weightnumber—
rubric_criteriaarray<object>—
rubric_criteria[].namestring—
rubric_criteria[].descriptionstring—
rubric_criteria[].weightnumber—
configobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "name": "string",
  "description": "string",
  "budget": {
    "max_tokens": 0,
    "max_cost_usd": 0,
    "max_runtime_minutes": 0
  },
  "scoring": {
    "schema_weight": 0,
    "semantic_weight": 0,
    "judge_weight": 0,
    "state_change_weight": 0
  },
  "rubric_criteria": [
    {
      "name": "string",
      "description": "string",
      "weight": 0
    }
  ]
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/evaluations/run

Queue an evaluation run

Required scope: evaluations.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

any | any

Fields 23
FieldTypeDescription
task_idRequiredstring (uuid)—
dataset_idRequiredstring (uuid)—
rubric_idstring (uuid)—
modelsarray<string (uuid)>—
extendsstring—
budgetobject—
scoringobject—
configobject—
config.retrieval_diagnosticbooleanRequires a release test with two candidates using the same explicit model and task version, one with sources and one without; no deployment overrides. Both judges receive the same references.
expected_task_version_idstring (uuid)—
candidatesarray<object>—
candidates[].keyRequiredstring—
candidates[].model_idRequiredstring (uuid)—
candidates[].task_version_idstring (uuid)—
candidates[].deployment_idstring (uuid)—
candidates[].include_retrieval_contextboolean—
release_testobject—
release_test.versionRequiredintegerAllowed: 1.
release_test.methodRequiredstringAllowed: "paired_fixed".
release_test.baseline_candidate_keyRequiredstring—
release_test.sample_countRequiredintegerMinimum: 2. Maximum: 100000.
release_test.confidenceRequirednumberMinimum: 0.9. Maximum: 0.999.
release_test.max_score_dropRequirednumberMinimum: 0. Maximum: 1.

Nested fields marked required are required when their parent object is present.

Example
{
  "task_id": "22222222-2222-4222-8222-222222222222",
  "dataset_id": "33333333-3333-4333-8333-333333333333",
  "models": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "expected_task_version_id": "33333333-3333-4333-8333-333333333333"
}

Responses

202Evaluation queued

application/json

object

Fields 15
FieldTypeDescription
idstring (uuid)—
statusstring—
templatestring | null—
rubric_idstring (uuid) | null—
budgetobject—
budget.max_tokensinteger—
budget.max_cost_usdnumber—
budget.max_runtime_minutesnumber—
scoringobject—
scoring.schema_weightnumber—
scoring.semantic_weightnumber—
scoring.judge_weightnumber—
scoring.state_change_weightnumber—
uses_sourcesboolean—
poll_urlstring—

Nested fields marked required are required when their parent object is present.

Example
{
  "id": "11111111-1111-4111-8111-111111111111",
  "status": "pending",
  "template": null,
  "rubric_id": null,
  "budget": {
    "max_tokens": 1000000,
    "max_cost_usd": 100,
    "max_runtime_minutes": 60
  },
  "scoring": {
    "schema_weight": 0.3,
    "semantic_weight": 0.3,
    "judge_weight": 0.4,
    "state_change_weight": 0
  },
  "uses_sources": false,
  "poll_url": "/v1/evaluations/11111111-1111-4111-8111-111111111111"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/evaluations

List evaluations

Required scope: evaluations.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Evaluations

application/json

object

Fields 65
FieldTypeDescription
evaluationsarray<object>—
evaluations[].idstring (uuid)—
evaluations[].task_idstring (uuid)—
evaluations[].dataset_idstring (uuid)—
evaluations[].task_version_idstring (uuid)—
evaluations[].rubric_idstring (uuid)—
evaluations[].modelsarray<string (uuid)>—
evaluations[].statusstring—
evaluations[].error_detailsobject | null—
evaluations[].uses_sourcesboolean—
evaluations[].judgeobject | null—
evaluations[].budgetobject—
evaluations[].resultsarray<object>—
evaluations[].results[].modelstring—
evaluations[].results[].model_idstring—
evaluations[].results[].final_scorenumber | null—
evaluations[].results[].ci_lowernumber | null—
evaluations[].results[].ci_uppernumber | null—
evaluations[].results[].schema_scorenumber | null—
evaluations[].results[].semantic_scorenumber | null—
evaluations[].results[].judge_scorenumber | null—
evaluations[].results[].latency_p95_msnumber | null—
evaluations[].results[].cost_estimatenumber | null—
evaluations[].results[].sample_countinteger—
evaluations[].results[].failure_countinteger—
evaluations[].results[].eliminatedboolean—
evaluations[].results[].grader_scoresobject—
evaluations[].results[].system_notestring | null—
evaluations[].results[].candidate_idstring (uuid)—
evaluations[].results[].candidate_keystring—
evaluations[].results[].release_testobject—
evaluations[].results[].release_test.verdictstringAllowed: "passed", "regressed", "inconclusive", "invalid".
evaluations[].results[].release_test.paired_countinteger—
evaluations[].results[].release_test.planned_countinteger—
evaluations[].results[].release_test.mean_differencenumber | null—
evaluations[].results[].release_test.lower_boundnumber | null—
evaluations[].results[].release_test.upper_boundnumber | null—
evaluations[].results[].release_test.interval_methodstring—
evaluations[].results[].release_test.confidencenumber—
evaluations[].results[].release_test.max_score_dropnumber—
evaluations[].results[].release_test.versionintegerAllowed: 1.
evaluations[].results[].release_test.reasonstring—
evaluations[].results[].release_test.family_sizeinteger—
evaluations[].results[].release_test.standard_failuresinteger—
evaluations[].recommendationobject | null—
evaluations[].datasetobject—
evaluations[].task_versionobject—
evaluations[].created_atstring (date-time)—
evaluations[].created_bystring | null—
evaluations[].completed_atstring (date-time) | null—
evaluations[].release_testobject—
evaluations[].release_test.versionRequiredintegerAllowed: 1.
evaluations[].release_test.methodRequiredstringAllowed: "paired_fixed".
evaluations[].release_test.baseline_candidate_keyRequiredstring—
evaluations[].release_test.sample_countRequiredintegerMinimum: 2. Maximum: 100000.
evaluations[].release_test.confidenceRequirednumberMinimum: 0.9. Maximum: 0.999.
evaluations[].release_test.max_score_dropRequirednumberMinimum: 0. Maximum: 1.
evaluations[].candidatesarray<object>—
evaluations[].candidates[].idstring (uuid)—
evaluations[].candidates[].candidate_keystring—
evaluations[].candidates[].model_idstring (uuid)—
evaluations[].candidates[].modelstring—
evaluations[].candidates[].task_version_idstring (uuid)—
evaluations[].candidates[].include_retrieval_contextboolean—
evaluations[].candidates[].specification_hashstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "evaluations": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "task_id": "11111111-1111-4111-8111-111111111111",
      "dataset_id": "11111111-1111-4111-8111-111111111111",
      "task_version_id": "11111111-1111-4111-8111-111111111111",
      "rubric_id": "11111111-1111-4111-8111-111111111111",
      "models": [
        "11111111-1111-4111-8111-111111111111"
      ],
      "status": "string",
      "uses_sources": false,
      "results": [
        {
          "model": "string",
          "model_id": "string",
          "final_score": 0,
          "ci_lower": 0,
          "ci_upper": 0,
          "schema_score": 0,
          "semantic_score": 0,
          "judge_score": 0,
          "latency_p95_ms": 0,
          "cost_estimate": 0,
          "sample_count": 0,
          "failure_count": 0,
          "eliminated": false,
          "system_note": "string",
          "candidate_id": "11111111-1111-4111-8111-111111111111",
          "candidate_key": "string",
          "release_test": {
            "verdict": "passed",
            "paired_count": 0,
            "planned_count": 0,
            "mean_difference": 0,
            "lower_bound": 0,
            "upper_bound": 0,
            "interval_method": "string",
            "confidence": 0,
            "max_score_drop": 0,
            "version": 1,
            "reason": "string",
            "family_size": 0,
            "standard_failures": 0
          }
        }
      ],
      "created_at": "2026-10-14T12:00:00Z",
      "created_by": "string",
      "completed_at": "2026-10-14T12:00:00Z",
      "release_test": {
        "version": 1,
        "method": "paired_fixed",
        "baseline_candidate_key": "string",
        "sample_count": 2,
        "confidence": 0.9,
        "max_score_drop": 0
      },
      "candidates": [
        {
          "id": "11111111-1111-4111-8111-111111111111",
          "candidate_key": "string",
          "model_id": "11111111-1111-4111-8111-111111111111",
          "model": "string",
          "task_version_id": "11111111-1111-4111-8111-111111111111",
          "include_retrieval_context": false,
          "specification_hash": "string"
        }
      ]
    }
  ]
}
GET/v1/evaluations/{id}

Get evaluation result

Required scope: evaluations.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Evaluation detail

application/json

object

Fields 64
FieldTypeDescription
idstring (uuid)—
task_idstring (uuid)—
dataset_idstring (uuid)—
task_version_idstring (uuid)—
rubric_idstring (uuid)—
modelsarray<string (uuid)>—
statusstring—
error_detailsobject | null—
uses_sourcesboolean—
judgeobject | null—
budgetobject—
resultsarray<object>—
results[].modelstring—
results[].model_idstring—
results[].final_scorenumber | null—
results[].ci_lowernumber | null—
results[].ci_uppernumber | null—
results[].schema_scorenumber | null—
results[].semantic_scorenumber | null—
results[].judge_scorenumber | null—
results[].latency_p95_msnumber | null—
results[].cost_estimatenumber | null—
results[].sample_countinteger—
results[].failure_countinteger—
results[].eliminatedboolean—
results[].grader_scoresobject—
results[].system_notestring | null—
results[].candidate_idstring (uuid)—
results[].candidate_keystring—
results[].release_testobject—
results[].release_test.verdictstringAllowed: "passed", "regressed", "inconclusive", "invalid".
results[].release_test.paired_countinteger—
results[].release_test.planned_countinteger—
results[].release_test.mean_differencenumber | null—
results[].release_test.lower_boundnumber | null—
results[].release_test.upper_boundnumber | null—
results[].release_test.interval_methodstring—
results[].release_test.confidencenumber—
results[].release_test.max_score_dropnumber—
results[].release_test.versionintegerAllowed: 1.
results[].release_test.reasonstring—
results[].release_test.family_sizeinteger—
results[].release_test.standard_failuresinteger—
recommendationobject | null—
datasetobject—
task_versionobject—
created_atstring (date-time)—
created_bystring | null—
completed_atstring (date-time) | null—
release_testobject—
release_test.versionRequiredintegerAllowed: 1.
release_test.methodRequiredstringAllowed: "paired_fixed".
release_test.baseline_candidate_keyRequiredstring—
release_test.sample_countRequiredintegerMinimum: 2. Maximum: 100000.
release_test.confidenceRequirednumberMinimum: 0.9. Maximum: 0.999.
release_test.max_score_dropRequirednumberMinimum: 0. Maximum: 1.
candidatesarray<object>—
candidates[].idstring (uuid)—
candidates[].candidate_keystring—
candidates[].model_idstring (uuid)—
candidates[].modelstring—
candidates[].task_version_idstring (uuid)—
candidates[].include_retrieval_contextboolean—
candidates[].specification_hashstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "task_id": "11111111-1111-4111-8111-111111111111",
  "dataset_id": "11111111-1111-4111-8111-111111111111",
  "task_version_id": "11111111-1111-4111-8111-111111111111",
  "rubric_id": "11111111-1111-4111-8111-111111111111",
  "models": [
    "11111111-1111-4111-8111-111111111111"
  ],
  "status": "string",
  "uses_sources": false,
  "results": [
    {
      "model": "string",
      "model_id": "string",
      "final_score": 0,
      "ci_lower": 0,
      "ci_upper": 0,
      "schema_score": 0,
      "semantic_score": 0,
      "judge_score": 0,
      "latency_p95_ms": 0,
      "cost_estimate": 0,
      "sample_count": 0,
      "failure_count": 0,
      "eliminated": false,
      "system_note": "string",
      "candidate_id": "11111111-1111-4111-8111-111111111111",
      "candidate_key": "string",
      "release_test": {
        "verdict": "passed",
        "paired_count": 0,
        "planned_count": 0,
        "mean_difference": 0,
        "lower_bound": 0,
        "upper_bound": 0,
        "interval_method": "string",
        "confidence": 0,
        "max_score_drop": 0,
        "version": 1,
        "reason": "string",
        "family_size": 0,
        "standard_failures": 0
      }
    }
  ],
  "created_at": "2026-10-14T12:00:00Z",
  "created_by": "string",
  "completed_at": "2026-10-14T12:00:00Z",
  "release_test": {
    "version": 1,
    "method": "paired_fixed",
    "baseline_candidate_key": "string",
    "sample_count": 2,
    "confidence": 0.9,
    "max_score_drop": 0
  },
  "candidates": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "candidate_key": "string",
      "model_id": "11111111-1111-4111-8111-111111111111",
      "model": "string",
      "task_version_id": "11111111-1111-4111-8111-111111111111",
      "include_retrieval_context": false,
      "specification_hash": "string"
    }
  ]
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/evaluations/check

Check comparison readiness using recorded model and key availability

This preflight uses saved availability and configuration. It does not make fresh provider inference requests or guarantee a later run will succeed.

Required scope: evaluations.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

any | any

Fields 20
FieldTypeDescription
task_idRequiredstring (uuid)—
modelsarray<string (uuid)>—
extendsstring—
scoringobject—
configobject—
config.retrieval_diagnosticbooleanRequires a release test with two candidates using the same explicit model and task version, one with sources and one without; no deployment overrides. Both judges receive the same references.
expected_task_version_idstring (uuid)—
candidatesarray<object>—
candidates[].keyRequiredstring—
candidates[].model_idRequiredstring (uuid)—
candidates[].task_version_idstring (uuid)—
candidates[].deployment_idstring (uuid)—
candidates[].include_retrieval_contextboolean—
release_testobject—
release_test.versionRequiredintegerAllowed: 1.
release_test.methodRequiredstringAllowed: "paired_fixed".
release_test.baseline_candidate_keyRequiredstring—
release_test.sample_countRequiredintegerMinimum: 2. Maximum: 100000.
release_test.confidenceRequirednumberMinimum: 0.9. Maximum: 0.999.
release_test.max_score_dropRequirednumberMinimum: 0. Maximum: 1.

Nested fields marked required are required when their parent object is present.

Responses

200Successful response

application/json

object

Fields 24
FieldTypeDescription
readyboolean—
errorstring—
candidatesarray<object>—
candidates[].idstring (uuid)—
candidates[].namestring—
candidates[].providerstring—
candidates[].availabilityobject—
candidates[].availability.statusstringAllowed: "missing_key", "key_rejected", "unverified", "listed", "not_listed", "retired".
candidates[].availability.labelstring—
candidates[].availability.messagestring—
candidates[].availability.selectableboolean—
candidates[].availability.checked_atstring (date-time) | null—
judgesarray<object>—
judges[].idstring (uuid)—
judges[].namestring—
judges[].providerstring—
judges[].availabilityobject—
judges[].availability.statusstringAllowed: "missing_key", "key_rejected", "unverified", "listed", "not_listed", "retired".
judges[].availability.labelstring—
judges[].availability.messagestring—
judges[].availability.selectableboolean—
judges[].availability.checked_atstring (date-time) | null—
issuesarray<string>—
configobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "ready": false,
  "error": "string",
  "candidates": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "provider": "string",
      "availability": {
        "status": "missing_key",
        "label": "string",
        "message": "string",
        "selectable": false,
        "checked_at": "2026-10-14T12:00:00Z"
      }
    }
  ],
  "judges": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "provider": "string",
      "availability": {
        "status": "missing_key",
        "label": "string",
        "message": "string",
        "selectable": false,
        "checked_at": "2026-10-14T12:00:00Z"
      }
    }
  ],
  "issues": [
    "string"
  ]
}
GET/v1/evaluations/defaults

Default comparison budget

Required scope: evaluations.read.

Responses

200Successful response

application/json

object

Fields 1
FieldTypeDescription
budgetobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{}
GET/v1/evaluations/{id}/status

Progress of a comparison

Required scope: evaluations.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string

Responses

200Successful response

application/json

object

Fields 5
FieldTypeDescription
idstring (uuid)—
statusstring—
budgetobject—
error_detailsobject | null—
completed_atstring (date-time) | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "status": "string",
  "completed_at": "2026-10-14T12:00:00Z"
}
POST/v1/evaluations/{id}/cancel

Cancel a running comparison

Required scope: evaluations.write.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Responses

200OK

application/json

object

Fields 4
FieldTypeDescription
evaluationobject—
evaluation.idstring (uuid)—
evaluation.statusstring—
evaluation.task_idstring (uuid)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "evaluation": {
    "id": "11111111-1111-4111-8111-111111111111",
    "status": "string",
    "task_id": "11111111-1111-4111-8111-111111111111"
  }
}
POST/v1/evaluations/{id}/retry

Retry a failed comparison

Required scope: evaluations.write.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

object

Fields 1
FieldTypeDescription
budgetobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{}

Responses

200Successful response

application/json

object

Fields 3
FieldTypeDescription
evaluationobject—
evaluation.idstring (uuid)—
evaluation.statusstringAllowed: "pending".

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "evaluation": {
    "id": "11111111-1111-4111-8111-111111111111",
    "status": "pending"
  }
}
GET/v1/evaluations/{id}/examples

Per-example answers and scores behind a comparison

Required scope: evaluations.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
sortquerystring—
Example: disagreement
model_idsquerystringComma-separated model UUIDs.
Example: string
limitqueryinteger—
Example: 20
offsetqueryinteger—
Example: 0
candidate_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
region_groupquerystring—
Example: string
region_metricquerystring—
Example: string

Responses

200Successful response

application/json

object

Fields 9
FieldTypeDescription
examplesarray<object>—
examples[].sample_idstring (uuid)—
examples[].inputany—
examples[].expected_outputany—
examples[].provenanceobject—
examples[].spreadnumber—
examples[].resultsarray<object>—
totalinteger—
sortstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "examples": [
    {
      "sample_id": "11111111-1111-4111-8111-111111111111",
      "spread": 0,
      "results": []
    }
  ],
  "total": 0,
  "sort": "string"
}
GET/v1/evaluations/{id}/retrieval

Inspect source retrieval separately from answer quality

Required scope: evaluations.read. Returns up to 10 examples and 6 bounded passage previews each. Matched passages do not establish relevance. Older records may be unavailable.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
candidate_id*querystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
afterquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Successful response

application/json

object

Fields 54
FieldTypeDescription
candidateobject—
candidate.idstring (uuid)—
candidate.candidate_keystring—
candidate.include_retrieval_contextboolean—
candidate.source_set_idstring (uuid) | null—
candidate.modelstring—
candidate.summaryobject | null—
candidate.summary.plannedinteger—
candidate.summary.checkedinteger—
candidate.summary.matchedinteger—
candidate.summary.no_matchinteger—
candidate.summary.skippedinteger—
candidate.summary.shared_judge_referenceboolean—
itemsarray<object>—
items[].sample_idstring (uuid)—
items[].statestringAllowed: "disabled", "unrecorded", "skipped", "no_match", "matched".
items[].querystring | null—
items[].modestring | null—
items[].notesarray<string>—
items[].passage_countinteger—
items[].passagesarray<object>—
items[].passages[].source_idstring | null—
items[].passages[].chunk_idstring | null—
items[].passages[].namestring | null—
items[].passages[].pageinteger | null—
items[].passages[].textstring—
items[].passages[].truncatedboolean—
items[].passages[].structureobject | nullRecorded heading_path, page/section ranges, kind, and optional ingestion receipt. A receipt includes document_sha256, chunk_sha256, passage order, parser/chunker identities, and structure_origin. Arbitrary upload metadata is excluded.
items[].passages[].structure.heading_patharray<string>—
items[].passages[].structure.page_startinteger | nullMinimum: 0.
items[].passages[].structure.page_endinteger | nullMinimum: 0.
items[].passages[].structure.section_line_startinteger | nullMinimum: 0.
items[].passages[].structure.section_line_endinteger | nullMinimum: 0.
items[].passages[].structure.kindstringAllowed: "text", "table".
items[].passages[].structure.ingestionobject | null—
items[].passages[].structure.ingestion.versionintegerAllowed: 1.
items[].passages[].structure.ingestion.source_kindstring | nullAllowed: "inline", "pdf", "prechunked".
items[].passages[].structure.ingestion.document_sha256string | null—
items[].passages[].structure.ingestion.chunk_sha256string | null—
items[].passages[].structure.ingestion.chunk_indexinteger | nullMinimum: 0.
items[].passages[].structure.ingestion.chunk_countinteger | nullMinimum: 0.
items[].passages[].structure.ingestion.parserobject—
items[].passages[].structure.ingestion.parser.namestring—
items[].passages[].structure.ingestion.parser.versionstring—
items[].passages[].structure.ingestion.chunkerobject—
items[].passages[].structure.ingestion.chunker.namestring—
items[].passages[].structure.ingestion.chunker.versionstring—
items[].passages[].structure.ingestion.structure_originstringAllowed: "parsed", "supplied".
items[].passages_limitedboolean—
items[].answer_failedboolean—
items[].answer_scorenumber | null—
items[].standard_passedboolean | null—
next_cursorstring (uuid) | null—
notestring—

Nested fields marked required are required when their parent object is present.

Example
{
  "candidate": {
    "id": "11111111-1111-4111-8111-111111111111",
    "candidate_key": "sources-on",
    "include_retrieval_context": true,
    "source_set_id": "22222222-2222-4222-8222-222222222222",
    "model": "Example model",
    "summary": {
      "planned": 40,
      "checked": 40,
      "matched": 40,
      "no_match": 0,
      "skipped": 0,
      "shared_judge_reference": true
    }
  },
  "items": [
    {
      "sample_id": "33333333-3333-4333-8333-333333333333",
      "state": "matched",
      "query": "Refund policy",
      "mode": "full",
      "notes": [],
      "passage_count": 1,
      "passages": [
        {
          "source_id": "44444444-4444-4444-8444-444444444444",
          "chunk_id": "55555555-5555-4555-8555-555555555555",
          "name": "Policy.md",
          "page": null,
          "text": "Refund requests require review.",
          "truncated": false,
          "structure": {
            "heading_path": [
              "Policy",
              "Refunds"
            ],
            "page_start": null,
            "page_end": null,
            "section_line_start": 2,
            "section_line_end": 3,
            "kind": "text",
            "ingestion": null
          }
        }
      ],
      "passages_limited": false,
      "answer_failed": false,
      "answer_score": 1,
      "standard_passed": true
    }
  ],
  "next_cursor": null,
  "note": "Matched passages show what search supplied, not proof of relevance."
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/evaluations/{id}/regions

Read paired regression regions for a candidate

Required scope: evaluations.read. Descriptive diagnostics do not alter the release verdict.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
candidate_id*querystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Successful response

application/json

object

Fields 23
FieldTypeDescription
versioninteger—
baseline_candidate_idstring (uuid)—
candidate_idstring (uuid)—
groupsarray<object>—
groups[].idstring—
groups[].labelstring—
metricsarray<object>—
metrics[].idstring—
metrics[].labelstring—
cellsarray<object>—
cells[].groupstring—
cells[].metricstring—
cells[].examplesinteger—
cells[].pairedinteger—
cells[].missinginteger—
cells[].differencenumber | null—
cells[].sparseboolean—
cells[].baselinenumber | null—
cells[].candidatenumber | null—
cells[].worseinteger—
cells[].betterinteger—
cells[].unchangedinteger—
sparse_belowinteger—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "version": 0,
  "baseline_candidate_id": "11111111-1111-4111-8111-111111111111",
  "candidate_id": "11111111-1111-4111-8111-111111111111",
  "groups": [
    {
      "id": "string",
      "label": "string"
    }
  ],
  "metrics": [
    {
      "id": "string",
      "label": "string"
    }
  ],
  "cells": [
    {
      "group": "string",
      "metric": "string",
      "examples": 0,
      "paired": 0,
      "missing": 0,
      "difference": 0,
      "sparse": false,
      "baseline": 0,
      "candidate": 0,
      "worse": 0,
      "better": 0,
      "unchanged": 0
    }
  ],
  "sparse_below": 0
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Deployments

GET/v1/deployments

List deployments

Required scope: deployments.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Deployment list

application/json

object

Fields 13
FieldTypeDescription
deploymentsarray<object>—
deployments[].idstring (uuid)—
deployments[].task_idstring (uuid)—
deployments[].task_version_idstring (uuid)—
deployments[].model_idstring (uuid)—
deployments[].model_namestring—
deployments[].strategystring—
deployments[].versioninteger—
deployments[].activeboolean—
deployments[].created_atstring (date-time)—
deployments[].created_bystring | null—
deployments[].evaluation_idstring (uuid) | null—
deployments[].config_snapshotobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "deployments": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "task_id": "11111111-1111-4111-8111-111111111111",
      "task_version_id": "11111111-1111-4111-8111-111111111111",
      "model_id": "11111111-1111-4111-8111-111111111111",
      "model_name": "string",
      "strategy": "string",
      "version": 0,
      "active": false,
      "created_at": "2026-10-14T12:00:00Z",
      "created_by": "string",
      "evaluation_id": "11111111-1111-4111-8111-111111111111"
    }
  ]
}
POST/v1/deployments

Create a deployment

Required scope: deployments.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 7
FieldTypeDescription
task_idRequiredstring (uuid)—
task_version_idRequiredstring (uuid)—
model_idRequiredstring (uuid)—
strategystringAllowed: "prompt", "rag", "lora".
adapter_idstring (uuid)—
evaluation_idstring (uuid)Optional comparison evidence. The task version and candidate must match, and the candidate must have produced usable results.
evaluation_candidate_idstring (uuid)—

Nested fields marked required are required when their parent object is present.

Example
{
  "task_id": "22222222-2222-4222-8222-222222222222",
  "task_version_id": "33333333-3333-4333-8333-333333333333",
  "model_id": "11111111-1111-4111-8111-111111111111",
  "strategy": "prompt"
}

Responses

201Deployment created

application/json

object

Fields 4
FieldTypeDescription
idstring (uuid)—
versioninteger—
created_atstring (date-time)—
created_bystring | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "version": 0,
  "created_at": "2026-10-14T12:00:00Z",
  "created_by": "string"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PUT/v1/deployments/{id}/activate

Activate a deployment

Required scope: deployments.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Deployment activated

application/json

object

Fields 2
FieldTypeDescription
idstring (uuid)—
activeboolean—

Nested fields marked required are required when their parent object is present.

Example
{
  "id": "11111111-1111-4111-8111-111111111111",
  "active": true
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PUT/v1/deployments/{id}/deactivate

Deactivate a deployment

Required scope: deployments.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Deployment deactivated

application/json

object

Fields 2
FieldTypeDescription
idstring (uuid)—
activeboolean—

Nested fields marked required are required when their parent object is present.

Example
{
  "id": "11111111-1111-4111-8111-111111111111",
  "active": false
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/deployments/{id}

One release

Required scope: deployments.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string

Responses

200OK

application/json

object

Fields 12
FieldTypeDescription
idstring (uuid)—
task_idstring (uuid)—
task_version_idstring (uuid)—
model_idstring (uuid)—
model_namestring—
strategystring—
versioninteger—
activeboolean—
created_atstring (date-time)—
created_bystring | null—
evaluation_idstring (uuid) | null—
config_snapshotobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "task_id": "11111111-1111-4111-8111-111111111111",
  "task_version_id": "11111111-1111-4111-8111-111111111111",
  "model_id": "11111111-1111-4111-8111-111111111111",
  "model_name": "string",
  "strategy": "string",
  "version": 0,
  "active": false,
  "created_at": "2026-10-14T12:00:00Z",
  "created_by": "string",
  "evaluation_id": "11111111-1111-4111-8111-111111111111"
}

Inference

POST/v1/chat/completions

OpenAI-compatible chat completions

Return a complete checked answer using released task instructions and pinned skills. Caller system, developer and tool messages are treated as data. Streaming is not supported.

Required scope: inference.run.

Parameters

NameLocationTypeDescription
X-Orlo-Task-Id*headerstring (uuid)Trusted task context used on the OpenAI-compatible chat path.
Example: 11111111-1111-4111-8111-111111111111
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 8
FieldTypeDescription
modelstringAccepted for client compatibility. The task release and routing settings select the model.
messagesRequiredarray<object>Conversation data. Released task instructions and pinned skills always apply. Caller system, developer and tool messages become JSON-wrapped user data.
messages[].roleRequiredstringAllowed: "system", "developer", "user", "assistant", "tool".
messages[].contentRequiredstring—
temperaturenumberOverrides the release temperature. When neither specifies one, Orlo requests 0, matching comparisons. Minimum: 0. Maximum: 2.
max_tokensintegerMinimum: 1. Maximum: 16384.
max_completion_tokensintegerOutput-token limit; takes precedence over max_tokens. Minimum: 1. Maximum: 16384.
streambooleanOnly complete answers are supported. true returns INVALID_INPUT (400) before a model call. Allowed: false.

Nested fields marked required are required when their parent object is present.

Example
{
  "messages": [
    {
      "role": "user",
      "content": "I cannot sign in"
    }
  ],
  "max_tokens": 256,
  "stream": false
}

Responses

200Chat completion

application/json

Response headers
x-orlo-model · string
Model that answered.
x-orlo-trace-id · string
Request trace ID for feedback.
x-orlo-validation · string
pass, warn, error, escalate, or abstain.
x-orlo-task-version · string
Task version used.
x-orlo-routing-mode · string
live, policy, or active_fallback.

object

Fields 14
FieldTypeDescription
idstring—
objectstringAllowed: "chat.completion".
createdinteger—
modelstring—
choicesarray<object>—
choices[].indexinteger—
choices[].messageobject—
choices[].message.rolestring—
choices[].message.contentstring—
choices[].finish_reasonstring—
usageobject—
usage.prompt_tokensinteger—
usage.completion_tokensinteger—
usage.total_tokensinteger—

Nested fields marked required are required when their parent object is present.

Example
{
  "id": "11111111-1111-4111-8111-111111111111",
  "object": "chat.completion",
  "created": 1791979200,
  "model": "gpt-4.1-mini",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "{\"category\":\"account_access\"}"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 84,
    "completion_tokens": 12,
    "total_tokens": 96
  }
}
400INVALID_INPUT: correct the named field. Streaming requests are rejected before a model call.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "stream: Streaming is not supported for task inference. Set stream to false or omit it to receive a complete, checked answer."
}
409CONSENSUS_CONFIGURATION_INVALID: Compare eligible candidates on the same task version and source settings, then correct the consensus configuration.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "CONSENSUS_CONFIGURATION_INVALID",
  "message": "Compare eligible candidates on the same task version and source settings, then correct the consensus configuration."
}
422VALIDATION_FAILED: The answer failed its rules or a required check was indeterminate. No answer was returned.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "VALIDATION_FAILED",
  "message": "The answer failed its rules or a required check was indeterminate. No answer was returned."
}
429INFERENCE_BUSY: Too many requests are running. Honor Retry-After and reduce concurrency.

application/json

Response headers
Retry-After · string
Seconds to wait before another attempt.

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INFERENCE_BUSY",
  "message": "Too many requests are running. Honor Retry-After and reduce concurrency."
}
503Provider capacity or availability, or unavailable evidence. Busy and paused responses carry Retry-After. Do not retry automatically when EVIDENCE_UNAVAILABLE includes details.retry_recommended=false; the provider may already have charged for the call.

application/json

Response headers
Retry-After · string
Present for PROVIDER_BUSY or PROVIDER_PAUSED; seconds to wait.

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example: PROVIDER_BUSY
{
  "error": "PROVIDER_BUSY",
  "message": "The provider connection is busy. Try again shortly."
}
Example: PROVIDER_PAUSED
{
  "error": "PROVIDER_PAUSED",
  "message": "The provider connection is temporarily paused after repeated failures."
}
Example: EVIDENCE_UNAVAILABLE
{
  "error": "EVIDENCE_UNAVAILABLE",
  "message": "The provider answered, but its completion could not be recorded. Do not retry automatically; another call may incur a charge.",
  "details": {
    "provider_call_id": "08ef086a-67d0-4d32-8fdc-99a935ed07b8",
    "provider_completed": true,
    "retry_recommended": false
  }
}
Example: RUNTIME_UNAVAILABLE
{
  "error": "RUNTIME_UNAVAILABLE",
  "message": "The model call failed and no fallback answered. Check provider access and availability."
}
504INFERENCE_TIMEOUT: The request was cancelled or exceeded its time limit.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INFERENCE_TIMEOUT",
  "message": "The request was cancelled or exceeded its time limit."
}
POST/v1/tasks/{taskId}/run

Task-native inference

Required scope: inference.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 3
FieldTypeDescription
inputRequiredobjectTask data, supplied separately from released instructions. {{field}} references name fields in this object.
deployment_idstring (uuid)Optional live release belonging to this task. Inactive releases return RELEASE_NOT_LIVE (409).
explainstringAllowed: "default", "debug", "audit".

Nested fields marked required are required when their parent object is present.

Example
{
  "input": {
    "ticket": "I cannot sign in"
  },
  "explain": "debug"
}

Responses

200Inference result. When explain is debug or audit, the response includes retrieval and routing metadata.

application/json

object

Fields 30
FieldTypeDescription
outputRequiredstringComplete answer as a string, including when it contains JSON.
modelRequiredstring—
trace_idRequiredstring (uuid)—
validationRequiredobject—
validation.validRequiredboolean—
validation.warningsRequiredarray<string>—
validation.scoreRequirednumber—
validation.abstainRequiredboolean—
validation.escalateRequiredboolean—
validation.statusstringAn indeterminate required check blocks the answer with abstain true, including under warn behavior. Allowed: "passed", "failed", "indeterminate".
debugobject—
debug.latency_msnumber—
debug.tokensobject—
debug.tokens.inputinteger—
debug.tokens.outputinteger—
debug.deployment_idstring (uuid)—
debug.task_version_idstring (uuid)—
debug.strategystring—
debug.validationobject—
debug.validation.validRequiredboolean—
debug.validation.warningsRequiredarray<string>—
debug.validation.scoreRequirednumber—
debug.validation.abstainRequiredboolean—
debug.validation.escalateRequiredboolean—
debug.validation.statusstringAn indeterminate required check blocks the answer with abstain true, including under warn behavior. Allowed: "passed", "failed", "indeterminate".
debug.retrievalobject | null—
debug.routingobject—
debug.routing.modestringAllowed: "explicit", "policy", "active_fallback", "live".
debug.routing.selected_deployment_idstring (uuid)—
debug.routing.fallback_deployment_idstring (uuid) | null—

Nested fields marked required are required when their parent object is present.

Example
{
  "output": "{\"category\":\"account_access\",\"priority\":\"high\",\"escalate\":false}",
  "model": "gpt-4.1-mini",
  "trace_id": "11111111-1111-4111-8111-111111111111",
  "validation": {
    "valid": true,
    "warnings": [],
    "score": 1,
    "abstain": false,
    "escalate": false
  }
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
409CONSENSUS_CONFIGURATION_INVALID: Compare eligible candidates on the same task version and source settings, then correct the consensus configuration.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "CONSENSUS_CONFIGURATION_INVALID",
  "message": "Compare eligible candidates on the same task version and source settings, then correct the consensus configuration."
}
422Answer rejected by the task rules; no answer is returned. VALIDATION_FAILED: The answer failed its rules or a required check was indeterminate. No answer was returned.

application/json

object

Fields 10
FieldTypeDescription
errorstring—
messagestring—
trace_idstring (uuid)—
validationobject—
validation.validRequiredboolean—
validation.warningsRequiredarray<string>—
validation.scoreRequirednumber—
validation.abstainRequiredboolean—
validation.escalateRequiredboolean—
validation.statusstringAn indeterminate required check blocks the answer with abstain true, including under warn behavior. Allowed: "passed", "failed", "indeterminate".

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "VALIDATION_FAILED",
  "message": "The answer failed the task rules.",
  "trace_id": "11111111-1111-4111-8111-111111111111",
  "validation": {
    "valid": false,
    "warnings": [
      "Missing required field: category"
    ],
    "score": 0,
    "abstain": false,
    "escalate": false
  }
}
429INFERENCE_BUSY: Too many requests are running. Honor Retry-After and reduce concurrency.

application/json

Response headers
Retry-After · string
Seconds to wait before another attempt.

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INFERENCE_BUSY",
  "message": "Too many requests are running. Honor Retry-After and reduce concurrency."
}
503Provider capacity or availability, or unavailable evidence. Busy and paused responses carry Retry-After. Do not retry automatically when EVIDENCE_UNAVAILABLE includes details.retry_recommended=false; the provider may already have charged for the call.

application/json

Response headers
Retry-After · string
Present for PROVIDER_BUSY or PROVIDER_PAUSED; seconds to wait.

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example: PROVIDER_BUSY
{
  "error": "PROVIDER_BUSY",
  "message": "The provider connection is busy. Try again shortly."
}
Example: PROVIDER_PAUSED
{
  "error": "PROVIDER_PAUSED",
  "message": "The provider connection is temporarily paused after repeated failures."
}
Example: EVIDENCE_UNAVAILABLE
{
  "error": "EVIDENCE_UNAVAILABLE",
  "message": "The provider answered, but its completion could not be recorded. Do not retry automatically; another call may incur a charge.",
  "details": {
    "provider_call_id": "08ef086a-67d0-4d32-8fdc-99a935ed07b8",
    "provider_completed": true,
    "retry_recommended": false
  }
}
Example: RUNTIME_UNAVAILABLE
{
  "error": "RUNTIME_UNAVAILABLE",
  "message": "The model call failed and no fallback answered. Check provider access and availability."
}
504INFERENCE_TIMEOUT: The request was cancelled or exceeded its time limit.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INFERENCE_TIMEOUT",
  "message": "The request was cancelled or exceeded its time limit."
}

Feedback

GET/v1/feedback

List feedback

Required scope: feedback.read.

Parameters

NameLocationTypeDescription
statusquerystring—
Example: string
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Feedback list

application/json

object

Fields 9
FieldTypeDescription
totalinteger—
revisionstring—
feedbackarray<object>—
feedback[].idstring (uuid)—
feedback[].inference_log_idstring (uuid)—
feedback[].scoreintegerAllowed: -1, 0, 1.
feedback[].correctionobject | null—
feedback[].statusstringAllowed: "pending", "staged", "rejected".
feedback[].created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "total": 0,
  "revision": "string",
  "feedback": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "inference_log_id": "11111111-1111-4111-8111-111111111111",
      "score": -1,
      "status": "pending",
      "created_at": "2026-10-14T12:00:00Z"
    }
  ]
}
POST/v1/feedback

Submit feedback

Required scope: feedback.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 3
FieldTypeDescription
inference_log_idRequiredstring (uuid)—
scoreRequiredintegerAllowed: -1, 0, 1.
correctionobject—

Nested fields marked required are required when their parent object is present.

Example
{
  "inference_log_id": "11111111-1111-4111-8111-111111111111",
  "score": 0,
  "correction": {
    "category": "account_access"
  }
}

Responses

201Feedback submitted

application/json

object

Fields 4
FieldTypeDescription
idstring (uuid)—
statusstringAllowed: "pending".
created_atstring (date-time)—
redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "status": "pending",
  "created_at": "2026-10-14T12:00:00Z",
  "redaction_warning": "string"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
503EXAMPLE_PROTECTION_UNAVAILABLE: organization credentials could not be checked. No changes were saved.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PUT/v1/feedback/{id}/status

Transition feedback status

Required scope: feedback.write. Requires a signed-in member with review access. Runtime keys, desktop connections, and management tokens cannot make human review decisions.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 1
FieldTypeDescription
statusRequiredstringAllowed: "staged", "rejected".

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "status": "staged"
}

Responses

200Status changed

application/json

object

Fields 3
FieldTypeDescription
idstring (uuid)—
previous_statusstring—
statusstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "previous_status": "string",
  "status": "string"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
403PEOPLE_ONLY: sign in with a member account that has review access.
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/tasks/{taskId}/feedback/promote

Promote staged feedback into a new dataset

Required scope: datasets.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

object

Fields 2
FieldTypeDescription
base_dataset_idstring (uuid) | null—
expected_feedback_revisionstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "base_dataset_id": "11111111-1111-4111-8111-111111111111",
  "expected_feedback_revision": "string"
}

Responses

200Successful response

application/json

object

Fields 19
FieldTypeDescription
dataset_idstring (uuid)—
new_versioninteger—
promoted_countinteger—
sample_countinteger—
baseline_countinteger—
datasetobject—
dataset.idstring (uuid)—
dataset.versioninteger—
dataset.sample_countinteger—
dataset.created_atstring (date-time)—
dataset.task_idstring (uuid)—
dataset.namestring—
dataset.parent_dataset_idstring (uuid) | null—
dataset.added_countinteger—
dataset.baseline_countinteger—
dataset.change_kindstring—
dataset.change_modestring—
dataset.redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.
dataset.redacted_sample_countintegerNumber of new or copied samples changed by credential protection during this write.

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "dataset_id": "11111111-1111-4111-8111-111111111111",
  "new_version": 0,
  "promoted_count": 0,
  "sample_count": 0,
  "baseline_count": 0,
  "dataset": {
    "id": "11111111-1111-4111-8111-111111111111",
    "version": 0,
    "sample_count": 0,
    "created_at": "2026-10-14T12:00:00Z",
    "task_id": "11111111-1111-4111-8111-111111111111",
    "name": "string",
    "parent_dataset_id": "11111111-1111-4111-8111-111111111111",
    "added_count": 0,
    "baseline_count": 0,
    "change_kind": "string",
    "change_mode": "string",
    "redaction_warning": "string",
    "redacted_sample_count": 0
  }
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
409FEEDBACK_CHANGED: staged corrections changed. DATASET_BASE_CHANGED: the dataset baseline changed. Refresh and review before trying again.

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Documents

GET/v1/tasks/{taskId}/documents

List documents for a task

Required scope: documents.read.

Parameters

NameLocationTypeDescription
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Document list

application/json

object

Fields 21
FieldTypeDescription
documentsarray<object>—
documents[].idstring (uuid)—
documents[].task_idstring (uuid)—
documents[].namestring—
documents[].content_typestring—
documents[].source_kindstring—
documents[].chunk_countinteger—
documents[].page_countinteger | null—
documents[].size_bytesinteger | null—
documents[].statusstring—
documents[].metadataobject—
documents[].error_detailsobject | null—
documents[].extraction_reportobject | null—
documents[].created_atstring (date-time)—
documents[].embedded_chunksinteger—
documents[].other_model_chunksinteger—
documents[].unrecorded_chunksinteger—
capabilitiesobject—
capabilities.pdfboolean—
capabilities.meaning_searchboolean—
capabilities.embedding_modelstring | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "documents": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "task_id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "content_type": "string",
      "source_kind": "string",
      "chunk_count": 0,
      "page_count": 0,
      "size_bytes": 0,
      "status": "string",
      "created_at": "2026-10-14T12:00:00Z",
      "embedded_chunks": 0,
      "other_model_chunks": 0,
      "unrecorded_chunks": 0
    }
  ],
  "capabilities": {
    "pdf": false,
    "meaning_search": false,
    "embedding_model": "string"
  }
}
POST/v1/tasks/{taskId}/documents

Create a document from inline text, pre-chunked content, or inline PDF

Required scope: documents.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 8
FieldTypeDescription
nameRequiredstring—
contentstring—
content_base64string—
content_typestring—
chunksarray<object>—
chunks[].contentRequiredstring—
chunks[].metadataobject—
metadataobject—

Nested fields marked required are required when their parent object is present.

Example
{
  "name": "Support handbook.md",
  "content_type": "text/markdown",
  "content": "# Account access\nAsk the customer to reset their password."
}

Responses

202Document accepted for embedding or extraction

application/json

object

Fields 6
FieldTypeDescription
document_idstring (uuid)—
chunk_countinteger—
statusstring—
embedding_job_idstring—
extraction_job_idstring—
size_bytesinteger—

Nested fields marked required are required when their parent object is present.

Example
{
  "document_id": "11111111-1111-4111-8111-111111111111",
  "chunk_count": 12,
  "status": "embedding",
  "embedding_job_id": "42"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
413Error response

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
503Error response

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/tasks/{taskId}/documents/uploads

Start a direct PDF upload

Required scope: documents.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 5
FieldTypeDescription
nameRequiredstring—
content_typestring—
size_bytesRequiredinteger—
sha256string—
metadataobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "name": "string",
  "content_type": "string",
  "size_bytes": 0,
  "sha256": "string"
}

Responses

201Upload initiated

application/json

object

Fields 12
FieldTypeDescription
document_idstring (uuid)—
statusstring—
content_typestring—
storage_keystring—
uploadobject—
upload.methodstring—
upload.urlstring—
upload.headersobject—
upload.expires_atstring (date-time)—
limitsobject—
limits.max_direct_upload_bytesinteger—
limits.born_digital_onlyboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "document_id": "11111111-1111-4111-8111-111111111111",
  "status": "string",
  "content_type": "string",
  "storage_key": "string",
  "upload": {
    "method": "string",
    "url": "string",
    "expires_at": "2026-10-14T12:00:00Z"
  },
  "limits": {
    "max_direct_upload_bytes": 0,
    "born_digital_only": false
  }
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
413Error response

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
503Error response

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/tasks/{taskId}/documents/{id}/finalize

Finalize a direct PDF upload and enqueue extraction

Required scope: documents.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

202Extraction queued

application/json

object

Fields 6
FieldTypeDescription
document_idstring (uuid)—
chunk_countinteger—
statusstring—
embedding_job_idstring—
extraction_job_idstring—
size_bytesinteger—

Nested fields marked required are required when their parent object is present.

Example
{
  "document_id": "11111111-1111-4111-8111-111111111111",
  "status": "extracting",
  "size_bytes": 4200,
  "extraction_job_id": "42"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
409Error response

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
413Error response

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
503Error response

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/tasks/{taskId}/documents/{id}

Get one document

Required scope: documents.read.

Parameters

NameLocationTypeDescription
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Document detail

application/json

object

Fields 16
FieldTypeDescription
idstring (uuid)—
task_idstring (uuid)—
namestring—
content_typestring—
source_kindstring—
chunk_countinteger—
page_countinteger | null—
size_bytesinteger | null—
statusstring—
metadataobject—
error_detailsobject | null—
extraction_reportobject | null—
created_atstring (date-time)—
embedded_chunksinteger—
other_model_chunksinteger—
unrecorded_chunksinteger—

Nested fields marked required are required when their parent object is present.

Example
{
  "id": "11111111-1111-4111-8111-111111111111",
  "task_id": "22222222-2222-4222-8222-222222222222",
  "name": "Support handbook.md",
  "content_type": "text/markdown",
  "source_kind": "inline",
  "chunk_count": 12,
  "page_count": null,
  "size_bytes": 4200,
  "status": "ready",
  "metadata": {},
  "error_details": null,
  "extraction_report": null,
  "created_at": "2026-10-14T12:00:00Z",
  "embedded_chunks": 12
}
DELETE/v1/tasks/{taskId}/documents/{id}

Delete a document

Required scope: documents.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
taskId*pathstring (uuid)taskId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

204Deleted; no response body

Credentials

GET/v1/credentials

List credentials

Required scope: credentials.read.

Responses

200Credential list

application/json

object

Fields 10
FieldTypeDescription
credentialsarray<object>—
credentials[].idstring (uuid)—
credentials[].providerstring—
credentials[].labelstring—
credentials[].base_urlstring | null—
credentials[].created_atstring (date-time)—
credentials[].last_checkobject | null—
credentials[].last_check.atstring (date-time)—
credentials[].last_check.statusstring—
credentials[].last_check.messagestring | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "credentials": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "provider": "string",
      "label": "string",
      "base_url": "string",
      "created_at": "2026-10-14T12:00:00Z",
      "last_check": {
        "at": "2026-10-14T12:00:00Z",
        "status": "string",
        "message": "string"
      }
    }
  ]
}
POST/v1/credentials

Store an encrypted provider credential

Required scope: credentials.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 4
FieldTypeDescription
providerRequiredstringAllowed: "openai", "anthropic", "vllm", "llama_cpp", "cloudflare", "huggingface", "custom", "object_storage".
labelRequiredstring—
api_keyRequiredstringProvider secret. Stored encrypted and never returned by credential reads.
base_urlstring—

Nested fields marked required are required when their parent object is present.

Example
{
  "provider": "openai",
  "label": "Production",
  "api_key": "<your-provider-key>"
}

Responses

201Credential stored

application/json

object

Fields 4
FieldTypeDescription
idstring (uuid)—
providerstring—
labelstring—
base_urlstring | null—

Nested fields marked required are required when their parent object is present.

Example
{
  "id": "11111111-1111-4111-8111-111111111111",
  "provider": "openai",
  "label": "Production"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PATCH/v1/credentials/{id}

Rename a saved credential

Required scope: credentials.write.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 1
FieldTypeDescription
labelRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "label": "string"
}

Responses

200Successful response

application/json

object

Fields 5
FieldTypeDescription
credentialobject—
credential.idstring (uuid)—
credential.providerstring—
credential.labelstring—
credential.base_urlstring | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "credential": {
    "id": "11111111-1111-4111-8111-111111111111",
    "provider": "string",
    "label": "string",
    "base_url": "string"
  }
}
DELETE/v1/credentials/{id}

Deactivate a credential

Required scope: credentials.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

204Deleted; no response body
POST/v1/credentials/{id}/test

Test a provider key and record the models it lists

Required scope: credentials.write.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Responses

200Successful response

application/json

object

Fields 5
FieldTypeDescription
idstring (uuid)—
statusstringAllowed: "ok", "rejected", "unreachable", "refused", "unsupported".
messagestring—
model_countinteger—
modelsarray<string>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "status": "ok",
  "message": "string",
  "model_count": 0,
  "models": [
    "string"
  ]
}

Models

GET/v1/models

List models visible to the org

Active models plus retired models still used by an active organization release. Availability reflects the most recent saved credential check, not a guarantee of a successful request.

Required scope: models.read.

Parameters

NameLocationTypeDescription
runtimequerystring—
Example: string
providerquerystring—
Example: string

Responses

200Successful response

application/json

object

Fields 21
FieldTypeDescription
modelsarray<object>—
models[].idstring (uuid)—
models[].namestring—
models[].providerstring—
models[].runtimestring—
models[].activeboolean—
models[].has_credentialsboolean—
models[].availabilityobject—
models[].availability.statusstringAllowed: "missing_key", "key_rejected", "unverified", "listed", "not_listed", "retired".
models[].availability.labelstring—
models[].availability.messagestring—
models[].availability.selectableboolean—
models[].availability.checked_atstring (date-time) | null—
models[].retired_atstring (date-time) | null—
models[].retired_reasonstring | null—
models[].is_embeddingboolean—
models[].price_input_per_millionnumber | null—
models[].price_output_per_millionnumber | null—
models[].price_sourcestring | null—
models[].price_checked_atstring (date-time) | null—
totalinteger—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "models": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "provider": "string",
      "runtime": "string",
      "active": false,
      "has_credentials": false,
      "availability": {
        "status": "missing_key",
        "label": "string",
        "message": "string",
        "selectable": false,
        "checked_at": "2026-10-14T12:00:00Z"
      },
      "retired_at": "2026-10-14T12:00:00Z",
      "retired_reason": "string",
      "is_embedding": false,
      "price_input_per_million": 0,
      "price_output_per_million": 0,
      "price_source": "string",
      "price_checked_at": "2026-10-14T12:00:00Z"
    }
  ],
  "total": 0
}
GET/v1/models/{id}

Get one model

Returns an active catalog model; inactive or unknown models return 404.

Required scope: models.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Successful response

application/json

object

Fields 19
FieldTypeDescription
idstring (uuid)—
namestring—
providerstring—
runtimestring—
activeboolean—
has_credentialsboolean—
availabilityobject—
availability.statusstringAllowed: "missing_key", "key_rejected", "unverified", "listed", "not_listed", "retired".
availability.labelstring—
availability.messagestring—
availability.selectableboolean—
availability.checked_atstring (date-time) | null—
retired_atstring (date-time) | null—
retired_reasonstring | null—
is_embeddingboolean—
price_input_per_millionnumber | null—
price_output_per_millionnumber | null—
price_sourcestring | null—
price_checked_atstring (date-time) | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "provider": "string",
  "runtime": "string",
  "active": false,
  "has_credentials": false,
  "availability": {
    "status": "missing_key",
    "label": "string",
    "message": "string",
    "selectable": false,
    "checked_at": "2026-10-14T12:00:00Z"
  },
  "retired_at": "2026-10-14T12:00:00Z",
  "retired_reason": "string",
  "is_embedding": false,
  "price_input_per_million": 0,
  "price_output_per_million": 0,
  "price_source": "string",
  "price_checked_at": "2026-10-14T12:00:00Z"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Adapters

GET/v1/adapters

List adapters

Required scope: models.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Adapter list

application/json

object

Fields 18
FieldTypeDescription
adaptersarray<object>—
adapters[].idstring (uuid)—
adapters[].task_idstring (uuid)—
adapters[].base_model_idstring (uuid)—
adapters[].namestring—
adapters[].formatstring—
adapters[].storage_pathstring—
adapters[].statusstring—
adapters[].base_model_namestring—
adapters[].base_model_runtimestring—
adapters[].size_bytesinteger—
adapters[].rankinteger—
adapters[].alphanumber—
adapters[].target_modulesarray<string>—
adapters[].metadataobject—
adapters[].activeboolean—
adapters[].created_atstring (date-time)—
adapters[].updated_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "adapters": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "task_id": "11111111-1111-4111-8111-111111111111",
      "base_model_id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "format": "string",
      "storage_path": "string",
      "status": "string",
      "base_model_name": "string",
      "base_model_runtime": "string",
      "size_bytes": 0,
      "rank": 0,
      "alpha": 0,
      "target_modules": [
        "string"
      ],
      "active": false,
      "created_at": "2026-10-14T12:00:00Z",
      "updated_at": "2026-10-14T12:00:00Z"
    }
  ]
}
POST/v1/adapters

Register a LoRA adapter

Required scope: models.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 10
FieldTypeDescription
task_idRequiredstring (uuid)—
base_model_idRequiredstring—
nameRequiredstring—
formatstringAllowed: "safetensors", "gguf_lora", "peft".
storage_pathRequiredstring—
size_bytesinteger—
rankinteger—
alphainteger—
target_modulesarray<string>—
metadataobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "task_id": "11111111-1111-4111-8111-111111111111",
  "base_model_id": "string",
  "name": "string",
  "format": "safetensors",
  "storage_path": "string",
  "size_bytes": 0,
  "rank": 0,
  "alpha": 0,
  "target_modules": [
    "string"
  ]
}

Responses

201Adapter registered

application/json

object

Fields 11
FieldTypeDescription
idstring (uuid)—
namestring—
formatstring—
storage_pathstring—
size_bytesinteger—
rankinteger—
alphanumber—
target_modulesarray<string>—
statusstring—
created_atstring (date-time)—
base_modelstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "format": "string",
  "storage_path": "string",
  "size_bytes": 0,
  "rank": 0,
  "alpha": 0,
  "target_modules": [
    "string"
  ],
  "status": "string",
  "created_at": "2026-10-14T12:00:00Z",
  "base_model": "string"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/adapters/{id}

Get one adapter

Required scope: models.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Adapter detail

application/json

object

Fields 17
FieldTypeDescription
idstring (uuid)—
task_idstring (uuid)—
base_model_idstring (uuid)—
namestring—
formatstring—
storage_pathstring—
statusstring—
base_model_namestring—
base_model_runtimestring—
size_bytesinteger—
rankinteger—
alphanumber—
target_modulesarray<string>—
metadataobject—
activeboolean—
created_atstring (date-time)—
updated_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "task_id": "11111111-1111-4111-8111-111111111111",
  "base_model_id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "format": "string",
  "storage_path": "string",
  "status": "string",
  "base_model_name": "string",
  "base_model_runtime": "string",
  "size_bytes": 0,
  "rank": 0,
  "alpha": 0,
  "target_modules": [
    "string"
  ],
  "active": false,
  "created_at": "2026-10-14T12:00:00Z",
  "updated_at": "2026-10-14T12:00:00Z"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PUT/v1/adapters/{id}

Update an adapter

Required scope: models.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 4
FieldTypeDescription
namestring—
storage_pathstring—
metadataobject—
activeboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "name": "string",
  "storage_path": "string",
  "active": false
}

Responses

200Adapter updated

application/json

object

Fields 4
FieldTypeDescription
idstring (uuid)—
namestring—
activeboolean—
updated_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "active": false,
  "updated_at": "2026-10-14T12:00:00Z"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
DELETE/v1/adapters/{id}

Archive an adapter

Required scope: models.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Adapter archived

application/json

object

Fields 3
FieldTypeDescription
idstring (uuid)—
activeboolean—
statusstring—

Nested fields marked required are required when their parent object is present.

Example
{
  "id": "11111111-1111-4111-8111-111111111111",
  "active": false,
  "status": "archived"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Org-config

GET/v1/orgs/config

Get org config

Required scope: org_config.read.

Responses

200Org config

application/json

object

Fields 1
FieldTypeDescription
configobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{}
PUT/v1/orgs/config

Update org config

Required scope: org_config.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 1
FieldTypeDescription
configRequiredobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{}

Responses

200Org config updated

application/json

object

Fields 1
FieldTypeDescription
statusstring—

Nested fields marked required are required when their parent object is present.

Example
{
  "status": "updated"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Routing

GET/v1/routing-policies

List routing policies

Required scope: routing.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Routing policy list

application/json

object

Fields 17
FieldTypeDescription
policiesarray<object>—
policies[].task_idstring (uuid)—
policies[].weight_accuracynumber—
policies[].weight_latencynumber—
policies[].weight_costnumber—
policies[].weight_validationnumber—
policies[].min_accuracynumber | null—
policies[].max_latency_msnumber | null—
policies[].min_validation_ratenumber | null—
policies[].max_cost_per_1knumber | null—
policies[].sla_latency_p95_msnumber—
policies[].sla_availabilitynumber—
policies[].sla_max_error_ratenumber—
policies[].fallback_model_idstring (uuid) | null—
policies[].idstring (uuid)—
policies[].org_idstring (uuid)—
policies[].created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "policies": [
    {
      "task_id": "11111111-1111-4111-8111-111111111111",
      "weight_accuracy": 0,
      "weight_latency": 0,
      "weight_cost": 0,
      "weight_validation": 0,
      "min_accuracy": 0,
      "max_latency_ms": 0,
      "min_validation_rate": 0,
      "max_cost_per_1k": 0,
      "sla_latency_p95_ms": 0,
      "sla_availability": 0,
      "sla_max_error_rate": 0,
      "fallback_model_id": "11111111-1111-4111-8111-111111111111",
      "id": "11111111-1111-4111-8111-111111111111",
      "org_id": "11111111-1111-4111-8111-111111111111",
      "created_at": "2026-10-14T12:00:00Z"
    }
  ]
}
POST/v1/routing-policies

Create a routing policy

Required scope: routing.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 13
FieldTypeDescription
task_idRequiredstring (uuid)—
weight_accuracynumber—
weight_latencynumber—
weight_costnumber—
weight_validationnumber—
min_accuracynumber—
max_latency_msnumber—
min_validation_ratenumber—
max_cost_per_1knumber—
sla_latency_p95_msnumber—
sla_availabilitynumber—
sla_max_error_ratenumber—
fallback_model_idstring (uuid)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "task_id": "11111111-1111-4111-8111-111111111111",
  "weight_accuracy": 0,
  "weight_latency": 0,
  "weight_cost": 0,
  "weight_validation": 0,
  "min_accuracy": 0,
  "max_latency_ms": 0,
  "min_validation_rate": 0,
  "max_cost_per_1k": 0,
  "sla_latency_p95_ms": 0,
  "sla_availability": 0,
  "sla_max_error_rate": 0,
  "fallback_model_id": "11111111-1111-4111-8111-111111111111"
}

Responses

201Routing policy created

application/json

object

Fields 2
FieldTypeDescription
idstring (uuid)—
created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "created_at": "2026-10-14T12:00:00Z"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Rubrics

GET/v1/rubrics

List rubrics

Required scope: rubrics.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Rubric list

application/json

object

Fields 14
FieldTypeDescription
rubricsarray<object>—
rubrics[].idstring (uuid)—
rubrics[].task_idstring (uuid)—
rubrics[].versioninteger—
rubrics[].namestring—
rubrics[].created_atstring (date-time)—
rubrics[].criteria_countinteger—
rubrics[].criteriaarray<object>—
rubrics[].criteria[].idstring (uuid)—
rubrics[].criteria[].namestring—
rubrics[].criteria[].descriptionstring—
rubrics[].criteria[].weightnumber—
rubrics[].criteria[].orderinteger—
rubrics[].criteria[].score_levelsobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "rubrics": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "task_id": "11111111-1111-4111-8111-111111111111",
      "version": 0,
      "name": "string",
      "created_at": "2026-10-14T12:00:00Z",
      "criteria_count": 0,
      "criteria": [
        {
          "id": "11111111-1111-4111-8111-111111111111",
          "name": "string",
          "description": "string",
          "weight": 0,
          "order": 0
        }
      ]
    }
  ]
}
POST/v1/rubrics

Create a rubric

Required scope: rubrics.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 6
FieldTypeDescription
task_idRequiredstring (uuid)—
nameRequiredstring—
criteriaRequiredarray<object>—
criteria[].nameRequiredstring—
criteria[].descriptionRequiredstring—
criteria[].weightnumber—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "task_id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "criteria": [
    {
      "name": "string",
      "description": "string",
      "weight": 0
    }
  ]
}

Responses

201Rubric created

application/json

object

Fields 4
FieldTypeDescription
idstring (uuid)—
versioninteger—
created_atstring (date-time)—
namestring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "version": 0,
  "created_at": "2026-10-14T12:00:00Z",
  "name": "string"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/rubrics/{id}

Get one rubric

Required scope: rubrics.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Rubric detail

application/json

object

Fields 13
FieldTypeDescription
idstring (uuid)—
task_idstring (uuid)—
versioninteger—
namestring—
created_atstring (date-time)—
criteria_countinteger—
criteriaarray<object>—
criteria[].idstring (uuid)—
criteria[].namestring—
criteria[].descriptionstring—
criteria[].weightnumber—
criteria[].orderinteger—
criteria[].score_levelsobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "task_id": "11111111-1111-4111-8111-111111111111",
  "version": 0,
  "name": "string",
  "created_at": "2026-10-14T12:00:00Z",
  "criteria_count": 0,
  "criteria": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "description": "string",
      "weight": 0,
      "order": 0
    }
  ]
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}

Agent-governance

GET/v1/agent-sessions

List agent sessions

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
statusquerystring—
Example: string
limitqueryinteger—
Example: 0

Responses

200Agent sessions

application/json

object

Fields 21
FieldTypeDescription
sessionsarray<object>—
sessions[].skill_versionsarray<any>—
sessions[].idRequiredstring—
sessions[].task_idRequiredstring—
sessions[].external_run_idRequiredstring | null—
sessions[].goalRequiredstring | null—
sessions[].expected_outcomeRequiredobject | null—
sessions[].frameworkRequiredstring | null—
sessions[].risk_tierRequiredstringAllowed: "low", "medium", "high", "critical".
sessions[].autonomy_levelRequiredstringAllowed: "manual", "assisted", "semi_autonomous", "autonomous".
sessions[].statusRequiredstringAllowed: "active", "paused", "completed", "failed", "cancelled", "timed_out".
sessions[].containment_stateRequiredstring | null—
sessions[].step_countRequirednumber—
sessions[].tool_call_countRequirednumber—
sessions[].write_action_countRequirednumber—
sessions[].external_side_effect_countRequirednumber—
sessions[].started_atRequiredstring—
sessions[].completed_atRequiredstring | null—
sessions[].last_activity_atRequiredstring—
sessions[].created_atRequiredstring—
sessions[].updated_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "sessions": [
    {
      "skill_versions": [],
      "id": "string",
      "task_id": "string",
      "external_run_id": "string",
      "goal": "string",
      "framework": "string",
      "risk_tier": "low",
      "autonomy_level": "manual",
      "status": "active",
      "step_count": 0,
      "tool_call_count": 0,
      "write_action_count": 0,
      "external_side_effect_count": 0,
      "started_at": "string",
      "completed_at": "string",
      "last_activity_at": "string",
      "created_at": "string",
      "updated_at": "string"
    }
  ]
}
POST/v1/agent-sessions

Create an agent session

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 12
FieldTypeDescription
task_idRequiredstring (uuid)—
external_run_idstring—
goalstring—
expected_outcomeobject—
frameworkstring—
risk_tierstringAllowed: "low", "medium", "high", "critical".
autonomy_levelstringAllowed: "manual", "assisted", "semi_autonomous", "autonomous".
metadataobject—
skill_versionsarray<object>Exact published skill versions the agent loaded; verified by Orlo and recorded on the run.
skill_versions[].skill_idRequiredstring (uuid)—
skill_versions[].version_idRequiredstring (uuid)—
skill_versions[].content_hashRequiredstringSHA-256 of the version content

Nested fields marked required are required when their parent object is present.

Example
{
  "task_id": "22222222-2222-4222-8222-222222222222",
  "external_run_id": "support-1042",
  "framework": "custom-js-runtime",
  "goal": "Resolve an account access issue"
}

Responses

201Agent session created

application/json

object

Fields 23
FieldTypeDescription
sessionobject—
session.skill_versionsarray<any>—
session.idRequiredstring—
session.task_idRequiredstring—
session.external_run_idRequiredstring | null—
session.goalRequiredstring | null—
session.expected_outcomeRequiredobject | null—
session.frameworkRequiredstring | null—
session.risk_tierRequiredstringAllowed: "low", "medium", "high", "critical".
session.autonomy_levelRequiredstringAllowed: "manual", "assisted", "semi_autonomous", "autonomous".
session.statusRequiredstringAllowed: "active", "paused", "completed", "failed", "cancelled", "timed_out".
session.containment_stateRequiredstring | null—
session.step_countRequirednumber—
session.tool_call_countRequirednumber—
session.write_action_countRequirednumber—
session.external_side_effect_countRequirednumber—
session.started_atRequiredstring—
session.completed_atRequiredstring | null—
session.last_activity_atRequiredstring—
session.created_atRequiredstring—
session.updated_atRequiredstring—
policy_cache_ttl_sinteger—
blocking_step_typesarray<string>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "session": {
    "skill_versions": [],
    "id": "string",
    "task_id": "string",
    "external_run_id": "string",
    "goal": "string",
    "framework": "string",
    "risk_tier": "low",
    "autonomy_level": "manual",
    "status": "active",
    "step_count": 0,
    "tool_call_count": 0,
    "write_action_count": 0,
    "external_side_effect_count": 0,
    "started_at": "string",
    "completed_at": "string",
    "last_activity_at": "string",
    "created_at": "string",
    "updated_at": "string"
  },
  "policy_cache_ttl_s": 0,
  "blocking_step_types": [
    "model_call"
  ]
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/agent-sessions/{sessionId}

Get one agent session

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Session detail including steps, events, trajectory_result, and trajectory_step_results

application/json

object

Fields 149
FieldTypeDescription
sessionobject—
session.skill_versionsarray<any>—
session.idRequiredstring—
session.task_idRequiredstring—
session.external_run_idRequiredstring | null—
session.goalRequiredstring | null—
session.expected_outcomeRequiredobject | null—
session.frameworkRequiredstring | null—
session.risk_tierRequiredstringAllowed: "low", "medium", "high", "critical".
session.autonomy_levelRequiredstringAllowed: "manual", "assisted", "semi_autonomous", "autonomous".
session.statusRequiredstringAllowed: "active", "paused", "completed", "failed", "cancelled", "timed_out".
session.containment_stateRequiredstring | null—
session.step_countRequirednumber—
session.tool_call_countRequirednumber—
session.write_action_countRequirednumber—
session.external_side_effect_countRequirednumber—
session.started_atRequiredstring—
session.completed_atRequiredstring | null—
session.last_activity_atRequiredstring—
session.created_atRequiredstring—
session.updated_atRequiredstring—
stepsarray<object>—
steps[].idRequiredstring—
steps[].session_idRequiredstring—
steps[].step_idRequiredstring—
steps[].parent_step_idRequiredstring | null—
steps[].step_typeRequiredstringAllowed: "model_call", "model_output", "tool_request", "tool_result", "retrieval", "decision", "approval_request", "approval_result", "state_transition".
steps[].phaseRequiredstring | null—
steps[].actorRequiredstring | null—
steps[].tool_nameRequiredstring | null—
steps[].model_nameRequiredstring | null—
steps[].requestRequiredobject | null—
steps[].responseRequiredobject | null—
steps[].decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
steps[].validation_resultRequiredobject | null—
steps[].retrieval_attributionRequiredobject | null—
steps[].citationsRequiredarray<object>—
steps[].citations[].source_typeRequiredstringAllowed: "document_chunk", "tool_result", "memory_reference", "external_service".
steps[].citations[].source_idRequiredstring—
steps[].citations[].labelstring | null—
steps[].citations[].previewstring | null—
steps[].citations[].scorenumber | null—
steps[].citations[].metadataobject | null—
steps[].policy_decisionRequiredobject | null—
steps[].policy_decision.decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
steps[].policy_decision.reason_codeRequiredstring | null—
steps[].policy_decision.reason_summaryRequiredstring | null—
steps[].policy_decision.matched_policiesRequiredarray<string>—
steps[].policy_decision.decision_latency_msRequirednumber | null—
steps[].policy_decision.degraded_modeRequiredboolean—
steps[].policy_decision.approval_idstring | null—
steps[].policy_decision.approval_timeout_secondsnumber | null—
steps[].policy_decision.timeout_actionstring | null—
steps[].state_changeRequiredobject | null—
steps[].state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
steps[].state_change.resource_typeRequiredstring | null—
steps[].state_change.resource_idRequiredstring | null—
steps[].state_change.operationRequiredstring | null—
steps[].state_change.beforeRequiredobject | null—
steps[].state_change.afterRequiredobject | null—
steps[].state_change.evidenceRequiredobject | null—
steps[].timingRequiredobject | null—
steps[].timing.started_atstring | null—
steps[].timing.completed_atstring | null—
steps[].timing.latency_msnumber | null—
steps[].idempotency_keyRequiredstring | null—
steps[].envelopeRequiredobject | null—
steps[].envelope.versionRequiredstringAllowed: "governed_step_envelope_v1".
steps[].envelope.session_idRequiredstring—
steps[].envelope.step_idRequiredstring—
steps[].envelope.parent_step_idRequiredstring | null—
steps[].envelope.step_typeRequiredstringAllowed: "model_call", "model_output", "tool_request", "tool_result", "retrieval", "decision", "approval_request", "approval_result", "state_transition".
steps[].envelope.phaseRequiredstringAllowed: "pre", "post".
steps[].envelope.actorRequiredstringAllowed: "runtime", "model", "tool", "human", "orlo_policy".
steps[].envelope.requestRequiredobject | null—
steps[].envelope.resultRequiredobject | null—
steps[].envelope.citationsRequiredarray<object>—
steps[].envelope.citations[].source_typeRequiredstringAllowed: "document_chunk", "tool_result", "memory_reference", "external_service".
steps[].envelope.citations[].source_idRequiredstring—
steps[].envelope.citations[].labelstring | null—
steps[].envelope.citations[].previewstring | null—
steps[].envelope.citations[].scorenumber | null—
steps[].envelope.citations[].metadataobject | null—
steps[].envelope.policy_decisionRequiredobject—
steps[].envelope.policy_decision.decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
steps[].envelope.policy_decision.reason_codeRequiredstring | null—
steps[].envelope.policy_decision.reason_summaryRequiredstring | null—
steps[].envelope.policy_decision.matched_policiesRequiredarray<string>—
steps[].envelope.policy_decision.decision_latency_msRequirednumber | null—
steps[].envelope.policy_decision.degraded_modeRequiredboolean—
steps[].envelope.policy_decision.approval_idstring | null—
steps[].envelope.policy_decision.approval_timeout_secondsnumber | null—
steps[].envelope.policy_decision.timeout_actionstring | null—
steps[].envelope.approval_idstring | null—
steps[].envelope.risk_tierRequiredstringAllowed: "low", "medium", "high", "critical".
steps[].envelope.state_changeRequiredobject | null—
steps[].envelope.state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
steps[].envelope.state_change.resource_typeRequiredstring | null—
steps[].envelope.state_change.resource_idRequiredstring | null—
steps[].envelope.state_change.operationRequiredstring | null—
steps[].envelope.state_change.beforeRequiredobject | null—
steps[].envelope.state_change.afterRequiredobject | null—
steps[].envelope.state_change.evidenceRequiredobject | null—
steps[].envelope.timingRequiredobject | null—
steps[].envelope.timing.started_atstring | null—
steps[].envelope.timing.completed_atstring | null—
steps[].envelope.timing.latency_msnumber | null—
steps[].envelope.idempotency_keyRequiredstring | null—
steps[].envelope.trace_idRequiredstring | null—
steps[].envelope.span_idRequiredstring | null—
steps[].envelope.parent_span_idRequiredstring | null—
steps[].cost_estimateRequirednumber | null—
steps[].latency_msRequirednumber | null—
steps[].trace_idRequiredstring | null—
steps[].span_idRequiredstring | null—
steps[].parent_span_idRequiredstring | null—
steps[].created_atRequiredstring—
eventsarray<object>—
events[].idRequiredstring—
events[].session_idRequiredstring—
events[].step_idRequiredstring | null—
events[].event_typeRequiredstring—
events[].event_sourceRequiredstring—
events[].payloadRequiredobject—
events[].created_atRequiredstring—
trajectory_resultobject | null—
trajectory_result.idRequiredstring—
trajectory_result.task_idRequiredstring—
trajectory_result.session_idRequiredstring | null—
trajectory_result.trace_sample_idRequiredstring | null—
trajectory_result.overall_scoreRequirednumber—
trajectory_result.metricsRequiredobject—
trajectory_result.summaryRequiredobject—
trajectory_result.created_atRequiredstring—
trajectory_result.updated_atRequiredstring—
trajectory_step_resultsarray<object>—
trajectory_step_results[].idRequiredstring—
trajectory_step_results[].trajectory_result_idRequiredstring—
trajectory_step_results[].session_idRequiredstring | null—
trajectory_step_results[].trace_sample_idRequiredstring | null—
trajectory_step_results[].step_uuidRequiredstring | null—
trajectory_step_results[].step_idRequiredstring | null—
trajectory_step_results[].step_typeRequiredstring—
trajectory_step_results[].metric_typeRequiredstring—
trajectory_step_results[].scoreRequirednumber | null—
trajectory_step_results[].binary_passRequiredboolean | null—
trajectory_step_results[].reasonRequiredstring | null—
trajectory_step_results[].evidenceRequiredobject | null—
trajectory_step_results[].created_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "session": {
    "skill_versions": [],
    "id": "string",
    "task_id": "string",
    "external_run_id": "string",
    "goal": "string",
    "framework": "string",
    "risk_tier": "low",
    "autonomy_level": "manual",
    "status": "active",
    "step_count": 0,
    "tool_call_count": 0,
    "write_action_count": 0,
    "external_side_effect_count": 0,
    "started_at": "string",
    "completed_at": "string",
    "last_activity_at": "string",
    "created_at": "string",
    "updated_at": "string"
  },
  "steps": [
    {
      "id": "string",
      "session_id": "string",
      "step_id": "string",
      "parent_step_id": "string",
      "step_type": "model_call",
      "tool_name": "string",
      "model_name": "string",
      "decision": "allow",
      "citations": [
        {
          "source_type": "document_chunk",
          "source_id": "string",
          "label": "string",
          "preview": "string",
          "score": 0
        }
      ],
      "policy_decision": {
        "decision": "allow",
        "reason_code": "string",
        "reason_summary": "string",
        "matched_policies": [
          "string"
        ],
        "decision_latency_ms": 0,
        "degraded_mode": false,
        "approval_id": "string",
        "approval_timeout_seconds": 0
      },
      "state_change": {
        "kind": "none",
        "resource_type": "string",
        "resource_id": "string",
        "operation": "string"
      },
      "timing": {
        "started_at": "string",
        "completed_at": "string",
        "latency_ms": 0
      },
      "idempotency_key": "string",
      "envelope": {
        "version": "governed_step_envelope_v1",
        "session_id": "string",
        "step_id": "string",
        "parent_step_id": "string",
        "step_type": "model_call",
        "phase": "pre",
        "actor": "runtime",
        "citations": [
          {
            "source_type": "document_chunk",
            "source_id": "string",
            "label": "string",
            "preview": "string",
            "score": 0
          }
        ],
        "policy_decision": {
          "decision": "allow",
          "reason_code": "string",
          "reason_summary": "string",
          "matched_policies": [
            "string"
          ],
          "decision_latency_ms": 0,
          "degraded_mode": false,
          "approval_id": "string",
          "approval_timeout_seconds": 0
        },
        "approval_id": "string",
        "risk_tier": "low",
        "state_change": {
          "kind": "none",
          "resource_type": "string",
          "resource_id": "string",
          "operation": "string"
        },
        "timing": {
          "started_at": "string",
          "completed_at": "string",
          "latency_ms": 0
        },
        "idempotency_key": "string",
        "trace_id": "string",
        "span_id": "string",
        "parent_span_id": "string"
      },
      "cost_estimate": 0,
      "latency_ms": 0,
      "trace_id": "string",
      "span_id": "string",
      "parent_span_id": "string",
      "created_at": "string"
    }
  ],
  "events": [
    {
      "id": "string",
      "session_id": "string",
      "step_id": "string",
      "event_type": "string",
      "event_source": "string",
      "created_at": "string"
    }
  ],
  "trajectory_result": {
    "id": "string",
    "task_id": "string",
    "session_id": "string",
    "trace_sample_id": "string",
    "overall_score": 0,
    "created_at": "string",
    "updated_at": "string"
  },
  "trajectory_step_results": [
    {
      "id": "string",
      "trajectory_result_id": "string",
      "session_id": "string",
      "trace_sample_id": "string",
      "step_uuid": "string",
      "step_id": "string",
      "step_type": "string",
      "metric_type": "string",
      "score": 0,
      "binary_pass": false,
      "reason": "string",
      "created_at": "string"
    }
  ]
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
PATCH/v1/agent-sessions/{sessionId}

Update session status

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 1
FieldTypeDescription
statusRequiredstringAllowed: "active", "paused", "completed", "failed", "cancelled", "timed_out".

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "status": "active"
}

Responses

200Session updated

application/json

object

Fields 20
FieldTypeDescription
skill_versionsarray<any>—
idRequiredstring—
task_idRequiredstring—
external_run_idRequiredstring | null—
goalRequiredstring | null—
expected_outcomeRequiredobject | null—
frameworkRequiredstring | null—
risk_tierRequiredstringAllowed: "low", "medium", "high", "critical".
autonomy_levelRequiredstringAllowed: "manual", "assisted", "semi_autonomous", "autonomous".
statusRequiredstringAllowed: "active", "paused", "completed", "failed", "cancelled", "timed_out".
containment_stateRequiredstring | null—
step_countRequirednumber—
tool_call_countRequirednumber—
write_action_countRequirednumber—
external_side_effect_countRequirednumber—
started_atRequiredstring—
completed_atRequiredstring | null—
last_activity_atRequiredstring—
created_atRequiredstring—
updated_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "skill_versions": [],
  "id": "string",
  "task_id": "string",
  "external_run_id": "string",
  "goal": "string",
  "framework": "string",
  "risk_tier": "low",
  "autonomy_level": "manual",
  "status": "active",
  "step_count": 0,
  "tool_call_count": 0,
  "write_action_count": 0,
  "external_side_effect_count": 0,
  "started_at": "string",
  "completed_at": "string",
  "last_activity_at": "string",
  "created_at": "string",
  "updated_at": "string"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/agent-sessions/{sessionId}/steps/govern

Govern one agent step

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 53
FieldTypeDescription
step_idRequiredstring—
parent_step_idstring—
step_typeRequiredstringAllowed: "model_call", "model_output", "tool_request", "tool_result", "retrieval", "decision", "approval_request", "approval_result", "state_transition".
phasestringAllowed: "pre", "post".
actorstringAllowed: "runtime", "model", "tool", "human", "orlo_policy".
tool_namestring—
model_namestring—
action_classstringAllowed: "read", "write", "delete", "network", "control".
environmentstring—
requestobject—
inputobject—
resultobject—
result.contentany—
result.modelstring—
result.tokens_usedobject—
result.tokens_used.inputnumber—
result.tokens_used.outputnumber—
result.latency_msnumber—
outputobject—
output.contentany—
output.modelstring—
output.tokens_usedobject—
output.tokens_used.inputnumber—
output.tokens_used.outputnumber—
output.latency_msnumber—
retrievalobject—
retrieval.task_idstring—
retrieval.querystring—
retrieval.token_budgetnumber—
citationsarray<object>—
citations[].source_typeRequiredstringAllowed: "document_chunk", "tool_result", "memory_reference", "external_service".
citations[].source_idRequiredstring—
citations[].labelstring | null—
citations[].previewstring | null—
citations[].scorenumber | null—
citations[].metadataobject | null—
state_changeobject—
state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
state_change.resource_typeRequiredstring | null—
state_change.resource_idRequiredstring | null—
state_change.operationRequiredstring | null—
state_change.beforeRequiredobject | null—
state_change.afterRequiredobject | null—
state_change.evidenceRequiredobject | null—
timingobject—
timing.started_atstring | null—
timing.completed_atstring | null—
timing.latency_msnumber | null—
idempotency_keystring—
metadataobject—
trace_idstring—
span_idstring—
parent_span_idstring—

Nested fields marked required are required when their parent object is present.

Example
{
  "step_id": "lookup-order-1",
  "step_type": "tool_request",
  "tool_name": "lookup_order",
  "action_class": "read",
  "input": {
    "order_id": "order-1042"
  }
}

Responses

200Governance result

application/json

object

Fields 85
FieldTypeDescription
decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
reasonRequiredstring | null—
trace_idRequiredstring—
risk_tierRequiredstringAllowed: "low", "medium", "high", "critical".
containmentRequiredstring | null—
validationRequiredobject | null—
validation.validRequiredboolean—
validation.warningsRequiredarray<string>—
validation.scoreRequirednumber—
validation.abstainRequiredboolean—
validation.escalateRequiredboolean—
policy_decisionRequiredobject—
policy_decision.decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
policy_decision.reason_codeRequiredstring | null—
policy_decision.reason_summaryRequiredstring | null—
policy_decision.matched_policiesRequiredarray<string>—
policy_decision.decision_latency_msRequirednumber | null—
policy_decision.degraded_modeRequiredboolean—
policy_decision.approval_idstring | null—
policy_decision.approval_timeout_secondsnumber | null—
policy_decision.timeout_actionstring | null—
citationsRequiredarray<object>—
citations[].source_typeRequiredstringAllowed: "document_chunk", "tool_result", "memory_reference", "external_service".
citations[].source_idRequiredstring—
citations[].labelstring | null—
citations[].previewstring | null—
citations[].scorenumber | null—
citations[].metadataobject | null—
state_changeRequiredobject | null—
state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
state_change.resource_typeRequiredstring | null—
state_change.resource_idRequiredstring | null—
state_change.operationRequiredstring | null—
state_change.beforeRequiredobject | null—
state_change.afterRequiredobject | null—
state_change.evidenceRequiredobject | null—
envelopeRequiredobject—
envelope.versionRequiredstringAllowed: "governed_step_envelope_v1".
envelope.session_idRequiredstring—
envelope.step_idRequiredstring—
envelope.parent_step_idRequiredstring | null—
envelope.step_typeRequiredstringAllowed: "model_call", "model_output", "tool_request", "tool_result", "retrieval", "decision", "approval_request", "approval_result", "state_transition".
envelope.phaseRequiredstringAllowed: "pre", "post".
envelope.actorRequiredstringAllowed: "runtime", "model", "tool", "human", "orlo_policy".
envelope.requestRequiredobject | null—
envelope.resultRequiredobject | null—
envelope.citationsRequiredarray<object>—
envelope.citations[].source_typeRequiredstringAllowed: "document_chunk", "tool_result", "memory_reference", "external_service".
envelope.citations[].source_idRequiredstring—
envelope.citations[].labelstring | null—
envelope.citations[].previewstring | null—
envelope.citations[].scorenumber | null—
envelope.citations[].metadataobject | null—
envelope.policy_decisionRequiredobject—
envelope.policy_decision.decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
envelope.policy_decision.reason_codeRequiredstring | null—
envelope.policy_decision.reason_summaryRequiredstring | null—
envelope.policy_decision.matched_policiesRequiredarray<string>—
envelope.policy_decision.decision_latency_msRequirednumber | null—
envelope.policy_decision.degraded_modeRequiredboolean—
envelope.policy_decision.approval_idstring | null—
envelope.policy_decision.approval_timeout_secondsnumber | null—
envelope.policy_decision.timeout_actionstring | null—
envelope.approval_idstring | null—
envelope.risk_tierRequiredstringAllowed: "low", "medium", "high", "critical".
envelope.state_changeRequiredobject | null—
envelope.state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
envelope.state_change.resource_typeRequiredstring | null—
envelope.state_change.resource_idRequiredstring | null—
envelope.state_change.operationRequiredstring | null—
envelope.state_change.beforeRequiredobject | null—
envelope.state_change.afterRequiredobject | null—
envelope.state_change.evidenceRequiredobject | null—
envelope.timingRequiredobject | null—
envelope.timing.started_atstring | null—
envelope.timing.completed_atstring | null—
envelope.timing.latency_msnumber | null—
envelope.idempotency_keyRequiredstring | null—
envelope.trace_idRequiredstring | null—
envelope.span_idRequiredstring | null—
envelope.parent_span_idRequiredstring | null—
retrievalRequiredobject | null—
retrieval.chunksRequiredarray<object>—
retrieval.attributionRequiredobject—
action_idstring (uuid)Use this governed tool action ID for execution and business reports.

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "decision": "allow",
  "reason": "string",
  "trace_id": "string",
  "risk_tier": "low",
  "validation": {
    "valid": false,
    "warnings": [
      "string"
    ],
    "score": 0,
    "abstain": false,
    "escalate": false
  },
  "policy_decision": {
    "decision": "allow",
    "reason_code": "string",
    "reason_summary": "string",
    "matched_policies": [
      "string"
    ],
    "decision_latency_ms": 0,
    "degraded_mode": false,
    "approval_id": "string",
    "approval_timeout_seconds": 0
  },
  "citations": [
    {
      "source_type": "document_chunk",
      "source_id": "string",
      "label": "string",
      "preview": "string",
      "score": 0
    }
  ],
  "state_change": {
    "kind": "none",
    "resource_type": "string",
    "resource_id": "string",
    "operation": "string"
  },
  "envelope": {
    "version": "governed_step_envelope_v1",
    "session_id": "string",
    "step_id": "string",
    "parent_step_id": "string",
    "step_type": "model_call",
    "phase": "pre",
    "actor": "runtime",
    "citations": [
      {
        "source_type": "document_chunk",
        "source_id": "string",
        "label": "string",
        "preview": "string",
        "score": 0
      }
    ],
    "policy_decision": {
      "decision": "allow",
      "reason_code": "string",
      "reason_summary": "string",
      "matched_policies": [
        "string"
      ],
      "decision_latency_ms": 0,
      "degraded_mode": false,
      "approval_id": "string",
      "approval_timeout_seconds": 0
    },
    "approval_id": "string",
    "risk_tier": "low",
    "state_change": {
      "kind": "none",
      "resource_type": "string",
      "resource_id": "string",
      "operation": "string"
    },
    "timing": {
      "started_at": "string",
      "completed_at": "string",
      "latency_ms": 0
    },
    "idempotency_key": "string",
    "trace_id": "string",
    "span_id": "string",
    "parent_span_id": "string"
  },
  "retrieval": {
    "chunks": []
  },
  "action_id": "11111111-1111-4111-8111-111111111111"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/agent-sessions/{sessionId}/traces/import

Import trace steps and events

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 2
FieldTypeDescription
stepsarray<object>—
eventsarray<object>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "steps": [],
  "events": []
}

Responses

200Trace imported

application/json

object

Fields 2
FieldTypeDescription
inserted_stepsinteger—
inserted_eventsinteger—

Nested fields marked required are required when their parent object is present.

Example
{
  "inserted_steps": 1,
  "inserted_events": 0
}
POST/v1/agent-sessions/{sessionId}/steps

Import a single step

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 15
FieldTypeDescription
step_idRequiredstring—
parent_step_idstring—
step_typeRequiredstringAllowed: "model_call", "model_output", "tool_request", "tool_result", "retrieval", "decision", "approval_request", "approval_result", "state_transition".
tool_namestring—
model_namestring—
inputobject—
outputobject—
output.contentany—
output.modelstring—
output.tokens_usedobject—
output.tokens_used.inputnumber—
output.tokens_used.outputnumber—
output.latency_msnumber—
decisionstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "step_id": "string",
  "parent_step_id": "string",
  "step_type": "model_call",
  "tool_name": "string",
  "model_name": "string",
  "output": {
    "model": "string",
    "tokens_used": {
      "input": 0,
      "output": 0
    },
    "latency_ms": 0
  },
  "decision": "allow",
  "created_at": "2026-10-14T12:00:00Z"
}

Responses

200Step imported

application/json

object

Fields 2
FieldTypeDescription
inserted_stepsinteger—
inserted_eventsinteger—

Nested fields marked required are required when their parent object is present.

Example
{
  "inserted_steps": 1,
  "inserted_events": 0
}
GET/v1/agent-sessions/{sessionId}/events

List session events

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Event list

application/json

object

Fields 8
FieldTypeDescription
eventsarray<object>—
events[].idRequiredstring—
events[].session_idRequiredstring—
events[].step_idRequiredstring | null—
events[].event_typeRequiredstring—
events[].event_sourceRequiredstring—
events[].payloadRequiredobject—
events[].created_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "events": [
    {
      "id": "string",
      "session_id": "string",
      "step_id": "string",
      "event_type": "string",
      "event_source": "string",
      "created_at": "string"
    }
  ]
}
POST/v1/agent-sessions/{sessionId}/tools/check

Check a tool call against policy

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 6
FieldTypeDescription
step_idRequiredstring—
tool_nameRequiredstring—
argumentsobject—
action_classstringAllowed: "read", "write", "delete", "network", "control".
environmentstring—
risk_tierstringAllowed: "low", "medium", "high", "critical".

Nested fields marked required are required when their parent object is present.

Example
{
  "step_id": "lookup-order-1",
  "tool_name": "lookup_order",
  "arguments": {
    "order_id": "order-1042"
  },
  "action_class": "read"
}

Responses

200Tool policy result

application/json

object

Fields 4
FieldTypeDescription
decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval", "contain".
reasonRequiredstring | null—
containmentRequiredstring | null—
matched_policiesRequiredarray<string>—

Nested fields marked required are required when their parent object is present.

Example
{
  "decision": "allow",
  "reason": "The read action is permitted.",
  "containment": null,
  "matched_policies": [
    "11111111-1111-4111-8111-111111111111"
  ]
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/tool-policies

List tool policies

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
deployment_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Tool policies

application/json

object

Fields 28
FieldTypeDescription
policiesarray<object>—
policies[].idRequiredstring—
policies[].task_idRequiredstring | null—
policies[].deployment_idRequiredstring | null—
policies[].tool_nameRequiredstring—
policies[].environmentRequiredstring | null—
policies[].action_classRequiredstring | null—
policies[].decisionRequiredstringAllowed: "allow", "allow_with_warning", "reject", "require_approval".
policies[].risk_tierRequiredstring | null—
policies[].approval_timeout_secondsRequirednumber | null—
policies[].timeout_actionRequiredstring | null—
policies[].created_atRequiredstring—
policies[].updated_atRequiredstring—
policies[].argument_conditionsarray<object | object | object>—
policies[].argument_conditions[] (option 1).pathRequiredstring—
policies[].argument_conditions[] (option 1).operatorRequiredstringAllowed: "eq", "ne".
policies[].argument_conditions[] (option 1).valueRequiredstring | number | boolean | null—
policies[].argument_conditions[] (option 2).pathRequiredstring—
policies[].argument_conditions[] (option 2).operatorRequiredstringAllowed: "gt", "gte", "lt", "lte".
policies[].argument_conditions[] (option 2).valueRequirednumber—
policies[].argument_conditions[] (option 3).pathRequiredstring—
policies[].argument_conditions[] (option 3).operatorRequiredstringAllowed: "in".
policies[].argument_conditions[] (option 3).valueRequiredarray<string | number | boolean | null>—
policies[].policy_versioninteger—
policies[].band_statestring | nullAllowed: "shadow", "earning", "enabled", "suspended", "retired".
policies[].band_epochinteger—
policies[].band_scope_hashstring | null—
policies[].band_reasonstring | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "policies": [
    {
      "id": "string",
      "task_id": "string",
      "deployment_id": "string",
      "tool_name": "string",
      "environment": "string",
      "decision": "allow",
      "approval_timeout_seconds": 0,
      "created_at": "string",
      "updated_at": "string",
      "argument_conditions": [
        {
          "path": "string",
          "operator": "eq",
          "value": "string"
        }
      ],
      "policy_version": 0,
      "band_state": "shadow",
      "band_epoch": 0,
      "band_scope_hash": "string",
      "band_reason": "string"
    }
  ]
}
GET/v1/runtime-limits

List runtime limits

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
deployment_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Runtime limits

application/json

object

Fields 18
FieldTypeDescription
limitsarray<object>—
limits[].idRequiredstring—
limits[].task_idRequiredstring | null—
limits[].deployment_idRequiredstring | null—
limits[].risk_tierRequiredstring | null—
limits[].max_stepsRequirednumber | null—
limits[].max_tool_callsRequirednumber | null—
limits[].max_write_actionsRequirednumber | null—
limits[].max_external_side_effectsRequirednumber | null—
limits[].inactivity_timeout_secondsRequirednumber | null—
limits[].created_atRequiredstring—
limits[].updated_atRequiredstring—
base_effectiveobject—
base_effective.max_stepsinteger | null—
base_effective.max_tool_callsinteger | null—
base_effective.max_write_actionsinteger | null—
base_effective.max_external_side_effectsinteger | null—
base_effective.inactivity_timeout_secondsinteger | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "limits": [
    {
      "id": "string",
      "task_id": "string",
      "deployment_id": "string",
      "max_steps": 0,
      "max_tool_calls": 0,
      "max_write_actions": 0,
      "max_external_side_effects": 0,
      "inactivity_timeout_seconds": 0,
      "created_at": "string",
      "updated_at": "string"
    }
  ],
  "base_effective": {
    "max_steps": 0,
    "max_tool_calls": 0,
    "max_write_actions": 0,
    "max_external_side_effects": 0,
    "inactivity_timeout_seconds": 0
  }
}
GET/v1/agent-approvals

List approvals

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
statusquerystring—
Example: string
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
limitqueryinteger—
Example: 0

Responses

200Approval list

application/json

object

Fields 18
FieldTypeDescription
approvalsarray<object>—
approvals[].idRequiredstring—
approvals[].session_idRequiredstring—
approvals[].step_idRequiredstring—
approvals[].task_idRequiredstring—
approvals[].policy_reasonRequiredstring—
approvals[].statusRequiredstringAllowed: "pending", "approved", "rejected", "expired".
approvals[].request_payloadRequiredobject | null—
approvals[].timeout_actionRequiredstring | null—
approvals[].timeout_atRequiredstring | null—
approvals[].escalated_atRequiredstring | null—
approvals[].decided_atRequiredstring | null—
approvals[].decided_byRequiredstring | null—
approvals[].decision_payloadRequiredobject | null—
approvals[].consumed_atRequiredstring | null—
approvals[].consumed_by_step_uuidRequiredstring | null—
approvals[].created_atRequiredstring—
approvals[].updated_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "approvals": [
    {
      "id": "string",
      "session_id": "string",
      "step_id": "string",
      "task_id": "string",
      "policy_reason": "string",
      "status": "pending",
      "timeout_at": "string",
      "escalated_at": "string",
      "decided_at": "string",
      "decided_by": "string",
      "consumed_at": "string",
      "consumed_by_step_uuid": "string",
      "created_at": "string",
      "updated_at": "string"
    }
  ]
}
POST/v1/agent-sessions/{sessionId}/steps/{stepId}/request-approval

Request approval for a step

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111
stepId*pathstringstepId identifies the resource in this request.
Example: lookup-order-1

Request Body

Content-Type: application/json

Body required

object

Fields 4
FieldTypeDescription
policy_reasonRequiredstring—
request_payloadobject—
approval_timeout_secondsinteger—
timeout_actionstringAllowed: "reject", "escalate", "contain".

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "policy_reason": "string",
  "approval_timeout_seconds": 0,
  "timeout_action": "reject"
}

Responses

201Approval requested

application/json

object

Fields 17
FieldTypeDescription
idRequiredstring—
session_idRequiredstring—
step_idRequiredstring—
task_idRequiredstring—
policy_reasonRequiredstring—
statusRequiredstringAllowed: "pending", "approved", "rejected", "expired".
request_payloadRequiredobject | null—
timeout_actionRequiredstring | null—
timeout_atRequiredstring | null—
escalated_atRequiredstring | null—
decided_atRequiredstring | null—
decided_byRequiredstring | null—
decision_payloadRequiredobject | null—
consumed_atRequiredstring | null—
consumed_by_step_uuidRequiredstring | null—
created_atRequiredstring—
updated_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "string",
  "session_id": "string",
  "step_id": "string",
  "task_id": "string",
  "policy_reason": "string",
  "status": "pending",
  "timeout_at": "string",
  "escalated_at": "string",
  "decided_at": "string",
  "decided_by": "string",
  "consumed_at": "string",
  "consumed_by_step_uuid": "string",
  "created_at": "string",
  "updated_at": "string"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/agent-sessions/{sessionId}/events/stream

Stream session events over SSE

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
sessionId*pathstring (uuid)sessionId identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111
afterquerystring (date-time)Optional cursor. Only newer events are streamed.
Example: 2026-10-14T12:00:00Z

Responses

200Server-sent event stream

text/event-stream

string

Example
event: connected\ndata: {"session_id":"..."}\n\nevent: step.governed\ndata: {...}\n\n
GET/v1/trace-samples

List trace samples

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
statusquerystring—
Example: candidate
limitqueryinteger—
Example: 0

Responses

200Trace sample list

application/json

object

Fields 21
FieldTypeDescription
trace_samplesarray<object>—
trace_samples[].idRequiredstring—
trace_samples[].task_idRequiredstring—
trace_samples[].dataset_idRequiredstring | null—
trace_samples[].session_idRequiredstring—
trace_samples[].step_uuidRequiredstring | null—
trace_samples[].sourceRequiredstringAllowed: "manual", "policy", "drift", "import".
trace_samples[].statusRequiredstringAllowed: "candidate", "approved", "rejected", "promoted".
trace_samples[].trace_snapshotRequiredobject—
trace_samples[].expected_outputRequiredobject | null—
trace_samples[].expected_state_changeRequiredobject | null—
trace_samples[].expected_state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
trace_samples[].expected_state_change.resource_typeRequiredstring | null—
trace_samples[].expected_state_change.resource_idRequiredstring | null—
trace_samples[].expected_state_change.operationRequiredstring | null—
trace_samples[].expected_state_change.beforeRequiredobject | null—
trace_samples[].expected_state_change.afterRequiredobject | null—
trace_samples[].expected_state_change.evidenceRequiredobject | null—
trace_samples[].metadataRequiredobject—
trace_samples[].created_atRequiredstring—
trace_samples[].updated_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "trace_samples": [
    {
      "id": "string",
      "task_id": "string",
      "dataset_id": "string",
      "session_id": "string",
      "step_uuid": "string",
      "source": "manual",
      "status": "candidate",
      "expected_state_change": {
        "kind": "none",
        "resource_type": "string",
        "resource_id": "string",
        "operation": "string"
      },
      "created_at": "string",
      "updated_at": "string"
    }
  ]
}
GET/v1/trace-samples/{id}

Get one trace sample

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Responses

200Trace sample detail including annotations, trajectory_result, and trajectory_step_results

application/json

object

Fields 53
FieldTypeDescription
trace_sampleobject—
trace_sample.idRequiredstring—
trace_sample.task_idRequiredstring—
trace_sample.dataset_idRequiredstring | null—
trace_sample.session_idRequiredstring—
trace_sample.step_uuidRequiredstring | null—
trace_sample.sourceRequiredstringAllowed: "manual", "policy", "drift", "import".
trace_sample.statusRequiredstringAllowed: "candidate", "approved", "rejected", "promoted".
trace_sample.trace_snapshotRequiredobject—
trace_sample.expected_outputRequiredobject | null—
trace_sample.expected_state_changeRequiredobject | null—
trace_sample.expected_state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
trace_sample.expected_state_change.resource_typeRequiredstring | null—
trace_sample.expected_state_change.resource_idRequiredstring | null—
trace_sample.expected_state_change.operationRequiredstring | null—
trace_sample.expected_state_change.beforeRequiredobject | null—
trace_sample.expected_state_change.afterRequiredobject | null—
trace_sample.expected_state_change.evidenceRequiredobject | null—
trace_sample.metadataRequiredobject—
trace_sample.created_atRequiredstring—
trace_sample.updated_atRequiredstring—
annotationsarray<object>—
annotations[].idRequiredstring—
annotations[].trace_sample_idRequiredstring—
annotations[].annotation_typeRequiredstring—
annotations[].labelRequiredstring—
annotations[].payloadRequiredobject—
annotations[].created_byRequiredstring | null—
annotations[].created_atRequiredstring—
trajectory_resultobject | null—
trajectory_result.idRequiredstring—
trajectory_result.task_idRequiredstring—
trajectory_result.session_idRequiredstring | null—
trajectory_result.trace_sample_idRequiredstring | null—
trajectory_result.overall_scoreRequirednumber—
trajectory_result.metricsRequiredobject—
trajectory_result.summaryRequiredobject—
trajectory_result.created_atRequiredstring—
trajectory_result.updated_atRequiredstring—
trajectory_step_resultsarray<object>—
trajectory_step_results[].idRequiredstring—
trajectory_step_results[].trajectory_result_idRequiredstring—
trajectory_step_results[].session_idRequiredstring | null—
trajectory_step_results[].trace_sample_idRequiredstring | null—
trajectory_step_results[].step_uuidRequiredstring | null—
trajectory_step_results[].step_idRequiredstring | null—
trajectory_step_results[].step_typeRequiredstring—
trajectory_step_results[].metric_typeRequiredstring—
trajectory_step_results[].scoreRequirednumber | null—
trajectory_step_results[].binary_passRequiredboolean | null—
trajectory_step_results[].reasonRequiredstring | null—
trajectory_step_results[].evidenceRequiredobject | null—
trajectory_step_results[].created_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "trace_sample": {
    "id": "string",
    "task_id": "string",
    "dataset_id": "string",
    "session_id": "string",
    "step_uuid": "string",
    "source": "manual",
    "status": "candidate",
    "expected_state_change": {
      "kind": "none",
      "resource_type": "string",
      "resource_id": "string",
      "operation": "string"
    },
    "created_at": "string",
    "updated_at": "string"
  },
  "annotations": [
    {
      "id": "string",
      "trace_sample_id": "string",
      "annotation_type": "string",
      "label": "string",
      "created_by": "string",
      "created_at": "string"
    }
  ],
  "trajectory_result": {
    "id": "string",
    "task_id": "string",
    "session_id": "string",
    "trace_sample_id": "string",
    "overall_score": 0,
    "created_at": "string",
    "updated_at": "string"
  },
  "trajectory_step_results": [
    {
      "id": "string",
      "trajectory_result_id": "string",
      "session_id": "string",
      "trace_sample_id": "string",
      "step_uuid": "string",
      "step_id": "string",
      "step_type": "string",
      "metric_type": "string",
      "score": 0,
      "binary_pass": false,
      "reason": "string",
      "created_at": "string"
    }
  ]
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/trace-samples/{id}/annotations

Annotate a trace sample

Required scope: agent_governance.run. Requires a signed-in member with review access. Runtime keys, desktop connections, and management tokens cannot make human review decisions.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 4
FieldTypeDescription
annotation_typeRequiredstring—
labelRequiredstring—
payloadobject—
created_bystringOrlo uses the signed-in member identity as the author.

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "annotation_type": "string",
  "label": "string",
  "created_by": "string"
}

Responses

201Trace sample annotation created

application/json

object

Fields 7
FieldTypeDescription
idRequiredstring—
trace_sample_idRequiredstring—
annotation_typeRequiredstring—
labelRequiredstring—
payloadRequiredobject—
created_byRequiredstring | null—
created_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "string",
  "trace_sample_id": "string",
  "annotation_type": "string",
  "label": "string",
  "created_by": "string",
  "created_at": "string"
}
403PEOPLE_ONLY: sign in with a member account that has review access.
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/trace-samples/{id}/promote-to-dataset

Promote a trace sample to a dataset sample

Required scope: datasets.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001
id*pathstring (uuid)id identifies the resource in this request.
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 1
FieldTypeDescription
dataset_idRequiredstring (uuid)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "dataset_id": "11111111-1111-4111-8111-111111111111"
}

Responses

200Trace sample promoted

application/json

object

Fields 37
FieldTypeDescription
trace_sampleobject—
trace_sample.idRequiredstring—
trace_sample.task_idRequiredstring—
trace_sample.dataset_idRequiredstring | null—
trace_sample.session_idRequiredstring—
trace_sample.step_uuidRequiredstring | null—
trace_sample.sourceRequiredstringAllowed: "manual", "policy", "drift", "import".
trace_sample.statusRequiredstringAllowed: "candidate", "approved", "rejected", "promoted".
trace_sample.trace_snapshotRequiredobject—
trace_sample.expected_outputRequiredobject | null—
trace_sample.expected_state_changeRequiredobject | null—
trace_sample.expected_state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
trace_sample.expected_state_change.resource_typeRequiredstring | null—
trace_sample.expected_state_change.resource_idRequiredstring | null—
trace_sample.expected_state_change.operationRequiredstring | null—
trace_sample.expected_state_change.beforeRequiredobject | null—
trace_sample.expected_state_change.afterRequiredobject | null—
trace_sample.expected_state_change.evidenceRequiredobject | null—
trace_sample.metadataRequiredobject—
trace_sample.created_atRequiredstring—
trace_sample.updated_atRequiredstring—
datasetobject—
dataset.idstring (uuid)—
dataset.versioninteger—
dataset.sample_countinteger—
dataset.created_atstring (date-time)—
dataset.task_idstring (uuid)—
dataset.namestring—
dataset.parent_dataset_idstring (uuid) | null—
dataset.added_countinteger—
dataset.baseline_countinteger—
dataset.change_kindstring—
dataset.change_modestring—
dataset.redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.
dataset.redacted_sample_countintegerNumber of new or copied samples changed by credential protection during this write.
dataset_sample_idstring (uuid) | null—
already_addedboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "trace_sample": {
    "id": "string",
    "task_id": "string",
    "dataset_id": "string",
    "session_id": "string",
    "step_uuid": "string",
    "source": "manual",
    "status": "candidate",
    "expected_state_change": {
      "kind": "none",
      "resource_type": "string",
      "resource_id": "string",
      "operation": "string"
    },
    "created_at": "string",
    "updated_at": "string"
  },
  "dataset": {
    "id": "11111111-1111-4111-8111-111111111111",
    "version": 0,
    "sample_count": 0,
    "created_at": "2026-10-14T12:00:00Z",
    "task_id": "11111111-1111-4111-8111-111111111111",
    "name": "string",
    "parent_dataset_id": "11111111-1111-4111-8111-111111111111",
    "added_count": 0,
    "baseline_count": 0,
    "change_kind": "string",
    "change_mode": "string",
    "redaction_warning": "string",
    "redacted_sample_count": 0
  },
  "dataset_sample_id": "11111111-1111-4111-8111-111111111111",
  "already_added": false
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
GET/v1/agent-approvals/{id}

Read current approval status

Applies elapsed deadlines before returning the approval. Requires agent_governance.read. Does not execute or authorize a tool by itself.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Current approval; Cache-Control: no-store

application/json

object

Fields 17
FieldTypeDescription
idRequiredstring—
session_idRequiredstring—
step_idRequiredstring—
task_idRequiredstring—
policy_reasonRequiredstring—
statusRequiredstringAllowed: "pending", "approved", "rejected", "expired".
request_payloadRequiredobject | null—
timeout_actionRequiredstring | null—
timeout_atRequiredstring | null—
escalated_atRequiredstring | null—
decided_atRequiredstring | null—
decided_byRequiredstring | null—
decision_payloadRequiredobject | null—
consumed_atRequiredstring | null—
consumed_by_step_uuidRequiredstring | null—
created_atRequiredstring—
updated_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "string",
  "session_id": "string",
  "step_id": "string",
  "task_id": "string",
  "policy_reason": "string",
  "status": "pending",
  "timeout_at": "string",
  "escalated_at": "string",
  "decided_at": "string",
  "decided_by": "string",
  "consumed_at": "string",
  "consumed_by_step_uuid": "string",
  "created_at": "string",
  "updated_at": "string"
}
404APPROVAL_NOT_FOUND in this organization
GET/v1/agent-sessions/{sessionId}/actions/{actionId}/reports

Read outcomes and paginated report history

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
sessionId*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
actionId*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
afterquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Successful response

application/json

object

Fields 35
FieldTypeDescription
latestobject—
latest.executionobject | null—
latest.execution.report_idstring (uuid)—
latest.execution.detailstring—
latest.execution.occurred_atstring (date-time)—
latest.execution.kindstringAllowed: "execution", "business".
latest.execution.outcomestring—
latest.execution.criterionstring | null—
latest.execution.duration_msnumber | null—
latest.execution.recorded_atstring (date-time)—
latest.execution.reported_bystring | null—
latest.execution.sourcestringAllowed: "application_report".
latest.businessobject | null—
latest.business.report_idstring (uuid)—
latest.business.detailstring—
latest.business.occurred_atstring (date-time)—
latest.business.kindstringAllowed: "execution", "business".
latest.business.outcomestring—
latest.business.criterionstring | null—
latest.business.duration_msnumber | null—
latest.business.recorded_atstring (date-time)—
latest.business.reported_bystring | null—
latest.business.sourcestringAllowed: "application_report".
itemsarray<object>—
items[].report_idstring (uuid)—
items[].detailstring—
items[].occurred_atstring (date-time)—
items[].kindstringAllowed: "execution", "business".
items[].outcomestring—
items[].criterionstring | null—
items[].duration_msnumber | null—
items[].recorded_atstring (date-time)—
items[].reported_bystring | null—
items[].sourcestringAllowed: "application_report".
next_cursorstring (uuid) | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "latest": {
    "execution": {
      "report_id": "11111111-1111-4111-8111-111111111111",
      "detail": "string",
      "occurred_at": "2026-10-14T12:00:00Z",
      "kind": "execution",
      "outcome": "string",
      "criterion": "string",
      "duration_ms": 0,
      "recorded_at": "2026-10-14T12:00:00Z",
      "reported_by": "string",
      "source": "application_report"
    },
    "business": {
      "report_id": "11111111-1111-4111-8111-111111111111",
      "detail": "string",
      "occurred_at": "2026-10-14T12:00:00Z",
      "kind": "execution",
      "outcome": "string",
      "criterion": "string",
      "duration_ms": 0,
      "recorded_at": "2026-10-14T12:00:00Z",
      "reported_by": "string",
      "source": "application_report"
    }
  },
  "items": [
    {
      "report_id": "11111111-1111-4111-8111-111111111111",
      "detail": "string",
      "occurred_at": "2026-10-14T12:00:00Z",
      "kind": "execution",
      "outcome": "string",
      "criterion": "string",
      "duration_ms": 0,
      "recorded_at": "2026-10-14T12:00:00Z",
      "reported_by": "string",
      "source": "application_report"
    }
  ],
  "next_cursor": "11111111-1111-4111-8111-111111111111"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
POST/v1/agent-sessions/{sessionId}/actions/{actionId}/reports

Append an execution or business outcome

Required scope: agent_governance.run. Reuse reportid and identical content for idempotent retries; changed content returns 409 ACTIONREPORT_CHANGED. Reports may arrive after a run ends and never change permission. Imported traces cannot supply governed action reports.

Parameters

NameLocationTypeDescription
sessionId*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111
actionId*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object | object

Fields 12
FieldTypeDescription
(option 1).report_idRequiredstring (uuid)—
(option 1).detailstring—
(option 1).occurred_atstring (date-time)—
(option 1).kindRequiredstringAllowed: "execution".
(option 1).outcomeRequiredstringAllowed: "succeeded", "failed", "not_executed", "unknown".
(option 1).duration_msnumberMinimum: 0. Maximum: 604800000.
(option 2).report_idRequiredstring (uuid)—
(option 2).detailstring—
(option 2).occurred_atstring (date-time)—
(option 2).kindRequiredstringAllowed: "business".
(option 2).outcomeRequiredstringAllowed: "met", "not_met", "unknown".
(option 2).criterionRequiredstring—

Nested fields marked required are required when their parent object is present.

Example
{
  "report_id": "11111111-1111-4111-8111-111111111111",
  "kind": "execution",
  "outcome": "succeeded",
  "duration_ms": 135
}

Responses

200Successful response

application/json

object

Fields 3
FieldTypeDescription
report_idstring (uuid)—
recorded_atstring (date-time)—
sourcestringAllowed: "application_report".

Nested fields marked required are required when their parent object is present.

Example
{
  "report_id": "11111111-1111-4111-8111-111111111111",
  "recorded_at": "2026-10-15T12:00:00Z",
  "source": "application_report"
}
400Bad request

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
404Not found

application/json

object

Fields 4
FieldTypeDescription
errorstring—
messagestring—
trace_idstringRequest identifier when available; keep it for troubleshooting.
detailsobjectError-specific context. VALIDATION_FAILED returns validation fields here, including status and entries. If a failed attempt also could not be recorded, evidence_recorded is false.

Nested fields marked required are required when their parent object is present.

Example
{
  "error": "INVALID_INPUT",
  "message": "input is required"
}
409ACTION_REPORT_CHANGED: this ID identifies different report content.

Orgs

GET/v1/orgs/judge

Organization judge choice

Required scope: org_config.read.

Responses

200Successful response

application/json

object

Fields 3
FieldTypeDescription
judge_model_idstring (uuid) | null—
second_judge_model_idstring (uuid) | null—
dual_judgeboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "judge_model_id": "11111111-1111-4111-8111-111111111111",
  "second_judge_model_id": "11111111-1111-4111-8111-111111111111",
  "dual_judge": false
}
PUT/v1/orgs/judge

Set organization judge

Required scope: org_config.write.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 3
FieldTypeDescription
judge_model_idstring (uuid) | null—
second_judge_model_idstring (uuid) | null—
dual_judgeboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "judge_model_id": "11111111-1111-4111-8111-111111111111",
  "second_judge_model_id": "11111111-1111-4111-8111-111111111111",
  "dual_judge": false
}

Responses

200Successful response

application/json

object

Fields 3
FieldTypeDescription
judge_model_idstring (uuid) | null—
second_judge_model_idstring (uuid) | null—
dual_judgeboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "judge_model_id": "11111111-1111-4111-8111-111111111111",
  "second_judge_model_id": "11111111-1111-4111-8111-111111111111",
  "dual_judge": false
}

Skills

GET/v1/skills

List the skills library

Runtime keys can read published, non-retired versions only. Manage drafts, publication, and retirement in the console.

Required scope: skills.read.

Parameters

NameLocationTypeDescription
beforequerystring (uuid)Use next_cursor from the preceding page.
Example: 11111111-1111-4111-8111-111111111111
limitqueryinteger—
Example: 100
qquerystringSearch name, owner, or description.
Example: string

Responses

200Successful response

application/json

object

Fields 9
FieldTypeDescription
skillsarray<object>—
skills[].idstring (uuid)—
skills[].namestring—
skills[].ownerstring—
skills[].current_version_idstring (uuid)—
skills[].published_version_idstring (uuid) | null—
skills[].versioninteger—
skills[].descriptionstring—
next_cursorstring (uuid) | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "skills": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "name": "string",
      "owner": "string",
      "current_version_id": "11111111-1111-4111-8111-111111111111",
      "published_version_id": "11111111-1111-4111-8111-111111111111",
      "version": 0,
      "description": "string"
    }
  ],
  "next_cursor": "11111111-1111-4111-8111-111111111111"
}
GET/v1/skills/{id}

A skill with its versions

Runtime keys can read published, non-retired versions only. Manage drafts, publication, and retirement in the console.

Required scope: skills.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string

Responses

200Successful response

application/json

object

Fields 23
FieldTypeDescription
idstring (uuid)—
namestring—
ownerstring—
current_version_idstring (uuid)—
published_version_idstring (uuid) | null—
versioninteger—
descriptionstring—
current_versionobject—
current_version.idstring (uuid)—
current_version.skill_idstring (uuid)—
current_version.namestring—
current_version.versioninteger—
current_version.descriptionstring—
current_version.instructionsstring—
current_version.compatibilitystring—
current_version.filesarray<object>—
current_version.files[].pathRequiredstring—
current_version.files[].contentRequiredstring—
current_version.content_hashstring—
current_version.created_atstring (date-time)—
current_version.published_atstring (date-time) | null—
current_version.retired_atstring (date-time) | null—
versionsarray<object>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "owner": "string",
  "current_version_id": "11111111-1111-4111-8111-111111111111",
  "published_version_id": "11111111-1111-4111-8111-111111111111",
  "version": 0,
  "description": "string",
  "current_version": {
    "id": "11111111-1111-4111-8111-111111111111",
    "skill_id": "11111111-1111-4111-8111-111111111111",
    "name": "string",
    "version": 0,
    "description": "string",
    "instructions": "string",
    "compatibility": "string",
    "files": [
      {
        "path": "string",
        "content": "string"
      }
    ],
    "content_hash": "string",
    "created_at": "2026-10-14T12:00:00Z",
    "published_at": "2026-10-14T12:00:00Z",
    "retired_at": "2026-10-14T12:00:00Z"
  },
  "versions": []
}
GET/v1/skills/{id}/versions/{versionId}

One skill version

Runtime keys can read published, non-retired versions only. Manage drafts, publication, and retirement in the console.

Required scope: skills.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
versionId*pathstring—
Example: string

Responses

200Successful response

application/json

object

Fields 14
FieldTypeDescription
idstring (uuid)—
skill_idstring (uuid)—
namestring—
versioninteger—
descriptionstring—
instructionsstring—
compatibilitystring—
filesarray<object>—
files[].pathRequiredstring—
files[].contentRequiredstring—
content_hashstring—
created_atstring (date-time)—
published_atstring (date-time) | null—
retired_atstring (date-time) | null—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "skill_id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "version": 0,
  "description": "string",
  "instructions": "string",
  "compatibility": "string",
  "files": [
    {
      "path": "string",
      "content": "string"
    }
  ],
  "content_hash": "string",
  "created_at": "2026-10-14T12:00:00Z",
  "published_at": "2026-10-14T12:00:00Z",
  "retired_at": "2026-10-14T12:00:00Z"
}
GET/v1/skills/{id}/versions/{versionId}/package

Published version as SKILL.md plus files

Runtime keys can read published, non-retired versions only. Manage drafts, publication, and retirement in the console.

Required scope: skills.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
versionId*pathstring—
Example: string

Responses

200Successful response

application/json

object

Fields 8
FieldTypeDescription
skill_idstring (uuid)—
version_idstring (uuid)—
namestring—
versioninteger—
content_hashstring—
filesarray<object>—
files[].pathRequiredstring—
files[].contentRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "skill_id": "11111111-1111-4111-8111-111111111111",
  "version_id": "11111111-1111-4111-8111-111111111111",
  "name": "string",
  "version": 0,
  "content_hash": "string",
  "files": [
    {
      "path": "string",
      "content": "string"
    }
  ]
}
GET/v1/skills/{id}/versions/{versionId}/usage

Tasks, comparisons, and runs that use the version

Runtime keys can read published, non-retired versions only. Manage drafts, publication, and retirement in the console.

Required scope: skills.read.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
versionId*pathstring—
Example: string

Responses

200Successful response

application/json

object

Fields 3
FieldTypeDescription
tasksarray<object>—
comparisonsarray<object>—
agent_runsarray<object>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "tasks": [],
  "comparisons": [],
  "agent_runs": []
}

Quality-signals

GET/v1/quality-signals

List quality signals

Required scope: monitoring.read.

Parameters

NameLocationTypeDescription
statusquerystring—
Example: string

Responses

200Successful response

application/json

object

Fields 1
FieldTypeDescription
signalsarray<object>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "signals": []
}
POST/v1/quality-signals/{id}/dismiss

Dismiss a signal

Requires an all-scopes runtime key. Prefer dismissing signals in the console.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Responses

200Successful response

application/json

object

Fields 1
FieldTypeDescription
signalobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{}

Notification-endpoints

GET/v1/notification-endpoints

List notification endpoints

Required scope: org_config.read.

Responses

200Successful response

application/json

object

Fields 8
FieldTypeDescription
endpointsarray<object>—
endpoints[].idstring (uuid)—
endpoints[].url_hintstringMasked receiver address; the full URL and signing secret are not returned on reads.
endpoints[].eventsarray<string>—
endpoints[].activeboolean—
endpoints[].created_bystring | null—
endpoints[].created_atstring (date-time)—
email_notifierboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "endpoints": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "url_hint": "string",
      "events": [
        "string"
      ],
      "active": false,
      "created_by": "string",
      "created_at": "2026-10-14T12:00:00Z"
    }
  ],
  "email_notifier": false
}
POST/v1/notification-endpoints

Add a webhook; returns its secret once

Register a public HTTPS receiver. Omitted events subscribe to all six approval events. Returns the signing secret once.

Parameters

NameLocationTypeDescription
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

Body required

object

Fields 2
FieldTypeDescription
urlRequiredstring (uri)—
eventsarray<string>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "url": "string",
  "events": [
    "approval.requested"
  ]
}

Responses

201Created; keep the signing secret securely. It is returned only here.

application/json

object

Fields 8
FieldTypeDescription
endpointobject—
endpoint.idstring (uuid)—
endpoint.eventsarray<string>—
endpoint.activeboolean—
endpoint.created_bystring | null—
endpoint.created_atstring (date-time)—
endpoint.urlstring (uri)—
secretstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "endpoint": {
    "id": "11111111-1111-4111-8111-111111111111",
    "events": [
      "string"
    ],
    "active": false,
    "created_by": "string",
    "created_at": "2026-10-14T12:00:00Z",
    "url": "string"
  },
  "secret": "string"
}
DELETE/v1/notification-endpoints/{id}

Remove a notification endpoint

Required scope: org_config.write.

Parameters

NameLocationTypeDescription
id*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Responses

204Deleted; no response body

Notifications

PATCH/v1/notification-endpoints/{id}

Update webhook event subscriptions

Replaces selected events without changing the address or signing secret.

Parameters

NameLocationTypeDescription
id*pathstring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Request Body

Content-Type: application/json

Body required

object

Fields 1
FieldTypeDescription
eventsRequiredarray<string>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "events": [
    "approval.requested"
  ]
}

Responses

200Updated endpoint with masked address and no secret

application/json

object

Fields 6
FieldTypeDescription
idstring (uuid)—
url_hintstringMasked receiver address; the full URL and signing secret are not returned on reads.
eventsarray<string>—
activeboolean—
created_bystring | null—
created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "id": "11111111-1111-4111-8111-111111111111",
  "url_hint": "string",
  "events": [
    "string"
  ],
  "active": false,
  "created_by": "string",
  "created_at": "2026-10-14T12:00:00Z"
}
400INVALID_WEBHOOK_EVENTS
404Endpoint not found in this organization

Audit-events

GET/v1/audit-events

List audit events

Required scope: audit.read.

Parameters

NameLocationTypeDescription
limitqueryinteger—
Example: 0
beforequerystring (date-time)—
Example: 2026-10-14T12:00:00Z
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Successful response

application/json

object

Fields 1
FieldTypeDescription
eventsarray<object>—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "events": []
}

Agent-steps

GET/v1/agent-steps

Steps across runs since a time

Required scope: agent_governance.read.

Parameters

NameLocationTypeDescription
sincequerystring (date-time)—
Example: 2026-10-14T12:00:00Z
limitqueryinteger—
Example: 2000
task_idquerystring (uuid)—
Example: 11111111-1111-4111-8111-111111111111

Responses

200Successful response

application/json

object

Fields 2
FieldTypeDescription
stepsarray<object>—
limitinteger—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "steps": [],
  "limit": 0
}

Agent-sessions

POST/v1/agent-sessions/{sessionId}/steps/{stepId}/add-to-standard

Add a step to the task’s examples

Required scope: datasets.write.

Parameters

NameLocationTypeDescription
sessionId*pathstring—
Example: string
stepId*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Responses

200This step was already added

application/json

object

Fields 37
FieldTypeDescription
trace_sampleobject—
trace_sample.idRequiredstring—
trace_sample.task_idRequiredstring—
trace_sample.dataset_idRequiredstring | null—
trace_sample.session_idRequiredstring—
trace_sample.step_uuidRequiredstring | null—
trace_sample.sourceRequiredstringAllowed: "manual", "policy", "drift", "import".
trace_sample.statusRequiredstringAllowed: "candidate", "approved", "rejected", "promoted".
trace_sample.trace_snapshotRequiredobject—
trace_sample.expected_outputRequiredobject | null—
trace_sample.expected_state_changeRequiredobject | null—
trace_sample.expected_state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
trace_sample.expected_state_change.resource_typeRequiredstring | null—
trace_sample.expected_state_change.resource_idRequiredstring | null—
trace_sample.expected_state_change.operationRequiredstring | null—
trace_sample.expected_state_change.beforeRequiredobject | null—
trace_sample.expected_state_change.afterRequiredobject | null—
trace_sample.expected_state_change.evidenceRequiredobject | null—
trace_sample.metadataRequiredobject—
trace_sample.created_atRequiredstring—
trace_sample.updated_atRequiredstring—
datasetobject—
dataset.idstring (uuid)—
dataset.versioninteger—
dataset.sample_countinteger—
dataset.created_atstring (date-time)—
dataset.task_idstring (uuid)—
dataset.namestring—
dataset.parent_dataset_idstring (uuid) | null—
dataset.added_countinteger—
dataset.baseline_countinteger—
dataset.change_kindstring—
dataset.change_modestring—
dataset.redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.
dataset.redacted_sample_countintegerNumber of new or copied samples changed by credential protection during this write.
dataset_sample_idstring (uuid) | null—
already_addedboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "trace_sample": {
    "id": "string",
    "task_id": "string",
    "dataset_id": "string",
    "session_id": "string",
    "step_uuid": "string",
    "source": "manual",
    "status": "candidate",
    "expected_state_change": {
      "kind": "none",
      "resource_type": "string",
      "resource_id": "string",
      "operation": "string"
    },
    "created_at": "string",
    "updated_at": "string"
  },
  "dataset": {
    "id": "11111111-1111-4111-8111-111111111111",
    "version": 0,
    "sample_count": 0,
    "created_at": "2026-10-14T12:00:00Z",
    "task_id": "11111111-1111-4111-8111-111111111111",
    "name": "string",
    "parent_dataset_id": "11111111-1111-4111-8111-111111111111",
    "added_count": 0,
    "baseline_count": 0,
    "change_kind": "string",
    "change_mode": "string",
    "redaction_warning": "string",
    "redacted_sample_count": 0
  },
  "dataset_sample_id": "11111111-1111-4111-8111-111111111111",
  "already_added": false
}
201Added to a new dataset version

application/json

object

Fields 37
FieldTypeDescription
trace_sampleobject—
trace_sample.idRequiredstring—
trace_sample.task_idRequiredstring—
trace_sample.dataset_idRequiredstring | null—
trace_sample.session_idRequiredstring—
trace_sample.step_uuidRequiredstring | null—
trace_sample.sourceRequiredstringAllowed: "manual", "policy", "drift", "import".
trace_sample.statusRequiredstringAllowed: "candidate", "approved", "rejected", "promoted".
trace_sample.trace_snapshotRequiredobject—
trace_sample.expected_outputRequiredobject | null—
trace_sample.expected_state_changeRequiredobject | null—
trace_sample.expected_state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
trace_sample.expected_state_change.resource_typeRequiredstring | null—
trace_sample.expected_state_change.resource_idRequiredstring | null—
trace_sample.expected_state_change.operationRequiredstring | null—
trace_sample.expected_state_change.beforeRequiredobject | null—
trace_sample.expected_state_change.afterRequiredobject | null—
trace_sample.expected_state_change.evidenceRequiredobject | null—
trace_sample.metadataRequiredobject—
trace_sample.created_atRequiredstring—
trace_sample.updated_atRequiredstring—
datasetobject—
dataset.idstring (uuid)—
dataset.versioninteger—
dataset.sample_countinteger—
dataset.created_atstring (date-time)—
dataset.task_idstring (uuid)—
dataset.namestring—
dataset.parent_dataset_idstring (uuid) | null—
dataset.added_countinteger—
dataset.baseline_countinteger—
dataset.change_kindstring—
dataset.change_modestring—
dataset.redaction_warningstringPresent on a write when credential-like values changed. Inspect saved examples before comparing models.
dataset.redacted_sample_countintegerNumber of new or copied samples changed by credential protection during this write.
dataset_sample_idstring (uuid) | null—
already_addedboolean—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "trace_sample": {
    "id": "string",
    "task_id": "string",
    "dataset_id": "string",
    "session_id": "string",
    "step_uuid": "string",
    "source": "manual",
    "status": "candidate",
    "expected_state_change": {
      "kind": "none",
      "resource_type": "string",
      "resource_id": "string",
      "operation": "string"
    },
    "created_at": "string",
    "updated_at": "string"
  },
  "dataset": {
    "id": "11111111-1111-4111-8111-111111111111",
    "version": 0,
    "sample_count": 0,
    "created_at": "2026-10-14T12:00:00Z",
    "task_id": "11111111-1111-4111-8111-111111111111",
    "name": "string",
    "parent_dataset_id": "11111111-1111-4111-8111-111111111111",
    "added_count": 0,
    "baseline_count": 0,
    "change_kind": "string",
    "change_mode": "string",
    "redaction_warning": "string",
    "redacted_sample_count": 0
  },
  "dataset_sample_id": "11111111-1111-4111-8111-111111111111",
  "already_added": false
}
POST/v1/agent-sessions/{sessionId}/steps/{stepId}/promote-to-trace-sample

Save a step as a trace sample

Required scope: agent_governance.run.

Parameters

NameLocationTypeDescription
sessionId*pathstring—
Example: string
stepId*pathstring—
Example: string
Idempotency-KeyheaderstringOptional key for retry-safe mutation replay.
Example: request-2026-10-14-001

Request Body

Content-Type: application/json

object

Fields 6
FieldTypeDescription
sourcestring—
titlestring—
notesstring—
expected_outputobject | null—
expected_state_changeobject | null—
metadataobject—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "source": "string",
  "title": "string",
  "notes": "string"
}

Responses

200Successful response

application/json

object

Fields 21
FieldTypeDescription
trace_sampleobject—
trace_sample.idRequiredstring—
trace_sample.task_idRequiredstring—
trace_sample.dataset_idRequiredstring | null—
trace_sample.session_idRequiredstring—
trace_sample.step_uuidRequiredstring | null—
trace_sample.sourceRequiredstringAllowed: "manual", "policy", "drift", "import".
trace_sample.statusRequiredstringAllowed: "candidate", "approved", "rejected", "promoted".
trace_sample.trace_snapshotRequiredobject—
trace_sample.expected_outputRequiredobject | null—
trace_sample.expected_state_changeRequiredobject | null—
trace_sample.expected_state_change.kindRequiredstringAllowed: "none", "proposed", "observed", "confirmed".
trace_sample.expected_state_change.resource_typeRequiredstring | null—
trace_sample.expected_state_change.resource_idRequiredstring | null—
trace_sample.expected_state_change.operationRequiredstring | null—
trace_sample.expected_state_change.beforeRequiredobject | null—
trace_sample.expected_state_change.afterRequiredobject | null—
trace_sample.expected_state_change.evidenceRequiredobject | null—
trace_sample.metadataRequiredobject—
trace_sample.created_atRequiredstring—
trace_sample.updated_atRequiredstring—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "trace_sample": {
    "id": "string",
    "task_id": "string",
    "dataset_id": "string",
    "session_id": "string",
    "step_uuid": "string",
    "source": "manual",
    "status": "candidate",
    "expected_state_change": {
      "kind": "none",
      "resource_type": "string",
      "resource_id": "string",
      "operation": "string"
    },
    "created_at": "string",
    "updated_at": "string"
  }
}

Inference-logs

GET/v1/inference-logs

List answers (task_id, deployment_id, trace_id, limit)

Required scope: inference_logs.read.

Parameters

NameLocationTypeDescription
task_idquerystring (uuid)Filter by task_id.
Example: 11111111-1111-4111-8111-111111111111
deployment_idquerystring (uuid)Filter by deployment_id.
Example: 11111111-1111-4111-8111-111111111111
trace_idquerystring (uuid)Filter by trace_id.
Example: 11111111-1111-4111-8111-111111111111
limitqueryinteger—
Example: 50

Responses

200OK

application/json

object

Fields 25
FieldTypeDescription
inference_logsarray<object>—
inference_logs[].idstring (uuid)—
inference_logs[].trace_idstring (uuid)—
inference_logs[].task_idstring (uuid)—
inference_logs[].deployment_idstring (uuid)—
inference_logs[].task_version_idstring (uuid)—
inference_logs[].model_idstring (uuid)—
inference_logs[].task_namestring—
inference_logs[].model_namestring—
inference_logs[].release_model_namestring—
inference_logs[].deployment_versioninteger—
inference_logs[].task_version_numberinteger—
inference_logs[].latency_msinteger—
inference_logs[].token_count_inputinteger—
inference_logs[].token_count_outputinteger—
inference_logs[].release_liveboolean—
inference_logs[].validation_resultobject—
inference_logs[].validation_result.validRequiredboolean—
inference_logs[].validation_result.warningsRequiredarray<string>—
inference_logs[].validation_result.scoreRequirednumber—
inference_logs[].validation_result.abstainRequiredboolean—
inference_logs[].validation_result.escalateRequiredboolean—
inference_logs[].validation_result.statusstringAn indeterminate required check blocks the answer with abstain true, including under warn behavior. Allowed: "passed", "failed", "indeterminate".
inference_logs[].retrieval_attributionobject | null—
inference_logs[].created_atstring (date-time)—

Nested fields marked required are required when their parent object is present.

Example

Illustrative values generated from the schema.

{
  "inference_logs": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "trace_id": "11111111-1111-4111-8111-111111111111",
      "task_id": "11111111-1111-4111-8111-111111111111",
      "deployment_id": "11111111-1111-4111-8111-111111111111",
      "task_version_id": "11111111-1111-4111-8111-111111111111",
      "model_id": "11111111-1111-4111-8111-111111111111",
      "task_name": "string",
      "model_name": "string",
      "release_model_name": "string",
      "deployment_version": 0,
      "task_version_number": 0,
      "latency_ms": 0,
      "token_count_input": 0,
      "token_count_output": 0,
      "release_live": false,
      "validation_result": {
        "valid": false,
        "warnings": [
          "string"
        ],
        "score": 0,
        "abstain": false,
        "escalate": false,
        "status": "passed"
      },
      "created_at": "2026-10-14T12:00:00Z"
    }
  ]
}