Once a user meets the campaign criteria for rewards, it's time to initiate the payout—sending the rewards to the user. Publishers issue these payouts upon receiving a payout request callback from adjoe's backend. The request is made to the S2S API URL
configured for the publisher for their SDK in the Publisher Dashboard.
To enable S2S payouts, set up an endpoint on your server to receive notifications about user rewards from adjoe. When a request is made to your endpoint, you then must manage the distribution of these rewards to the users. Be aware that once a reward is distributed, it cannot be allocated again.
The key names can be customized, or you can use the default names. Please ensure that no special characters should be included in the values, otherwise our backend may transform the request, which could cause issues with the payout. Some of these values include: []
.
=
Default
GET
/ https://example.com/example?sid={sid}&trans_uuid={trans_uuid}&user_uuid={user_uuid}¤cy={currency}&coin_amount={coin_amount}&device_id={device_id}&sdk_app_id={sdk_app_id}&app_id={app_id}&reward_level={reward_level}&app_name={app_name}&reward_type={reward_type}&publisher_sub_id1={publisher_sub_id1}&publisher_sub_id2={publisher_sub_id2}&publisher_sub_id3={publisher_sub_id3}&publisher_sub_id4={publisher_sub_id4}&publisher_sub_id5={publisher_sub_id5}&placement={placement}&ua_network={ua_network}&ua_channel={ua_channel}&ua_subpublisher_encrypted={ua_subpublisher_encrypted}&ua_subpublisher_cleartext={ua_subpublisher_cleartext}
Customized (Example)
GET
/ https://example.com/example?user_id={user_uuid}&sid={sid}&point_amount={coin_amount}&points={currency}&trans_uuid={trans_uuid}&ua_network={ua_network}&ua_channel={ua_channel}&playtime_placement={placement}&custom_id={publisher_sub_id1}
To achieve successful payouts, the user user_uuid
must match the value set in the SDK initialization. More details can be found in Initialize the SDK.
user_uuid
Identifies the user eligible for rewards. This ID must align with the one provided during SDK initialization.
String
Required
sid
String
Required
trans_uuid
The unique transaction ID.
UUID v4
Required
coin_amount
The amount of virtual currency the user should get.
Integer
Required
currency
The name of the virtual currency.
String
Required
sdk_app_id
App ID of the SDK. Example: com.example.android.gamename
String
Optional
app_id
App ID that is used to generate usage.
String
Optional
device_id
Optional external device ID.
String
Optional
app_name
URL encoded app name in English
String
Optional
reward_type
The type of reward given. Example: Advance, Playtime, AdvancePlus, AdvancePlusWeb, CoinStreakBonus, Event.
String
Optional
ua_network
The network from which the user was acquired, e.g., adwords, facebook, organic.
String
Optional
ua_channel
The channel of the campaign in the network that led to the user's acquisition, e.g., incent, video.
String
Optional
ua_subpublisher_encrypted
The encrypted package name or app id of the sub-publisher app within the network from which the user was acquired.
String
Optional
ua_subpublisher_cleartext
The cleartext package name of app id of the sub publisher app in the network where the user was acquired, e.g., com.domain.appName
String
Optional
placement
The placement of Playtime inside your app, e.g., "Main Screen", "Shop", "Interstitial", "More Diamonds Screen", etc.
String
Optional
app_category
Category of the App that user played. Example: Board, Casino, Casual, Entertainment, Puzzle, Other
String
Optional
advanceplus_event_name
The name of the milestone/event that user completed to receive this reward. Event-based campaigns (Advance+) only.
String
Optional
advanceplus_event_description
The description of the milestone/event that user completed to receive this reward. Event-based campaigns (Advance+) only.
String
Optional
publisher_sub_id1
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id2
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id3
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id4
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
publisher_sub_id5
Value set in the extension object to be returned in the S2S payout URL.
String
Optional
event_boost_factor
The boost factor for the current promotion. Example: 2x, returned as 2.
String
Optional
event_boost_start_date
Date when the boost factor began.
String
Optional
event_boost_stop_date
Date when the boost factor stopped.
String
Optional
install_date
Date when the game was installed.
String
Optional
For security measures, a request signature is necessary to verify the authenticity of the request. It's important to calculate the sid
parameter in your backend and compare it with the parameter received in the callback URL. The sid
is generated as an SHA1 hash using the required query parameters and the encoding is hexadecimal. Your Account Manager will provide you with the necessary parameter, the s2s_token
. The general format for this is as follows - no other parameters are included in the calculation:
If sdk_app_id
and/or device_id
are not present in the endpoint URL, they will be excluded from the sid
calculation. The sid
will then be calculated as follows:
Below is an example script that shows how to calculate the sid
and compare it to the value in the callback URL sent by adjoe. You would implement some version of this in your backend.
When we make payout request to publishers, we send an HTTP request from any of the following IP addresses:
To enhance security, use these IP addresses for IP-level blocking on endpoints receiving adjoe's S2S payout requests. Allow only these specific IPs access.
If we receive a 4xx / 5xx from your endpoint, we have an established retry logic for the failed S2S requests.
If a request fails, we retry after 10 minutes. A second failure prompts a retry in another 10 minutes. Subsequent failures lead to retries every 2 hours from the initial failed attempt. The time windows are additional, so it's roughly 12hrs in total.
If you observe an extended period of unsuccessful requests, contact your Account Manager for further investigation into the issue.
If you payout with real money, we recommend that you implement KYC processes, reward cooldowns, and individual limits on the amount of rewards the user can get:
KYC or Know Your Customer: This verification process, used by businesses and financial institutions, confirms the identity of your users to prevent fraud. It involves collecting and verifying identification documents, such as government-issued IDs or proof of address, ensuring that users are who they claim to be.
Reward Cooldowns: Temporarily restrict users from receiving additional rewards after receiving one. This helps maintain fairness and prevents exploitation of the rewards system, like receiving rewards too frequently.
Individual Limits: To prevent abuse of the rewards systems, set daily limits on the amount of rewards a user can earn. For example, you might cap rewards at $50 USD per day.
The request signature, used to verify request authenticity. Requires a token, which will be shared with you by your Account Manager. Detailed setup instructions .
Does the the PlaytimeWeb use cookies?
We only keep cookies in the page during the session. It allows us to keep track of the user (like after authentication) and make sure that they get their rewards.
I'm using Flutter or React Native - can I use your Android SDK and iOS solution together?
Yes, you can use the Platform
properties provided by the Flutter and React Native libraries to set up the code in a way to conditionally execute certain code blocks based on the platform the app is running on. Since we only have an SDK on Android, you may need to use platform-based imports for RN or add platform-specific dependencies in the pubspec.yaml
for Flutter.
Example for React Native:
What is the use of the IDFA?
Why does the user need to accept App Tracking?
Why does the user need to accept TOS?
We hereby inform you that adjoe GmbH processes the following personal data within the framework of the use of Playtime:
Installed apps, IDFA
The data will be connected to your end device via the device ID and sent, encrypted, to our servers. In order for app providers to finance our app suggestions, we must send them the device ID for billing purposes.
How do I give one of my coworkers access to the dashboard?
You should reach out to your Account Manager. They can provide them with access.
What customization options do you provide for the Playtime Catalog?
Most parts of the PlaytimeWeb Catalog can be customized so that it fits your branding - including images, colors, texts, fonts, and currency. Your Account Manager will reach out to you separately to set up these customizations.
Where can I track KPIs like Revenue or Active User Rates?
Still need help with something? Have an idea for a Feature Request? Please use this template to reach out to your Account Manager for help.
Issue Type: [Bug/Feature Request]
Issue/Feature Description: Provide a detailed description. For feature requests, explain the necessity and potential business impact.
Reproduction Steps:
Expected Behavior:
Actual Behavior:
Please include any relevant logs or screenshots to support your query.
The primary function of PlaytimeWeb is showing the catalog to the users. The Playtime catalog lists various campaigns that the users can complete to receive a reward in your app's native in-app currency.
Games displayed to users are chosen programmatically based on their preferences and profile, while the specific campaigns available to them depend on the permissions granted or country.
Advertisers define ad formats and target countries through campaigns, which are then featured in the Playtime Catalog. These campaigns are set by advertisers and allow for rewards once the completion of the campaign conditions are verified through the MMP. PlaytimeWeb only supports "event-based" campaigns. Meaning that the user will get rewarded for completing different levels or tasks.
Event-Based
Rewards users for achieving a designated combination of events within advertised apps, e.g. in-app purchases, viewing video ads, and/or reaching specified game levels. Users are rewarded after completing each task. Example: "Up to 5 Coins per Task" or "Complete Level 10".
Users need to accept adjoe's Terms of Service (TOS) to use Playtime and access games. Agreeing to the TOS is mandatory before installing any partner apps.
For iOS users Apple provides an opportunity to use the iCloud Private Relay service, which can be enabled in the device settings. If the user has it enabled, then we cannot track the user’s real IP, since all the requests would be proxied via Apple servers. This can have an impact on our ability to reward users for playing games. In cases where iCloud Private Relay enabled, users would see the following messages asking them to disable it. We will not permit users to play games without disabling this feature.
The Playtime algorithm prioritizes displaying games to users based on their potential to generate maximum revenue and likelihood of being downloaded.
Maximize your app’s revenue and engagement effortlessly with PlaytimeWeb for iOS, adjoe’s mobile-games-centric rewarded ad unit. Integrate it within your app, and start rewarding users with your in-app currency for playing advertised mobile games.
Playtime taps into your users' love for gaming, offering you industry-leading eCPM and engagement metrics in return. To learn more about how adjoe can boost your app's monetization, engagement, and retention, click here.
To seamlessly integrate PlaytimeWeb into your iOS app, you only need to offer users the option to open the PlaytimeWeb URL. We suggest placing this option prominently in your app, such as in a native banner or button on the homepage. The basic structure of the Redirect URL is:
The user_id
and idfa
parameters in the URL help accurately identify the user for rewarding purposes, ensuring any currency earned via PlaytimeWeb is promptly paid out.
Additionally, you can include extra parameters in the URL, and these values will be sent back to you through the Server-to-Server payout URL
To make the most of PlaytimeWeb, to maximize your revenue and provide the best user experience, use all of these parameters for data-driven optimizations. For instance, you can monitor the performance of different Playtime button placements or determine the effectiveness of different UA sources in the Publisher Dashboard.
user_id*
required
idfa*
The Identifier for Advertisers (IDFA) is a random device identifier assigned by Apple to a user’s device and is used by advertisers to track user's advertising data.
recommended
placement
The placement of the PlaytimeWeb button inside your app, e.g., "Main Screen"
, "Shop"
, "Interstitial"
, "More Diamonds Screen"
, etc.
optional
ua_channel
User Acquisition Channel. The channel within the network from which the user was acquired, e.g. incentivized
or video campaigns
.
optional
ua_network
User Acquisition Network. The network through which the user was acquired, e.g., Adwords
, Facebook
, or Organic
.
optional
ua_subpublisher_encrypted
The encrypted package name or app id of the sub-publisher app within the network from which the user was acquired.
optional
gender
There are three available options you can pass in: "female", "male", "unknown".
optional
age
The current age of the user, e.g., 32.
optional
pub_sub_id_1
optional
pub_sub_id_2
See pub_sub_id_1
optional
pub_sub_id_3
See pub_sub_id_1
optional
pub_sub_id_4
See pub_sub_id_1
optional
pub_sub_id_5
See pub_sub_id_1
optional
While the IDFA parameter is not required, we recommend including it. This means you should trigger the App Tracking Transparency popup so the user can "Allow" tracking. When a user selects "Play Now" in the Playtime Offerwall, we use a pop-up to remind them to allow tracking.
A WebView or SFSafariViewController or iFrame can be used to show the PlaytimeWeb URL. You may need to configure the navigation actions to open the app-store URL, as the webView may have it's own protocols for intercepting the URL requests.
Allow the following url-schemes
https
itms-appss
itms-apps
about:srcdoc
Open PlaytimeWeb from your app.
Download a game.
Return to PlaytimeWeb. You should see the game under the "My Games" section.
If you do not see the game in "My Games" try resetting your IDFA.
When a game is downloaded, we receive a postback from the MMP letting us know. It is usually is delivered instantly. In some cases, it takes 24 hours. If the app was previously installed, you will not be able to receive rewards through PlaytimeWeb.
Delete the game if it was already installed.
Go to Settings > Privacy > Tracking
, toggle Allow Apps to Request to Track
off.
Return to PlaytimeWeb and select Ask Apps to Stop Tracking
(if prompted), then toggle Allow Apps to Request to Track
back on.
Install the game again from PlaytimeWeb.
We use the IDFA to identify users and to accurately identify the user for rewarding purposes, ensuring any currency earned via PlaytimeWeb is promptly paid out. We provide the IDFA to so they can count attribution.
We have more information about this in our docs. Please refer to them .
We have more information about this in our docs. Please refer to them . This is what the users sees in the TOS page:
Clicking the accept button means that you agree to the & .
These KPIs can be tracked in the . They are also available via API.
A custom identifier you can assign to each user. If you haven't set one, adjoe generates it automatically. This ID is necessary for , thus required. Ensure this value is url-safe
.
These are optional identifiers used in your backend. They will be provided back in the .