Referencia de endpoints de la API para PC y Consola
Referencia completa de la API para los endpoints server-to-server de PC y Consola, que proporciona especificaciones detalladas de parámetros y ejemplos de implementación para el seguimiento de sesiones y el reporte de eventos.
Referencias relacionadas: PC y consola usan los mismos endpoints de S2S que el resto del conjunto. Consulta la referencia del endpoint SESSION y la referencia del endpoint EVENT para los equivalentes de dispositivos móviles y web. Esta referencia cubre los endpoints de sesión y evento de PC y consola.
Función Enterprise: La atribución de juegos de PC y Consola es una función enterprise. Para obtener más información, lee las Preguntas frecuentes sobre atribución de juegos de PC y Consola o comunícate con tu Customer Success Manager.
Guía de integración: Para obtener instrucciones completas de implementación y prácticas recomendadas, consulta la Guía de integración S2S de PC y Consola .
Endpoint de notificación de sesiones
Reporta los inicios de juego y las sesiones a Singular para la atribución de instalaciones, el seguimiento de re-engagement y el análisis de retención de usuarios.
Especificación del endpoint
| Método | URL |
|---|---|
POST
|
https://s2s.singular.net/api/v1/launch
|
Los parámetros se envían como un cuerpo de solicitud
application/x-www-form-urlencoded
. Incluye el siguiente encabezado obligatorio:
Content-Type: application/x-www-form-urlencoded
Propósito
Usa el endpoint de notificación de sesiones para reportar todos los inicios de juego (primeras sesiones y sesiones repetidas) casi en tiempo real. El primer inicio de juego que Singular recibe para una instalación identificada por el Singular Device ID activa el proceso de atribución.
Flujo de trabajo de atribución:
- Primera sesión: Activa la comparación de la atribución de instalación con los clics de campañas web
- Sesiones posteriores: Se registran para el análisis de actividad del usuario, retención y re-engagement
- Reporte en tiempo real: Envía las notificaciones de sesión lo más cerca posible del inicio real del juego
Parámetros de sesión
Parámetros obligatorios
| Parámetro | Detalles |
|---|---|
a |
Tipo: String
Importante: No uses la Reporting API Key. Las solicitudes serán rechazadas.
Ejemplo:
|
p
|
Tipo: String
|
i
|
Tipo: String
Crítico: Debe coincidir exactamente con el Product ID del Web SDK para que la atribución funcione. Usa el mismo valor en todas las plataformas para el mismo juego.
Ejemplo:
|
sdid
|
Tipo: UUIDv4
|
os
|
Tipo: String
|
install_source
|
Tipo: String
|
ip
|
Tipo: String
Alternativa: Usa
Ejemplo:
|
Parámetros opcionales
Se admiten los siguientes parámetros opcionales.
| Parámetro | Detalles |
|---|---|
install_ref
|
Tipo: String
Requisitos:
Consulta la
documentación de Install Referrer de Google Play para PC nativo
para conocer los detalles de implementación.
|
match_id
|
Tipo: String
Requisitos:
Consulta
Atribución por Match ID
para conocer los detalles de implementación.
|
av
|
Tipo: String
|
global_properties
|
Tipo: JSON
|
install
|
Tipo: Boolean
|
utime
|
Tipo: Integer
|
umilisec
|
Tipo: Integer
|
ve |
Tipo: String
|
ua |
Tipo: String
|
use_ip |
Tipo: Boolean
Limitaciones:
Ejemplo:
|
data_sharing_options |
Tipo: JSON
|
custom_user_id |
Tipo: String
Sin PII: No pases información de identificación personal. Usa un identificador interno con hash u otro tipo de anonimización, no direcciones de correo electrónico, números de teléfono ni nombres sin procesar.
Ejemplo:
|
Ejemplos de solicitud
Implementaciones de ejemplo
Solicitud de sesión básica
curl -X POST "https://s2s.singular.net/api/v1/launch" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "a=your_sdk_key" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=49c2d3a6-326e-4ec5-a16b-0a47e34ed953" \
--data-urlencode "p=PC" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "ip=172.58.29.235"
Primer inicio con Match ID
curl -X POST "https://s2s.singular.net/api/v1/launch" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "a=your_sdk_key" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=49c2d3a6-326e-4ec5-a16b-0a47e34ed953" \
--data-urlencode "p=PC" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "ip=172.58.29.235" \
--data-urlencode "match_id=abc123def456" \
--data-urlencode "install=true"
Solicitud de sesión básica
import requests
def report_session(config):
url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': config['sdk_key'],
'i': config['game_id'],
'sdid': config['device_id'],
'p': config['platform'],
'os': config['os_version'],
'install_source': config['store'],
'ip': config['ip_address']
}
response = requests.post(url, data=params, headers={'Content-Type': 'application/x-www-form-urlencoded'})
return response.json()
# Example usage
report_session({
'sdk_key': 'your_sdk_key',
'game_id': 'com.singular.game',
'device_id': '49c2d3a6-326e-4ec5-a16b-0a47e34ed953',
'platform': 'PC',
'os_version': 'windows',
'store': 'steam',
'ip_address': '172.58.29.235'
})
Primer inicio con Match ID
def report_first_launch(config):
url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': config['sdk_key'],
'i': config['game_id'],
'sdid': config['device_id'],
'p': config['platform'],
'os': config['os_version'],
'install_source': config['store'],
'ip': config['ip_address'],
'match_id': config['match_id'],
'install': 'true'
}
response = requests.post(url, data=params, headers={'Content-Type': 'application/x-www-form-urlencoded'})
return response.json()
Solicitud de sesión básica
async function reportSession(config) {
const url = 'https://s2s.singular.net/api/v1/launch';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'ip': config.ipAddress
});
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: params.toString()
});
return await response.json();
}
// Example usage
reportSession({
sdkKey: 'your_sdk_key',
gameId: 'com.singular.game',
deviceId: '49c2d3a6-326e-4ec5-a16b-0a47e34ed953',
platform: 'PC',
osVersion: 'windows',
store: 'steam',
ipAddress: '172.58.29.235'
});
Primer inicio con Match ID
async function reportFirstLaunch(config) {
const url = 'https://s2s.singular.net/api/v1/launch';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'ip': config.ipAddress,
'match_id': config.matchId,
'install': 'true'
});
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: params.toString()
});
return await response.json();
}
Endpoint de notificación de eventos
Compatibilidad con la Conversion API de partners:
Para reenviar estos eventos a los partners de redes publicitarias a través de las integraciones de Conversion API de Singular, incluye los atributos de evento opcionales estándar (datos propios cifrados con hash, como
eventId
y
ehash
). Consulta
Atributos de evento estándar para integraciones de Conversion API
.
Reporta los eventos dentro del juego a Singular para el análisis, la optimización de campañas y el reenvío a partners.
V2 obligatorio a partir del 15 de julio de 2026. Las cuentas creadas el 15 de julio de 2026 o después deben usar el Event Endpoint V2 (basado en SDID); V1 no está disponible para cuentas nuevas. Los clientes existentes que ya están integrados con V1 no se ven afectados. Comunícate con tu Customer Success Manager de Singular si deseas migrar a V2.
Especificación del endpoint
| Método | URL |
|---|---|
POST
|
https://s2s.singular.net/api/v2/evt
|
Los parámetros se envían como un cuerpo de solicitud
application/x-www-form-urlencoded
. Incluye el siguiente encabezado obligatorio:
Content-Type: application/x-www-form-urlencoded
Propósito
Usa el endpoint de notificación de eventos para reportar todos los eventos deseados dentro del juego casi en tiempo real. Los datos de eventos se usan para el análisis, el reporte, la optimización de partners y la medición del rendimiento de las campañas.
Prácticas recomendadas para eventos:
- Eventos estándar: Usa los nombres de eventos estándar de Singular para el mapeo automático con los partners
- Reporte en tiempo real: Envía los eventos lo más cerca posible del momento en que ocurren
- Eventos de ingresos: Incluye los parámetros de ingresos para el seguimiento de compras y el análisis de ROI
Parámetros de evento
Parámetros obligatorios
| Parámetro | Detalles |
|---|---|
a |
Tipo: String
Importante: No uses la Reporting API Key. Las solicitudes serán rechazadas.
Ejemplo:
|
p
|
Tipo: String
|
i
|
Tipo: String
|
sdid
|
Tipo: UUIDv4
|
n
|
Tipo: String
Recomendado: Usa los nombres de eventos estándar de Singular para la integración automática con partners.
Ejemplo:
|
os
|
Tipo: String
|
install_source
|
Tipo: String
|
ip
|
Tipo: String
|
Parámetros opcionales
Se admiten los siguientes parámetros opcionales.
| Parámetro | Detalles |
|---|---|
e
|
Tipo: JSON
Recomendado: Usa los nombres de atributos estándar de Singular para la compatibilidad con partners.
Ejemplo:
|
is_revenue_event
|
Tipo: Boolean
|
amt
|
Tipo: Number
|
cur
|
Tipo: String
|
av
|
Tipo: String
|
global_properties
|
Tipo: JSON
|
utime
|
Tipo: Integer
|
umilisec
|
Tipo: Integer
|
ve |
Tipo: String
|
ua |
Tipo: String
|
use_ip |
Tipo: Boolean
Limitaciones:
Ejemplo:
|
data_sharing_options |
Tipo: JSON
|
custom_user_id |
Tipo: String
Sin PII: No pases información de identificación personal. Usa un identificador interno con hash u otro tipo de anonimización, no direcciones de correo electrónico, números de teléfono ni nombres sin procesar.
Ejemplo:
|
Ejemplos de solicitud
Implementaciones de ejemplo
Evento estándar
curl -X POST "https://s2s.singular.net/api/v2/evt" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "a=your_sdk_key" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=49c2d3a6-326e-4ec5-a16b-0a47e34ed953" \
--data-urlencode "p=PC" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "n=sng_level_achieved" \
--data-urlencode 'e={"sng_attr_level":"5","sng_attr_score":"1250"}' \
--data-urlencode "ip=172.58.29.235"
Evento de ingresos
curl -X POST "https://s2s.singular.net/api/v2/evt" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "a=your_sdk_key" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=49c2d3a6-326e-4ec5-a16b-0a47e34ed953" \
--data-urlencode "p=PC" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "n=__iap__" \
--data-urlencode "is_revenue_event=true" \
--data-urlencode "amt=9.99" \
--data-urlencode "cur=USD" \
--data-urlencode "ip=172.58.29.235"
Evento estándar
import requests
import json
def report_event(config):
url = "https://s2s.singular.net/api/v2/evt"
params = {
'a': config['sdk_key'],
'i': config['game_id'],
'sdid': config['device_id'],
'p': config['platform'],
'os': config['os_version'],
'install_source': config['store'],
'n': config['event_name'],
'ip': config['ip_address']
}
if 'attributes' in config:
params['e'] = json.dumps(config['attributes'])
response = requests.post(url, data=params, headers={'Content-Type': 'application/x-www-form-urlencoded'})
return response.json()
# Example usage
report_event({
'sdk_key': 'your_sdk_key',
'game_id': 'com.singular.game',
'device_id': '49c2d3a6-326e-4ec5-a16b-0a47e34ed953',
'platform': 'PC',
'os_version': 'windows',
'store': 'steam',
'event_name': 'sng_level_achieved',
'attributes': {
'sng_attr_level': '5',
'sng_attr_score': '1250'
},
'ip_address': '172.58.29.235'
})
Evento de ingresos
def report_revenue(config):
url = "https://s2s.singular.net/api/v2/evt"
params = {
'a': config['sdk_key'],
'i': config['game_id'],
'sdid': config['device_id'],
'p': config['platform'],
'os': config['os_version'],
'install_source': config['store'],
'n': '__iap__',
'is_revenue_event': 'true',
'amt': config['amount'],
'cur': config['currency'],
'ip': config['ip_address']
}
response = requests.post(url, data=params, headers={'Content-Type': 'application/x-www-form-urlencoded'})
return response.json()
# Example usage
report_revenue({
'sdk_key': 'your_sdk_key',
'game_id': 'com.singular.game',
'device_id': '49c2d3a6-326e-4ec5-a16b-0a47e34ed953',
'platform': 'PC',
'os_version': 'windows',
'store': 'steam',
'amount': 9.99,
'currency': 'USD',
'ip_address': '172.58.29.235'
})
Evento estándar
async function reportEvent(config) {
const url = 'https://s2s.singular.net/api/v2/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'n': config.eventName,
'ip': config.ipAddress
});
if (config.attributes) {
params.append('e', JSON.stringify(config.attributes));
}
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: params.toString()
});
return await response.json();
}
// Example usage
reportEvent({
sdkKey: 'your_sdk_key',
gameId: 'com.singular.game',
deviceId: '49c2d3a6-326e-4ec5-a16b-0a47e34ed953',
platform: 'PC',
osVersion: 'windows',
store: 'steam',
eventName: 'sng_level_achieved',
attributes: {
'sng_attr_level': '5',
'sng_attr_score': '1250'
},
ipAddress: '172.58.29.235'
});
Evento de ingresos
async function reportRevenue(config) {
const url = 'https://s2s.singular.net/api/v2/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'os': config.osVersion,
'install_source': config.store,
'n': '__iap__',
'is_revenue_event': 'true',
'amt': config.amount,
'cur': config.currency,
'ip': config.ipAddress
});
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: params.toString()
});
return await response.json();
}
// Example usage
reportRevenue({
sdkKey: 'your_sdk_key',
gameId: 'com.singular.game',
deviceId: '49c2d3a6-326e-4ec5-a16b-0a47e34ed953',
platform: 'PC',
osVersion: 'windows',
store: 'steam',
amount: 9.99,
currency: 'USD',
ipAddress: '172.58.29.235'
});
Manejo de respuestas
Ambos endpoints devuelven respuestas JSON consistentes que requieren la validación del campo de estado para determinar el éxito o el error.
Formato de respuesta
Importante:
Todas las respuestas devuelven códigos de estado HTTP 200. Valida
siempre el campo
status
del cuerpo de la respuesta
para determinar el éxito
(
ok
)
o el error (
error
).
Para obtener la documentación completa de los códigos de respuesta y las estrategias de manejo de errores, consulta Códigos de respuesta S2S y manejo de errores .
Recursos adicionales
- Guía de integración: Guía de integración S2S de PC y Consola
- Web SDK: Descripción general del Web SDK e introducción
- Preguntas frecuentes sobre atribución: Preguntas frecuentes sobre atribución de juegos de PC y Consola
- Eventos estándar: Referencia de eventos estándar de Singular