PC & Console Game Integration Guide
Comprehensive guide for implementing PC and Console game attribution with Singular, enabling accurate campaign measurement and analytics across desktop and gaming platforms.
Enterprise Feature: PC and Console game attribution is an enterprise feature. To learn more, read the PC and Console Game Attribution FAQ or contact your Customer Success Manager.
Shared S2S references: This guide covers the PC and Console specifics. For the shared server-to-server building blocks (endpoints, authentication, and common parameters), see the S2S Fundamentals hub . For the full session and event parameter reference, see the PC & Console API Endpoint Reference .
Overview
Integration Options
Singular provides two approaches for PC and Console game attribution. Select the method that best fits your implementation requirements and attribution needs.
| Method | Description | Use Case |
|---|---|---|
| PC/Console Singular Links |
Recommended: Simplified integration using Singular tracking links for probabilistic attribution. No Web SDK required. Attribution Method: Probabilistic (IP-based matching) |
Fastest implementation with lower integration effort. Ideal for campaigns directing users to third-party stores (Steam, Epic, etc.) or when Web SDK integration is not feasible. |
| Web SDK + Match ID |
Advanced: Enhanced attribution using Singular Web SDK on landing pages with deterministic matching via Match ID. Attribution Methods: Probabilistic (IP-based) and Deterministic (Match ID) |
Highest attribution accuracy when users authenticate on landing pages. Required for Singular Web Attribution features and deterministic attribution. |
Implementation Note: Both methods require implementing the PC/Console Server-to-Server (S2S) API integration to report game sessions and events. The difference is in how web campaign clicks are tracked and matched to game installs.
Attribution Flow Comparison
PC/Console Singular Links Flow:
- User Clicks Singular Link: User clicks Singular tracking link in marketing campaign
- Redirect to Landing Page: User redirected to landing page or store (no Web SDK required)
- Download & Install: User downloads and installs game
- First Launch: User launches game for first time
- S2S Report: Game reports session via S2S API
- Probabilistic Attribution: Singular matches game install to Singular Link click based on IP address
Web SDK + Match ID Flow:
- User Clicks Campaign Link: User clicks marketing campaign ad or link
- Landing Page with Web SDK: User arrives at landing page with Singular Web SDK implemented
- Click Capture: Web SDK captures click data and generates Match ID
- User Authentication (Optional): If user logs in, Match ID can be passed to game for deterministic attribution
- Download & Install: User downloads and installs game
- First Launch: User launches game and optionally retrieves Match ID
- S2S Report with Match ID: Game reports session via S2S API with or without Match ID
- Attribution Matching: Singular performs deterministic matching (if Match ID provided) or probabilistic matching (IP-based)
Server-to-Server Integration
Regardless of attribution method chosen, implementing the S2S API integration is required for all PC and Console game attribution.
Integration Capabilities:
- Game Session Tracking: Report user sessions and activity across game launches
- Install Attribution: Attribute new game installs to marketing campaigns
- Event Analytics: Track in-game events and user interactions for funnel analysis
- Revenue Measurement: Measure in-game purchases and monetization performance
- Cross-Platform Support: Unified tracking across PC, Xbox, PlayStation, Nintendo, and Meta Quest
Prerequisites
Before implementing PC & Console integration, ensure the following requirements are met.
| Component | Requirement |
|---|---|
| SDK Key |
Obtain Singular SDK Key from Dashboard → Developer Tools → SDK Integration → SDK Keys |
| App Configuration |
Add PC or Console game to Singular App Page. For multiple platforms of same title, add all to same Singular "App". |
| Attribution Method Selection |
Choose attribution approach based on implementation requirements:
|
Documentation Resources
Complete API reference and implementation guides for PC & Console integration.
Integration Documentation:
- S2S API Reference: PC & Console S2S Endpoint Reference
- Attribution FAQ: PC and Console Game Attribution FAQ
- Web SDK (Optional): Web SDK Overview & Getting Started
- Singular Links: Singular Links Overview
Method 1: PC/Console Singular Links (Recommended)
Simplified integration approach using Singular tracking links for probabilistic attribution without requiring Web SDK implementation on landing pages.
Recommended Implementation: This method provides the fastest path to PC/Console attribution with minimal integration effort. Ideal for most use cases.
Overview
How It Works
PC/Console Singular Links enable attribution by capturing click data directly in the tracking link, eliminating the need for Web SDK implementation on landing pages.
Key Benefits:
- No Web SDK Required: Redirect users to any landing page including third-party stores (Steam, Epic, etc.)
- Simplified Integration: Only requires S2S API implementation on game side
- Fast Deployment: Create and launch campaigns quickly without landing page modifications
- Flexible Destinations: Support for single redirect to any destination URL
Attribution Method:
- Probabilistic (IP-based): Singular matches game install to Singular Link click based on IP address and device characteristics
Implementation Steps
Step 1: Prerequisites
Ensure the following requirements are met before creating PC/Console Singular Links.
Required: PC/Console app sites must be configured in Singular's Apps screen, and at least one game session must be sent via S2S API for the app site to be eligible for PC/Console Singular Link creation.
Step 2: Create PC/Console Singular Link
Create PC/Console Singular Links in the Singular dashboard to track campaign clicks and enable attribution.
Configuration Steps:
- Navigate to Manage Links: In Singular dashboard, go to Attribution → Manage Links
- Select App: Choose an App that has PC/Console app sites configured
- Create New Link: Click Create New Link button
- Select Platform Type: Under Platform Tracking Type field, select "PC/Console"
- Configure Target: Select specific PC/Console app site or choose "Track all app sites under this app" option
- Set Destination URL: Configure redirect URL (landing page, store page, etc.)
- Configure Attribution Settings: Set attribution windows and tracking parameters as needed
- Generate Link: Save and generate Singular tracking link
Link Types: PC/Console Links support Custom Sources and select Partner Integrations. Both click and impression links are supported.
Step 3: Implement S2S Integration
Implement Server-to-Server API integration to report game sessions and events. See the Integration Concepts section below for complete S2S implementation details.
Required Implementation:
- Session Notification: Report game launches using Session Notification Endpoint
- Event Tracking: Report in-game events and revenue using Event Notification Endpoint
- Device Identification: Generate and persist unique device identifier (SDID)
Step 4: Launch Campaigns
Use generated PC/Console Singular Links in marketing campaigns to enable attribution tracking.
Campaign Setup:
- Copy Tracking Link: Copy generated Singular Link from Manage Links
- Configure Campaign: Use Singular Link as campaign destination URL
- Launch Campaign: Activate campaign with Singular Link
- Monitor Attribution: View attribution data in Singular reports as users click links and launch game
Attribution Matching
How Attribution Works
When using PC/Console Singular Links, Singular performs probabilistic attribution matching based on IP address and timing.
Attribution Process:
- User Clicks Singular Link: Click data captured by Singular including IP address and timestamp
- User Downloads Game: User proceeds to download and install game
- Game Launch: User launches game for first time
- S2S Report: Game reports session to Singular via S2S API including user IP address
- Probabilistic Matching: Singular matches game install to Singular Link click based on IP address within attribution window
- Attribution Complete: Install attributed to campaign source
Attribution Accuracy: Probabilistic attribution provides reliable matching for most use cases. For enhanced attribution accuracy with deterministic matching, consider implementing Web SDK + Match ID method.
Method 2: Web SDK + Match ID (Advanced)
Advanced integration approach using Singular Web SDK on landing pages with optional Match ID for deterministic attribution when users authenticate.
Advanced Feature: This method requires Web SDK implementation on landing pages and additional integration effort. Consider this approach if you need Singular Web Attribution features or deterministic attribution via Match ID.
Overview
When to Use This Method
Implement Web SDK + Match ID approach when your use case requires enhanced attribution capabilities beyond basic probabilistic matching.
Use Cases:
- Web Attribution: You need Singular Web Attribution features and web analytics
- Deterministic Attribution: Users authenticate on landing pages and you want highest attribution accuracy
- Cross-Device Tracking: Users may download game on different device than landing page visit
- Advanced Analytics: You need detailed web engagement metrics before game install
Attribution Methods:
- Probabilistic (IP-based): Automatic matching based on IP address (same as PC/Console Singular Links)
- Deterministic (Match ID): Precise matching using unique identifier passed from landing page to game when user authenticates
Implementation Steps
Step 1: Implement Web SDK
Implement Singular Web SDK on marketing landing pages to capture click data and enable attribution.
Web SDK Requirement: PC & Console attribution using this method requires Singular Web SDK implementation on marketing landing pages. The Web SDK captures click data and enables attribution matching when users install and launch your game.
Web SDK Implementation:
- Follow Web SDK Guide: Web SDK Overview & Getting Started
-
Product ID Configuration:
Web SDK Product ID must match game identifier (
iparameter) used in S2S integration - Landing Page Deployment: Deploy Web SDK to all marketing landing pages
Configuration Alignment: Web SDK Product ID must exactly match game identifier in S2S integration for attribution to work. This alignment enables Singular to connect web clicks to game installs.
Step 2: Implement S2S Integration
Implement Server-to-Server API integration to report game sessions and events. See the Integration Concepts section below for complete S2S implementation details.
Required Implementation:
- Session Notification: Report game launches using Session Notification Endpoint
- Event Tracking: Report in-game events and revenue using Event Notification Endpoint
- Device Identification: Generate and persist unique device identifier (SDID)
Step 3: Implement Match ID (Optional)
For deterministic attribution, implement Match ID to pass unique identifier from landing page to game when users authenticate.
Optional Feature: Match ID implementation is only necessary if you want deterministic attribution. Web SDK alone provides probabilistic attribution without Match ID.
Match ID Implementation:
-
Retrieve Match ID:
Use Web SDK
getMatchID()method after user authentication - Pass to Game: Implement mechanism to pass Match ID from web to game (query parameter, API, etc.)
-
Include in First Session:
Report Match ID in first game session via
match_idparameter
See the Match ID Implementation section below for detailed Match ID integration steps.
Attribution Matching
How Attribution Works
When using Web SDK, Singular performs attribution matching using either probabilistic or deterministic methods depending on whether Match ID is provided.
Probabilistic Attribution (No Match ID):
- User Clicks Campaign: User clicks marketing campaign link
- Landing Page Visit: Web SDK captures click data including IP address
- User Downloads Game: User downloads and installs game
- Game Launch: User launches game for first time
- S2S Report: Game reports session to Singular via S2S API
- IP Matching: Singular matches game install to web click based on IP address
Deterministic Attribution (With Match ID):
- User Clicks Campaign: User clicks marketing campaign link
- Landing Page Visit: Web SDK generates unique Match ID
- User Authenticates: User logs in on landing page
- Match ID Retrieved: Implementation retrieves Match ID from Web SDK
- Match ID Passed to Game: Match ID passed to game via query parameter, API, or other mechanism
- User Downloads Game: User downloads and installs game
- Game Launch with Match ID: User launches game, retrieves stored Match ID
-
S2S Report with Match ID:
Game reports first session including
match_idparameter - Deterministic Matching: Singular matches game install to web click using Match ID for precise attribution
Integration Concepts
Core concepts and requirements for implementing PC & Console S2S integration with Singular. These concepts apply to both attribution methods.
Authentication
All requests to Singular's PC & Console S2S API require SDK key authentication in the
a
parameter. For the shared authentication mechanics (where to find your SDK Key and how it is passed), see
Authentication in S2S Fundamentals
.
User Privacy
Singular recommends offering end-users the ability to opt in or opt out of tracking. For the shared privacy parameters, including
data_sharing_options
and Limit Data Sharing, see
Privacy parameters in S2S Fundamentals
.
Supported Platforms
Platform Definition
Platform represents where user plays game and must be passed in
p
parameter on all S2S API requests.
Supported Platform Values:
-
pc- Personal computer platforms -
xbox- Microsoft Xbox gaming consoles -
playstation- Sony PlayStation gaming consoles -
nintendo- Nintendo gaming consoles -
metaquest- Meta Quest VR headsets
Operating Systems and Stores
In addition to platform, specify operating/game system via
os
parameter and distribution store via
install_source
parameter.
|
Platform
(
p
)
|
Operating/Game System
(
os
)
|
Store
(
install_source
)
|
|---|---|---|
| pc |
|
|
| xbox |
|
|
| playstation |
|
|
| nintendo |
|
|
| metaquest |
|
|
Custom Values: Custom values supported for operating system and store parameters, but Singular recommends using standardized values above for consistency and reporting clarity.
Game Identifier
Application Identification
Game identifier associates game events with specific game and must be passed in
i
parameter on every request.
Identifier Requirements:
-
Format:
Any value supported, but Singular recommends reverse DNS notation (e.g.,
com.singular.game) - Cross-Platform Consistency: Same game identifier must be used for same game across all supported platforms
- Web SDK Alignment (Method 2 only): If using Web SDK + Match ID method, game identifier must match Web SDK Product ID configured on landing pages for attribution to work
Web SDK Alignment: If using Web SDK + Match ID attribution method, game identifier used in S2S integration must exactly match the Product ID configured in your Singular Web SDK implementation. This alignment is essential for Singular to attribute game installs to web campaign clicks. This requirement does not apply to PC/Console Singular Links method.
Configuration Examples:
| Implementation | Configuration |
|---|---|
| Web SDK (Method 2) |
|
| S2S API (PC) |
|
| S2S API (Xbox) |
|
| S2S API (PlayStation) |
|
Device Identification
Unique Game Install Tracking
Installation/device identifier associates game events throughout multiple game sessions for same game install and must be passed in
sdid
parameter on every request.
Identifier Specifications:
- Format: Recommended UUID Version 4 format
- Generation: Value generated by game/server at first game launch (install)
- Persistence: Must persist throughout life of game installation
- Uniqueness: Each game installation requires unique identifier
Example:
sdid=40009df0-d618-4d81-9da1-cbb3337b8dec
Match ID Implementation
Match ID enables deterministic attribution for web campaigns by passing unique identifier from Web SDK to game installation. This feature is only available when using Web SDK + Match ID attribution method.
Optional Advanced Feature: Match ID implementation is only necessary if you are using Web SDK + Match ID attribution method and want deterministic attribution. PC/Console Singular Links method does not support Match ID.
How Match ID Works:
- Web SDK Generates Match ID: Singular Web SDK creates unique Match ID when user visits landing page
- Retrieve Match ID: Use Web SDK methods to retrieve Match ID from landing page after user authentication
- Pass to Game: Your implementation passes Match ID from web page to game during download/install process (e.g., query parameter, deep link, cookie)
-
Report with First Launch:
Game includes Match ID in first session notification to Singular via
match_idparameter - Deterministic Match: Singular uses Match ID for precise attribution matching
Web SDK Match ID Methods
Native Implementation
Singular Web SDK provides native methods for retrieving, setting, and clearing Match ID values on landing pages.
Available Methods:
| Parameter | Details |
|---|---|
getMatchID()
|
Retrieves unique Match ID generated by Singular Web SDK for current web session. Returns: String containing Match ID value |
setMatchID(matchId)
|
Sets custom Match ID for current web session instead of using Singular-generated value.
Parameters:
|
clearMatchID()
|
Clears custom Match ID set via
|
Implementation Examples
Native Web SDK Implementation
Use these methods directly after Singular Web SDK initialization to retrieve and manage Match ID values.
Retrieve Match ID
// Get the Singular-generated Match ID
const matchId = window.singularSdk.getMatchID();
console.log('Match ID:', matchId);
// Store Match ID for passing to game
localStorage.setItem('singular_match_id', matchId);
Set Custom Match ID
// Set your own Match ID value
const customMatchId = 'your-custom-match-id-123';
window.singularSdk.setMatchID(customMatchId);
console.log('Custom Match ID set:', customMatchId);
Clear Match ID
// Clear custom Match ID and revert to default
window.singularSdk.clearMatchID();
// Get the new default Match ID
const defaultMatchId = window.singularSdk.getMatchID();
console.log('Default Match ID restored:', defaultMatchId);
Complete Example with Download Button
// Initialize Web SDK
const config = new SingularConfig(sdkKey, sdkSecret, productId)
.withInitFinishedCallback(() => {
console.log('Singular SDK initialized');
});
singularSdk.init(config);
// Handle download button click
document.getElementById('download-button').addEventListener('click', function() {
// Get Match ID before redirecting to download
const matchId = window.singularSdk.getMatchID();
// Pass Match ID to download page via query parameter
const downloadUrl = `https://example.com/download?match_id=${matchId}`;
// Redirect to download page
window.location.href = downloadUrl;
});
Google Tag Manager Implementation
Use Singular's official Singular Web Tracking tag template in Google Tag Manager to retrieve the Match ID. Do not hand-code a Custom HTML tag that calls the SDK directly; the template loads and initializes the Web SDK for you and exposes the Match ID through a Track Type.
- In GTM, create a new tag and choose the Singular Web Tracking template (by Singular Labs) as the Tag Type. Add it from the Community Template Gallery if it is not already in your container.
- Set Track Type to Get Match ID .
-
Set
Data Layer Key
to a name of your choice, for example
getMatchIDValue. The template writes the current Match ID into this dataLayer key. -
Create a GTM
Data Layer Variable
that reads
getMatchIDValue. -
Pass that variable's value to your game, for example by appending it as
match_idon the store or download URL used to hand the user off to the game.
Fire the Get Match ID tag on the trigger that runs just before the hand-off to the game (for example, the download or "Play on PC" button click) so the Match ID is populated before the redirect.
Validate the wiring in your own container: confirm the Data Layer Variable returns a non-empty Match ID before the redirect fires. An empty value means the Singular Web Tracking base tag has not initialized on the page yet.
Passing Match ID to Game
Implementation Strategies
After retrieving Match ID from Web SDK, implement mechanism to pass value from landing page to game installation.
Common Approaches:
| Method | Implementation | Use Case |
|---|---|---|
| Query Parameter |
Append Match ID to download URL as query parameter.
|
Direct downloads where download page can extract parameter and pass to game installer |
| Cookie Storage |
Store Match ID in first-party cookie accessible by game download page.
|
Multi-page flows where Match ID needs to persist across page navigations |
| Local Storage |
Store Match ID in browser local storage.
|
Same-domain scenarios where landing page and download page share storage |
| Deep Link |
Embed Match ID in custom deep link scheme for direct game launch.
|
Advanced implementations with custom protocol handlers |
| Server-Side API |
Send Match ID to server API, game retrieves via authenticated request. |
Secure implementations requiring server-side validation and user authentication |
S2S API Implementation
Reporting Match ID
Once game retrieves Match ID from web implementation, include in first session notification to Singular for attribution matching.
Critical Timing: Match ID must be included in first game session (install) notification for attribution to work. Sending Match ID on subsequent sessions does not enable attribution matching.
Session Request with Match ID:
import requests
def report_first_session_with_match_id(sdk_key, game_id, device_id, platform, match_id):
"""
Report first game session with Match ID for attribution
"""
session_url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'os': 'windows',
'install_source': 'steam',
'ip': get_user_ip(),
'match_id': match_id # Include Match ID for attribution
}
response = requests.get(session_url, params=params)
return response.json()
# Example: First launch with Match ID
report_first_session_with_match_id(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
match_id='abc123def456' # Retrieved from landing page
)
curl -G "https://s2s.singular.net/api/v1/launch" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--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"
async function reportFirstSessionWithMatchId(config) {
const sessionUrl = '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': await getUserIP(),
'match_id': config.matchId // Include Match ID
});
const response = await fetch(`${sessionUrl}?${params.toString()}`);
return await response.json();
}
// Example: First launch with Match ID
reportFirstSessionWithMatchId({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
osVersion: 'windows',
store: 'steam',
matchId: 'abc123def456' // Retrieved from landing page
});
Match ID Best Practices
Implementation Checklist
Complete Implementation Requirements:
- Web SDK Integration: Implement Singular Web SDK on landing pages with matching Product ID
-
Match ID Retrieval:
Use
getMatchID()to retrieve value after user authentication - Value Transmission: Implement secure mechanism to pass Match ID from web to game
- Game Storage: Store Match ID in game until first launch/session report
-
First Session Only:
Include
match_idparameter only in first session notification - Value Validation: Verify Match ID value matches between web and game implementations
- Testing: Test complete flow from landing page click through game installation and attribution
For complete attribution methodology details and troubleshooting, see PC and Console Game Attribution FAQ .
Game Session Tracking
Reporting game sessions to Singular is required in PC & Console integration, enabling install attribution, re-engagement tracking, and user retention analytics.
Session Notification Endpoint
Implementation Requirement
Call Session Notification Endpoint each time game launches to notify Singular about game session.
API Reference: For complete endpoint specification, see Session Notification Endpoint documentation.
Session Processing
Attribution Workflow
Session notifications enable Singular to perform multiple attribution and analytics functions based on session context.
Processing Logic:
- First Session (Install): If first game session after unique install, Singular recognizes new install and triggers install attribution process
- Re-engagement Session: If session qualifies as re-engagement (coming soon), Singular triggers re-engagement attribution process (see Re-engagement FAQ )
- Regular Session: Otherwise, marked as game session for user activity and retention tracking
Implementation Best Practices
Asynchronous Data Collection
When collecting data to report game session, wait for asynchronous functions to return and handle various functionality before sending session notification.
Critical Timing Considerations:
- Match ID Attribution (Method 2): When using Web SDK + Match ID method, report first game session only after Match ID potentially available
- User Consent: If game provides opt-in to Singular's marketing and analytics, wait until consent collected before reporting game session
- Device Identifier: Ensure SDID generated and stored before first session notification
Session Request Example
Sample Implementation
import requests
def report_game_session(sdk_key, game_id, device_id, platform, os_version, store):
"""
Report game session to Singular
"""
session_url = "https://s2s.singular.net/api/v1/launch"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'os': os_version,
'install_source': store,
'ip': get_user_ip()
}
try:
response = requests.get(session_url, params=params, timeout=10)
if response.status_code == 200:
data = response.json()
if data.get('status') == 'ok':
print("Session reported successfully")
return True
else:
print(f"Session error: {data.get('reason')}")
return False
else:
print(f"HTTP error: {response.status_code}")
return False
except Exception as e:
print(f"Exception reporting session: {e}")
return False
# Example usage
report_game_session(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
os_version='windows',
store='steam'
)
curl -G "https://s2s.singular.net/api/v1/launch" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "os=windows" \
--data-urlencode "install_source=steam" \
--data-urlencode "ip=172.58.29.235"
async function reportGameSession(config) {
const sessionUrl = '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': await getUserIP()
});
try {
const response = await fetch(`${sessionUrl}?${params.toString()}`);
const data = await response.json();
if (data.status === 'ok') {
console.log('Session reported successfully');
return true;
} else {
console.error('Session error:', data.reason);
return false;
}
} catch (error) {
console.error('Exception reporting session:', error);
return false;
}
}
// Example usage
reportGameSession({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
osVersion: 'windows',
store: 'steam'
});
In-Game Event Tracking
Partner Conversion API support: To forward these events to ad network partners through Singular's Conversion API integrations, include the standard optional event attributes (hashed first-party data such as eventId and ehash). See Standard Event Attributes for Conversion API Integrations.
Track in-game events and user interactions to analyze marketing campaign performance, optimize user funnels, and measure engagement across player journey.
Event Planning
Event Definition
Before implementing S2S integration, define events your organization wants to track for campaign analysis and user behavior measurement.
Event Planning Guide: Defining In-Game Events
Event Notification Endpoint
Event Reporting
Call Event Notification Endpoint when event occurs in game to notify Singular for attribution analysis and campaign optimization.
API Reference: For complete endpoint specification, see Event Notification Endpoint documentation.
Event name included in API call determines how event identified in Singular reports, exports, and postbacks.
Event Naming Best Practices
Standard Events
Singular recommends using standard event and attribute naming convention for streamlined partner integration and analytics compatibility.
Implementation Guidelines:
- Standard Events: Use Singular's standard event naming convention for automatic partner mapping and integration streamlining
- English Language: Pass custom event names and attributes in English for compatibility with third-party partners and analytics solutions
- Character Limits: Event names limited to 32 ASCII characters (32 bytes for UTF-8 conversion)
- Attribute Limits: Event attributes and values limited to 500 ASCII characters
Revenue Event Tracking
Revenue Measurement
Track revenue from in-game purchases to analyze campaign performance and ROI, with data available in reports, log exports, and postbacks.
Revenue Event Implementation: Use Event Notification Endpoint with additional revenue parameters to designate revenue events.
Required Revenue Parameters:
-
is_revenue_event=true- Marks event as revenue event (optional if event name is__iap__or amount larger than zero) -
amt=1.99- Revenue amount -
cur=USD- ISO 4217 currency code
Event Request Examples
Sample Implementations
Standard Event
import requests
def report_game_event(sdk_key, game_id, device_id, platform, event_name, event_attributes=None):
"""
Report in-game event to Singular
"""
event_url = "https://s2s.singular.net/api/v1/evt"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'n': event_name,
'ip': get_user_ip()
}
if event_attributes:
import json
params['e'] = json.dumps(event_attributes)
response = requests.get(event_url, params=params)
return response.json()
# Example: Level complete event
report_game_event(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
event_name='sng_level_achieved',
event_attributes={
'level': '5',
'score': '1250'
}
)
Revenue Event
def report_revenue_event(sdk_key, game_id, device_id, platform, amount, currency):
"""
Report revenue event to Singular
"""
event_url = "https://s2s.singular.net/api/v1/evt"
params = {
'a': sdk_key,
'i': game_id,
'sdid': device_id,
'p': platform,
'n': '__iap__',
'is_revenue_event': 'true',
'amt': amount,
'cur': currency,
'ip': get_user_ip()
}
response = requests.get(event_url, params=params)
return response.json()
# Example: $9.99 purchase
report_revenue_event(
sdk_key='your_sdk_key_here',
game_id='com.singular.game',
device_id='40009df0-d618-4d81-9da1-cbb3337b8dec',
platform='pc',
amount=9.99,
currency='USD'
)
Standard Event
curl -G "https://s2s.singular.net/api/v1/evt" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--data-urlencode "n=sng_level_achieved" \
--data-urlencode 'e={"level":"5","score":"1250"}' \
--data-urlencode "ip=172.58.29.235"
Revenue Event
curl -G "https://s2s.singular.net/api/v1/evt" \
--data-urlencode "a=your_sdk_key_here" \
--data-urlencode "i=com.singular.game" \
--data-urlencode "sdid=40009df0-d618-4d81-9da1-cbb3337b8dec" \
--data-urlencode "p=pc" \
--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"
Standard Event
async function reportGameEvent(config) {
const eventUrl = 'https://s2s.singular.net/api/v1/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'n': config.eventName,
'ip': await getUserIP()
});
if (config.attributes) {
params.append('e', JSON.stringify(config.attributes));
}
const response = await fetch(`${eventUrl}?${params.toString()}`);
return await response.json();
}
// Example: Level complete
reportGameEvent({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
eventName: 'sng_level_achieved',
attributes: {
level: '5',
score: '1250'
}
});
Revenue Event
async function reportRevenueEvent(config) {
const eventUrl = 'https://s2s.singular.net/api/v1/evt';
const params = new URLSearchParams({
'a': config.sdkKey,
'i': config.gameId,
'sdid': config.deviceId,
'p': config.platform,
'n': '__iap__',
'is_revenue_event': 'true',
'amt': config.amount,
'cur': config.currency,
'ip': await getUserIP()
});
const response = await fetch(`${eventUrl}?${params.toString()}`);
return await response.json();
}
// Example: $9.99 purchase
reportRevenueEvent({
sdkKey: 'your_sdk_key_here',
gameId: 'com.singular.game',
deviceId: '40009df0-d618-4d81-9da1-cbb3337b8dec',
platform: 'pc',
amount: 9.99,
currency: 'USD'
});
Next Steps
Complete your PC & Console integration with additional resources and support.
Additional Resources
Documentation & Support
- API Reference: PC & Console S2S Endpoint Reference
- Attribution FAQ: PC and Console Game Attribution FAQ
- Web SDK (Optional): Web SDK Overview & Getting Started
- Event Planning: Defining In-Game Events
- Standard Events: Singular Standard Events Reference
- Response Codes: S2S Response Codes & Error Handling
Support Channels
Getting Help
Contact Singular team for implementation assistance and technical support.
- Solution Engineer: Consult with Singular Solution Engineer for advanced features and integration planning
- Customer Success Manager: Contact CSM for enterprise feature enablement and account configuration
- Support Team: Submit support tickets for technical issues and troubleshooting assistance