FruxonDocs
IntegrationsTools

Updates an existing Python script tool.

Replaces the Python-script tool definition at `(integration, tool)`; the script body and its input schema are validated together before the write commits, so a malformed script or schema returns 400 without modifying the stored definition. This is the script-tool counterpart to `PUT /integrations/{integration}/tools/{tool}` and must be used for tools whose execution is sandboxed Python rather than an HTTP call.

PUT
/v1/tenants/{tenant}/integrations/{integration}/tools/{tool}:python
AuthorizationBearer <token>

JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.

In: header

Path Parameters

integration*string

The integration identifier.

tool*string

The unique identifier of the AI Tool.

tenant*string

The tenant identifier

The updated AI Tool data.

descriptor*
isInternal?boolean

When true, hides this tool from listing APIs. Used for internal platform tools.

isDeprecated?boolean

When true, the tool has been superseded: it is left out of everything an author or an LLM browses or searches to pick a tool (the tool listing, catalog search and describe, integration tool counts, the skill generator's tool summary), so nothing new attaches it. Unlike Tool.IsInternal it still resolves wherever a tool is named explicitly: a listing by ids (how the editor renders an agent's attached tools) and the plan builder, so revisions that already call it keep running and keep editing until a sweep moves them off it.

isAsync?boolean

True when the tool completes asynchronously. The run can suspend while the operation completes. Defaults to false; currently set only by supported predefined asynchronous tools.

createdAt?integer
Formatint64
id?string

Tool id can consist of only letters, numbers, underscores and hyphens.

modifiedAt?integer
Formatint64
integrationId?string

Integration

displayName?string|null
description?string
toolType?string

Category of a tool's execution backend. Serialized as an UPPER_SNAKE string.

Value in"UNSPECIFIED" | "API" | "PREDEFINED" | "AGENT_TOOL" | "PYTHON_SCRIPT" | "LLM_BUILT_IN" | "MCP" | "AGENT_TASK"
actionType?string

Classifies the tool's side-effect behavior: read-only, reversible, or irreversible. Used to inform users and agents about the risk level of executing this tool.

Value in"UNSPECIFIED" | "READ_ONLY" | "REVERSIBLE" | "IRREVERSIBLE"
definitionVersion?integer

Counts the writes that changed what this tool does (Tools.ToolDefinitionFingerprint): its request, script, MCP tool or parameters, not its name or description. A Tools.ToolActionTypeReview names the version it approved, so any such change voids it. A concurrency token on workspace tools: two writes made from the same version cannot both land, so a review can never end up attached to a definition its reviewer did not see.

Formatint32
actionTypeReview?

The last explicit review of Tool.ActionType by a signed-in person, or null if there has been none. Whether it still applies is Tool.ActionTypeReviewState. Always null on a built-in tool, whose classification is written in this repository instead.

messagingRole?string

Whether this tool delivers a message into a participant's live conversation channel — set to ToolMessagingRole.ChannelSend for the raw channel senders (Telegram/Slack/ Discord/WhatsApp/SMS). Drives the channel-send withhold on orchestrator dialogue runs.

Value in"UNSPECIFIED" | "CHANNEL_SEND"
parametersMetadata?
authSettings?

Authentication settings for a tool — whether it supports OAuth and, if so, the OAuth scope sets it can request.

[key: string]?never

Response Body

curl -X PUT "https://api.fruxon.com/v1/tenants/string/integrations/string/tools/string:python" \  -H "Content-Type: application/json" \  -d '{    "descriptor": {}  }'
{
  "descriptor": {
    "apiTool": {
      "headers": {},
      "httpMethod": "string",
      "url": "string",
      "queryParameters": {},
      "body": "string",
      "bodyContentType": "string",
      "formParameters": {},
      "resultType": "STRING",
      "resultTransformExpression": "string",
      "pagination": {
        "cursorPath": "string",
        "hasMorePath": "string",
        "offset": null,
        "linkHeader": null
      },
      "successStatusCodes": [
        0
      ],
      "multipart": {
        "parts": []
      },
      "timeoutMs": 0,
      "responseSchema": null
    },
    "predefinedTool": {
      "resultType": "STRING"
    },
    "mcpTool": {
      "serverUrl": "string",
      "mcpToolName": "string",
      "annotations": {
        "readOnlyHint": null,
        "destructiveHint": null,
        "idempotentHint": null,
        "openWorldHint": null
      },
      "resultType": "STRING"
    },
    "codeTool": {
      "code": "string",
      "timeoutSeconds": 0,
      "packages": [
        "string"
      ],
      "resultType": "STRING"
    }
  },
  "isInternal": false,
  "isDeprecated": false,
  "isAsync": false,
  "createdAt": 0,
  "id": "string",
  "modifiedAt": 0,
  "integrationId": "string",
  "displayName": "string",
  "description": "string",
  "toolType": "API",
  "isModifiable": true,
  "actionType": "READ_ONLY",
  "definitionVersion": 0,
  "actionTypeReview": {
    "actionType": "READ_ONLY",
    "definitionVersion": 0,
    "reviewedAt": 0,
    "reviewedBy": "string"
  },
  "actionTypeReviewState": "REVIEWED",
  "messagingRole": "CHANNEL_SEND",
  "resultType": "STRING",
  "parametersMetadata": [
    {
      "name": "string",
      "index": 0,
      "type": "STRING",
      "typeName": "STRING",
      "integerRange": {
        "min": 0,
        "max": 0
      },
      "floatRange": {
        "min": 0,
        "max": 0
      },
      "options": [],
      "asset": {
        "providers": null,
        "contentTypes": null,
        "vectorized": false
      },
      "displayName": "string",
      "description": "string",
      "required": false,
      "secret": false,
      "secretResolvable": false,
      "defaultValue": "string",
      "jsonSchema": null,
      "minLength": 0,
      "maxLength": 0,
      "pattern": "string",
      "validator": "string",
      "uiHint": "CODE",
      "tableHint": {
        "rowKey": "string",
        "readOnlyColumns": [],
        "maxRows": null
      },
      "rules": []
    }
  ],
  "authSettings": {
    "supportsOAuth": false,
    "oAuth": [
      {
        "scopeSize": 0,
        "scopes": [],
        "userScopes": [],
        "allScopes": [],
        "requiresResourceAuth": false,
        "successfulOAuthRedirect": "string"
      }
    ]
  }
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}
Empty
Empty
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}