Skip to content
OperadeDocs

Search documentation

Type to search documentation.

Documentation
Copy page
Open raw Markdown

Update a tool

Replace the name, description, and configuration of a workspace tool.

Endpoint

PUT/api/v1/workspaces/{workspace_id}/tools/{tool_id}

Authentication

Operation classAuthenticationMinimum roleAPI key
dashboard-session-apiDashboard session cookie; mutations also require X-CX-Request: 1.adminNot allowed

Parameters

NameInTypeRequiredDescription
workspace_idpathstringYes—
tool_idpathstringYes—

Request body

application/json request schema

Field pathTypeReferenceFormatNullableRequiredEnumDescription
$objectPermintaanWebhook or PermintaanGoogleSheets—NoYes——

Choose exactly one variant using type.

Permintaan Webhook variant (type = "webhook")

Field pathTypeReferenceFormatNullableRequiredEnumDescription
$objectPermintaanWebhook—NoYes——
configobjectKonfigWebhook—NoYes——
config.assignmentsarray<Assignment>——NoNo——
config.assignments[]objectAssignment—NoYes—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.
config.assignments[].dynamic_variablestring——NoYes——
config.assignments[].value_pathstring——NoYes——
config.authobject or nullAuth—YesNo—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.
config.auth.body_namestring or null——YesNo——
config.auth.header_namestring or null——YesNo——
config.auth.secret_namestring——NoYes——
config.auth.typestring——NoYes"bearer", "basic", "header", "body"—
config.body_fieldsobject——NoNo——
config.methodstring——NoNo"GET", "POST", "PUT", "PATCH", "DELETE"—
config.parametersobject——NoNo——
config.request_headersobject——NoNo——
config.response_mocksarray<MockResponse>——NoNo——
config.response_mocks[]objectMockResponse—NoYes——
config.response_mocks[].is_errorboolean——NoNo——
config.response_mocks[].mock_resultstring——NoYes——
config.response_mocks[].parameter_conditionsarray<ParameterCondition>——NoNo——
config.response_mocks[].parameter_conditions[]objectParameterCondition—NoYes——
config.response_mocks[].parameter_conditions[].evalobjectAnythingEval or ExactEval or RegexEval or LlmEval—NoYes——
config.response_mocks[].parameter_conditions[].pathstring——NoYes——
config.timeout_secsnumber——NoNo——
config.urlstring——NoYes——
descriptionstring——NoYes——
namestring——NoYes——
typestring——NoNo"webhook"—

Permintaan Google Sheets variant (type = "google_sheets")

Field pathTypeReferenceFormatNullableRequiredEnumDescription
$objectPermintaanGoogleSheets—NoYes——
configobjectKonfigGoogleRead or KonfigGoogleAppend—NoYes——
descriptionstring——NoYes——
namestring——NoYes——
typestring——NoYes"google_sheets"—

Example

cURL
curl --request PUT 'https://operade.ai/api/v1/workspaces/ws_demo/tools/tool_demo' \
  --cookie 'cx_session=YOUR_SESSION_COOKIE' \
  --header 'X-CX-Request: 1' \
  --header 'Content-Type: application/json' \
  --data '{"type":"google_sheets","name":"find_customer","description":"Search one customer by ID.","config":{"config_version":1,"action":"read","grant_id":"gsgrant_example","sheet_id":0,"sheet_title":"Customers","range_a1":"\u0027Customers\u0027!A1:D100","search_columns":["customer_id"],"return_columns":["name","status"],"match":"exact","limit":1}}'
Request body JSON
{
  "type": "google_sheets",
  "config": {
    "config_version": 1,
    "action": "read",
    "grant_id": "gsgrant_example",
    "sheet_id": 0,
    "sheet_title": "Customers",
    "range_a1": "'Customers'!A1:D100",
    "search_columns": [
      "customer_id"
    ],
    "return_columns": [
      "name",
      "status"
    ],
    "match": "exact",
    "limit": 1
  },
  "description": "Search one customer by ID.",
  "name": "find_customer"
}

