participantIds.
Las conexiones enrutan los leads entrantes hacia un pool según su origen — un webhook genérico, una página/formulario/anuncio/campaña de meta, un proveedor de automation (Zapier, Make, n8n) o un workflow. Cuando llega un lead, FlowEstate elige el pool activo cuya conexión coincide con el origen del lead y lo asigna a través de la rotación de ese pool.
Cada endpoint en esta página opera dentro del tenant de la organización que llama — no puedes leer ni escribir pools de round robin de otra organización con la misma key.
Listar pools
round-robin:read. Lista los pools de round robin de la organización, del más reciente al más antiguo.
Query parameters
| Parámetro | Tipo | Notas |
|---|---|---|
limit | number | 1..100, default 50. |
offset | number | Default 0. |
query | string | Coincidencia sin distinción de mayúsculas sobre el nombre del pool. |
status | enum | all (default), active o inactive. |
Request
Response 200
nextParticipantOrder es el valor de orden (base 1) del participante que recibirá el siguiente lead. participantCount cuenta solo a los participantes activos.
Crear un pool
round-robin:write
Request body
| Campo | Tipo | Notas |
|---|---|---|
name | string | Requerido, 1..200 caracteres. |
participantIds | string[] | Requerido, al menos un UUID. El orden del arreglo se convierte en el orden de rotación. Cada id debe ser miembro de la organización; sin duplicados. |
followerUserId | string | UUID opcional. Un miembro que sigue la actividad del pool. Debe ser miembro de la organización. |
goalTotalDeals | number | Opcional, entero ≥ 0. |
goalWonDeals | number | Opcional, entero ≥ 0. |
isActive | boolean | Default true. Solo los pools activos asignan leads. |
assignInboundLeads | boolean | Default true. Asignar leads que llegan desde conexiones (Meta, webhook, automation, workflow). |
assignManualLeads | boolean | Default false. Asignar leads creados manualmente (source: "manual"). |
emailNotificationsEnabled | boolean | Default false. Enviar email al participante asignado en cada asignación. |
connections | object[] | Default []. Ver objeto de conexión. |
Objeto de conexión
Cada entrada enconnections (y el body de POST .../connections) tiene esta forma:
| Campo | Tipo | Notas |
|---|---|---|
source | enum | Default webhook. Uno de RoundRobinConnectionSource: webhook, meta, automation, workflow. |
provider | enum | RoundRobinConnectionProvider: custom, make, n8n, zapier. Requerido cuando source es automation. |
sourceKey | string | Opcional, 1..200 caracteres. Clave libre para coincidir con un origen personalizado. |
metaPageId, metaFormId, metaAdId, metaCampaignId | string | Opcionales, 1..200 caracteres cada uno. Se usan para coincidir con leads de meta. |
utmCampaign | string | Opcional, 1..200 caracteres. |
workflowId | string | Opcional, 1..200 caracteres. Requerido cuando source es workflow. |
Solo un pool por organización puede tener la conexión genérica
webhook, y la integración de webhook universal de leads de la organización debe estar habilitada. Las conexiones duplicadas (idénticas campo por campo) se rechazan.Request
Response 201
Errores comunes
400 VALIDATION_ERROR— body inválido (participantIdsvacío, conexión de automation sinprovider, conexión de workflow sinworkflowId, etc.).400 BAD_REQUEST— un participante o follower no es miembro de la organización, participantes duplicados o conexiones duplicadas.400 BAD_REQUEST— se solicitó una conexiónwebhookpero la integración de webhook universal de leads no está habilitada.409 CONFLICT— la conexiónwebhookuniversal ya está asignada a otro pool.
Obtener un pool
round-robin:read. Devuelve el pool con sus participantes ordenados, sus conexiones, un resumen settings y las estadísticas de asignación stats. 404 NOT_FOUND si el pool no existe o pertenece a otra organización.
Response 200
order ascendente).
Actualizar un pool
round-robin:write. El body es el de crear pero sin la obligatoriedad de name — todos los campos son opcionales; envía solo lo que quieras cambiar. 404 NOT_FOUND si el pool no existe o pertenece a otra organización.
| Campo | Tipo | Notas |
|---|---|---|
name | string | 1..200 caracteres. |
isActive | boolean | Activar o desactivar el pool. Los pools desactivados dejan de recibir leads. |
participantIds | string[] | Al menos un UUID. Reemplaza toda la lista de participantes; el orden del arreglo se convierte en el nuevo orden de rotación y reinicia el puntero al primer participante. |
followerUserId | string | null | UUID o null para limpiar. |
goalTotalDeals | number | null | Entero ≥ 0 o null. |
goalWonDeals | number | null | Entero ≥ 0 o null. |
assignInboundLeads | boolean | — |
assignManualLeads | boolean | — |
emailNotificationsEnabled | boolean | — |
connections | object[] | Reemplaza toda la lista de conexiones. Ver objeto de conexión. |
Request
Reordenar la rotación y desactivar el pool:Response 200
Errores comunes
400 VALIDATION_ERROR/400 BAD_REQUEST— mismas reglas de validación que crear (membresía, duplicados, requisitos de conexión).409 CONFLICT— la conexiónwebhookuniversal ya pertenece a otro pool.
Eliminar un pool
round-robin:write. Elimina el pool junto con sus participantes, conexiones e historial de asignaciones. 404 NOT_FOUND si el pool no existe o pertenece a otra organización.
Response 200
Agregar una conexión
round-robin:write. Agrega una única conexión de enrutamiento a un pool existente. El body es el objeto de conexión. 404 NOT_FOUND si el pool no existe o pertenece a otra organización.
Request
Response 201
Errores comunes
400 VALIDATION_ERROR— conexión de automation sinprovider, o conexión de workflow sinworkflowId.400 BAD_REQUEST— se solicitó una conexiónwebhookpero la integración de webhook universal de leads no está habilitada.409 CONFLICT— ya existe una conexión idéntica en este pool, o la conexiónwebhookuniversal pertenece a otro pool.
Eliminar una conexión
round-robin:write. 404 NOT_FOUND si la conexión no existe en ese pool o pertenece a otra organización.
Response 200
Listar asignaciones
round-robin:read. Lista el historial de asignaciones del pool, de la más reciente a la más antigua.
Query parameters
| Parámetro | Tipo | Notas |
|---|---|---|
limit | number | 1..100, default 50. |
offset | number | Default 0. |
source | enum | Opcional. Filtrar por RoundRobinAssignmentSource: manual, meta, webhook, whatsapp, system. |
Response 200
turnOrder es el valor de orden del participante al momento de la asignación. metadata es una cadena codificada en JSON (o null) que describe cómo el lead coincidió con una conexión.
Asignar un lead
round-robin:write. Pasa un lead por la rotación por puntero del pool activo que coincide, lo asigna al siguiente participante elegible y avanza el puntero.
Request body
| Campo | Tipo | Notas |
|---|---|---|
leadId | string | UUID requerido. El lead debe pertenecer a tu organización. |
source | enum | Default system. Uno de RoundRobinAssignmentSource: manual, meta, webhook, whatsapp, system. Un origen manual se enruta por pools con assignManualLeads habilitado; el resto de los orígenes se enrutan por pools con assignInboundLeads habilitado. |
Request
Response 200
Cuando se asigna un participante:El lead solo se asigna si actualmente no tiene responsable. Un lead que ya tiene dueño devuelve
{ "assigned": false } y queda intacto.Errores comunes
400 VALIDATION_ERROR—leadIdno es un UUID, osourceno es un valor conocido.404 NOT_FOUND— el lead no existe o pertenece a otra organización.