> ## 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.

# Crear Workflow Tool

<span class="badge--post">POST</span> <code class="endpoint-url">/workflows/:id/tools</code>

Agrega una tool HTTP personalizada que el agente puede llamar — tu propio endpoint, descrito como se describe un function call de un LLM. Gatéala a stages específicos del funnel con [Configurar Stage Gate](/docs/es/api/workflow-tools/set-tool-stage-gate).

## Parámetros de Ruta

| Parámetro | Tipo          | Requerido | Descripción   |
| --------- | ------------- | --------- | ------------- |
| `id`      | string (uuid) | **Sí**    | ID del agente |

## Cuerpo de la Solicitud

| Campo                   | Tipo      | Requerido | Descripción                                                                                                                       |
| ----------------------- | --------- | --------- | --------------------------------------------------------------------------------------------------------------------------------- |
| `name`                  | string    | **Sí**    | snake\_case, coincidiendo con `^[a-z][a-z0-9_]*$`. Inmutable después de creada                                                    |
| `description`           | string    | **Sí**    | Qué hace la tool y cuándo debería llamarla el agente                                                                              |
| `url`                   | string    | **Sí**    | Endpoint que llama la tool                                                                                                        |
| `method`                | string    | No        | `GET`, `POST`, `PUT`, `PATCH`, o `DELETE`. Por defecto `POST`                                                                     |
| `parameters`            | object    | No        | Objeto estilo JSON-schema que describe los argumentos de llamada de la tool. Por defecto `{ "type": "object", "properties": {} }` |
| `headers`               | object    | No        | Headers estáticos enviados en cada llamada, ej. `{ "Authorization": "Bearer ..." }`                                               |
| `query_parameters`      | object    | No        | Query params estáticos enviados en cada llamada                                                                                   |
| `timeout_ms`            | integer   | No        | Limitado entre 1,000 y 120,000. Por defecto `10000`                                                                               |
| `available_in_statuses` | string\[] | No        | Keys de status del funnel donde se ofrece esta tool. Omite o pon `null` para todos los statuses                                   |
| `auto_run_on_entry`     | boolean   | No        | Correr automáticamente cuando un lead entra a un status elegible. Por defecto `false`                                             |
| `call_once`             | boolean   | No        | Permitir solo una llamada por lead. Por defecto `false`                                                                           |
| `is_active`             | boolean   | No        | Por defecto `true`                                                                                                                |

## Respuestas

### `201` — Tool creada

```json theme={null}
{
  "success": true,
  "tool": {
    "id": "9a1b2c3d-0000-4000-8000-000000000001",
    "name": "check_availability",
    "description": "Checks open slots on the sales calendar for a given day",
    "method": "GET",
    "url": "https://api.acme.com/availability",
    "is_active": true,
    "available_in_statuses": null,
    "auto_run_on_entry": false,
    "call_once": false,
    "sort_order": 0
  }
}
```

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

```json theme={null}
{
  "error": "Invalid input",
  "message": "name must be snake_case (^[a-z][a-z0-9_]*$)"
}
```

También se devuelve como `"description is required"`, `"url is required"`, o `"method must be one of: GET, POST, PUT, PATCH, DELETE"`.

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

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

### `404` — No encontrado

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

### `409` — Conflicto

```json theme={null}
{
  "error": "Conflict",
  "message": "A tool named \"check_availability\" already exists in this workflow"
}
```

### `500` — Error interno del servidor
