Flujos de proceso
Diagramas de procesos multifuncionales — terminadores de inicio/fin, pasos manuales, diamantes de decisión, referencias de SOP y carriles de departamento conectados con aristas.
GET/api/v1/process-flows
Lista los flujos de proceso en el espacio de trabajo, paginados.
Parámetros de consulta
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| limit | integer | opcional | Por defecto 100, máximo 500. |
| cursor | ISO 8601 | opcional | Cursor de paginación. |
Ejemplo de respuesta
{
"data": [
{
"id": "...",
"title": "Solicitud de función del cliente — ejemplo",
"status": "active",
"createdAt": "...",
"updatedAt": "..."
}
],
"nextCursor": null
}GET/api/v1/process-flows/:id
Devuelve un único flujo con sus nodos y aristas incluidos.
Ejemplo de respuesta
{
"data": {
"id": "10a7fb55-aac3-4a17-8beb-8074c1d31697",
"title": "Solicitud de función del cliente — ejemplo",
"description": "Flujo de ejemplo multifuncional.",
"status": "active",
"createdAt": "2026-05-03T04:30:00.000Z",
"updatedAt": "2026-05-03T04:30:00.000Z",
"nodes": [
{
"id": "...",
"nodeType": "start",
"label": "Solicitud presentada",
"positionX": 60,
"positionY": 200
},
{
"id": "...",
"nodeType": "decision",
"label": "¿En alcance?",
"positionX": 420,
"positionY": 340
}
],
"edges": [
{
"id": "...",
"sourceNodeId": "...",
"targetNodeId": "...",
"edgeType": "conditional",
"label": "Sí"
}
]
}
}Objeto Flow
Campos
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| id | uuid | opcional | — |
| title | string | opcional | — |
| description | string | null | opcional | — |
| status | string | opcional | draft | active | archived |
| createdAt | ISO 8601 | opcional | — |
| updatedAt | ISO 8601 | opcional | — |
| nodes | FlowNode[] | opcional | Solo incluido en el endpoint de detalle. |
| edges | FlowEdge[] | opcional | Solo incluido en el endpoint de detalle. |
FlowNode
Campos
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| id | uuid | opcional | — |
| nodeType | string | opcional | start | end | manual_step | decision | sop_reference | department_lane |
| label | string | null | opcional | — |
| sopId | uuid | null | opcional | Establecido en nodos sop_reference. |
| orgNodeId | uuid | null | opcional | Establecido en nodos department_lane. |
| positionX | number | opcional | — |
| positionY | number | opcional | — |
| metadata | object | opcional | Libre (color, sugerencias, etc.). |
FlowEdge
Campos
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| id | uuid | opcional | — |
| sourceNodeId | uuid | opcional | — |
| targetNodeId | uuid | opcional | — |
| edgeType | string | opcional | default | conditional | error |
| label | string | null | opcional | Frecuentemente "Sí" / "No" en aristas condicionales. |
| sourceHandle | string | opcional | Por defecto "out". Los nodos de decisión usan "yes" / "no". |
| targetHandle | string | opcional | Por defecto "in". |
Ejemplo de código — construir un flujo
# Listar flujos
curl https://sopflow.io/api/v1/process-flows \
-H "Authorization: Bearer sk_live_YOUR_KEY"
# Crear un nuevo flujo
curl -X POST https://sopflow.io/api/v1/process-flows \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"Onboarding","status":"draft"}'
# Agregar un nodo de inicio
curl -X POST https://sopflow.io/api/v1/process-flows/FLOW_ID/nodes \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"nodeType":"start","label":"Comenzar","positionX":0,"positionY":0}'Mutando flujos
Todas las mutaciones requieren alcance write. Construir un flujo usa tres recursos: el flujo en sí, sus nodos y sus aristas. Pasa una clave Idempotency-Key en POSTs para que los reintentos sean seguros.
POST/api/v1/process-flows
Crea un flujo vacío.
Campos del cuerpo
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| title | string | obligatorio | — |
| description | string | null | opcional | — |
| status | string | opcional | draft (por defecto) | active | archived |
Ejemplo de respuesta
{ "data": { "id": "...", "title": "Onboarding", "status": "draft" } }PATCH/api/v1/process-flows/:id
Actualiza los metadatos del flujo. Los nodos y aristas se gestionan a través de sus propios endpoints.
Ejemplo de respuesta
{ "data": { "id": "...", "title": "Renombrado", "status": "active" } }DELETE/api/v1/process-flows/:id
Elimina un flujo. Se propaga en cascada a los nodos y aristas.
Ejemplo de respuesta
HTTP/1.1 204 No ContentNodos
POST/api/v1/process-flows/:id/nodes
Agrega un nodo a un flujo.
Campos del cuerpo
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| nodeType | string | obligatorio | start | end | manual_step | decision | sop_reference | department_lane |
| label | string | null | opcional | — |
| positionX | number | opcional | Por defecto 0. |
| positionY | number | opcional | Por defecto 0. |
| sopId | uuid | null | opcional | Requerido cuando nodeType=sop_reference. |
| orgNodeId | uuid | null | opcional | Anclaje opcional (usado por department_lane). |
| metadata | object | opcional | — |
Ejemplo de respuesta
{ "data": { "id": "...", "nodeType": "start", "label": "Comenzar" } }PATCH/api/v1/process-flow-nodes/:id
Actualiza la etiqueta, posición o metadatos de un nodo.
Ejemplo de respuesta
{ "data": { "id": "...", "label": "Nueva etiqueta" } }DELETE/api/v1/process-flow-nodes/:id
Elimina un nodo. Las aristas conectadas se propagan en cascada.
Ejemplo de respuesta
HTTP/1.1 204 No ContentAristas
POST/api/v1/process-flows/:id/edges
Conecta dos nodos.
Campos del cuerpo
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| sourceNodeId | uuid | obligatorio | — |
| targetNodeId | uuid | obligatorio | — |
| edgeType | string | opcional | default | conditional | error |
| label | string | null | opcional | — |
| sourceHandle | string | opcional | Por defecto "out". Usa "yes" / "no" desde nodos de decisión. |
| targetHandle | string | opcional | Por defecto "in". |
Ejemplo de respuesta
{ "data": { "id": "...", "edgeType": "conditional", "label": "Sí" } }PATCH/api/v1/process-flow-edges/:id
Actualiza la etiqueta o tipo de una arista.
Ejemplo de respuesta
{ "data": { "id": "...", "edgeType": "error" } }DELETE/api/v1/process-flow-edges/:id
Elimina una arista.
Ejemplo de respuesta
HTTP/1.1 204 No Content