Responses

StatusDescriptionContent
4XXHandled client errorapplication/json: ErrorResponse
200Successful Responseapplication/json: object

4XX application/json response schema

Field pathTypeReferenceFormatNullableRequiredEnumDescription
$objectErrorResponse—NoYes——
errorobjectErrorItem—NoYes——
error.codestring——NoYes——
error.detailsobject——NoNo——
error.messagestring——NoYes——

200 application/json response schema

Field pathTypeReferenceFormatNullableRequiredEnumDescription
$objectWebhookTool or GoogleSheetsToolAdmin—NoYes——

Choose exactly one variant using type.

Webhook Tool variant (type = "webhook")

Field pathTypeReferenceFormatNullableRequiredEnumDescription
$objectWebhookTool—NoYes——
configobjectKonfigWebhook—NoYes——
config.assignmentsarray<Assignment>——NoNo——
config.assignments[]objectAssignment—NoYes—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.
config.assignments[].dynamic_variablestring——NoYes——
config.assignments[].value_pathstring——NoYes——
config.authobject or nullAuth—YesNo—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.
config.auth.body_namestring or null——YesNo——
config.auth.header_namestring or null——YesNo——
config.auth.secret_namestring——NoYes——
config.auth.typestring——NoYes"bearer", "basic", "header", "body"—
config.body_fieldsobject——NoNo——
config.methodstring——NoNo"GET", "POST", "PUT", "PATCH", "DELETE"—
config.parametersobject——NoNo——
config.request_headersobject——NoNo——
config.response_mocksarray<MockResponse>——NoNo——
config.response_mocks[]objectMockResponse—NoYes——
config.response_mocks[].is_errorboolean——NoNo——
config.response_mocks[].mock_resultstring——NoYes——
config.response_mocks[].parameter_conditionsarray<ParameterCondition>——NoNo——
config.response_mocks[].parameter_conditions[]objectParameterCondition—NoYes——
config.response_mocks[].parameter_conditions[].evalobjectAnythingEval or ExactEval or RegexEval or LlmEval—NoYes——
config.response_mocks[].parameter_conditions[].pathstring——NoYes——
config.timeout_secsnumber——NoNo——
config.urlstring——NoYes——
created_atstring—date-timeNoYes——
created_bystring——NoYes——
descriptionstring——NoYes——
idstring——NoYes——
namestring——NoYes——
typestring——NoYes"webhook"—
updated_atstring—date-timeNoYes——

Google Sheets Tool Admin variant (type = "google_sheets")

Field pathTypeReferenceFormatNullableRequiredEnumDescription
$objectGoogleSheetsToolAdmin—NoYes——
capability_locked_atstring or null—date-timeYesYes——
capability_summarystring——NoYes——
configobjectKonfigGoogleRead or KonfigGoogleAppend—NoYes——
created_atstring—date-timeNoYes——
created_bystring——NoYes——
descriptionstring——NoYes——
idstring——NoYes——
namestring——NoYes——
statusstring——NoYes"ready", "unavailable"—
typestring——NoYes"google_sheets"—
updated_atstring—date-timeNoYes——

Response example

Response body JSON
{
  "id": "string",
  "name": "string",
  "description": "string",
  "type": "webhook",
  "config": {
    "url": "string"
  },
  "created_by": "string",
  "created_at": "2026-01-01T00:00:00Z",
  "updated_at": "2026-01-01T00:00:00Z"
}

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.

StatusCodeDescription
401unauthenticatedAuthentication is missing, invalid, or revoked.
403forbiddenThe authenticated caller does not have access to this operation.
404not_foundThe requested workspace resource was not found.
422validation_failedThe request did not pass field or business validation.
On this page
  1. Endpoint
  2. Authentication
  3. Parameters
  4. Request body
  5. application/json request schema
  6. Example
  7. Responses
  8. 4XX application/json response schema
  9. 200 application/json response schema
  10. Response example
  11. Errors
  12. Related operations