Enterprise SDK Integration Guide
Integrate the InfyClick Offerwall SDK into your mobile apps, games, and websites. Monetize your users with high-converting offers from global advertisers.
Platform Overview
1. Integrate SDK
Add 2 lines of code to your app
2. Users Complete Offers
Installs, surveys, registrations
3. Receive Rewards
S2S callbacks with signatures
InfyClick is a server-side offerwall platform. Your users interact with offers inside your app. We handle all advertiser relationships, tracking, fraud prevention, and reward delivery. You simply receive a secure server-to-server callback every time a user earns a reward.
Authentication
All SDK and API requests are authenticated using your unique App Key. Find your App Key in the Publisher Dashboard.
X-InfyClick-App-Key: apk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Security: Never expose your App Secret or Postback Secret in client-side code. The App Key is safe to embed in SDKs; the Postback Secret should only exist on your server.
Android SDK
Gradle Dependency
implementation 'com.infyclick:sdk:1.4.2'
Initialize
import com.infyclick.sdk.InfyClick;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initialize with your App Key and user ID
InfyClick.init(this, "YOUR_APP_KEY", "USER_ID");
// Show offerwall
InfyClick.showOfferwall(this);
}
}
Reward Listener
InfyClick.setRewardListener(new InfyClick.RewardListener() {
@Override
public void onReward(String transactionId, double amount, String currency) {
// Credits are delivered via S2S callback to your server.
// This listener is for real-time UI updates only.
Toast.makeText(context, "+" + amount + " " + currency, Toast.LENGTH_SHORT).show();
}
@Override
public void onRewardReversed(String transactionId, double amount, String reason) {
// Handle reversal (e.g., user refunded, fraud detected)
Toast.makeText(context, "Reward reversed: " + reason, Toast.LENGTH_LONG).show();
}
});
iOS SDK
Swift Package Manager
https://github.com/infyclick/ios-sdk.git
Swift Integration
import InfyClickSDK
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Initialize
InfyClick.configure(appKey: "YOUR_APP_KEY", userId: "USER_ID")
// Present offerwall
InfyClick.presentOfferwall(from: self)
}
}
Reward Delegate
class RewardHandler: InfyClickRewardDelegate {
func didReceiveReward(transactionId: String, amount: Double, currency: String) {
// Update UI; actual credit happens via your server callback
}
func didReceiveReversal(transactionId: String, amount: Double, reason: String) {
// Handle advertiser chargeback or fraud reversal
}
}
Unity SDK
Import Package
Download the UnityPackage from your Publisher Dashboard and import into Assets.
C# Integration
using InfyClick;
public class OfferwallManager : MonoBehaviour
{
void Start()
{
InfyClickSDK.Initialize("YOUR_APP_KEY", "USER_ID");
InfyClickSDK.OnReward += (transactionId, amount, currency) => {
Debug.Log($"Reward: {amount} {currency}");
};
InfyClickSDK.OnRewardReversed += (transactionId, amount, reason) => {
Debug.Log($"Reversed: {amount} - {reason}");
};
}
public void ShowOfferwall()
{
InfyClickSDK.ShowOfferwall();
}
}
Web / iframe Integration
HTML iframe
<iframe
src="https://infyclick.com/api/offerwall/YOUR_APP_KEY?uid=USER_ID"
width="100%"
height="800"
style="border:none;border-radius:12px;"
allow="fullscreen"
></iframe>
JavaScript SDK
<script src="https://infyclick.com/sdk/infyclick-web-sdk.js"></script>
<script>
InfyClick.init({
appKey: 'YOUR_APP_KEY',
userId: 'USER_ID',
container: '#offerwall-container'
});
// Listen for reward events for UI updates
InfyClick.on('reward', function(data) {
console.log('Reward:', data.amount, data.currency);
});
InfyClick.showOfferwall();
</script>
Responsive: The iframe and Web SDK automatically adapt to mobile, tablet, and desktop viewports. Dark/light theme is configurable per app.
REST API
Use the REST API for custom integrations or server-side offer fetching.
Get Offers
curl -H "X-InfyClick-App-Key: YOUR_APP_KEY" \
"https://infyclick.com/api/offers?user_id=USER_ID&country=US&device=android"
Response
{
"offers": [
{
"id": 12345,
"name": "Install MyApp",
"description": "Install and open the app",
"reward_amount": 250,
"reward_currency": "coins",
"payout": 0.42,
"type": "cpi",
"category": "install",
"icon_url": "https://infyclick.com/icons/12345.png",
"epc": 0.35,
"conversion_rate": 12.5,
"difficulty": "easy",
"estimated_time": "1-3 min",
"devices": ["android", "ios"],
"countries": ["US", "CA", "GB"],
"daily_remaining": 47,
"total_remaining": 982,
"tracking_url": "https://infyclick.com/api/offerwall/click?offer_id=12345&..."
}
]
}
Track Click
curl -H "X-InfyClick-App-Key: YOUR_APP_KEY" \
"https://infyclick.com/api/offerwall/click?offer_id=12345&user_id=USER_ID&device_id=DEVICE_ID"
Response
{
"success": true,
"transaction_id": "tx_a3f7b2c8d9e1f4a5b6c7d8e9f0a1b2c3",
"click_id": "clk_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"redirect_url": "https://adnetwork.com/offer?subid=USER_ID&..."
}
Get User Balance
curl -H "X-InfyClick-App-Key: YOUR_APP_KEY" \
"https://infyclick.com/api/offerwall/balance?user_id=USER_ID"
Server-to-Server (S2S) Callbacks
When a user completes an offer, InfyClick sends an HTTP POST request to your configured callback URL. Configure your callback URL in the Integration Settings.
Callback URL
POST https://yourgame.com/api/infyclick/callback
POST Parameters
| Parameter | Type | Description |
|---|---|---|
| user_id | string | Your user's unique ID |
| offer_id | int | Offer ID |
| offer_name | string | Human-readable offer name |
| transaction_id | string | Unique transaction ID |
| reward_amount | float | Amount to credit |
| reward_currency | string | Your configured currency |
| payout | float | Payout in USD |
| status | string | approved, reversed, pending |
| timestamp | string | ISO 8601 timestamp |
| signature | string | HMAC-SHA256 signature |
Signature Verification
$expected = hash_hmac('sha256',
http_build_query($params_without_signature),
$YOUR_POSTBACK_SECRET
);
if (!hash_equals($expected, $_POST['signature'])) {
http_response_code(403);
exit('Invalid signature');
}
Response Requirements
Your server must return HTTP 200 with body OK. Any other response triggers an automatic retry with exponential backoff.
HTTP/1.1 200 OK Content-Type: text/plain OK
Webhooks
Webhooks are push notifications for events beyond conversions, such as app approvals, balance updates, and fraud alerts.
Event Types
| Event | Description |
|---|---|
| conversion.completed | User completed an offer |
| conversion.reversed | Advertiser reversed a conversion |
| app.approved | Your app was approved |
| fraud.detected | Suspicious activity flagged |
| publisher.verified | Account verification approved |
Webhook Payload
{
"event": "conversion.completed",
"timestamp": "2026-05-08T14:30:00Z",
"data": {
"user_id": "12345",
"offer_id": 67890,
"transaction_id": "tx_...",
"reward_amount": 250,
"currency": "coins"
},
"signature": "hmac_sha256_signature"
}
Security Best Practices
1. Signature Verification
Always verify the HMAC-SHA256 signature on every callback. Reject any request with an invalid signature immediately.
2. Duplicate Prevention
Store processed transaction_id values in your database. Return OK for duplicates to prevent retry storms.
3. Replay Attack Prevention
Reject callbacks with timestamps older than 5 minutes or from the future. Use timestamp + transaction_id as a nonce.
4. HTTPS Only
Configure an HTTPS callback URL. HTTP callbacks are rejected by the platform for security reasons.
5. IP Whitelist
Optionally whitelist InfyClick callback IPs: 34.69.179.33, 35.184.0.0/16.
Error Handling
| HTTP Code | Meaning | Action |
|---|---|---|
| 200 | Success | Request processed successfully |
| 400 | Bad Request | Check request parameters |
| 403 | Forbidden | Invalid signature or IP |
| 404 | Not Found | Offer or app does not exist |
| 429 | Rate Limited | Slow down requests |
| 500 | Server Error | Retry with backoff |
Retry Schedule
Failed callbacks are retried with exponential backoff: 1 min, 5 min, 30 min. After 3 failures, the callback is marked as failed and logged for manual review.
Need help? Contact our integration team at support@infyclick.com.