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

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

Agrega o edita los statuses del funnel y los campos personalizados de un agente. Las filas se **upsertean por `key`**: una key desconocida se inserta, una key existente se actualiza. Este endpoint nunca elimina — quitar un status o campo sigue siendo una acción deliberada del dashboard, así ningún lead que esté sentado en un status queda huérfano.

## Parámetros de Ruta

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

## Cuerpo de la Solicitud

Provee `statuses`, `fields`, o ambos.

| Campo      | Tipo  | Requerido | Descripción                                         |
| ---------- | ----- | --------- | --------------------------------------------------- |
| `statuses` | array | No        | Statuses del funnel a upsertear (ver forma abajo)   |
| `fields`   | array | No        | Campos personalizados a upsertear (ver forma abajo) |

### Forma de `statuses[]`

| Campo         | Tipo    | Requerido | Descripción                                                                                                                                                 |
| ------------- | ------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `key`         | string  | **Sí**    | Identificador estable. Si coincide con un status existente lo actualiza, si no inserta uno nuevo                                                            |
| `label`       | string  | **Sí**    | Etiqueta visible (`name` también es aceptado)                                                                                                               |
| `is_initial`  | boolean | No        | Marca el status de entrada del funnel                                                                                                                       |
| `is_terminal` | boolean | No        | Marca un status de cierre del funnel                                                                                                                        |
| `sort_order`  | integer | No        | Al insertar, por defecto es el índice del array agregado después del máximo actual. Se ignora al actualizar — reordenar statuses existentes no se hace aquí |

### Forma de `fields[]`

| Campo        | Tipo    | Requerido | Descripción                                                                                                                               |
| ------------ | ------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `key`        | string  | **Sí**    | Identificador estable                                                                                                                     |
| `label`      | string  | **Sí**    | Etiqueta visible                                                                                                                          |
| `type`       | string  | No        | Uno de: `text`, `number`, `date`, `datetime`, `boolean`, `select`, `multiselect`, `email`, `phone`, `url`, `currency`. Por defecto `text` |
| `required`   | boolean | No        | Si el agente debe recolectar este campo antes de avanzar. Por defecto `false`                                                             |
| `sort_order` | integer | No        | Mismo comportamiento de inserción/actualización que statuses                                                                              |

## Respuestas

### `200` — Actualizado

```json theme={null}
{
  "success": true,
  "workflow_id": "123e4567-e89b-12d3-a456-426614174000",
  "statuses_upserted": 2,
  "fields_upserted": 1
}
```

`statuses_upserted` / `fields_upserted` solo aparecen para los arrays que enviaste.

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

```json theme={null}
{
  "error": "Invalid input",
  "message": "Provide statuses and/or fields arrays"
}
```

También se devuelve como `"each status needs a key and a label"` o `"each field needs a key and a label"`.

### `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"
}
```

### `500` — Error interno del servidor
