Referencia de la API del endpoint SESSION

Referencia de la API del endpoint SESSION

Realiza el seguimiento de las sesiones de los usuarios y habilita la atribución de instalaciones de la app, reinteracción 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

El endpoint SESSION notifica a Singular cuando un usuario abre tu app, lo que impulsa la atribución de instalaciones y reinteracción y las métricas de retención. ¿Es tu primera vez con Server-to-Server? Consulta la guía de fundamentos de S2S para conocer los conceptos básicos y la configuración compartida.

Capacidades compatibles:

  • Atribución de instalaciones: Atribución de primer contacto a campañas de marketing
  • Atribución de reinteracción: Atribución multicontacto para usuarios que regresan
  • Métricas de retención: Seguimiento de interacción basado en sesiones

Gestión de sesiones

El endpoint SESSION notifica a Singular los eventos de apertura de la app para inicializar las sesiones de usuario con fines de atribución y seguimiento.

Cuándo enviar sesiones

Desencadenadores 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 vuelve a primer plano después del período de tiempo de espera (recomendado: 60 segundos)

Lógica del tiempo de espera de la sesión

Implementa un tiempo de espera de sesión para evitar solicitudes SESSION excesivas cuando la app pasa brevemente 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 vuelve a primer plano dentro del período de tiempo de espera
  • Primer plano > tiempo de espera: Envía SESSION si la app permanece en segundo plano más allá del período 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

Compatibilidad con deep links: Envía siempre SESSION para las aperturas de la app mediante deep links, Universal Links o App Links con el parámetro openuri completado, independientemente del estado del tiempo de espera.


Procesamiento de la 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 correspondientes.

Tipo de sesión Procesamiento de Singular Resultado de la atribución
Primera sesión (instalación nueva) Se activa el proceso de atribución de instalación Atribuye la instalación a una campaña de marketing
Apta para reinteracción Se activa el proceso de atribución de reinteracción Atribuye el regreso del usuario a una campaña o deep link
Sesión estándar Se registra la sesión para el seguimiento de retención Cuenta para las métricas de actividad e interacción del usuario

Más información: Preguntas frecuentes sobre atribución de reinteracción


Requisitos de orden de los 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 orden:

  1. Sesión antes de los eventos: Se debe recibir una única SESSION antes de cualquier evento de esa sesión
  2. Transmisión de eventos en tiempo real: Los eventos in-app deben enviarse en tiempo real después de su respectiva sesión
  3. Procesamiento secuencial: Un orden de sesión no válido produce inconsistencias en los datos y errores de atribución

Especificación del endpoint de la API

El endpoint SESSION acepta solicitudes POST con los parámetros enviados como application/x-www-form-urlencoded .

Endpoint

URL base y método

POST https://s2s.singular.net/api/v1/launch

Encabezado obligatorio:

Content-Type: application/x-www-form-urlencoded

Formato de la solicitud:

POST /api/v1/launch HTTP/1.1
Host: s2s.singular.net
Content-Type: application/x-www-form-urlencoded

param1=value1&param2=value2

Parámetros obligatorios

Todas las solicitudes SESSION deben incluir estos parámetros obligatorios con los valores y el formato correctos.

Autenticación de la API

SDK Key

Parámetro Detalles
a

Tipo: String
Clave del SDK de Singular para la autenticación de la API.
Obtener desde: IU de Singular → Menú principal → Developer Tools .

Importante: No uses la Reporting API Key. Las solicitudes se rechazarán.

Ejemplo: sdkKey_afdadsf7asf56


Identificadores del dispositivo

Identificadores específicos de la plataforma

Parámetro Detalles
idfa

