Harnyx Research API reference (generated)
Generated from FastAPI OpenAPI.
Authentication and hosts
Public integrations use https://api.harnyx.ai with Authorization: Bearer <HARNYX_API_KEY>.
Signing in to Developer Console does not authenticate browser requests to that public API host.
This reference covers the public bearer-authenticated Research API. The machine-readable contract is available at research.openapi.json.
Domains
research
tasks
GET /v1/research/tasks
List Research Tasks
Auth: PlatformApiKey
Parameters
| Param | In | Req | Notes |
|---|---|---|---|
cursor | query | opt | string (nullable) |
limit | query | opt | integer (default: 50) |
Responses
200 Successful Response
Content-Type: application/json
Body: ResearchTaskPage
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
items | req | array[ResearchTaskSummary] | ||
created_at | req | string (format: date-time) | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input_preview | req | string | ||
status | req | ResearchTaskStatus | ||
next_cursor | req | string (nullable) |
400 Invalid Research Task cursor.
Content-Type: application/json
Body: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
401 Platform API-key authentication failed.
Content-Type: application/json
Body: ErrorResponse
Response headers
| Header | Notes |
|---|---|
WWW-Authenticate | string — Bearer authentication challenge when API-key authentication fails. |
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
422 Request validation failed (error_code: validation_failed).
Content-Type: application/json
Body: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
POST /v1/research/tasks
Create Research Task
Auth: PlatformApiKey
Headers
| Header | Req | Notes |
|---|---|---|
Idempotency-Key | opt | string (nullable) |
Request
Content-Type: application/json
Body: ResearchTaskCreateRequest
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
include_raw_tool_calls | opt | boolean (default: False) | ||
input | req | string | ||
output_schema | opt | JsonObject-Input (nullable) | ||
stream | opt | boolean (default: False) |
Responses
200 Current task state, recorded tool-call progress and the settled result as named SSE events.
Content-Type: text/event-stream
Body: oneOf: ResearchTaskStateEvent OR ResearchToolCallEvent
(no documented fields)
202 Research Task accepted.
Content-Type: application/json
Body: ResearchTaskResponse
Response headers
| Header | Notes |
|---|---|
Location | string — Relative URL for polling the accepted Research Task. |
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
citations | req | array[ResearchTaskCitation (nullable)] (nullable) | ||
excerpts | req | array[string] | ||
title | req | string (nullable) | ||
url | req | string | ||
created_at | req | string (format: date-time) | ||
credits_charged | req | string (nullable) | ||
error | req | ResearchTaskFailure (nullable) | ||
code | req | ResearchTaskFailureCode | ||
message | req | string | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input | req | string | ||
output | req | anyOf: string OR JsonValue-Output OR null | ||
output_schema | opt | JsonObject-Output (nullable) | ||
status | req | ResearchTaskStatus |
400 Invalid request or Idempotency-Key.
Content-Type: application/json
Body: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
401 Platform API-key authentication failed.
Content-Type: application/json
Body: ErrorResponse
Response headers
| Header | Notes |
|---|---|
WWW-Authenticate | string — Bearer authentication challenge when API-key authentication fails. |
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
409 Idempotency conflict, account task limit, or invalid account status.
Content-Type: application/json
Body: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
422 Request validation failed (error_code: validation_failed).
Content-Type: application/json
Body: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
{task_id}
GET /v1/research/tasks/{task_id}
Get Research Task
Auth: PlatformApiKey
Parameters
| Param | In | Req | Notes |
|---|---|---|---|
task_id | path | req | string (format: uuid) |
include_raw_tool_calls | query | opt | boolean (default: False) |
Responses
200 Current task state, recorded tool-call progress and the settled result as named SSE events.
Content-Type: application/json
Body: ResearchTaskResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
citations | req | array[ResearchTaskCitation (nullable)] (nullable) | ||
excerpts | req | array[string] | ||
title | req | string (nullable) | ||
url | req | string | ||
created_at | req | string (format: date-time) | ||
credits_charged | req | string (nullable) | ||
error | req | ResearchTaskFailure (nullable) | ||
code | req | ResearchTaskFailureCode | ||
message | req | string | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input | req | string | ||
output | req | anyOf: string OR JsonValue-Output OR null | ||
output_schema | opt | JsonObject-Output (nullable) | ||
status | req | ResearchTaskStatus |
Content-Type: text/event-stream
Body: oneOf: ResearchTaskStateEvent OR ResearchToolCallEvent
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
citations | req | array[ResearchTaskCitation (nullable)] (nullable) | ||
excerpts | req | array[string] | ||
title | req | string (nullable) | ||
url | req | string | ||
created_at | req | string (format: date-time) | ||
credits_charged | req | string (nullable) | ||
error | req | ResearchTaskFailure (nullable) | ||
code | req | ResearchTaskFailureCode | ||
message | req | string | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input | req | string | ||
output | req | anyOf: string OR JsonValue-Output OR null | ||
output_schema | opt | JsonObject-Output (nullable) | ||
status | req | ResearchTaskStatus |
401 Platform API-key authentication failed.
Content-Type: application/json
Body: ErrorResponse
Response headers
| Header | Notes |
|---|---|
WWW-Authenticate | string — Bearer authentication challenge when API-key authentication fails. |
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
404 Research task not found (error_code: not_found).
Content-Type: application/json
Body: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
422 Request validation failed (error_code: validation_failed).
Content-Type: application/json
Body: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
Models
Model: DecisionUsage
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) |
JSON schema
{
"additionalProperties": false,
"properties": {
"input_tokens": {
"anyOf": [
{
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Input Tokens"
},
"output_tokens": {
"anyOf": [
{
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Output Tokens"
}
},
"title": "DecisionUsage",
"type": "object"
}
Model: ErrorBillingDTO
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) |
JSON schema
{
"additionalProperties": false,
"properties": {
"actual_cost_provider": {
"enum": [
"openrouter",
"ai_gateway"
],
"title": "Actual Cost Provider",
"type": "string"
},
"actual_cost_usd": {
"minimum": 0.0,
"title": "Actual Cost Usd",
"type": "number"
},
"usage": {
"anyOf": [
{
"$ref": "#/components/schemas/DecisionUsage"
},
{
"type": "null"
}
]
}
},
"required": [
"actual_cost_usd",
"actual_cost_provider"
],
"title": "ErrorBillingDTO",
"type": "object"
}
Model: ErrorResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
billing | opt | ErrorBillingDTO (nullable) | ||
actual_cost_provider | req | string (enum: [openrouter, ai_gateway]) | ||
actual_cost_usd | req | number | ||
usage | opt | DecisionUsage (nullable) | ||
input_tokens | opt | integer (nullable) | ||
output_tokens | opt | integer (nullable) | ||
error_code | req | string | ||
message | req | string |
JSON schema
{
"properties": {
"billing": {
"anyOf": [
{
"$ref": "#/components/schemas/ErrorBillingDTO"
},
{
"type": "null"
}
]
},
"error_code": {
"title": "Error Code",
"type": "string"
},
"message": {
"title": "Message",
"type": "string"
}
},
"required": [
"error_code",
"message"
],
"title": "ErrorResponse",
"type": "object"
}
Model: JsonObject-Input
(no documented fields)
JSON schema
{
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue-Input"
},
"type": "object"
}
Model: JsonObject-Output
(no documented fields)
JSON schema
{
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue-Output"
},
"type": "object"
}
Model: JsonValue-Input
(no documented fields)
JSON schema
{
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"items": {
"$ref": "#/components/schemas/JsonValue-Input"
},
"type": "array"
},
{
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue-Input"
},
"type": "object"
},
{
"type": "null"
}
]
}
Model: JsonValue-Output
(no documented fields)
JSON schema
{
"anyOf": [
{
"type": "string"
},
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"items": {
"$ref": "#/components/schemas/JsonValue-Output"
},
"type": "array"
},
{
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue-Output"
},
"type": "object"
},
{
"type": "null"
}
]
}
Model: ResearchTaskCitation
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
excerpts | req | array[string] | ||
title | req | string (nullable) | ||
url | req | string |
JSON schema
{
"additionalProperties": false,
"properties": {
"excerpts": {
"items": {
"type": "string"
},
"title": "Excerpts",
"type": "array"
},
"title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Title"
},
"url": {
"title": "Url",
"type": "string"
}
},
"required": [
"url",
"title",
"excerpts"
],
"title": "ResearchTaskCitation",
"type": "object"
}
Model: ResearchTaskCreateRequest
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
include_raw_tool_calls | opt | boolean (default: False) | ||
input | req | string | ||
output_schema | opt | JsonObject-Input (nullable) | ||
stream | opt | boolean (default: False) |
JSON schema
{
"additionalProperties": false,
"properties": {
"include_raw_tool_calls": {
"default": false,
"title": "Include Raw Tool Calls",
"type": "boolean"
},
"input": {
"minLength": 1,
"title": "Input",
"type": "string"
},
"output_schema": {
"anyOf": [
{
"$ref": "#/components/schemas/JsonObject-Input"
},
{
"type": "null"
}
],
"description": "JSON Schema Draft 2020-12 for structured output. `$ref` and `$dynamicRef` values must be local fragments beginning with `#`; external references are rejected. Schemas may contain at most 80,000 compact JSON characters."
},
"stream": {
"default": false,
"title": "Stream",
"type": "boolean"
}
},
"required": [
"input"
],
"title": "ResearchTaskCreateRequest",
"type": "object"
}
Model: ResearchTaskFailure
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
code | req | ResearchTaskFailureCode | ||
message | req | string |
JSON schema
{
"additionalProperties": false,
"properties": {
"code": {
"$ref": "#/components/schemas/ResearchTaskFailureCode"
},
"message": {
"title": "Message",
"type": "string"
}
},
"required": [
"code",
"message"
],
"title": "ResearchTaskFailure",
"type": "object"
}
Model: ResearchTaskFailureCode
(no documented fields)
JSON schema
{
"enum": [
"insufficient_credits",
"execution_timeout",
"invalid_output",
"execution_failed"
],
"title": "ResearchTaskFailureCode",
"type": "string"
}
Model: ResearchTaskPage
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
items | req | array[ResearchTaskSummary] | ||
created_at | req | string (format: date-time) | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input_preview | req | string | ||
status | req | ResearchTaskStatus | ||
next_cursor | req | string (nullable) |
JSON schema
{
"additionalProperties": false,
"properties": {
"items": {
"items": {
"$ref": "#/components/schemas/ResearchTaskSummary"
},
"title": "Items",
"type": "array"
},
"next_cursor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Next Cursor"
}
},
"required": [
"items",
"next_cursor"
],
"title": "ResearchTaskPage",
"type": "object"
}
Model: ResearchTaskResponse
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
citations | req | array[ResearchTaskCitation (nullable)] (nullable) | ||
excerpts | req | array[string] | ||
title | req | string (nullable) | ||
url | req | string | ||
created_at | req | string (format: date-time) | ||
credits_charged | req | string (nullable) | ||
error | req | ResearchTaskFailure (nullable) | ||
code | req | ResearchTaskFailureCode | ||
message | req | string | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input | req | string | ||
output | req | anyOf: string OR JsonValue-Output OR null | ||
output_schema | opt | JsonObject-Output (nullable) | ||
status | req | ResearchTaskStatus |
JSON schema
{
"additionalProperties": false,
"properties": {
"citations": {
"anyOf": [
{
"items": {
"anyOf": [
{
"$ref": "#/components/schemas/ResearchTaskCitation"
},
{
"type": "null"
}
]
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Citations"
},
"created_at": {
"format": "date-time",
"title": "Created At",
"type": "string"
},
"credits_charged": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Credits Charged"
},
"error": {
"anyOf": [
{
"$ref": "#/components/schemas/ResearchTaskFailure"
},
{
"type": "null"
}
]
},
"finished_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"id": {
"format": "uuid",
"title": "Id",
"type": "string"
},
"input": {
"description": "Complete Research Task input.",
"minLength": 1,
"title": "Input",
"type": "string"
},
"output": {
"anyOf": [
{
"type": "string"
},
{
"$ref": "#/components/schemas/JsonValue-Output"
},
{
"type": "null"
}
],
"description": "Task output: text, structured JSON, or null. Use status to distinguish a pending result from a completed structured null. Structured responses may contain at most 80,000 compact JSON characters; oversized structured responses cause terminal invalid_output failure.",
"title": "Output"
},
"output_schema": {
"anyOf": [
{
"$ref": "#/components/schemas/JsonObject-Output"
},
{
"type": "null"
}
],
"description": "Structured output schema requested for this Research Task."
},
"status": {
"$ref": "#/components/schemas/ResearchTaskStatus"
}
},
"required": [
"id",
"input",
"status",
"created_at",
"finished_at",
"output",
"citations",
"error",
"credits_charged"
],
"title": "ResearchTaskResponse",
"type": "object"
}
Model: ResearchTaskStateEvent
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
task | req | ResearchTaskResponse | ||
citations | req | array[ResearchTaskCitation (nullable)] (nullable) | ||
excerpts | req | array[string] | ||
title | req | string (nullable) | ||
url | req | string | ||
created_at | req | string (format: date-time) | ||
credits_charged | req | string (nullable) | ||
error | req | ResearchTaskFailure (nullable) | ||
code | req | ResearchTaskFailureCode | ||
message | req | string | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input | req | string | ||
output | req | anyOf: string OR JsonValue-Output OR null | ||
output_schema | opt | JsonObject-Output (nullable) | ||
status | req | ResearchTaskStatus | ||
task_id | req | string (format: uuid) | ||
type | req | string (enum: [task.snapshot, task.completed, task.failed]) |
JSON schema
{
"additionalProperties": false,
"properties": {
"task": {
"$ref": "#/components/schemas/ResearchTaskResponse"
},
"task_id": {
"format": "uuid",
"title": "Task Id",
"type": "string"
},
"type": {
"enum": [
"task.snapshot",
"task.completed",
"task.failed"
],
"title": "Type",
"type": "string"
}
},
"required": [
"type",
"task_id",
"task"
],
"title": "ResearchTaskStateEvent",
"type": "object"
}
Model: ResearchTaskStatus
(no documented fields)
JSON schema
{
"enum": [
"queued",
"in_progress",
"completed",
"failed"
],
"title": "ResearchTaskStatus",
"type": "string"
}
Model: ResearchTaskSummary
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
created_at | req | string (format: date-time) | ||
finished_at | req | string (format: date-time; nullable) | ||
id | req | string (format: uuid) | ||
input_preview | req | string | ||
status | req | ResearchTaskStatus |
JSON schema
{
"additionalProperties": false,
"properties": {
"created_at": {
"format": "date-time",
"title": "Created At",
"type": "string"
},
"finished_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"id": {
"format": "uuid",
"title": "Id",
"type": "string"
},
"input_preview": {
"description": "First 500 characters of the Research Task input. Exact reads return the complete input.",
"maxLength": 500,
"minLength": 1,
"title": "Input Preview",
"type": "string"
},
"status": {
"$ref": "#/components/schemas/ResearchTaskStatus"
}
},
"required": [
"id",
"input_preview",
"status",
"created_at",
"finished_at"
],
"title": "ResearchTaskSummary",
"type": "object"
}
Model: ResearchToolCallEvent
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
call_id | req | string | ||
finished_at | req | string (format: date-time; nullable) | ||
outcome | req | ToolCallOutcome (nullable) | ||
raw | opt | ResearchToolCallRaw (nullable) | ||
request | req | JsonValue-Output (nullable) | ||
response | req | JsonValue-Output (nullable) | ||
started_at | req | string (format: date-time) | ||
task_id | req | string (format: uuid) | ||
tool | req | string (enum: [search_web, search_ai, fetch_page, embed_text, decision_query, llm_chat, test_tool, tooling_info]) | ||
type | req | string (enum: [tool_call.started, tool_call.completed, tool_call.failed]) |
JSON schema
{
"additionalProperties": false,
"properties": {
"call_id": {
"title": "Call Id",
"type": "string"
},
"finished_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"outcome": {
"anyOf": [
{
"$ref": "#/components/schemas/ToolCallOutcome"
},
{
"type": "null"
}
]
},
"raw": {
"anyOf": [
{
"$ref": "#/components/schemas/ResearchToolCallRaw"
},
{
"type": "null"
}
]
},
"started_at": {
"format": "date-time",
"title": "Started At",
"type": "string"
},
"task_id": {
"format": "uuid",
"title": "Task Id",
"type": "string"
},
"tool": {
"enum": [
"search_web",
"search_ai",
"fetch_page",
"embed_text",
"decision_query",
"llm_chat",
"test_tool",
"tooling_info"
],
"title": "Tool",
"type": "string"
},
"type": {
"enum": [
"tool_call.started",
"tool_call.completed",
"tool_call.failed"
],
"title": "Type",
"type": "string"
}
},
"required": [
"type",
"task_id",
"call_id",
"tool",
"started_at",
"finished_at",
"outcome"
],
"title": "ResearchToolCallEvent",
"type": "object"
}
Model: ResearchToolCallRaw
| 1st level | 2nd level | 3rd level | Req | Notes |
|---|---|---|---|---|
request | req | JsonValue-Output (nullable) | ||
response | req | JsonValue-Output (nullable) |
JSON schema
{
"additionalProperties": false,
"properties": {
"request": {
"anyOf": [
{
"$ref": "#/components/schemas/JsonValue-Output"
},
{
"type": "null"
}
]
},
"response": {
"anyOf": [
{
"$ref": "#/components/schemas/JsonValue-Output"
},
{
"type": "null"
}
]
}
},
"required": [
"request",
"response"
],
"title": "ResearchToolCallRaw",
"type": "object"
}
Model: ToolCallOutcome
(no documented fields)
JSON schema
{
"description": "High-level outcome for a tool invocation.",
"enum": [
"ok",
"provider_error",
"budget_exceeded",
"internal_error",
"timeout"
],
"title": "ToolCallOutcome",
"type": "string"
}