Skip to main content
POST
http://api.gu1.ai
/
rules
Crear Regla
curl --request POST \
  --url http://api.gu1.ai/rules \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "name": "<string>",
  "description": "<string>",
  "category": "<string>",
  "targetEntityTypes": [
    {}
  ],
  "conditions": {},
  "actions": [
    {}
  ],
  "enabled": true,
  "priority": 123,
  "score": 123,
  "status": "<string>",
  "evaluationMode": "<string>",
  "riskMatrixId": "<string>",
  "countries": [
    {}
  ],
  "scope": {},
  "tags": [
    {}
  ]
}
'
{
  "id": "<string>",
  "name": "<string>",
  "description": "<string>",
  "organizationId": "<string>",
  "status": "<string>",
  "enabled": true,
  "version": 123,
  "createdAt": "<string>",
  "createdBy": "<string>"
}

Descripción General

Crea una nueva regla para detección automatizada de riesgos, monitoreo de cumplimiento y prevención de fraude. Las reglas pueden evaluar entidades (personas, empresas), transacciones, relaciones y patrones de red utilizando lógica de condiciones flexible y acciones automatizadas.

Endpoint

POST http://api.gu1.ai/rules

Autenticación

Requiere una clave API válida en el encabezado de Authorization:
Authorization: Bearer YOUR_API_KEY

Cuerpo de la Solicitud

name
string
required
Nombre descriptivo para la regla
description
string
required
Descripción detallada de lo que detecta la regla
category
string
required
Categoría de la regla: kyc, kyb, aml, fraud, compliance, custom
targetEntityTypes
array
required
Array de tipos de entidad a los que aplica esta regla: ["person"], ["company"], ["transaction"], ["person", "company"]
conditions
object
required
Estructura de lógica de condiciones (ver Estructura de Condiciones a continuación)
actions
array
required
Array de acciones a ejecutar cuando las condiciones coincidan (ver Acciones a continuación)
enabled
boolean
default:"true"
Si la regla está habilitada
priority
number
default:"50"
Prioridad de la regla (1-100). Valores más altos = mayor prioridad
score
number
Puntaje de riesgo a asignar cuando la regla coincida (0-100). Usado en matrices de riesgo basadas en puntajes
status
string
default:"active"
Estado de la regla: draft, in_progress, in_review, active, shadow, archived, inactive
evaluationMode
string
default:"async"
Modo de evaluación: sync (inmediato) o async (procesamiento en segundo plano)
riskMatrixId
string
UUID de la matriz de riesgo para asociar esta regla
countries
array
Array de códigos de país ISO para restringir la ejecución de la regla: ["BR", "AR", "US"]
scope
object
Configuración de alcance adicional incluyendo ventanas temporales y disparadores
tags
array
Array de etiquetas para organizar reglas: ["high-risk", "pep", "sanctions"]

Estructura de Condiciones

Las reglas utilizan una estructura de condiciones anidadas con operadores lógicos:
{
  "operator": "AND" | "OR" | "NOT" | "XOR",
  "conditions": [
    {
      "id": "cond-unique-id",
      "type": "simple",
      "field": "enrichmentData.normalized.taxId",
      "operator": "eq",
      "value": "12.345.678/0001-90",
      "filters": [],
      "countryMetadata": {
        "countryCode": "BR",
        "confidence": 100,
        "manuallySet": true,
        "autoDetected": false,
        "reason": "Selected from BR enrichment fields"
      }
    }
  ]
}

Campos de Condiciones

  • operator: Operador lógico que conecta condiciones (AND, OR, NOT, XOR)
  • conditions: Array de objetos de condición (pueden estar anidados para lógica compleja)
  • id: Identificador único para la condición
  • type: Tipo de condición (simple, complex, array, object)
  • field: Ruta del campo a evaluar (ej., taxId, entityData.company.revenue, enrichmentData.normalized.sanctions.$.type)
  • operator: Operador de comparación (ver Operadores a continuación)
  • value: Valor con el que comparar
  • filters: Array de filtros para campos de array/objeto
  • countryMetadata: Metadatos específicos del país para la condición

Operadores

Operadores de Comparación

  • eq - Igual
  • neq - No igual
  • gt - Mayor que
  • gte - Mayor o igual que
  • lt - Menor que
  • lte - Menor o igual que

Operadores de Texto

  • contains - Contiene subcadena
  • notContains - No contiene subcadena
  • startsWith - Comienza con
  • endsWith - Termina con
  • regex - Coincide con expresión regular

Operadores de Array

  • in - El valor está en el array
  • notIn - El valor no está en el array
  • hasAny - Tiene alguno de los valores
  • hasAll - Tiene todos los valores

Operadores de Lista

  • inList - El valor existe en una lista de datos
  • notInList - El valor no existe en una lista de datos

