REST API de segmentos de usuarios
Cree segmentos basados en listas actualizados manualmente y sobrescriba, añada o elimine miembros por ID de segmento.
General
- Las solicitudes y respuestas usan JSON codificado en UTF-8.
- La URL completa del endpoint es la URL base del centro de datos más la ruta de la API. Consulte Descripción general de la REST API para obtener la URL base y la API Key / API Secret.
- Use autenticación HTTP Basic:
Authorization: Basic ${base64(api_key:api_secret)}. La fuente de datos de API vinculada a la API Key determina el proyecto; quien llama no pasa un ID de proyecto en el cuerpo de la solicitud. - Las respuestas correctas comparten una estructura común:
code0significa éxito,messagedescribe el resultado ydatacontiene la carga útil. El procesamiento por lotes de escrituras de miembros depende de la operación:OVERRIDEse ejecuta solo después de recibir todos los lotes; cada lote deAPPENDyREMOVEse aplica de forma independiente.data.statusydata.completeen la respuesta indican el estado del procesamiento.
Crear un segmento basado en listas
Crea un segmento con modo de actualización manual y carga de lista como método de creación. El segmento no tiene miembros tras la creación; use Actualizar miembros del segmento para cargar la lista.
Endpoint
POST /v1/segments
Ejemplo de solicitud
curl -X POST 'https://ma-api.engagelab.com/v1/segments' \
-H 'Authorization: Basic {base64(api_key:api_secret)}' \
-H 'Content-Type: application/json' \
-d '{
"name": "High-value users",
"description": "High-value user list synced from the order system"
}'
Parámetros de solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
name |
String | Sí | Nombre del segmento. No puede estar vacío, hasta 50 caracteres; debe ser único dentro del proyecto. Se eliminan los espacios iniciales y finales. |
description |
String | No | Descripción del segmento, hasta 200 caracteres. |
Ejemplo de respuesta
{
"code": 0,
"message": "success",
"data": {
"segmentId": 123456789,
"name": "High-value users",
"generation": "generation-1"
}
}
| Campo | Tipo | Descripción |
|---|---|---|
segmentId |
Long | ID del nuevo segmento, usado para cargas de lista posteriores. |
name |
String | Nombre del segmento. |
generation |
String | Identificador de generación de miembros actual. Un segmento recién creado no tiene miembros. |
Actualizar miembros del segmento
Un único endpoint sobrescribe, añade o elimina miembros de la lista. Solo se aceptan segmentos del proyecto actual creados mediante carga de lista, con actualización manual y activos. Los identificadores de usuario deben coincidir con usuarios activos existentes en el proyecto; la API no crea activos de usuario. Cuando el segmento no cumple los requisitos, se devuelven los errores 55210–55214 (consulte Respuestas de error).
Endpoint
POST /v1/segments/{segmentId}/members
Ejemplo de solicitud
El siguiente ejemplo divide una operación OVERRIDE en dos lotes. Cada batchId representa una operación de lista; todos los lotes deben usar el mismo batchId, operation y batchCount. OVERRIDE aplica el cambio de lista solo después de recibir todos los lotes. APPEND y REMOVE surten efecto en cuanto cada solicitud de lote tiene éxito.
curl -X POST 'https://ma-api.engagelab.com/v1/segments/123456789/members' \
-H 'Authorization: Basic {base64(api_key:api_secret)}' \
-H 'Content-Type: application/json' \
-d '{
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"batchIndex": 0,
"batchCount": 2,
"members": [
{"euid": "100001"},
{"identityName": "user_id", "identityValue": "user-002"}
]
}'
Cuando se recibe el primer lote OVERRIDE, status en la respuesta es RECEIVING y complete es false. Envíe el lote restante con el mismo batchId y establezca batchIndex en 1.
Parámetros de solicitud
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
segmentId |
Long | Sí | Parámetro de ruta: ID del segmento de destino. |
batchId |
String | Sí | ID de lote para una operación de lista completa, hasta 128 caracteres, solo letras, dígitos, puntos, guiones bajos, dos puntos y guiones. Se usa como clave de idempotencia por proyecto y segmento en 24 horas. |
operation |
String | Sí | Operación de lista: OVERRIDE (reemplazar), APPEND (añadir), REMOVE (eliminar). |
batchIndex |
Integer | Sí | Índice del lote actual, comenzando en 0, y debe ser menor que batchCount. |
batchCount |
Integer | Sí | Número total de lotes para esta operación, 1–10. Todos los lotes combinados pueden incluir como máximo 10 000 identificadores de miembros. |
members |
Array<Object> |
Sí | Identificadores de miembros en el lote actual. No puede estar vacío; hasta 1 000 por lote. Cada elemento usa uno de los formatos de la tabla siguiente. |
Los elementos de members admiten los dos formatos siguientes; euid no puede enviarse junto con identityName / identityValue:
| Campo | Tipo | Descripción |
|---|---|---|
euid |
String | EUID del proyecto; debe ser una cadena de entero positivo, p. ej. "100001". |
identityName |
String | Nombre de identidad de usuario configurado en el proyecto. No puede estar vacío, hasta 128 caracteres. |
identityValue |
String | Valor de identidad. No puede estar vacío, hasta 256 caracteres; se usa con identityName. Los valores de más de 256 caracteres no fallan toda la solicitud; la fila se cuenta en invalidCount. |
Operaciones de lista
| Operación | Descripción |
|---|---|
OVERRIDE |
Tras recibir todos los lotes, reemplaza la lista actual con los usuarios coincidentes en este envío. Si no se coincide con ningún usuario activo, la solicitud se rechaza con 55214 y la lista existente no cambia. |
APPEND |
Tras el éxito del lote actual, añade los usuarios coincidentes a la lista; los usuarios ya en el segmento no se duplican. No se espera a otros lotes. |
REMOVE |
Tras el éxito del lote actual, elimina los usuarios coincidentes de la lista; los usuarios que no están en el segmento no provocan cambios adicionales. No se espera a otros lotes. |
Los reintentos con el mismo batchId deben usar la misma operación, batchCount y contenido del lote; el mismo batchId y batchIndex no pueden llevar contenido distinto. Los resultados idempotentes se conservan 24 horas.
Los lotes OVERRIDE se retienen hasta recibir todos y luego se aplican; los datos retenidos caducan tras un TTL de 24 horas, y la lista no cambia si los lotes están incompletos antes del vencimiento. Cada lote APPEND y REMOVE se aplica de forma independiente; batchCount y batchIndex siguen identificando lotes, admiten idempotencia y registran el progreso sin bloquear el lote actual.
Cada cambio de lista exitoso se registra en el historial de actualización del segmento con origen REST API. OVERRIDE se registra por lote completado; APPEND y REMOVE por lote exitoso. Los registros de auditoría no incluyen muestras de identificadores no coincidentes o no válidos.
Ejemplos de respuesta
Lote aún incompleto:
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"status": "RECEIVING",
"complete": false,
"expectedBatchCount": 2,
"receivedBatchCount": 1,
"inputCount": 2,
"matchedCount": 2,
"unmatchedCount": 0,
"unmatchedSamples": [],
"unmatchedSamplesTruncated": false,
"invalidCount": 0,
"invalidSamples": [],
"invalidSamplesTruncated": false,
"enterCount": 0,
"exitCount": 0
}
}
Lote OVERRIDE completado:
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-001",
"operation": "OVERRIDE",
"status": "COMPLETED",
"complete": true,
"expectedBatchCount": 2,
"receivedBatchCount": 2,
"inputCount": 3,
"matchedCount": 2,
"unmatchedCount": 1,
"unmatchedSamples": [
{"identityName": "user_id", "identityValue": "user-not-found"}
],
"unmatchedSamplesTruncated": false,
"invalidCount": 1,
"invalidSamples": [
{"identityName": "not_configured", "identityValue": "example"}
],
"invalidSamplesTruncated": false,
"enterCount": 2,
"exitCount": 1
}
}
Cuando un lote APPEND o REMOVE tiene éxito, el lote actual se aplica de inmediato y devuelve complete: true aunque batchCount sea mayor que el número de lotes recibidos hasta el momento. Por ejemplo, con batchCount 2 y solo el primer lote recibido, receivedBatchCount es 1 y status es COMPLETED.
{
"code": 0,
"message": "success",
"data": {
"batchId": "crm-sync-20260915-append",
"operation": "APPEND",
"status": "COMPLETED",
"complete": true,
"expectedBatchCount": 2,
"receivedBatchCount": 1,
"inputCount": 2,
"matchedCount": 1,
"unmatchedCount": 1,
"unmatchedSamples": [
{"identityName": "user_id", "identityValue": "user-not-found"}
],
"unmatchedSamplesTruncated": false,
"invalidCount": 0,
"invalidSamples": [],
"invalidSamplesTruncated": false,
"enterCount": 1,
"exitCount": 0
}
}
| Campo | Tipo | Descripción |
|---|---|---|
batchId |
String | ID de lote de esta operación de lista. |
operation |
String | Operación de lista de esta solicitud. |
status |
String | RECEIVING: OVERRIDE esperando lotes; PROCESSING: esperando bloqueo de cambio de lista; COMPLETED: operación actual finalizada. |
complete |
Boolean | Para OVERRIDE, todos los lotes aplicados; para APPEND/REMOVE, lote actual aplicado—no necesariamente enviados todos los lotes. |
expectedBatchCount |
Integer | Recuento total de lotes esperado. |
receivedBatchCount |
Integer | Recuento de índices de lote distintos recibidos; para APPEND/REMOVE, solo para estadísticas y no bloquea el lote actual. |
inputCount |
Integer | Filas de entrada válidas = matchedCount + unmatchedCount, excluyendo identificadores no válidos. OVERRIDE cuenta los lotes recibidos (lote completo al terminar); APPEND/REMOVE cuentan el lote actual. |
matchedCount |
Integer | Identificadores coincidentes con usuarios activos. |
unmatchedCount |
Integer | Identificadores no coincidentes con usuarios activos. |
unmatchedSamples |
Array<Object> |
Muestra de identificadores no coincidentes, misma estructura que los miembros de la solicitud, hasta 100. |
unmatchedSamplesTruncated |
Boolean | Si las muestras no coincidentes se truncaron en 100. |
invalidCount |
Integer | Identificadores no válidos, no incluidos en inputCount. Incluye: euid que no es entero positivo, euid enviado con campos de identidad, identityName/identityValue vacíos o no coincidentes, identityName de más de 128 caracteres, identityValue de más de 256 caracteres, nombre de identidad no configurado, una identidad que coincide con varios usuarios activos. |
invalidSamples |
Array<Object> |
Muestra de identificadores no válidos, misma estructura que los miembros de la solicitud, hasta 100. |
invalidSamplesTruncated |
Boolean | Si las muestras no válidas se truncaron en 100. |
enterCount |
Integer | Usuarios realmente añadidos al segmento en esta ejecución. |
exitCount |
Integer | Usuarios realmente eliminados del segmento en esta ejecución. |
Las muestras siguen la estructura de objeto de identificador de miembro de la solicitud y pueden incluir el identityValue enviado. El servidor almacena muestras solo en la caché de idempotencia de 24 horas, no en registros de auditoría; gestione respuestas y registros según sus requisitos de cumplimiento de datos.
Si la respuesta es PROCESSING, reintente con el mismo batchId, batchIndex y contenido original del lote para un resultado idempotente. No hay una API de consulta de progreso de lote independiente.
Respuestas de error
Los errores usan code y message; consulte Códigos de estado HTTP para códigos de estado HTTP y códigos de retorno generales.
| Estado HTTP | Código | Descripción |
|---|---|---|
| 401 | 40050 |
Falló la autenticación de API Key / API Secret, o la fuente de datos de API está deshabilitada. |
| 400 | 40026 |
Ya existe un segmento de usuarios con el mismo nombre en el proyecto (ruta de creación, passthrough de Metadata). |
| 400 | 40032 |
Se alcanzó el límite de cantidad de segmentos de usuarios (ruta de creación, passthrough de Metadata). |
| 400 | 55201 |
El segmento de usuarios no existe (ruta de carga de lista). |
| 400 | 55210 |
El método de creación del segmento no admite carga de lista por REST API: el segmento de destino no se creó mediante carga de lista (p. ej., segmento basado en reglas). |
| 400 | 55211 |
El modo de actualización del segmento no admite carga de lista por REST API: el segmento de destino no se actualiza manualmente. |
| 400 | 55212 |
El estado del ciclo de vida del segmento no admite carga de lista por REST API: el segmento de destino no está activo. |
| 400 | 55213 |
El segmento no tiene generación de miembros disponible; la carga de lista por REST API no se admite temporalmente. |
| 400 | 55214 |
No se permite sobrescribir con lista vacía: tras todos los lotes OVERRIDE, no se coincidió con ningún usuario activo. |
| 400 | 55004 |
Los campos de solicitud o los parámetros de lote de lista no son válidos. |
| 503 | 55207 |
Metadatos del segmento temporalmente no disponibles. |
| 500 | 55000 |
Error interno del servidor. |
Al crear un segmento, los códigos de error de negocio y message de Metadata se pasan al llamador, p. ej. nombre duplicado 40026, límite 40032. En la ruta de carga de lista, «el segmento no existe» devuelve 55201 en lugar de 40027.
Los identificadores de miembros no coincidentes o no válidos no fallan toda la operación de lista (excepto
OVERRIDEcuando no hay usuarios coincidentes; consulte55214). La respuesta devuelve recuentos y hasta 100 muestras de identificadores. Las muestras pueden incluiridentityValue; proteja los datos de respuesta en consecuencia.










