List tools
List workspace tools with supported search, type, and creator filters.
Endpoint
GET
/api/v1/workspaces/{workspace_id}/toolsAuthentication
| Operation class | Authentication | Minimum role | API key |
|---|---|---|---|
| dashboard-session-api | Dashboard session cookie; mutations also require X-CX-Request: 1. | member | Not allowed |
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
workspace_id | path | string | Yes | — |
q | query | string or null | No | — |
type | query | string or null | No | — |
created_by | query | string or null | No | — |
Request body
This operation has no request body.
Example
curl --request GET 'https://operade.ai/api/v1/workspaces/ws_demo/tools' \ --cookie 'cx_session=YOUR_SESSION_COOKIE'
Responses
| Status | Description | Content |
|---|---|---|
4XX | Handled client error | application/json: ErrorResponse |
200 | Successful Response | application/json: ToolListResponse |
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 | ToolListResponse | — | No | Yes | — | — |
items | array<object> | — | — | No | Yes | — | — |
items[] | object | WebhookTool or GoogleSheetsToolMember or GoogleSheetsToolAdmin | — | No | Yes | — | — |
items[].config | object | KonfigWebhook | — | No | Yes | — | — |
items[].config.assignments | array<Assignment> | — | — | No | No | — | — |
items[].config.assignments[] | object | Assignment | — | No | Yes | — | Petik satu nilai dari balasan tool dan simpan sebagai variabel percakapan. Nama field ikut ElevenLabs (`DynamicVariableAssignment`). `source` mereka cuma punya satu nilai (`response`), jadi tidak ikut disalin — field dengan satu nilai yang mungkin adalah field yang tidak perlu ada. |
items[].config.assignments[].dynamic_variable | string | — | — | No | Yes | — | — |
items[].config.assignments[].value_path | string | — | — | No | Yes | — | — |
items[].config.auth | object or null | Auth | — | Yes | No | — | Rahasianya tidak pernah ditulis di sini — yang disimpan NAMA secret. Brankasnya sudah ada (`core/secrets.py`, AES-256-GCM per workspace), jadi tidak ada sumber daya "auth connection" baru seperti punya ElevenLabs. |
items[].config.auth.body_name | string or null | — | — | Yes | No | — | — |
items[].config.auth.header_name | string or null | — | — | Yes | No | — | — |
items[].config.auth.secret_name | string | — | — | No | Yes | — | — |
items[].config.auth.type | string | — | — | No | Yes | "bearer", "basic", "header", "body" | — |
items[].config.body_fields | object | — | — | No | No | — | — |
items[].config.method | string | — | — | No | No | "GET", "POST", "PUT", "PATCH", "DELETE" | — |
items[].config.parameters | object | — | — | No | No | — | — |
items[].config.request_headers | object | — | — | No | No | — | — |
items[].config.response_mocks | array<MockResponse> | — | — | No | No | — | — |
items[].config.response_mocks[] | object | MockResponse | — | No | Yes | — | — |
items[].config.response_mocks[].is_error | boolean | — | — | No | No | — | — |
items[].config.response_mocks[].mock_result | string | — | — | No | Yes | — | — |
items[].config.response_mocks[].parameter_conditions | array<ParameterCondition> | — | — | No | No | — | — |
items[].config.response_mocks[].parameter_conditions[] | object | ParameterCondition | — | No | Yes | — | — |
items[].config.response_mocks[].parameter_conditions[].eval | object | AnythingEval or ExactEval or RegexEval or LlmEval | — | No | Yes | — | — |
items[].config.response_mocks[].parameter_conditions[].path | string | — | — | No | Yes | — | — |
items[].config.timeout_secs | number | — | — | No | No | — | — |
items[].config.url | string | — | — | No | Yes | — | — |
items[].created_at | string | — | date-time | No | Yes | — | — |
items[].created_by | string | — | — | No | Yes | — | — |
items[].description | string | — | — | No | Yes | — | — |
items[].id | string | — | — | No | Yes | — | — |
items[].name | string | — | — | No | Yes | — | — |
items[].type | string | — | — | No | Yes | "webhook" | — |
items[].updated_at | string | — | date-time | No | Yes | — | — |
items[].capability_summary | string | — | — | No | Yes | — | — |
items[].status | string | — | — | No | Yes | "ready", "unavailable" | — |
items[].capability_locked_at | string or null | — | date-time | Yes | Yes | — | — |
Response example
{
"items": []
}Errors
Reviewed common and route-declared errors are summarized here; the list is not exhaustive. Start with the distributed error index 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. |
