Add Doearno to your app
Any app, website or ad network can plug into the Doearno offerwall. Publishers embed the wall with a signed URL; networks send completions back over server-to-server postback.
Step 1
Embed the offerwall
Open the wall in a WebView, iframe or new tab. Pass the player's ID from your system plus your app ID — balances and rewards are tracked against that pair.
https://offerwall.doearno.in/?user_id=demo-user&app_id=demo-app&sig={SIGNATURE}<iframe
src="https://offerwall.doearno.in/?user_id=demo-user&app_id=demo-app&sig={SIGNATURE}"
style="border:0;width:100%;height:100%"
allow="clipboard-write"
></iframe>val url = "https://offerwall.doearno.in/?user_id=demo-user&app_id=demo-app&sig={SIGNATURE}"
webView.settings.javaScriptEnabled = true
webView.loadUrl(url)Step 2
Receive completions (S2S postback)
Testing before DNS is live? The same endpoints run on this deployment at https://offerwall.doearno.in/offerwall and https://offerwall.doearno.in/api/public/postback.
Give this URL to every partner network (PubScale, CPAlead, OGAds, AdGate, Lootably, OfferToro, Wannads or your own). When a user finishes an offer, the network calls it and Doearno credits the coins instantly.
https://api.doearno.in/postback?user_id={USER_ID}&reward={REWARD}&offer_id={OFFER_ID}&network={NETWORK}&sig={SIGNATURE}user_id— the ID you passed into the embed URLreward— payout in Doearno coins (whole number)offer_id— the network's offer identifiernetwork— your network slug, as registered in the admin panelsig— signature, see step 3
Responses
- 200 OK — credited (or already credited, for a repeat call)
- 400 — missing or malformed parameters
- 403 — bad signature or blocked IP
- 404 — unknown user or network
Step 3
Sign every callback
The signature is a SHA256 HMAC of user_id:offer_id:reward:network, keyed with the secret issued to your network (each network gets its own, visible under Admin → Setup), sent as lowercase hex.
import crypto from "crypto";
const payload = `${user_id}:${offer_id}:${reward}:${network}`;
const sig = crypto
.createHmac("sha256", DOEARNO_SECRET)
.update(payload)
.digest("hex");$payload = "$user_id:$offer_id:$reward:$network";
$sig = hash_hmac('sha256', $payload, $doearno_secret);import hmac, hashlib
payload = f"{user_id}:{offer_id}:{reward}:{network}"
sig = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()A player's balance is created automatically the first time they open the wall with your user_id and app_id, so no onboarding call is needed. Repeat calls with the same offer, user and network are ignored, so a network can safely retry. Each network can also be locked to a list of allowed server IPs from the admin panel.
Need a secret or want your network added? Register it under Admin and set its coin conversion rate there.