Skip to content
OperadeDocs

Search documentation

Type to search documentation.

Documentation
Copy page
Open raw Markdown

Clone a tool

Clone a workspace tool as an unlocked tool without attaching it to an Agent.

Endpoint

POST/api/v1/workspaces/{workspace_id}/tools/{tool_id}/clone

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

This operation has no request body.

Example

cURL
curl --request POST 'https://operade.ai/api/v1/workspaces/ws_demo/tools/tool_demo/clone' \
  --cookie 'cx_session=YOUR_SESSION_COOKIE' \
  --header 'X-CX-Request: 1'

Responses

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

4XX application/json response schema

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

201 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": "tool_copy",
  "name": "find_customer_copy",
  "description": "Search one customer by ID.",
  "type": "google_sheets",
  "status": "ready",
  "capability_summary": "Search Customers by customer_id and return name and status.",
  "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
  },
  "created_by": "usr_example",
  "created_at": "2026-08-23T00:00:00Z",
  "updated_at": "2026-08-23T00:00:00Z",
  "capability_locked_at": null
}

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.
On this page
  1. Endpoint
  2. Authentication
  3. Parameters
  4. Request body
  5. Example
  6. Responses
  7. 4XX application/json response schema
  8. 201 application/json response schema
  9. Response example
  10. Errors
  11. Related operations