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.

Embed URL
https://offerwall.doearno.in/?user_id=demo-user&app_id=demo-app&sig={SIGNATURE}
iframe
<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>
Android WebView
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.

Postback URL
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 URL
  • reward — payout in Doearno coins (whole number)
  • offer_id — the network's offer identifier
  • network — your network slug, as registered in the admin panel
  • sig — 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.

Node.js
import crypto from "crypto";

const payload = `${user_id}:${offer_id}:${reward}:${network}`;
const sig = crypto
  .createHmac("sha256", DOEARNO_SECRET)
  .update(payload)
  .digest("hex");
PHP
$payload = "$user_id:$offer_id:$reward:$network";
$sig = hash_hmac('sha256', $payload, $doearno_secret);
Python
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.