# List agent tests

List visible Agent Testing resources and folders with cursor pagination, search, type, parent-folder, sorting, and explicit-sharing filters.

## Endpoint

`GET /api/v1/workspaces/{workspace_id}/agent-tests`

## Authentication

| Class | Authentication | Minimum role | API key |
| --- | --- | --- | --- |
| customer-api | Bearer API key or dashboard session cookie; dashboard mutations also require X-CX-Request: 1. | member | Allowed |

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `workspace_id` | path | `string` | Yes | — |
| `cursor` | query | `string or null` | No | — |
| `page_size` | query | `integer` | No | — |
| `search` | query | `string or null` | No | — |
| `parent_folder_id` | query | `string or null` | No | — |
| `types[]` | query | `array<string> or null` | No | — |
| `sort_mode` | query | `string` | No | — |
| `sharing_mode` | query | `string` | No | — |

## Request body

This operation has no request body.

## Example

```bash
curl --request GET 'https://operade.ai/api/v1/workspaces/ws_demo/agent-tests?page_size=30&parent_folder_id=root' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

## Responses

| Status | Description | Content |
| --- | --- | --- |
| 4XX | Handled client error | application/json: `ErrorResponse` |
| 200 | Successful Response | application/json: `AgentTestListResponse` |

### 4XX application/json response schema

| Field path | Type | Reference | Format | Nullable | Required | Enum | Description |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `$` | `object` | ErrorResponse | — | No | Yes | — | — |
| `error` | `object` | ErrorItem | — | No | Yes | — | — |
| `error.code` | `string` | — | — | No | Yes | — | — |
| `error.details` | `object` | — | — | No | No | — | — |
| `error.message` | `string` | — | — | No | Yes | — | — |

### 200 application/json response schema

| Field path | Type | Reference | Format | Nullable | Required | Enum | Description |
| --- | --- | --- | --- | --- | --- | --- | --- |
| `$` | `object` | AgentTestListResponse | — | No | Yes | — | — |
| `has_more` | `boolean` | — | — | No | Yes | — | — |
| `items` | `array<object>` | — | — | No | Yes | — | — |
| `items[]` | `object` | FolderResource or SimulationTestResource or NextReplyTestResource or ToolInvocationTestResource | — | No | Yes | — | — |
| `items[].breadcrumbs` | `array<Breadcrumb> or null` | — | — | Yes | No | — | — |
| `items[].breadcrumbs[]` | `object` | Breadcrumb | — | No | Yes | — | — |
| `items[].breadcrumbs[].id` | `string` | — | — | No | Yes | — | — |
| `items[].breadcrumbs[].name` | `string` | — | — | No | Yes | — | — |
| `items[].created_at` | `string` | — | date-time | No | Yes | — | — |
| `items[].created_by` | `string` | — | — | No | Yes | — | — |
| `items[].entity_type` | `string` | — | — | No | Yes | "folder" | — |
| `items[].id` | `string` | — | — | No | Yes | — | — |
| `items[].name` | `string` | — | — | No | Yes | — | — |
| `items[].parent_folder_id` | `string or null` | — | — | Yes | Yes | — | — |
| `items[].updated_at` | `string` | — | date-time | No | Yes | — | — |
| `items[].access` | `array<AccessGrant>` | — | — | No | Yes | — | — |
| `items[].access[]` | `object` | AccessGrant | — | No | Yes | — | — |
| `items[].access[].role` | `string` | — | — | No | Yes | "viewer", "editor" | — |
| `items[].access[].user_id` | `string` | — | — | No | Yes | — | — |
| `items[].access_role` | `string` | — | — | No | Yes | "admin", "creator", "viewer", "editor" | — |
| `items[].chat_history` | `array<HistoryEntry>` | — | — | No | Yes | — | — |
| `items[].chat_history[]` | `object` | HistoryEntry | — | No | Yes | — | — |
| `items[].chat_history[].message` | `string or null` | — | — | Yes | No | — | — |
| `items[].chat_history[].role` | `string` | — | — | No | Yes | "user", "agent" | — |
| `items[].chat_history[].tool_calls` | `array<ToolCall>` | — | — | No | No | — | — |
| `items[].chat_history[].tool_calls[]` | `object` | ToolCall | — | No | Yes | — | Bagian stabil kontrak vendor; detail bertipe baru tetap dipertahankan. |
| `items[].chat_history[].tool_calls[].params_as_json` | `string` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_calls[].request_id` | `string` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_calls[].tool_details` | `object or null` | — | — | Yes | No | — | — |
| `items[].chat_history[].tool_calls[].tool_has_been_called` | `boolean` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_calls[].tool_name` | `string` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_calls[].type` | `string or null` | — | — | Yes | No | — | — |
| `items[].chat_history[].tool_results` | `array<ToolResult>` | — | — | No | No | — | — |
| `items[].chat_history[].tool_results[]` | `object` | ToolResult | — | No | Yes | — | — |
| `items[].chat_history[].tool_results[].is_blocked` | `boolean` | — | — | No | No | — | — |
| `items[].chat_history[].tool_results[].is_error` | `boolean` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_results[].request_id` | `string` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_results[].result_value` | `string` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_results[].tool_has_been_called` | `boolean` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_results[].tool_latency_secs` | `number` | — | — | No | No | — | — |
| `items[].chat_history[].tool_results[].tool_name` | `string` | — | — | No | Yes | — | — |
| `items[].chat_history[].tool_results[].type` | `string` | — | — | No | Yes | — | — |
| `items[].conversation_initiation_source` | `string` | — | — | No | Yes | "unknown", "telegram_integration" | — |
| `items[].current_revision_id` | `string` | — | — | No | Yes | — | — |
| `items[].dynamic_variables` | `object` | — | — | No | Yes | — | — |
| `items[].evaluation_model` | `string` | — | — | No | Yes | — | — |
| `items[].from_conversation_metadata` | `object or null` | FromConversationMetadata | — | Yes | Yes | — | — |
| `items[].from_conversation_metadata.conversation_id` | `string` | — | — | No | Yes | — | — |
| `items[].from_conversation_metadata.event_seq` | `integer` | — | — | No | Yes | — | — |
| `items[].from_conversation_metadata.original_agent_response` | `string or null` | — | — | Yes | No | — | — |
| `items[].from_conversation_metadata.system__conversation_id` | `string or null` | — | — | Yes | No | — | — |
| `items[].from_conversation_metadata.system__time_utc` | `string` | — | date-time | No | Yes | — | — |
| `items[].revision_created_at` | `string` | — | date-time | No | Yes | — | — |
| `items[].simulated_user_model` | `string` | — | — | No | Yes | — | — |
| `items[].simulation_max_turns` | `integer` | — | — | No | Yes | — | — |
| `items[].simulation_scenario` | `string` | — | — | No | Yes | — | — |
| `items[].success_conditions` | `array<string>` | — | — | No | Yes | — | — |
| `items[].success_conditions[]` | `string` | — | — | No | Yes | — | — |
| `items[].tool_mock_config` | `object` | ToolMockConfig | — | No | Yes | — | — |
| `items[].tool_mock_config.fallback_strategy` | `string` | — | — | No | No | "raise_error", "call_real_tool" | — |
| `items[].tool_mock_config.mocked_tool_ids` | `array<string>` | — | — | No | No | — | — |
| `items[].tool_mock_config.mocked_tool_ids[]` | `string` | — | — | No | Yes | — | — |
| `items[].tool_mock_config.mocking_strategy` | `string` | — | — | No | No | "all", "selected", "none" | — |
| `items[].tool_mock_overrides` | `object` | — | — | No | Yes | — | — |
| `items[].type` | `string` | — | — | No | Yes | "simulation" | — |
| `items[].failure_examples` | `array<string>` | — | — | No | Yes | — | — |
| `items[].failure_examples[]` | `string` | — | — | No | Yes | — | — |
| `items[].success_condition` | `string` | — | — | No | Yes | — | — |
| `items[].success_examples` | `array<string>` | — | — | No | Yes | — | — |
| `items[].success_examples[]` | `string` | — | — | No | Yes | — | — |
| `items[].check_any_tool_matches` | `boolean` | — | — | No | Yes | — | — |
| `items[].tool_call_parameters` | `object or null` | ToolCallParameters | — | Yes | Yes | — | — |
| `items[].tool_call_parameters.parameters` | `array<ParameterCondition>` | — | — | No | No | — | — |
| `items[].tool_call_parameters.parameters[]` | `object` | ParameterCondition | — | No | Yes | — | — |
| `items[].tool_call_parameters.parameters[].eval` | `object` | AnythingEval or ExactEval or RegexEval or LlmEval | — | No | Yes | — | — |
| `items[].tool_call_parameters.parameters[].path` | `string` | — | — | No | Yes | — | — |
| `items[].tool_call_parameters.referenced_tool` | `object or null` | ReferencedTool | — | Yes | No | — | — |
| `items[].tool_call_parameters.referenced_tool.id` | `string` | — | — | No | Yes | — | — |
| `items[].tool_call_parameters.referenced_tool.type` | `string` | — | — | No | Yes | "system", "webhook", "google_sheets", "client", "workflow", "api_integration_webhook", "mcp", "code" | — |
| `items[].tool_call_parameters.verify_absence` | `boolean` | — | — | No | No | — | — |
| `items[].tool_call_parameters.workflow_node_transition` | `object or null` | WorkflowTransition | — | Yes | No | — | — |
| `items[].tool_call_parameters.workflow_node_transition.agent_id` | `string` | — | — | No | Yes | — | — |
| `items[].tool_call_parameters.workflow_node_transition.target_node_id` | `string` | — | — | No | Yes | — | — |
| `items[].tool_call_parameters.workflow_node_transition.type` | `string` | — | — | No | No | "node_id" | — |
| `next_cursor` | `string or null` | — | — | Yes | Yes | — | — |

### Response example

```json
{
  "items": [],
  "next_cursor": "string",
  "has_more": false
}
```

## Errors

Reviewed common and route-declared errors are summarized here; the list is not exhaustive. Start with the [distributed error index](/docs/reference/api/errors) to find each code's canonical domain page.

| Status | Code | Description |
| --- | --- | --- |
| 401 | `unauthenticated` | Authentication is missing, invalid, or revoked. |
| 403 | `forbidden` | The authenticated caller does not have access to this operation. |
| 404 | `not_found` | The requested workspace resource was not found. |
| 422 | `validation_failed` | The request did not pass field or business validation. |

## Related operations

- [Create an agent test](/docs/api-reference/agent-tests/create-agent-test) — `POST /api/v1/workspaces/{workspace_id}/agent-tests`
- [Delete an agent test](/docs/api-reference/agent-tests/delete-agent-test) — `DELETE /api/v1/workspaces/{workspace_id}/agent-tests/{test_id}`
- [Get an agent test](/docs/api-reference/agent-tests/get-agent-test) — `GET /api/v1/workspaces/{workspace_id}/agent-tests/{test_id}`
