Saltar al contenido

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

NombreTipoObligatorioDescripción
limitintegeropcionalPor defecto 100, máximo 500.
cursorISO 8601opcionalCursor de paginación.

Ejemplo de respuesta

Json
{
  "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

Json
{
  "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

NombreTipoObligatorioDescripción
iduuidopcional—
titlestringopcional—
descriptionstring | nullopcional—
statusstringopcionaldraft | active | archived
createdAtISO 8601opcional—
updatedAtISO 8601opcional—
nodesFlowNode[]opcionalSolo incluido en el endpoint de detalle.
edgesFlowEdge[]opcionalSolo incluido en el endpoint de detalle.

FlowNode

Campos

NombreTipoObligatorioDescripción
iduuidopcional—
nodeTypestringopcionalstart | end | manual_step | decision | sop_reference | department_lane
labelstring | nullopcional—
sopIduuid | nullopcionalEstablecido en nodos sop_reference.
orgNodeIduuid | nullopcionalEstablecido en nodos department_lane.
positionXnumberopcional—
positionYnumberopcional—
metadataobjectopcionalLibre (color, sugerencias, etc.).

FlowEdge

Campos

NombreTipoObligatorioDescripción
iduuidopcional—
sourceNodeIduuidopcional—
targetNodeIduuidopcional—
edgeTypestringopcionaldefault | conditional | error
labelstring | nullopcionalFrecuentemente "Sí" / "No" en aristas condicionales.
sourceHandlestringopcionalPor defecto "out". Los nodos de decisión usan "yes" / "no".
targetHandlestringopcionalPor 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

NombreTipoObligatorioDescripción
titlestringobligatorio—
descriptionstring | nullopcional—
statusstringopcionaldraft (por defecto) | active | archived

Ejemplo de respuesta

Json
{ "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

Json
{ "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

Json
HTTP/1.1 204 No Content

Nodos

POST/api/v1/process-flows/:id/nodes

Agrega un nodo a un flujo.

Campos del cuerpo

NombreTipoObligatorioDescripción
nodeTypestringobligatoriostart | end | manual_step | decision | sop_reference | department_lane
labelstring | nullopcional—
positionXnumberopcionalPor defecto 0.
positionYnumberopcionalPor defecto 0.
sopIduuid | nullopcionalRequerido cuando nodeType=sop_reference.
orgNodeIduuid | nullopcionalAnclaje opcional (usado por department_lane).
metadataobjectopcional—

Ejemplo de respuesta

Json
{ "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

Json
{ "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

Json
HTTP/1.1 204 No Content

Aristas

POST/api/v1/process-flows/:id/edges

Conecta dos nodos.

Campos del cuerpo

NombreTipoObligatorioDescripción
sourceNodeIduuidobligatorio—
targetNodeIduuidobligatorio—
edgeTypestringopcionaldefault | conditional | error
labelstring | nullopcional—
sourceHandlestringopcionalPor defecto "out". Usa "yes" / "no" desde nodos de decisión.
targetHandlestringopcionalPor defecto "in".

Ejemplo de respuesta

Json
{ "data": { "id": "...", "edgeType": "conditional", "label": "Sí" } }
PATCH/api/v1/process-flow-edges/:id

Actualiza la etiqueta o tipo de una arista.

Ejemplo de respuesta

Json
{ "data": { "id": "...", "edgeType": "error" } }
DELETE/api/v1/process-flow-edges/:id

Elimina una arista.

Ejemplo de respuesta

Json
HTTP/1.1 204 No Content

Separar diseño y ejecución

Lee flujo, nodos y conexiones como diseño del proceso. Conserva IDs y verifica que cada conexión apunta a un nodo del flujo previsto.

Un diagrama conectado no demuestra ejecución. Mantén registros de trabajo separados y relaciónalos de forma explícita.