Referencia de la API del endpoint EVENT
Registra eventos in-app e ingresos para el análisis de atribución y la optimización de campañas usando la API REST de Singular mediante una integración server-to-server como alternativa a la implementación del SDK.
Descripción general
Caso de uso server-to-server
La API EVENT permite el seguimiento de eventos in-app en el que las apps reenvían los datos de interacción del usuario a tu backend, que los transmite a los servidores de Singular para la atribución de eventos y los reportes de análisis de ingresos.
Capacidades compatibles:
- Atribución de eventos: Conecta las acciones del usuario con las campañas de marketing
- Seguimiento de ingresos: Mide y atribuye las compras in-app y las transacciones
- Eventos personalizados: Registra cualquier interacción del usuario, desde registros hasta finalizaciones de nivel
- Propiedades de eventos: Adjunta datos contextuales a los eventos para un análisis más profundo
Arquitectura del flujo de datos
El seguimiento de eventos server-to-server sigue un proceso de transmisión de datos de cuatro pasos.
- Recolección en el cliente: La app recopila los datos del evento y los identificadores del dispositivo
- Transmisión al servidor: La app reenvía los datos del evento a tu servidor backend
- Consulta al device graph: El servidor recupera o actualiza los detalles del dispositivo desde el device graph de Singular
- Llamada a la API de eventos: El servidor envía el evento al endpoint de la API REST de Singular
Requisitos críticos
Prerrequisitos:
- SESSION antes de los eventos: La SESSION debe establecerse antes de cualquier seguimiento de eventos
- Orden secuencial: Un orden de sesión inválido genera inconsistencias de datos y errores de atribución
Restricciones de integración:
- Procesamiento en tiempo real: Las solicitudes se procesan individualmente—sin soporte de lotes (batch)
- Eventos cronológicos: Los eventos deben enviarse en el orden en que ocurrieron
- Sin deduplicación: Singular no deduplica los datos—implementa la deduplicación del lado del servidor para evitar duplicados
- Permanencia de los datos: Los datos a nivel de dispositivo no se pueden eliminar después de la ingesta—valídalos antes de enviarlos
Directrices para el seguimiento de eventos
Implementa el seguimiento de eventos siguiendo las prácticas recomendadas de Singular para las convenciones de nombres y la estructura de datos.
Definición de eventos
Definir eventos
Antes de implementar la integración S2S, define la lista completa de eventos que tu organización quiere registrar para el análisis del rendimiento de las campañas.
Guía de planificación de eventos: Definir eventos in-app
Impacto del nombre del evento: Los nombres de eventos enviados a Singular determinan directamente cómo aparecen los eventos en los reportes, las exportaciones y los postbacks.
Nomenclatura estándar de eventos
Prácticas recomendadas:
- Eventos estándar: Usa la convención de nombres de eventos estándar de Singular para agilizar el mapeo de la integración con partners
- Idioma inglés: Envía los nombres de eventos en inglés para garantizar la compatibilidad con partners externos y soluciones de analítica
- Atributos estándar: Usa los nombres de atributos de eventos estándar para las propiedades de los eventos
Limitaciones de caracteres
Restricciones de longitud:
- Nombres de eventos: Máximo 32 caracteres ASCII (32 bytes al convertir a UTF-8 para caracteres no ASCII)
- Atributos de eventos: Máximo 500 caracteres ASCII por clave y valor de atributo
Selección del endpoint de la API
Singular ofrece dos versiones del endpoint EVENT optimizadas para diferentes arquitecturas de integración.
Selección del endpoint: Elige el endpoint según tu arquitectura de integración y tu estrategia de identificadores de dispositivo. El caso de uso determina el endpoint correcto.
Event Endpoint V1
Casos de uso de V1
Usa el Event Endpoint V1 para integraciones que dependen de identificadores de dispositivo específicos de la plataforma (IDFA, IDFV, AIFA, ASID, etc.).
Recomendado para:
- Puramente del lado del servidor: Integraciones del lado del servidor sin implementación del SDK de Singular
- Híbrido (sin SDID): Integraciones híbridas en las que el SDK de Singular no usa el Singular Device ID (SDID)
URL del endpoint:
GET https://s2s.singular.net/api/v1/evt
Event Endpoint V2
Casos de uso de V2
Usa el Event Endpoint V2 para integraciones híbridas en las que el SDK de Singular registra las sesiones usando el SDID y el servidor envía los eventos usando el mismo SDID.
Recomendado para:
- Híbrido (basado en SDID): El SDK de Singular registra las sesiones con SDID y los eventos del lado del servidor usan el mismo SDID
- Identificadores simplificados: Implementaciones que evitan identificadores de dispositivo específicos de la plataforma (IDFA, AIFA, etc.)
URL del endpoint:
GET https://s2s.singular.net/api/v2/evt
Habilitación de la cuenta: El endpoint V2 requiere la configuración de la cuenta de Singular para el uso de SDID. Contacta a tu Solution Engineer o CSM para habilitarlo.
Variante Web (p=Web)
Las integraciones web usan este mismo endpoint EVENT con
p=Web
. No hay llamada de SESSION web: el primer
__PAGE_VISIT__
evento con
conversion_event=true
establece el
touchpoint de atribución en lugar de un lanzamiento.
Guía completa:
Para conocer el patrón completo asistido por el navegador (persistencia
del SDID,
__PAGE_VISIT__
secuenciación, web-to-app,
y deferred deep linking por portapapeles), consulta la
Guía de implementación de Web S2S
.
Parámetros específicos de Web
Estos parámetros aplican cuando
p=Web
. Los parámetros compartidos
(
a
,
i
,
ip
,
sdid
,
custom_user_id
) se definen en
Fundamentos de S2S
.
| Parámetro | Detalles |
|---|---|
conversion_event
|
Establécelo en
Ejemplo:
|
attribution_data
|
JSON codificado en URL de los datos de campaña extraídos de la landing URL, enviado en el
Ejemplo:
|
web_url
|
La landing URL de la campaña que contenía los parámetros de marketing (UTM /
Ejemplo:
|
web_page_referrer
|
El referrer (
Ejemplo:
|
Click IDs web:
envía los click IDs de los partners
(
ScCid
,
ttclid
,
gclid
/
gbraid
/
wbraid
,
dclid
,
fbclid
,
rdt_uuid
) dentro del parámetro de evento
e
.
Identificadores de dispositivo requeridos
Los requisitos de identificadores de dispositivo varían según la versión del endpoint y la plataforma. Revisa los requisitos específicos de cada plataforma a continuación.
Identificadores del endpoint V1
Identificadores específicos de la plataforma
El Event Endpoint V1 requiere identificadores de publicidad específicos de la plataforma según el sistema operativo del dispositivo y el método de distribución de la app.
Estos son parámetros S2S compartidos definidos una sola vez en Fundamentos de S2S .
Identificadores del endpoint V2
Requisito de solo SDID
El Event Endpoint V2 requiere únicamente el Singular Device ID (SDID) para todas las plataformas, lo que simplifica la identificación del dispositivo.
| Parámetro | Detalles |
|---|---|
sdid
|
Plataformas: iOS, Android, Web, PC, Xbox, PlayStation, Nintendo, MetaQuest, CTV El Singular Device ID obtenido del SDK de Singular o generado del lado del cliente.
Ejemplo:
|
Parámetros requeridos
Todas las solicitudes EVENT deben incluir estos parámetros requeridos además de los identificadores de dispositivo.
Formato de los parámetros: Todos los parámetros deben enviarse como parámetros de consulta de URL usando el método GET. No envíes parámetros en el cuerpo de la solicitud en JSON.
Autenticación de la API
Estos son parámetros S2S compartidos definidos una sola vez en Fundamentos de S2S .
Parámetros del dispositivo
Estos son parámetros S2S compartidos definidos una sola vez en Fundamentos de S2S .
Parámetros de la aplicación
Estos son parámetros S2S compartidos definidos una sola vez en Fundamentos de S2S .
Parámetros del evento
| Parámetro | Detalles |
|---|---|
n
|
Nombre del evento que se está registrando.
Ejemplo:
|
Parámetros opcionales
Los parámetros opcionales enriquecen el seguimiento de eventos con contexto y funcionalidad adicionales.
Parámetros de timestamp
| Parámetro | Detalles |
|---|---|
utime
|
Timestamp Unix de 10 dígitos del evento.
Ejemplo:
|
umilisec
|
Timestamp Unix de 13 dígitos con milisegundos.
Ejemplo:
|
Atributos del evento
Compatibilidad con Conversion API de partners: Para reenviar estos eventos a los partners de redes publicitarias mediante las integraciones de Conversion API de Singular, incluye los atributos de evento opcionales estándar (datos propios con hash, como eventId y ehash). Consulta Atributos de evento estándar para integraciones de Conversion API.
| Parámetro | Detalles |
|---|---|
e
|
Cadena JSON codificada en URL que especifica atributos de evento personalizados. Estructura JSON:
Ejemplo codificado en URL:
|
global_properties
|
Objeto JSON codificado en URL que contiene pares clave-valor personalizados aplicados globalmente al evento. Límites:
JSON:
Codificado en URL:
|
Parámetros de red
Estos son parámetros S2S compartidos definidos una sola vez en Fundamentos de S2S .
Privacidad de datos
Estos son parámetros S2S compartidos definidos una sola vez en Fundamentos de S2S .
Soporte cross-device
Estos son parámetros S2S compartidos definidos una sola vez en Fundamentos de S2S .
Soporte de SKAdNetwork
| Parámetro | Detalles |
|---|---|
skan_conversion_value
iOS |
El conversion value de SKAdNetwork más reciente al momento del evento. Más información: Implementación de SKAdNetwork
Ejemplo:
|
skan_first_call_timestamp
iOS |
Timestamp Unix de la primera llamada a la API de SKAdNetwork.
Ejemplo:
|
skan_last_call_timestamp
iOS |
Timestamp Unix de la llamada más reciente a la API de SKAdNetwork al momento del evento.
Ejemplo:
|
Seguimiento de ingresos
Registra las compras in-app y los eventos de ingresos con la validación adecuada y el manejo correcto de la moneda.
Parámetros de ingresos requeridos
Seguimiento básico de ingresos
Parámetros mínimos requeridos para el seguimiento de eventos de ingresos cuando realizas tu propia validación de ingresos.
Práctica recomendada: Valida los eventos de ingresos con las App Stores en tu lado del servidor antes de enviar la solicitud del evento a Singular. Si realizas tu propia validación, solo se requieren estos parámetros.
| Parámetro | Detalles |
|---|---|
is_revenue_event
|
Especifica si el evento es un evento de ingresos.
Ejemplo:
|
amt
|
Importe de la transacción en la moneda.
Ejemplo:
|
cur
|
Código de moneda de tres letras en mayúsculas ISO 4217 .
Ejemplo:
|
Parámetros de validación de ingresos
Ingresos validados por Singular
Parámetros opcionales para que Singular realice la validación de ingresos del lado del servidor con las App Stores.
Requisitos de validación:
- Requerido si dependes de Singular para la validación de ingresos con las App Stores
- Confirma la sintaxis correcta de los valores del recibo de compra y de la firma
-
Un formato incorrecto hace que Singular bloquee los ingresos y genere un
__iapinvalid__evento
| Parámetro | Detalles |
|---|---|
purchase_receipt
iOS, Android |
Recibo recibido de la transacción de compra. Ejemplo (iOS):
Ejemplo (Android, codificado en URL):
|
receipt_signature
Android |
Firma usada para firmar el recibo de compra (solo Android). Ejemplo:
|
purchase_product_id
|
Identificador SKU del producto.
Ejemplo:
|
purchase_transaction_id
|
Identificador de la transacción.
Ejemplo (iOS):
Ejemplo (Android):
|
Ejemplos de solicitudes
El código de muestra demuestra la integración del endpoint EVENT en varios lenguajes de programación.
Aviso sobre los ejemplos:
Las muestras de código pueden no incluir
todos los parámetros requeridos. Valida la lista completa de parámetros antes de
la implementación en producción. Usa un
i
(identificador de app) único
para desarrollo/pruebas.
Ejemplo en Python
import requests
params = {
'a': 'sdk_key_here',
'p': 'Android',
'i': 'com.singular.app',
'ip': '10.1.2.3',
've': '9.2',
'ma': 'samsung',
'mo': 'SM-G935F',
'lc': 'en_US',
'bd': 'Build/13D15',
'aifa': '8ecd7512-2864-440c-93f3-a3cabe62525b',
'asid': 'edee92a2-7b2f-45f4-a509-840f170fc6d9',
'n': 'sng_add_to_cart'
}
response = requests.get('https://s2s.singular.net/api/v1/evt', params=params)
print(response.json())
Ejemplo en cURL
curl -G "https://s2s.singular.net/api/v1/evt" \
--data-urlencode "a=sdk_key_here" \
--data-urlencode "p=Android" \
--data-urlencode "i=com.singular.app" \
--data-urlencode "ip=10.1.2.3" \
--data-urlencode "ve=9.2" \
--data-urlencode "ma=samsung" \
--data-urlencode "mo=SM-G935F" \
--data-urlencode "lc=en_US" \
--data-urlencode "bd=Build/13D15" \
--data-urlencode "aifa=8ecd7512-2864-440c-93f3-a3cabe62525b" \
--data-urlencode "asid=edee92a2-7b2f-45f4-a509-840f170fc6d9" \
--data-urlencode "n=sng_add_to_cart"
Ejemplo en HTTP
GET /api/v1/evt
?a=sdk_key_here
&p=Android
&i=com.singular.app
&ip=10.1.2.3
&ve=9.2
&ma=samsung
&mo=SM-G935F
&lc=en_US
&bd=Build%2F13D15
&aifa=8ecd7512-2864-440c-93f3-a3cabe62525b
&asid=edee92a2-7b2f-45f4-a509-840f170fc6d9
&n=sng_add_to_cart HTTP/1.1
Host: s2s.singular.net
Accept: application/json
Ejemplo en Java
// Base URL
String baseUrl = "https://s2s.singular.net/api/v1/evt";
// Parameters
Map<String, String> params = new HashMap<>();
params.put("a", "sdk_key_here");
params.put("p", "Android");
params.put("i", "com.singular.app");
params.put("ip", "10.1.2.3");
params.put("ve", "9.2");
params.put("ma", "samsung");
params.put("mo", "SM-G935F");
params.put("lc", "en_US");
params.put("bd", "Build/13D15");
params.put("aifa", "8ecd7512-2864-440c-93f3-a3cabe62525b");
params.put("asid", "edee92a2-7b2f-45f4-a509-840f170fc6d9");
params.put("n", "sng_add_to_cart");
// Build URL with encoded parameters
StringBuilder urlBuilder = new StringBuilder(baseUrl);
urlBuilder.append('?');
for (Map.Entry<String, String> entry : params.entrySet()) {
if (urlBuilder.length() > baseUrl.length() + 1) {
urlBuilder.append('&');
}
urlBuilder.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
.append('=')
.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
}
// Create connection
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
// Get response
int responseCode = conn.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(conn.getInputStream())
);
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// Check status
System.out.println("HTTP Status Code: " + responseCode);
System.out.println("Response: " + response.toString());
// Disconnect
conn.disconnect();
Códigos de respuesta y errores
El endpoint EVENT devuelve códigos de estado HTTP y respuestas JSON que indican el éxito o el fallo de la solicitud.
Documentación completa de errores: Códigos de respuesta S2S y manejo de errores
Pruebas y validación
Verifica la integración de eventos S2S antes del despliegue en producción usando la SDK Console de Singular para la validación de datos en tiempo real.
Procedimiento de prueba
Validación de extremo a extremo
- Registrar dispositivo de prueba: Obtén el ID de publicidad del dispositivo y agrégalo a la SDK Console de Singular
- Habilitar el logging en la consola: Agrega el identificador del dispositivo en la SDK Console para capturar los datos de prueba
-
Usar un App ID de desarrollo:
Sobrescribe el identificador de la app
con la versión de desarrollo (p. ej.,
com.singular.app.dev) para separar los datos de prueba de los de producción - Compilar y lanzar: Compila o abre la app desde un estado terminado
- Validar los datos del cliente: Confirma que la app envía todos los data points requeridos de Singular a tu servidor
-
Verificar la SESSION:
Confirma que tu servidor envía la solicitud de SESSION
a
https://s2s.singular.net/api/v1/launchcon todos los parámetros requeridos - Revisar la SDK Console (Session): En cuestión de segundos, el evento de SESSION debería aparecer en la SDK Console
Prueba de eventos
- Disparar el evento: Procede a disparar un evento en la app
- Validar los datos del evento: Confirma que el evento se envió a tu servidor con todos los data points requeridos de Singular
-
Verificar la solicitud del servidor:
Confirma que tu servidor envía la
solicitud EVENT a
https://s2s.singular.net/api/v1/evtcon todos los parámetros requeridos - Revisar la SDK Console (Event): En cuestión de segundos, el EVENT debería aparecer en la SDK Console
- Repetir las pruebas: Valida que todos los eventos se envíen con los valores esperados
Verificaciones críticas:
- Confirma que el evento de SESSION ocurre al abrir/pasar la app a primer plano ANTES de que se reciba el EVENT
- Confirma que los data points requeridos del EVENT coinciden con los data points de la SESSION
Indicador de éxito: Si los eventos aparecen en la SDK Console, ¡has completado con éxito una prueba de integración de eventos de extremo a extremo!
Recursos adicionales
Documentación de pruebas
Guía completa de pruebas: Guía de pruebas de integración S2S