Referência de Endpoints da API para PC e Console
Referência completa da API para os endpoints server-to-server de PC e Console, fornecendo especificações detalhadas de parâmetros e exemplos de implementação para o rastreamento de sessões e o reporte de eventos.
Referências relacionadas: PC e Console usam os mesmos endpoints de S2S que o restante da suíte. Consulte a referência do endpoint SESSION e a referência do endpoint EVENT para os equivalentes de dispositivos móveis e web. Esta referência cobre os endpoints de sessão e evento de PC e Console.
Recurso Enterprise: A atribuição de jogos de PC e Console é um recurso enterprise. Para saber mais, leia o FAQ de Atribuição de Jogos de PC e Console ou entre em contato com o seu Customer Success Manager.
Guia de Integração: Para instruções completas de implementação e boas práticas, consulte o Guia de Integração S2S para PC e Console .
Endpoint de Notificação de Sessão
Reporte lançamentos de jogos e sessões para a Singular para atribuição de instalação, rastreamento de re-engajamento e análise de retenção de usuários.
Especificação do Endpoint
| Método | URL |
|---|---|
POST
|
https://s2s.singular.net/api/v1/launch
|
Os parâmetros são enviados como um corpo de requisição
application/x-www-form-urlencoded
. Inclua o seguinte cabeçalho obrigatório:
Content-Type: application/x-www-form-urlencoded
Finalidade
Use o Endpoint de Notificação de Sessão para reportar todos os lançamentos de jogos (primeiras sessões e sessões repetidas) em tempo quase real. O primeiro lançamento de jogo recebido pela Singular para uma instalação identificada pelo Singular Device ID aciona o processo de atribuição.
Fluxo de Atribuição:
- Primeira Sessão: Aciona a correspondência de atribuição de instalação com cliques de campanhas web
- Sessões Subsequentes: Rastreadas para análise de atividade do usuário, retenção e re-engajamento
- Reporte em Tempo Real: Envie as notificações de sessão o mais próximo possível do lançamento real do jogo
Parâmetros de Sessão
Parâmetros Obrigatórios
| Parâmetro | Detalhes |
|---|---|
a |
Tipo: String
Importante: Não use a Reporting API Key. As requisições serão rejeitadas.
Exemplo:
|
p
|
Tipo: String
|
i
|
Tipo: String
Crítico: Deve corresponder exatamente ao Product ID do Web SDK para que a atribuição funcione. Use o mesmo valor em todas as plataformas para o mesmo jogo.
Exemplo:
|
sdid
|
Tipo: UUIDv4
|
os
|
Tipo: String
|
install_source
|
Tipo: String
|
ip
|
Tipo: String
Alternativa: Use
Exemplo:
|
Parâmetros Opcionais
Os seguintes parâmetros opcionais são suportados.
| Parâmetro | Detalhes |
|---|---|
install_ref
|
Tipo: String
Requisitos:
Consulte a
documentação do Google Play for Native PC Install Referrer
para detalhes de implementação.
|
match_id
|
Tipo: String
Requisitos:
Consulte
Atribuição por Match ID
para detalhes de implementação.
|
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
Limitações:
Exemplo:
|
data_sharing_options |
Tipo: JSON
|
custom_user_id |
Tipo: String
Sem PII: Não passe informações de identificação pessoal. Use um identificador interno com hash ou anonimizado de outra forma, e não endereços de e-mail, números de telefone ou nomes brutos.
Exemplo:
|
Exemplos de Requisição
Implementações de Exemplo
Requisição de Sessão 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"
Primeiro Lançamento com 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"
Requisição de Sessão 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'
})
Primeiro Lançamento com 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()
Requisição de Sessão 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'
});
Primeiro Lançamento com 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 Notificação de Evento
Suporte à Conversion API de parceiros:
Para encaminhar esses eventos para os parceiros de rede de anúncios por meio das integrações da Conversion API da Singular, inclua os atributos de evento opcionais padrão (dados primários hasheados como
eventId
e
ehash
). Consulte
Atributos de Evento Padrão para Integrações da Conversion API
.
Reporte eventos in-game para a Singular para análise, otimização de campanhas e encaminhamento a parceiros.
V2 obrigatório a partir de 15 de julho de 2026. Contas criadas em 15 de julho de 2026 ou depois devem usar o Event Endpoint V2 (baseado em SDID); a V1 não está disponível para novas contas. Clientes existentes já integrados na V1 não são afetados. Entre em contato com seu Customer Success Manager da Singular se quiser migrar para a V2.
Especificação do Endpoint
| Método | URL |
|---|---|
POST
|
https://s2s.singular.net/api/v2/evt
|
Os parâmetros são enviados como um corpo de requisição
application/x-www-form-urlencoded
. Inclua o seguinte cabeçalho obrigatório:
Content-Type: application/x-www-form-urlencoded
Finalidade
Use o Endpoint de Notificação de Evento para reportar todos os eventos in-game desejados em tempo quase real. Os dados de eventos são usados para análise, reporte, otimização de parceiros e medição de desempenho de campanhas.
Boas Práticas de Eventos:
- Eventos Padrão: Use os nomes de eventos padrão da Singular para o mapeamento automático de parceiros
- Reporte em Tempo Real: Envie os eventos o mais próximo da ocorrência real possível
- Eventos de Receita: Inclua os parâmetros de receita para o rastreamento de compras e a análise de ROI
Parâmetros de Evento
Parâmetros Obrigatórios
| Parâmetro | Detalhes |
|---|---|
a |
Tipo: String
Importante: Não use a Reporting API Key. As requisições serão rejeitadas.
Exemplo:
|
p
|
Tipo: String
|
i
|
Tipo: String
|
sdid
|
Tipo: UUIDv4
|
n
|
Tipo: String
Recomendado: Use os nomes de eventos padrão da Singular para integração automática de parceiros.
Exemplo:
|
os
|
Tipo: String
|
install_source
|
Tipo: String
|
ip
|
Tipo: String
|
Parâmetros Opcionais
Os seguintes parâmetros opcionais são suportados.
| Parâmetro | Detalhes |
|---|---|
e
|
Tipo: JSON
Recomendado: Use os nomes de atributos padrão da Singular para compatibilidade com parceiros.
Exemplo:
|
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
Limitações:
Exemplo:
|
data_sharing_options |
Tipo: JSON
|
custom_user_id |
Tipo: String
Sem PII: Não passe informações de identificação pessoal. Use um identificador interno com hash ou anonimizado de outra forma, e não endereços de e-mail, números de telefone ou nomes brutos.
Exemplo:
|
Exemplos de Requisição
Implementações de Exemplo
Evento Padrão
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 Receita
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 Padrão
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 Receita
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 Padrão
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 Receita
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'
});
Tratamento de Respostas
Ambos os endpoints retornam respostas JSON consistentes que exigem a validação do campo de status para determinar sucesso ou erro.
Formato da Resposta
Importante:
Todas as respostas retornam código de status HTTP 200. Sempre
valide o campo
status
do corpo da resposta para determinar sucesso
(
ok
)
ou falha (
error
).
Para a documentação completa de códigos de resposta e estratégias de tratamento de erros, consulte Códigos de Resposta e Tratamento de Erros de S2S .
Recursos Adicionais
- Guia de Integração: Guia de Integração S2S para PC e Console
- Web SDK: Visão Geral e Introdução ao Web SDK
- FAQ de Atribuição: FAQ de Atribuição de Jogos de PC e Console
- Eventos Padrão: Referência de Eventos Padrão da Singular