Resumen
Este endpoint te permite actualizar una entidad usando tu propio identificador externo en lugar de nuestro UUID interno. Es útil cuando no almacenas nuestros UUIDs en tu sistema y solo rastreas tus propios IDs externos.
La funcionalidad es idéntica a PATCH /entities/:id, pero usa externalId como identificador.
Parámetros de Ruta
Tu identificador externo único para la entidad
Cuerpo de la Solicitud
Nombre de la entidad (nombre completo de persona o nombre de empresa)
Número de identificación fiscal (SSN, EIN, VAT, RFC, etc.)
Estado de la entidad. Valores posibles:
active: Entidad está activa y operativa
inactive: Entidad está inactiva
blocked: Entidad está bloqueada (requiere reason)
suspended: Entidad está suspendida (requiere reason)
rejected: Entidad fue rechazada durante el onboarding (requiere reason)
Nota: Cambiar a blocked, suspended o rejected requiere proporcionar un reason para auditoría.
Requerido al cambiar el estado a blocked, suspended o rejected. Proporciona un registro de auditoría para el cambio de estado.
ID de la matriz de riesgo a asignar a esta entidad. La matriz de riesgo determina qué reglas se ejecutarán para la evaluación de riesgo.
Estructura de datos específica de la entidad. Para entidades de persona, usa entityData.person. Para entidades de empresa, usa entityData.company.Campos de persona:
firstName: Nombre
lastName: Apellido
middleName: Segundo nombre
dateOfBirth: Fecha de nacimiento (YYYY-MM-DD)
nationality: Nacionalidad (ISO 3166-1 alpha-2)
email: Correo electrónico
phone: Teléfono
address: Objeto de dirección (street, city, state, country, postalCode)
Campos de empresa:
legalName: Razón social
tradingNames: Array de nombres comerciales
registrationNumber: Número de registro de la empresa
incorporationDate: Fecha de constitución (YYYY-MM-DD)
industry: Industria/sector
employees: Número de empleados
website: Sitio web de la empresa
address: Objeto de dirección
Atributos personalizados clave-valor para almacenamiento flexible de datos
Metadatos del sistema (generalmente establecidos por el sistema, pero pueden actualizarse)
Campos Inmutables
Los siguientes campos no pueden cambiarse después de la creación de la entidad:
type: Tipo de entidad (person, company, transaction)
countryCode: Código de país de la entidad (ISO 3166-1 alpha-2)
Respuesta
Devuelve el objeto de entidad actualizado.
El objeto de entidad actualizado con todos los valores actuales
Objeto de evaluación (actualmente null - función de re-evaluación temporalmente deshabilitada)
El estado de la entidad antes de la actualización (para auditoría)
Ejemplo de Solicitud
curl -X PATCH https://api.gueno.ai/entities/by-external-id/cliente-12345 \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Juan Miguel Pérez",
"status": "active",
"entityData": {
"person": {
"firstName": "Juan",
"middleName": "Miguel",
"lastName": "Pérez",
"email": "juan.perez@ejemplo.com",
"phone": "+52-55-1234-5678"
}
},
"riskMatrixId": "uuid-matriz-aqui"
}'
Ejemplo de Respuesta
{
"entity": {
"id": "uuid-entidad",
"organizationId": "uuid-org",
"externalId": "cliente-12345",
"type": "person",
"name": "Juan Miguel Pérez",
"taxId": "PERJ850315ABC",
"countryCode": "MX",
"status": "active",
"riskScore": "35.00",
"riskMatrixId": "uuid-matriz-aqui",
"entityData": {
"person": {
"firstName": "Juan",
"middleName": "Miguel",
"lastName": "Pérez",
"email": "juan.perez@ejemplo.com",
"phone": "+52-55-1234-5678"
}
},
"createdAt": "2025-12-20T10:00:00Z",
"updatedAt": "2025-12-24T15:30:00Z"
},
"evaluation": null,
"previousEntity": {
"id": "uuid-entidad",
"name": "Juan Pérez",
"status": "pending",
...
}
}
Cambio de Estado con Motivo
Al cambiar el estado a blocked, suspended o rejected, debes proporcionar un motivo:
curl -X PATCH https://api.gueno.ai/entities/by-external-id/cliente-12345 \
-H "Authorization: Bearer TU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "blocked",
"reason": "Falló el screening de sanciones - match detectado en lista OFAC"
}'
Casos de Uso
Actualizar datos del cliente desde tu CRM o sistema de gestión de usuarios:
{
"name": "María García López",
"entityData": {
"person": {
"lastName": "García López",
"email": "maria.garcialopez@ejemplo.com",
"address": {
"street": "Av. Reforma 456",
"city": "Ciudad de México",
"state": "CDMX",
"country": "MX",
"postalCode": "06600"
}
}
}
}
2. Asignar Matriz de Riesgo
Asignar o cambiar la matriz de riesgo para una entidad:
{
"riskMatrixId": "uuid-matriz-alto-riesgo"
}
Después de actualizar la matriz de riesgo, debes activar un re-análisis usando POST /entities/:entityId/analyze para re-evaluar la entidad con las nuevas reglas.
3. Bloquear Entidad Después de Investigación
Bloquear una entidad después de una investigación de cumplimiento:
{
"status": "blocked",
"reason": "La investigación reveló conexiones con entidades sancionadas"
}
4. Sincronizar Datos de Empresa
Actualizar información de empresa desde el registro empresarial:
{
"entityData": {
"company": {
"employees": 250,
"revenue": 50000000,
"website": "https://empresa-nuevo-dominio.com"
}
}
}
Eventos y Webhooks
Eventos en Tiempo Real
Después de una actualización exitosa, se emite el siguiente evento en tiempo real vía WebSocket:
{
"event": "entity.updated",
"entityId": "uuid-entidad",
"externalId": "cliente-12345",
"updatedFields": ["name", "entityData"],
"previousValues": {...},
"newValues": {...}
}
Disparadores de Webhook
Si cambias solo el campo status (sin otros cambios de campo), se dispara un webhook:
Evento: entity.status_changed
{
"event": "entity.status_changed",
"entityId": "uuid-entidad",
"externalId": "cliente-12345",
"oldStatus": "active",
"newStatus": "blocked",
"reason": "Falló el screening de sanciones",
"changedBy": "uuid-usuario",
"timestamp": "2025-12-24T15:30:00Z"
}
Nota: Si actualizas el estado junto con otros campos, el webhook NO se dispara (asume edición masiva de entidad en lugar de cambio de estado independiente).
Registro de Auditoría
Cada actualización de entidad crea un evento ATTRIBUTE_CHANGED en el registro de eventos de entidad con:
- Estado anterior (todos los campos cambiados)
- Estado posterior (todos los campos cambiados)
- Usuario que realizó el cambio
- Marca de tiempo
- Fuente (API, dashboard, etc.)
Consultar registro de auditoría:
GET /entity-events?entityId=:entityId&eventType=ATTRIBUTE_CHANGED
Respuestas de Error
Entidad con el externalId especificado no encontrada en tu organización{
"error": "Entity not found"
}
Datos de solicitud inválidos o error de validación{
"error": "Changing status to 'blocked' requires a reason for audit purposes."
}
Intentando cambiar campos inmutables{
"error": "Field 'type' cannot be changed after entity creation"
}
Mejores Prácticas
-
Siempre Establece ID Externo en Creación: Establece
externalId al crear entidades vía POST /entities para habilitar actualizaciones por ID externo.
-
Usa para Integración de Sistemas: Este endpoint es ideal para integraciones donde sincronizas datos de sistemas externos (CRM, ERP, etc.) usando tus propios IDs.
-
Proporciona Motivos para Cambios de Estado: Siempre incluye motivos significativos al bloquear, suspender o rechazar entidades para el registro de auditoría de cumplimiento.
-
Re-analiza Después de Cambiar Matriz de Riesgo: Después de asignar una nueva matriz de riesgo, activa
POST /entities/:entityId/analyze para re-evaluar con las nuevas reglas.
-
Maneja 404 con Gracia: Si la entidad no se encuentra por ID externo, puede que necesites crearla primero usando
POST /entities.
-
Actualizaciones en Lote: Para actualizar múltiples entidades, llama este endpoint concurrentemente con diferentes IDs externos para mejor rendimiento.
Endpoints Relacionados