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: code 0 significa éxito, message describe el resultado y data contiene la carga útil. El procesamiento por lotes de escrituras de miembros depende de la operación: OVERRIDE se ejecuta solo después de recibir todos los lotes; cada lote de APPEND y REMOVE se aplica de forma independiente. data.status y data.complete en 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" }'
              
              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"
  }'

            
Este bloque de código se muestra en una ventana flotante

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" } }
              
              {
  "code": 0,
  "message": "success",
  "data": {
    "segmentId": 123456789,
    "name": "High-value users",
    "generation": "generation-1"
  }
}

            
Este bloque de código se muestra en una ventana flotante
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"} ] }'
              
              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"}
    ]
  }'

            
Este bloque de código se muestra en una ventana flotante

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

            
Este bloque de código se muestra en una ventana flotante

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

            
Este bloque de código se muestra en una ventana flotante

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

            
Este bloque de código se muestra en una ventana flotante
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 OVERRIDE cuando no hay usuarios coincidentes; consulte 55214). La respuesta devuelve recuentos y hasta 100 muestras de identificadores. Las muestras pueden incluir identityValue; proteja los datos de respuesta en consecuencia.

Icon Solid Transparent White Qiyu
Contacto