Plataforma: iOS
Tipo: UUIDv4
Identifier for Advertisers (IDFA) permite el seguimiento de anuncios y la atribución de campañas.
Requisito de ATT: iOS 14.5 y versiones posteriores requieren que el usuario dé su consentimiento a través del framework App Tracking Transparency.
Ejemplo: DFC5A647-9043-4699-B2A5-76F03A97064B

  • Omite el parámetro si el IDFA no está disponible (el usuario rechazó la solicitud de ATT).
  • Nunca envíes NULL ni una cadena vacía.
  • Obtener el IDFA
idfv

Plataforma: iOS
Tipo: UUIDv4
Identifier for Vendors (IDFV) se mantiene constante en todas las apps del mismo proveedor.
Siempre obligatorio: Debe incluirse independientemente del estado de ATT o de la disponibilidad del IDFA.
Ejemplo: 21DB6612-09B3-4ECC-84AC-B353B0AF1334

aifa

Plataforma: Android
Tipo: UUIDv4
(Google Play)
Google Advertising ID (GAID) permite el seguimiento publicitario que el usuario puede restablecer en Android.
Ejemplo: 8ecd7512-2864-440c-93f3-a3cabe62525b

  • Obligatorio en dispositivos con Google Play.
  • Omítelo en dispositivos sin Google Play.
  • Omítelo si no está disponible; nunca envíes NULL ni una cadena vacía.
  • Obtener el AIFA
asid

Plataforma: Android
Tipo: UUIDv4
(Google Play)
Android App Set ID proporciona un seguimiento entre apps respetuoso con la privacidad para el mismo desarrollador.
Siempre obligatorio: Debe incluirse en dispositivos con Google Play independientemente de la disponibilidad del GAID.
Ejemplo: edee92a2-7b2f-45f4-a509-840f170fc6d9

amid

Plataforma: Android
Tipo: UUIDv4
(Amazon)
Amazon Advertising ID para dispositivos Amazon sin Google Play Services.
Ejemplo: df07c7dc-cea7-4a89-b328-810ff5acb15d

  • Obligatorio para dispositivos Amazon Fire.
  • Omítelo si no está disponible.
  • Obtener el AMID
oaid

Plataforma: Android
Tipo: UUIDv4
(OEM chinos)
Open Advertising Identifier (OAID) para dispositivos fabricados en China sin Google Play Services (Huawei, Xiaomi, OPPO, etc.).
Ejemplo: 01234567-89abc-defe-dcba-987654321012

  • Obligatorio para dispositivos de OEM chinos sin Google Play.
  • Omítelo si no está disponible.
  • Obtener el OAID
andi

Plataforma: Android
Tipo: String
(Sin Google Play)
Android ID es un identificador de 64 bits generado por el dispositivo.

Uso restringido: Prohibido en dispositivos con Google Play; usa AIFA y ASID en su lugar. Envíalo solo si no hay otros identificadores disponibles y la app no se distribuye a través de Google Play.

Ejemplo: fc8d449516de0dfb

sdid

Plataforma: iOS, Android, PC, Xbox, PlayStation, Nintendo, MetaQuest, CTV
Tipo: UUIDv4
Singular Device ID es un UUIDv4 anonimizado generado por el cliente que representa una instalación única de la app.
Identificador principal: Único identificador de dispositivo relevante para aplicaciones de PC y consola.
Ejemplo: 40009df0-d618-4d81-9da1-cbb3337b8dec


Parámetros del dispositivo

Información del dispositivo

Parámetro Detalles
p

Tipo: String
Plataforma de la aplicación.
Valores permitidos (distingue mayúsculas y minúsculas):
Ejemplo: Android

  • Android
  • iOS
  • PC
  • Xbox
  • Playstation
  • Nintendo
  • MetaQuest
  • CTV
ip

Tipo: String
Ejemplo: 172.58.29.235

Dirección IPv4 pública del dispositivo. Se admite IPv6, pero se recomienda IPv4 para la compatibilidad de la atribución con las ad networks.
ve

Tipo: String
Ejemplo: 9.2

Versión del SO del dispositivo en el momento de la sesión.
ma

