DocsIntegration
Offerwall Link and iFrame
How to open the offerwall for a signed-in user, build the security hash on your server, and embed it on your site.
Link format
Every approved app has its own link. You find it, ready to copy, in your dashboard under Apps, your app, Integration.
https://wall.sharklio.com/{APP_ID}?user_id={USER_ID}&hash={HASH}
| Parameter | Required | Description |
|---|---|---|
user_id | Yes | The ID of the signed-in user in your system. 1 to 128 characters from A-Z a-z 0-9 . _ @ : + -. It must never change for the same user. URL-encode it. |
hash | Yes, while link security is on | HMAC-SHA256 of the user ID with your link hash salt, as lowercase hex. It stops users from changing the user ID in the link to open the offerwall as someone else. |
Link security is on by default. You can turn it off in the Integration tab, but we do not recommend it.
Build the hash on your server
The link hash salt is a secret. Build the hash on your server and send only the finished link to the browser. Never put the salt in JavaScript or in an app bundle.
PHP:
$hash = hash_hmac('sha256', $userId, $linkHashSalt);
$url = 'https://wall.sharklio.com/' . $appId . '?user_id=' . rawurlencode($userId) . '&hash=' . $hash;
Node.js:
const crypto = require('crypto');
const hash = crypto.createHmac('sha256', linkHashSalt).update(String(userId)).digest('hex');
const url = `https://wall.sharklio.com/${appId}?user_id=${encodeURIComponent(userId)}&hash=${hash}`;
Python:
import hmac, hashlib
from urllib.parse import quote
hash = hmac.new(link_hash_salt.encode(), str(user_id).encode(), hashlib.sha256).hexdigest()
url = f"https://wall.sharklio.com/{app_id}?user_id={quote(str(user_id))}&hash={hash}"
The Integration tab has a Test a link tool: type a user ID and it shows the exact link your server should build.
Embed with an iframe
<iframe title="Offerwall" src="https://wall.sharklio.com/{APP_ID}?user_id={USER_ID}&hash={HASH}"
width="100%" height="800" style="border:0" allow="clipboard-write"
referrerpolicy="strict-origin-when-cross-origin"></iframe>
For safety, the offerwall only loads inside frames on the website you registered for the app and its subdomains. Opening the link directly in a tab, a new window, or a mobile WebView works everywhere.
Mobile apps
Open the link in a WebView or in the system browser. Build the link on your backend and pass it to the app, so the salt stays on your server.
What your users see
- Earn: the offers available for their country and device, with search, categories, a device filter, and sorting.
- Reward status: offers they started (In progress), finished (Completed, with Credited, Pending, Rejected, or Reversed), and let run out (Expired).
- Links to our Terms of Service and Privacy Policy, and their user ID for support questions.
Error pages
| Page | Reason |
|---|---|
| Link not valid | The hash is missing or does not match the user ID. |
| Missing user ID | The user_id parameter is missing or has characters we do not accept. |
| Offerwall not available yet | The app is not approved yet. |
| Offerwall paused | Our team paused the app. Check your notifications. |
