> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getnexor.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Actualizar Client Tool

<span class="badge--patch">PATCH</span> <code class="endpoint-url">/client-tools/:id</code>

Edita una tool del catálogo. Cualquier cambio en `description`, `url`, `method`, `parameters`, `headers`, `query_parameters`, o `timeout_ms` se propaga a todos los agentes que hayan asignado (heredado) esta tool, junto con `is_active`. Los campos de voz/runtime (`speak_during_execution`, `speak_after_execution`, `response_variables`, `execution_message_type`, `execution_message_description`) y `sort_order`/`llm_response_fields` se copian una sola vez al asignar, pero **no** se propagan en ediciones posteriores — quedan con alcance por workflow.

## Parámetros de Ruta

| Parámetro | Tipo          | Requerido | Descripción          |
| --------- | ------------- | --------- | -------------------- |
| `id`      | string (uuid) | **Sí**    | ID de la client tool |

## Cuerpo de la Solicitud

Cualquier subconjunto de los campos abajo. Se requiere al menos uno.

| Campo                           | Tipo      | Requerido | Descripción                                                                 |
| ------------------------------- | --------- | --------- | --------------------------------------------------------------------------- |
| `description`                   | string    | No        | No vacío, máximo 1024 caracteres. No se puede limpiar a null/vacío          |
| `url`                           | string    | No        | No vacío. No se puede limpiar a null/vacío                                  |
| `method`                        | string    | No        | `GET`, `POST`, `PUT`, `PATCH`, o `DELETE`                                   |
| `parameters`                    | object    | No        | Objeto estilo JSON-schema que describe los argumentos de llamada de la tool |
| `headers`                       | object    | No        | Headers estáticos enviados en cada llamada                                  |
| `query_parameters`              | object    | No        | Query params estáticos enviados en cada llamada                             |
| `timeout_ms`                    | integer   | No        | Limitado entre 1,000 y 120,000                                              |
| `speak_during_execution`        | boolean   | No        | Con alcance por workflow después de asignar — no se propaga                 |
| `speak_after_execution`         | boolean   | No        | Con alcance por workflow después de asignar — no se propaga                 |
| `response_variables`            | object    | No        | Con alcance por workflow después de asignar — no se propaga                 |
| `execution_message_type`        | string    | No        | Con alcance por workflow después de asignar — no se propaga                 |
| `execution_message_description` | string    | No        | Con alcance por workflow después de asignar — no se propaga                 |
| `llm_response_fields`           | string\[] | No        | Solo de catálogo, nunca se copia ni se propaga                              |
| `is_active`                     | boolean   | No        | Se propaga a las réplicas heredadas                                         |
| `sort_order`                    | integer   | No        | Solo de catálogo, nunca se copia ni se propaga                              |

`name` no se puede cambiar aquí — elimina y vuelve a crear la tool para renombrarla.

## Respuestas

### `200` — Actualizada

```json theme={null}
{
  "success": true,
  "tool": {
    "id": "7c1b2c3d-0000-4000-8000-000000000002",
    "name": "check_subscription",
    "description": "Checks whether the lead has an active subscription and its plan tier",
    "url": "https://api.acme.com/subscriptions/status",
    "method": "GET",
    "timeout_ms": 10000
  },
  "propagated_workflow_tools": 3
}
```

`propagated_workflow_tools` es la cantidad de filas heredadas en `workflow_tools` actualizadas por esta edición (0 si la actualización solo tocó campos no propagados).

Ver [Listar Client Tools](/docs/es/api/client-tools/list-client-tools) para la referencia completa de campos de ClientTool.

### `400` — Error de validación

```json theme={null}
{
  "error": "Invalid input",
  "message": "name is immutable (the agent references it); delete + recreate to rename"
}
```

También se devuelve como `"description must be a non-empty string"`, `"description must be at most 1024 characters"`, `"url must be a non-empty string"`, `"method must be one of: GET, POST, PUT, PATCH, DELETE"`, `"timeout_ms must be a number"`, o `"Nothing to update"`.

### `401` — Error de autenticación

Ver [Autenticación](/docs/es/api/authentication).

### `404` — No encontrado

```json theme={null}
{
  "error": "Not found",
  "message": "Tool not found"
}
```

### `500` — Error interno del servidor
