/workflows/:id/structure
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
Proveestatuses, 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
statuses_upserted / fields_upserted solo aparecen para los arrays que enviaste.
400 — Error de validación
"each status needs a key and a label" o "each field needs a key and a label".