Plataforma: iOS, Android
Tipo: String
Marca del dispositivo (nombre del fabricante). Debe usarse con mo (modelo).
Obtener la marca del dispositivo
Ejemplo: Samsung , LG , Apple

mo

Plataforma: iOS, Android
Tipo: String
Modelo del dispositivo. Debe usarse con ma (marca).
Obtener el modelo del dispositivo
Ejemplo: iPhone 4S , Galaxy SIII

lc

Plataforma: iOS, Android
Tipo: String
Etiqueta de configuración regional (locale) IETF: código de idioma y país de dos letras separados por un guion bajo.
Obtener la configuración regional del dispositivo
Ejemplo: en_US

bd

Plataforma: iOS, Android
Tipo: String
Identificador de compilación (build) del dispositivo, codificado en URL.
Obtener la compilación del dispositivo
Ejemplo: Build%2F13D15


Parámetros de la aplicación

Información de la app

Parámetro Detalles
i

Tipo: String
Identificador de la app (distingue mayúsculas y minúsculas).
Ejemplo: com.singular.app

  • Android: nombre del paquete (por ejemplo, com.singular.app )
  • iOS: Bundle ID (por ejemplo, com.singular.app )
  • PC/Consola: tu identificador designado
app_v

Tipo: String
Ejemplo: 1.2.3

Versión de la aplicación.
att_authorization_status

Plataforma: iOS
Tipo: Integer
Código de estado de App Tracking Transparency (ATT) (iOS 14.5 y versiones posteriores).
Valores de estado:

  • 0 - Sin determinar (no se mostró la solicitud)
  • 1 - Restringido (seguimiento deshabilitado a nivel del dispositivo)
  • 2 - Denegado (el usuario rechazó la autorización)
  • 3 - Autorizado (el usuario concedió la autorización)

Siempre obligatorio: Aunque ATT no esté implementado, envía 0 (sin determinar).

Ejemplo: 3

Parámetro Detalles
install

Tipo: Boolean
Indica si la sesión representa la primera sesión después de una instalación o reinstalación.
Obligatorio para: Funciones de seguimiento de reinstalaciones
Ejemplo: true

  • true - Primera sesión después de una instalación nueva/reinstalación
  • false - Sesión posterior (la app ya está instalada)
install_time

Plataforma: iOS, Android
Tipo: Integer
Marca de tiempo Unix (en segundos) de cuándo se instaló físicamente la app en el dispositivo, según lo informado por el SO.
Ejemplo: 1510040127

Esta es la hora de instalación del dispositivo, no la hora de instalación de la atribución de Singular. La atribución usa la marca de tiempo de la sesión ( utime ) de la primera sesión ( install=true ).

Consulta la Guía de obtención de datos del dispositivo para saber cómo obtener este valor en iOS y Android.

update_time

Plataforma: iOS, Android
Tipo: Integer
Marca de tiempo Unix (en segundos) de cuándo se actualizó por última vez la app en el dispositivo, según lo informado por el SO.
Ejemplo: 1510040127

Consulta la Guía de obtención de datos del dispositivo para saber cómo obtener este valor en iOS y Android.


Parámetros de prevención de fraude

Validación de la fuente de instalación

Parámetro Detalles
install_source

Plataforma: Android, PC
Tipo: String
Nombre del paquete de la fuente de instalación o identificador de la tienda.
Android: Nombre del paquete de la fuente de instalación
Ejemplo de Android: com.android.vending (Google Play Store)
Tiendas compatibles en PC:

  • steam
  • epic
  • microsoftstore
  • humblestore
  • gog
  • selfdistributed
install_receipt

Plataforma: iOS
Tipo: String
Recibo de instalación de iOS codificado en Base64 para la validación de fraude.
Ejemplo (truncado): MIJF9wYJKoZIhvcNAQcCoIJF6DCCReQCAQExCzAJBgUrDgMCGgUAMII1m...