Operadores de Existencia

  • exists - El campo existe
  • notExists - El campo no existe
  • isEmpty - El campo está vacío/nulo
  • isNotEmpty - El campo no está vacío/nulo

Operadores Booleanos

  • isTrue - El campo booleano es verdadero
  • isFalse - El campo booleano es falso

Sintaxis de Campos de Array

Para campos dentro de arrays, use el símbolo $:
{
  "field": "enrichmentData.normalized.sanctions.$.type",
  "operator": "in",
  "value": "terrorism",
  "filters": []
}
Esto evalúa si ALGÚN elemento en el array sanctions tiene type igual a "terrorism".

Filtros

Puede pre-filtrar elementos del array antes de la evaluación:
{
  "field": "enrichmentData.normalized.legalProceedings.$.amount",
  "operator": "gt",
  "value": 100000,
  "filters": [
    {
      "field": "status",
      "operator": "eq",
      "value": "active"
    }
  ]
}
Esto evalúa si ALGÚN proceso legal activo tiene un monto mayor a 100,000.

Acciones

Las reglas soportan múltiples tipos de acciones:

Crear Alerta

{
  "type": "createAlert",
  "createAlert": {
    "type": "FRAUD" | "COMPLIANCE" | "AML" | "KYC" | "OTHER",
    "title": "High Risk Transaction Detected",
    "description": "Transaction exceeds threshold",
    "severity": "LOW" | "MEDIUM" | "HIGH" | "CRITICAL",
    "recipients": ["user@example.com"]
  },
  "tags": ["high-value", "cross-border"]
}

Actualizar Estado de Entidad

{
  "type": "updateEntityStatus",
  "updateEntityStatus": {
    "status": "blocked",
    "reason": "Failed sanctions check"
  }
}

Enviar Notificación

{
  "type": "sendNotification",
  "sendNotification": {
    "channel": "email" | "sms" | "webhook",
    "recipients": ["compliance@company.com"],
    "message": "Urgent: High risk entity detected"
  }
}

Crear Caso

{
  "type": "createCase",
  "createCase": {
    "title": "PEP Investigation Required",
    "description": "Entity flagged as politically exposed person",
    "assignee": "user-uuid"
  }
}

Ejemplos de Solicitudes

Regla KYC Simple - Verificar Tax ID

curl -X POST http://api.gu1.ai/rules \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "CNPJ Blocklist Check",
    "description": "Block companies with specific CNPJ",
    "category": "kyb",
    "targetEntityTypes": ["company"],
    "enabled": true,
    "priority": 100,
    "score": 85,
    "conditions": {
      "operator": "AND",
      "conditions": [
        {
          "id": "cond-1",
          "type": "simple",
          "field": "enrichmentData.normalized.taxId",
          "operator": "eq",
          "value": "33.592.510/0001-54",
          "filters": [],
          "countryMetadata": {
            "countryCode": "BR",
            "confidence": 100,
            "manuallySet": true,
            "autoDetected": false,
            "reason": "Selected from BR enrichment fields"
          }
        }
      ]
    },
    "actions": [
      {
        "type": "createAlert",
        "createAlert": {
          "type": "COMPLIANCE",
          "title": "Blocklisted Company Detected",
          "description": "Company CNPJ found in blocklist",
          "severity": "CRITICAL",
          "recipients": ["compliance@company.com"]
        },
        "tags": ["blocklist", "high-priority"]
      },
      {
        "type": "updateEntityStatus",
        "updateEntityStatus": {
          "status": "blocked",
          "reason": "CNPJ in blocklist"
        }
      }
    ],
    "scope": {
      "type": "entity",
      "countries": ["BR"],
      "entityTypes": ["company"]
    },
    "status": "active",
    "evaluationMode": "sync"
  }'

Regla Compleja - Verificación de Sanciones con Múltiples Condiciones

curl -X POST http://api.gu1.ai/rules \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Terrorism Sanctions Check",
    "description": "Detect entities with terrorism-related sanctions",
    "category": "aml",
    "targetEntityTypes": ["person", "company"],
    "enabled": true,
    "priority": 100,
    "score": 95,
    "conditions": {
      "operator": "OR",
      "conditions": [
        {
          "id": "cond-1",
          "type": "simple",
          "field": "enrichmentData.normalized.sanctions.$.type",
          "operator": "in",
          "value": "terrorism",
          "filters": [],
          "countryMetadata": {
            "countryCode": "GLOBAL",
            "confidence": 100,
            "manuallySet": true,
            "autoDetected": false,
            "reason": "Global sanctions field"
          }
        },
        {
          "id": "cond-2",
          "type": "simple",
          "field": "enrichmentData.normalized.sanctioned",
          "operator": "isTrue",
          "value": true,
          "filters": []
        }
      ]
    },
    "actions": [
      {
        "type": "createAlert",
        "createAlert": {
          "type": "AML",
          "title": "Sanctions Match - Immediate Review Required",
          "description": "Entity matched terrorism sanctions list",
          "severity": "CRITICAL",
          "recipients": ["aml-team@company.com"]
        },
        "tags": ["sanctions", "terrorism", "critical"]
      },
      {
        "type": "updateEntityStatus",
        "updateEntityStatus": {
          "status": "blocked",
          "reason": "Terrorism sanctions match"
        }
      },
      {
        "type": "createCase",
        "createCase": {
          "title": "Sanctions Investigation Required",
          "description": "Entity flagged for terrorism-related sanctions",
          "assignee": "compliance-lead-uuid"
        }
      }
    ],
    "scope": {
      "type": "entity",
      "entityTypes": ["person", "company"]
    },
    "status": "active",
    "evaluationMode": "sync",
    "tags": ["sanctions", "aml", "critical"]
  }'

