Referencia de la API del endpoint SESSION
Registra las sesiones de los usuarios y habilita la atribución para instalaciones de apps, reengagement y métricas de retención a través de la API REST de Singular usando la integración server-to-server como alternativa a la implementación con SDK.
Descripción general
Caso de uso server-to-server
La API REST de Singular permite una integración server-to-server directa en la que las apps envían datos específicos del dispositivo a tu backend, que los transmite a los servidores de Singular para el procesamiento de atribución y los reportes de analytics.
Capacidades soportadas:
- Atribución de instalación: Atribución de primer contacto a campañas de marketing
- Atribución de reengagement: Atribución multitáctil para usuarios que regresan
- Métricas de retención: Seguimiento del engagement basado en sesiones
- Seguimiento de eventos: Medición de eventos personalizados dentro de la app
Arquitectura del flujo de datos
La integración server-to-server sigue un proceso de transmisión de datos de cuatro pasos.
- Recopilación en el cliente: La app recopila los datos requeridos del dispositivo y de la aplicación
- Transmisión al servidor: La app envía los datos recopilados a tu servidor backend
- Llamada a la API de Singular: Tu servidor envía los datos al endpoint de la API REST de Singular
- Gestión de la respuesta: Tu servidor recibe y procesa la respuesta de Singular
Consideraciones clave
Requisitos críticos:
- Procesamiento en tiempo real: Las solicitudes se procesan de forma individual: no hay soporte para lotes
- Orden secuencial: Los eventos deben enviarse cronológicamente
- Sin deduplicación: Singular no deduplica los datos: implementa la deduplicación del lado del servidor
- Permanencia de los datos: Los datos a nivel de dispositivo no pueden eliminarse después de la ingesta: valídalos antes de enviarlos
- La sesión primero: La sesión debe establecerse antes de cualquier seguimiento de eventos
Beneficios de la integración:
- Flexibilidad: Control total sobre la recopilación de datos y el momento de la transmisión
- Paridad de funcionalidades: Soporta toda la funcionalidad del SDK cuando se proporcionan los datos adecuados
- Implementación personalizada: Adapta la integración a la arquitectura específica de tu backend
Gestión de sesiones
El endpoint SESSION notifica a Singular sobre los eventos de apertura de la app para inicializar las sesiones de usuario con fines de atribución y seguimiento.
Cuándo enviar sesiones
Disparadores de sesión
Envía solicitudes SESSION para estos eventos del ciclo de vida de la app:
- Instalaciones nuevas: Primer inicio de la app después de la instalación
- Inicio desde estado terminado: La app se abre desde un estado completamente cerrado
- De segundo plano a primer plano: La app regresa a primer plano después de un periodo de tiempo de espera (recomendado: 60 segundos)
Lógica de tiempo de espera de la sesión
Implementa un tiempo de espera de sesión para evitar solicitudes SESSION excesivas durante breves pasos de la app a segundo plano.
Implementación recomendada:
- Duración del tiempo de espera: 60 segundos (1 minuto)
- Primer plano < tiempo de espera: No envíes SESSION si la app regresa a primer plano dentro del periodo de tiempo de espera
- Primer plano > tiempo de espera: Envía SESSION si la app permanece en segundo plano más allá del periodo de tiempo de espera
- Seguimiento del ciclo de vida de la app: Usa los eventos del ciclo de vida de la app y temporizadores para gestionar el estado de la sesión
Soporte para deep links:
Envía siempre SESSION para las aperturas de la app
a través de deep links, Universal Links o App Links con el
openuri
parámetro completado, independientemente del estado del tiempo de espera.
Procesamiento de atribución
Atribución basada en sesiones
Singular procesa las solicitudes SESSION para determinar el tipo de atribución y activar los flujos de trabajo apropiados.
| Tipo de sesión | Procesamiento de Singular | Resultado de la atribución |
|---|---|---|
| Primera sesión (nueva instalación) | Se activa el proceso de atribución de instalación | Atribuye la instalación a la campaña de marketing |
| Calificada para reengagement | Se activa el proceso de atribución de reengagement | Atribuye el regreso del usuario a la campaña o al deep link |
| Sesión estándar | La sesión se registra para el seguimiento de retención | Cuenta para las métricas de actividad y engagement del usuario |
Más información: Preguntas frecuentes sobre atribución de reengagement
Requisitos de orden de eventos
El momento de las sesiones y los eventos afecta directamente la precisión de la atribución y la calidad de los datos.
Reglas críticas de ordenamiento:
- Sesión antes de los eventos: Debe recibirse una única SESSION antes de cualquier evento de esa sesión
- Transmisión de eventos en tiempo real: Los eventos dentro de la app deben enviarse en tiempo real después de su respectiva sesión
- Procesamiento secuencial: Un orden de sesión inválido genera inconsistencias de datos y errores de atribución
Opciones avanzadas
Funcionalidad extendida
La integración S2S de Singular soporta capacidades avanzadas que requieren parámetros SESSION adicionales.
Funcionalidades avanzadas: Consulta Opciones avanzadas de S2S para conocer los requisitos de deep linking, SKAdNetwork y seguimiento entre dispositivos.
Especificación del endpoint de la API
El endpoint SESSION acepta solicitudes GET con parámetros de consulta que contienen datos del dispositivo, de la aplicación y de atribución.
URL del endpoint
URL base y método
GET https://s2s.singular.net/api/v1/launch
Formato de la solicitud:
GET /api/v1/launch?param1=value1¶m2=value2
Cuerpo de la solicitud: No proporciones un cuerpo en la solicitud: todos los parámetros deben enviarse como parámetros de consulta en la URL usando el método GET.
Parámetros requeridos
Todas las solicitudes SESSION deben incluir estos parámetros requeridos con los valores y el formato adecuados.
Autenticación de la API
SDK Key
Estos son parámetros S2S compartidos que se definen una sola vez en Fundamentos de S2S .
Identificadores de dispositivo
Identificadores específicos de la plataforma
Estos son parámetros S2S compartidos que se definen una sola vez en Fundamentos de S2S .
Parámetros del dispositivo
Información del dispositivo
Estos son parámetros S2S compartidos que se definen una sola vez en Fundamentos de S2S .
Parámetros de la aplicación
Información de la app
El identificador de la app (
i
),
app_v
y
att_authorization_status
son parámetros compartidos. Consulta
Parámetros de la aplicación en Fundamentos de S2S
.
| Parámetro | Detalles |
|---|---|
install
|
Indica si la sesión representa la primera sesión después de la instalación o la reinstalación.
Requerido para: Capacidades de seguimiento de reinstalaciones
Ejemplo:
|
install_time
iOS, Android |
Timestamp Unix de la primera instalación de la app.
Ejemplo:
|
update_time
iOS, Android |
Timestamp Unix de la última actualización de la app.
Ejemplo:
|
Parámetros de prevención de fraude
Validación de la fuente de instalación
| Parámetro | Detalles |
|---|---|
install_source
Android, PC |
Nombre del paquete de la fuente de instalación o identificador de la tienda. Android: Install Source Package Name
Ejemplo de Android:
Tiendas de PC soportadas:
|
install_receipt
iOS |
Recibo de instalación de iOS codificado en Base64 para la validación de fraude.
Ejemplo (truncado):
|
Parámetros de deep linking
Soporte para deep links
| Parámetro | Detalles |
|---|---|
openuri
iOS, Android |
Deep link, Universal Link o App Link codificado en URL que abrió la app.
URL original:
Ejemplo codificado:
|
ddl_enabled
iOS, Android |
Indica si la app espera una URL de deferred deep link en la respuesta.
Ejemplo de respuesta:
|
singular_link_resolve_required
iOS, Android |
Solicita la resolución de un short link de Singular a un long link.
Debe usarse con
Ejemplo de respuesta:
|
Parámetros avanzados de atribución
Mejora de la atribución por plataforma
| Parámetro | Detalles |
|---|---|
install_ref
Android (Google Play) Native PC (Google Play Games) |
Información del Google Install Referrer codificada en JSON URL. Proporciona la atribución más precisa para instalaciones de Android y de Google Play Games en PC. Estructura JSON de Android:
Estructura JSON de Native PC:
Requerido para:
Más información:
Ejemplo codificado en URL:
|
meta_ref
Android (Google Play) |
A partir del 18 de junio de 2025: Meta Advanced Mobile Measurement (AMM) elimina la necesidad de implementar el Meta Install Referrer. No se recomienda si AMM está habilitado. Meta Install Referrer codificado en JSON URL para obtener datos de atribución granulares a nivel de usuario. Estructura JSON:
Más información: Preguntas frecuentes sobre el Meta Referrer |
attribution_token
iOS |
Token de atribución de Apple Search Ads del framework AdServices (iOS 14.3+). Obtén con: attributionToken() en el primer inicio de la app después de la instalación/reinstalación.
Ejemplo (truncado):
|
Parámetros opcionales
Los parámetros opcionales mejoran las capacidades de seguimiento y soportan funcionalidades avanzadas.
Parámetros de timestamp
| Parámetro | Detalles |
|---|---|
utime
|
Timestamp Unix de 10 dígitos de la sesión.
Ejemplo:
|
umilisec
|
Timestamp Unix de 13 dígitos con milisegundos.
Ejemplo:
|
Parámetros de red y ubicación
Estos son parámetros S2S compartidos que se definen una sola vez en Fundamentos de S2S .
Propiedades personalizadas
| Parámetro | Detalles |
|---|---|
global_properties
|
Objeto JSON codificado en URL con pares clave-valor personalizados. Límites:
JSON:
Codificado en URL:
|
Soporte para seguimiento de desinstalaciones
| Parámetro | Detalles |
|---|---|
apns_token
iOS |
Token de dispositivo de Apple Push Notification Service (APNs) codificado en hexadecimal.
Ejemplo:
|
fcm
Android |
Token de dispositivo de Firebase Cloud Messaging.
Ejemplo:
|
Parámetros de privacidad de datos
Estos son parámetros S2S compartidos que se definen una sola vez en Fundamentos de S2S .
Soporte entre dispositivos
Estos son parámetros S2S compartidos que se definen una sola vez en Fundamentos de S2S .
Soporte para SKAdNetwork
| Parámetro | Detalles |
|---|---|
skan_conversion_value
iOS |
Valor de conversión de SKAdNetwork más reciente al momento de la sesión. 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 de la sesión.
Ejemplo:
|
Soporte para Google Ads ICM (Beta)
| Parámetro | Detalles |
|---|---|
odm_info
iOS |
Requerido para Google Ads Integrated Conversion Measurement (Beta). |
odm_error
iOS |
Requerido para Google Ads Integrated Conversion Measurement (Beta). |
Ejemplos de solicitud
El código de muestra ilustra la integración del endpoint SESSION en múltiples lenguajes de programación.
Aviso sobre los ejemplos:
Los ejemplos 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 la app) único
para desarrollo/pruebas.
Ejemplo de 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',
'aifa': '8ecd7512-2864-440c-93f3-a3cabe62525b',
'asid': 'edee92a2-7b2f-45f4-a509-840f170fc6d9',
'install': 'true',
'n': 'MyCoolAppName',
'bd': 'Build/13D15',
'app_v': '1.2.3',
'openuri': 'myapp://home/page?queryparam1=value1',
'ddl_enabled': 'true',
'install_source': 'com.android.vending',
'install_time': 1510040127,
'update_time': 1510090877
}
response = requests.get('https://s2s.singular.net/api/v1/launch', params=params)
print(response.json())
Ejemplo de cURL
curl -G "https://s2s.singular.net/api/v1/launch" \
--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 "aifa=8ecd7512-2864-440c-93f3-a3cabe62525b" \
--data-urlencode "asid=edee92a2-7b2f-45f4-a509-840f170fc6d9" \
--data-urlencode "install=true" \
--data-urlencode "n=MyCoolAppName" \
--data-urlencode "bd=Build/13D15" \
--data-urlencode "app_v=1.2.3" \
--data-urlencode "openuri=myapp://home/page?queryparam1=value1" \
--data-urlencode "ddl_enabled=true" \
--data-urlencode "install_source=com.android.vending" \
--data-urlencode "install_time=1510040127" \
--data-urlencode "update_time=1510090877"
Ejemplo de HTTP
GET /api/v1/launch
?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
&aifa=8ecd7512-2864-440c-93f3-a3cabe62525b
&asid=edee92a2-7b2f-45f4-a509-840f170fc6d9
&install=true
&n=MyCoolAppName
&bd=Build%2F13D15
&app_v=1.2.3
&openuri=myapp%3A%2F%2Fhome%2Fpage%3Fqueryparam1%3Dvalue1
&ddl_enabled=true
&install_source=com.android.vending
&install_time=1510040127
&update_time=1510090877 HTTP/1.1
Host: s2s.singular.net
Accept: application/json
Ejemplo de Java
// Base URL
String baseUrl = "https://s2s.singular.net/api/v1/launch";
// 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("aifa", "8ecd7512-2864-440c-93f3-a3cabe62525b");
params.put("asid", "edee92a2-7b2f-45f4-a509-840f170fc6d9");
params.put("install", "true");
params.put("n", "MyCoolAppName");
params.put("bd", "Build/13D15");
params.put("app_v", "1.2.3");
params.put("openuri", "myapp://home/page?queryparam1=value1");
params.put("ddl_enabled", "true");
params.put("install_source", "com.android.vending");
params.put("install_time", "1510040127");
params.put("update_time", "1510090877");
// 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 SESSION 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 gestión de errores
Pruebas y validación
Verifica la integración 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
- Registra un dispositivo de prueba: Obtén el ID de publicidad del dispositivo y añádelo a la SDK Console de Singular
- Habilita el registro en la Console: Añade el identificador del dispositivo en la SDK Console para capturar los datos de prueba
-
Usa un ID de app de desarrollo:
Anula el identificador de la app
con la versión de desarrollo (por ejemplo,
com.singular.app.dev) para separar los datos de prueba de los de producción - Inicia la app: Abre la app desde el estado terminado para activar una sesión
- Valida los datos del cliente: Confirma que la app envía todos los puntos de datos de Singular requeridos a tu servidor
-
Verifica la solicitud del servidor:
Confirma que tu servidor envía
la solicitud SESSION a
https://s2s.singular.net/api/v1/launchcon todos los parámetros requeridos - Revisa la SDK Console: En cuestión de segundos, el evento SESSION debería aparecer en la SDK Console
- Repite las pruebas: Valida que SESSION se active en cada entrada a la app y en cada operación de primer plano
Verificación crítica: Confirma que el evento SESSION ocurra en la apertura/primer plano de la app ANTES de cualquier solicitud EVENT. Un orden inválido causa errores de atribución.
Indicador de éxito: Si SESSION aparece en la SDK Console, ¡has completado con éxito una prueba de integración de extremo a extremo!
Recursos adicionales
Documentación de pruebas
Guía de pruebas completa: Guía de pruebas de integración S2S