Parámetros de deep linking

Compatibilidad con deep links

Parámetro Detalles
openuri

Plataforma: iOS, Android
Tipo: String
Deep link, Universal Link o App Link codificado en URL que abrió la app.
URL original: myapp://home/page?queryparam1=value1&queryparam2=value2
Ejemplo codificado: myapp%3A%2F%2Fhome%2Fpage%3Fqueryparam1%3Dvalue1%26queryparam2%3Dvalue2

ddl_enabled

Plataforma: iOS, Android
Tipo: Boolean
Indica si la app espera una URL de deep link diferido en la respuesta.
Respuesta de ejemplo:

  • true - Espera un deep link diferido en la respuesta
  • false - No espera un deep link diferido
{
  "deferred_deeplink": "myapp://deferred-deeplink",
  "status": "ok",
  "deferred_passthrough": "passthroughvalue"
}
singular_link_resolve_required

Plataforma: iOS, Android
Tipo: Boolean
Solicita la resolución de un enlace corto de Singular a un enlace largo. Debe usarse con openuri que contenga un enlace corto de Singular.
Respuesta de ejemplo:

  • true - Devuelve el enlace largo expandido
  • false - No resuelve el enlace
{
  "status":"ok",
  "resolved_singular_link":"https://myapp.sng.link/A59c0/nha7?_dl=myapp%3A%2F%2Fdeeplink&_ddl=myapp%3A%2F%2Fdeferred-deeplink&_p=passthroughvalue"
}

Parámetros de atribución avanzada

Mejora de la atribución por plataforma

Parámetro Detalles
install_ref Native PC (Google Play Games)

Plataforma: Android (Google Play)
Tipo: JSON
Información de Google Install Referrer codificada en URL en formato JSON. Proporciona la atribución más precisa para instalaciones de Android y de PC con Google Play Games.
Estructura JSON de Android:
Estructura JSON de Native PC:
Obligatorio para:
Más información:

Ejemplo codificado en URL: %7B%22installBeginTimestampSeconds%22%3A%221568939453%22...

{
   "installBeginTimestampSeconds":"1568939453",
   "referrer":"utm_source=google-play&utm_medium=organic",
   "clickTimestampSeconds":"0",
   "referrer_source":"service",
   "current_device_time":"1568944524"
}
{
   "install_time_epoch_seconds":"1568939453",
   "install_referrer":"utm_source=google-play&utm_medium=organic"
}
  • Exportaciones a nivel de usuario de Facebook
  • Uso compartido con Data Destination
  • Precisión de los postbacks
meta_ref

Plataforma: Android (Google Play)
Tipo: JSON

A partir del 18 de junio de 2025: Meta Advanced Mobile Measurement (AMM) elimina la necesidad de implementar Meta Install Referrer. No se recomienda si AMM está habilitado.

Meta Install Referrer codificado en URL en formato JSON para datos de atribución granulares a nivel de usuario.
Estructura JSON:
Más información: Preguntas frecuentes sobre Meta Referrer

{
  "install_referrer": {
    "utm_source":"apps.facebook.com",
    "utm_campaign": "fb4a",
    "utm_content": {
      "source":{
        "data":"c7e6b890bf18a059c2185650bdb1af3dced7...",
        "nonce":"24859720343e2381daee9f39ae61"
        },
      "app":533744218636280,
      "t":1731181327
      },
    "is_ct":1,
    "actual_timestamp":1731181444
  }
}
attribution_token

Plataforma: iOS
Tipo: String
Token de atribución de Apple Search Ads del framework AdServices (iOS 14.3 y versiones posteriores).
Obtener con: attributionToken() en el primer inicio de la app después de la instalación/reinstalación.
Ejemplo (truncado): KztLg%2FIkNsWDMuBMOU%2BySnkPU5myJb4OFmeaMUE%2BTqQJP...


