Product
Publishers
Advertisers
Networks
Help
Pause animations
Browse help topics
How-to Publisher

Open the wall: simple links and signed links

Updated

View as Markdown

A simple link opens your wall with nothing but your user’s ID in it, and every new wall uses simple links. A signed link adds a signature made on your server and works once, within 5 minutes. Start with simple: your conversions are signed either way.

See also: Hosted Offerwall

On this page

Which kind your wall takes

Look at Docs, then Hosted Offerwall (or the property’s Integrations tab if your account uses Properties & Apps):

  • A copyable snippet means your wall opens with simple links.
  • A note that the wall requires server-signed launch URLs means every launch must be signed.

New walls start on simple links. Walls created before the choice existed require signed links, so a live integration was never loosened without its owner asking.

https://offerwall.affiliateos.xyz/w/owapp_your_wall?uid=u_48213&source=hosted&country=US

Example: user u_48213 in the US, opened as a page of its own.

ParameterNeededWhat it does
uidYesYour user’s ID. It comes back as sub_id on every postback for this user.
countrySend itTwo-letter country code. Without it the wall lists offers from every country, and installs on the wrong ones never convert.
sourceNoWhere the wall is shown: hosted, iframe, ios or android. Any other value, or the parameter twice, and the launch is refused.
platformNoios or android when your app knows the phone. Without it the wall reads the browser.
device_idNoThe phone’s advertising ID (IDFA or GAID) when you have it. It rides on every offer the user starts and helps advertisers confirm installs.
property_idNoYour property’s ID, when your account uses Properties & Apps. The property’s own snippet already has it.

Why a simple link is safe. Every postback is signed with your postback secret, however the wall was opened. Someone who edits the uid in a simple link can open the wall as another of your user IDs, and anything they complete there credits that ID. There’s nothing to take.

Sign a launch

  1. Keep the wall secret on your server

    Signing needs the wall’s secret, which starts with ows_. It’s shown once, when you create a wall for a new property in Properties & Apps (Copy the offerwall secret now). The wall that came with your account doesn’t show its secret: email us if you need signed links on it. Never put the secret in an app or a web page.

  2. Build the URL on your server

    Sign four values in this order, joined by a newline: the wall ID, the uid, the time in Unix seconds (ts) and a value used once (nonce). If the URL carries a property_id, sign it too, as a fifth line.

    JavaScript
    const crypto = require("crypto");
    
    function wallUrl(uid, propertyId) {
      const appId = process.env.OFFERWALL_APP_ID; // owapp_...
      const secret = process.env.OFFERWALL_APP_SECRET; // ows_...
      const ts = Math.floor(Date.now() / 1000); // seconds
      const nonce = "nonce_" + crypto.randomBytes(12).toString("hex");
      const fields = [appId, uid, ts, nonce];
      if (propertyId) fields.push(propertyId);
      const sig = crypto
        .createHmac("sha256", secret)
        .update(fields.join("\n"))
        .digest("hex");
    
      const url = new URL("https://offerwall.affiliateos.xyz/w/" + appId);
      url.searchParams.set("uid", uid);
      url.searchParams.set("ts", String(ts));
      url.searchParams.set("nonce", nonce);
      url.searchParams.set("sig", sig);
      url.searchParams.set("source", "hosted");
      url.searchParams.set("country", "US");
      if (propertyId) url.searchParams.set("property_id", propertyId);
      return url.toString();
    }
  3. Hand your app the finished URL

    Your page or app asks your server for a new URL each time it opens the wall, and uses it straight away.

  4. Check it worked

    Open a fresh URL: the wall loads. Reload the same tab: you get “This offerwall link is invalid or expired.” That’s the single-use rule working. If the first open fails, go through the invalid or expired checks.

Require a signature on every launch

A wall on simple links still checks any signature a launch carries, so you can build and test signing without changing anything. A link that carries any of ts, nonce or sig is checked as a signed launch, so don’t leave half a signature in a simple link.

Making signatures required, so unsigned links stop working, is a setting on the wall that the dashboard doesn’t show. To change it in either direction, email hello@affiliateos.ai with your wall ID (owapp_...). Switch your links over first: the moment a wall requires signatures, every unsigned link stops opening it.

Postback. A request we send to your server when a conversion happens, so you can credit the user.What is a postback?

Support

Still stuck? Write to us.

One address for every question: hello@affiliateos.ai. Put the details from this list in your first message so we can find the click or conversion without asking you for them again.

Put these in your message

  1. 01The email you sign in with
  2. 02Your role: publisher, advertiser or network
  3. 03The offer ID
  4. 04The click ID or action_id
  5. 05The time it happened, with your time zone
  6. 06What you expected to happen

Looking for a reward in an app? Ask that app's support. It credits your reward, so only it can see your balance.

Search help