Regla de Monitoreo de Transacciones

curl -X POST http://api.gu1.ai/rules \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "High Value Transaction Alert",
    "description": "Alert on transactions over $50,000 USD",
    "category": "fraud",
    "targetEntityTypes": ["transaction"],
    "enabled": true,
    "priority": 80,
    "score": 70,
    "conditions": {
      "operator": "AND",
      "conditions": [
        {
          "id": "cond-1",
          "type": "simple",
          "field": "amountInUsd",
          "operator": "gt",
          "value": 50000,
          "filters": []
        },
        {
          "id": "cond-2",
          "type": "simple",
          "field": "status",
          "operator": "eq",
          "value": "PENDING",
          "filters": []
        }
      ]
    },
    "actions": [
      {
        "type": "createAlert",
        "createAlert": {
          "type": "FRAUD",
          "title": "High Value Transaction Detected",
          "description": "Transaction exceeds $50,000 threshold",
          "severity": "HIGH",
          "recipients": ["fraud-team@company.com"]
        },
        "tags": ["high-value", "pending-review"]
      }
    ],
    "scope": {
      "type": "transaction"
    },
    "status": "active",
    "evaluationMode": "sync"
  }'

Respuesta

id
string
UUID de la regla creada
name
string
Nombre de la regla
description
string
Descripción de la regla
organizationId
string
ID de su organización
status
string
Estado actual de la regla
enabled
boolean
Si la regla está habilitada
version
number
Número de versión de la regla
createdAt
string
Marca de tiempo ISO de creación
createdBy
string
ID del usuario que creó la regla

Ejemplo de Respuesta

{
  "id": "e2cdd639-52cc-4749-9b16-927bfa5dfaea",
  "organizationId": "71e8f908-e032-4fcb-b0ce-ad0cd0ffb236",
  "name": "CNPJ Blocklist Check",
  "description": "Block companies with specific CNPJ",
  "category": "kyb",
  "status": "active",
  "enabled": true,
  "priority": 100,
  "score": 85,
  "conditions": {
    "operator": "AND",
    "conditions": [...]
  },
  "actions": [
    {
      "type": "createAlert",
      "createAlert": {...},
      "tags": ["blocklist", "high-priority"]
    }
  ],
  "scope": {
    "type": "entity",
    "countries": ["BR"],
    "entityTypes": ["company"]
  },
  "targetEntityTypes": ["company"],
  "evaluationMode": "sync",
  "version": 1,
  "previousVersionId": null,
  "tags": [],
  "createdBy": "f35c10cb-9b67-4cda-9aea-f36567375dba",
  "createdAt": "2024-12-23T10:00:00.000Z",
  "updatedAt": "2024-12-23T10:00:00.000Z",
  "stats": {
    "executions": 0,
    "successes": 0,
    "failures": 0
  }
}

Respuestas de Error

400 Bad Request - Condición Inválida

{
  "error": "Validation failed",
  "details": {
    "field": "conditions",
    "message": "Invalid operator 'xyz'"
  }
}

400 Bad Request - Campos Requeridos Faltantes

{
  "error": "Validation failed",
  "details": {
    "missingFields": ["name", "targetEntityTypes", "conditions"]
  }
}

401 Unauthorized

{
  "error": "Invalid or missing API key"
}

Mejores Prácticas

  1. Comience con Modo Shadow: Use status: "shadow" para probar reglas sin afectar producción
  2. Use Nombres Descriptivos: Haga que los nombres de las reglas sean claros y buscables
  3. Establezca Prioridades Apropiadas: Las reglas de mayor prioridad se ejecutan primero (escala 1-100)
  4. Etiquete sus Reglas: Use etiquetas para organización y filtrado
  5. Reglas Específicas por País: Use scope.countries para cumplimiento geo-específico
  6. Pruebe Exhaustivamente: Pruebe las reglas con datos de ejemplo antes de habilitar
  7. Monitoree el Rendimiento: Use modo sync para reglas críticas en tiempo real, async para procesamiento por lotes
  8. Puntúe Estratégicamente: Alinee los puntajes con los umbrales de su matriz de riesgo

Ver También