Parámetros opcionales

Los parámetros opcionales mejoran las funciones de seguimiento y admiten funciones avanzadas.

Parámetros de marca de tiempo

Parámetro Detalles
utime

Tipo: Integer
Marca de tiempo Unix de 10 dígitos de la sesión.
Ejemplo: 1483228800

umilisec

Tipo: Integer
Marca de tiempo Unix de 13 dígitos con milisegundos.
Ejemplo: 1483228800000


Parámetros de red y ubicación

Parámetro Detalles
use_ip

Tipo: Boolean
Indica a Singular que extraiga la dirección IP de la solicitud HTTP en lugar del parámetro ip .

Limitaciones:

  • Impide la geolocalización basada en IP por parte de Singular.
  • Proporciona un código de país de dos letras a través del parámetro country .
  • Es mutuamente excluyente con el parámetro ip ; no uses ambos.
  • Debes proporcionar ip o use_ip para evitar el rechazo de datos.

Ejemplo: true

country

Tipo: String
Código de país de dos letras ISO 3166-1 alpha-2 .
Obligatorio cuando: La dirección IP no está disponible o use_ip=true .
Ejemplo: US

ua

Tipo: String
Cadena de User Agent codificada en URL.
Sin procesar: Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15...
Ejemplo: Mozilla%2F5.0%20(iPhone%3B%20CPU%20iPhone%20OS%2014_0...

c

Plataforma: iOS, Android
Tipo: String
Tipo de conexión de red.
Valores permitidos: wifi , carrier
Ejemplo: wifi

cn

Plataforma: iOS, Android
Tipo: String
Ejemplo: Comcast

Nombre del operador (carrier) del proveedor de internet.

Propiedades personalizadas

Parámetro Detalles
global_properties

Tipo: JSON
Objeto JSON codificado en URL con pares clave-valor personalizados.
Límites:
JSON: {"key1":"value1","key2":"value2"}
Codificado en URL: %7B%22key1%22%3A%22value1%22%2C%22key2%22%3A%22value2%22%7D

  • Máximo 5 pares clave-valor
  • Máximo 200 caracteres por clave y valor

Compatibilidad con el seguimiento de desinstalaciones

Parámetro Detalles
apns_token

Plataforma: iOS
Tipo: String
Token de dispositivo de Apple Push Notification Service (APNs) codificado en hexadecimal.
Ejemplo: b0adf7c9730763f88e1a048e28c68a9f806ed032fb522debff5bfba010a9b052

  • Obligatorio para el seguimiento de desinstalaciones en iOS
  • Debe ser una cadena codificada en hexadecimal
  • Obtener el token de APNs
fcm

Plataforma: Android
Tipo: String
Token de dispositivo de Firebase Cloud Messaging.
Ejemplo: bk3RNwTe3H0CI2k_HHwgIpoDKCIZvvD...MExUdFQ3P1


Parámetros de privacidad de datos

Parámetro Detalles
data_sharing_options

Tipo: JSON
Consentimiento del usuario final para el uso compartido de datos, codificado en URL en formato JSON. Debe persistir y enviarse en todas las solicitudes SESSION y EVENT posteriores.
El usuario dio su consentimiento (opción activada):
El usuario lo rechazó (opción desactivada):
Ejemplo: %7B%22limit_data_sharing%22%3Atrue%7D

{"limit_data_sharing":false}
{"limit_data_sharing":true}
dnt

Plataforma: iOS, Android
Tipo: Integer
Estado de Do Not Track.
Ejemplo: 0

  • 1 - Do Not Track habilitado
  • 0 - Do Not Track deshabilitado
dntoff

Plataforma: iOS, Android
Tipo: Integer
Indica si Do Not Track está desactivado (OFF).
Ejemplo: 1

  • 0 - Do Not Track habilitado (OFF=false)
  • 1 - Do Not Track deshabilitado (OFF=true)

Compatibilidad entre dispositivos

Parámetro Detalles
custom_user_id

Tipo: String
Tu ID de usuario interno para el seguimiento entre dispositivos.

Sin PII: No envíes información de identificación personal. Usa un identificador interno con hash u anonimizado de otra forma, no direcciones de correo electrónico, números de teléfono ni nombres sin procesar.

Ejemplo: 123456789abcd


Compatibilidad con SKAdNetwork

Parámetro Detalles
skan_conversion_value

Plataforma: iOS
Tipo: Integer
Último valor de conversión de SKAdNetwork en el momento de la sesión.
Más información: Implementación de SKAdNetwork
Ejemplo: 7

skan_first_call_timestamp

Plataforma: iOS
Tipo: Integer
Marca de tiempo Unix de la primera llamada a la API de SKAdNetwork.
Ejemplo: 1483228800

skan_last_call_timestamp

Plataforma: iOS
Tipo: Integer
Marca de tiempo Unix de la llamada más reciente a la API de SKAdNetwork en el momento de la sesión.
Ejemplo: 1483228800


Compatibilidad con Google Ads ICM (Beta)

Parámetro Detalles
odm_info

Plataforma: iOS
Tipo: String
Obligatorio para Google Ads Integrated Conversion Measurement (Beta).
Documentación de Google Ads ICM

odm_error

Plataforma: iOS
Tipo: String
Obligatorio para Google Ads Integrated Conversion Measurement (Beta).
Documentación de Google Ads ICM


Ejemplos de solicitud

El código de muestra demuestra la integración del endpoint SESSION en varios lenguajes de programación.

Aviso sobre los ejemplos: Es posible que las muestras de código no incluyan todos los parámetros obligatorios. Valida la lista completa de parámetros antes de la implementación en producción. Usa un i (identificador de la app) único para el desarrollo/las pruebas.

PYTHON CURL HTTP JAVA

Ejemplo en Python

import requests

url = 'https://s2s.singular.net/api/v1/launch'
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
    '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.post(url, data=data, headers=headers)
print(response.json())

Códigos de respuesta y errores

El endpoint SESSION devuelve códigos de estado HTTP y respuestas JSON que indican el éxito o el fracaso de la solicitud.

Documentación completa de errores: Códigos de respuesta y gestión de errores de S2S


Pruebas y validación

Verifica la integración S2S antes de la implementación en producción usando la consola del SDK de Singular para la validación de datos en tiempo real.

Procedimiento de prueba

Validación de extremo a extremo

  1. Registra un dispositivo de prueba: Obtén el ID publicitario del dispositivo y agrégalo a la consola del SDK de Singular
  2. Habilita el registro en la consola: Agrega el identificador del dispositivo en la consola del SDK para capturar los datos de prueba
  3. Usa un ID de app de desarrollo: Sustituye el identificador de la app por la versión de desarrollo (por ejemplo, com.singular.app.dev ) para separar los datos de prueba de los de producción
  4. Inicia la app: Abre la app desde un estado terminado para activar una sesión
  5. Valida los datos del cliente: Confirma que la app envía todos los datos de Singular obligatorios a tu servidor
  6. Verifica la solicitud del servidor: Confirma que tu servidor envía la solicitud SESSION a https://s2s.singular.net/api/v1/launch con todos los parámetros obligatorios
  7. Revisa la consola del SDK: En cuestión de segundos, el evento SESSION debería aparecer en la consola del SDK
  8. Repite las pruebas: Valida que SESSION se active en cada entrada a la app y operación en primer plano

Evento de sesión en la consola del SDK

Verificación crítica: Confirma que el evento SESSION se produzca al abrir la app o pasar a primer plano ANTES de cualquier solicitud EVENT. Un orden no válido provoca errores de atribución.

Indicador de éxito: Si SESSION aparece en la consola del SDK, ¡has completado con éxito la 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