Publisher Knowledge Base

Integrate the wall in an afternoon

Drop in the offerwall with one script tag, or render offers natively from our API. This guide covers signup, keys, both integration paths, the reward postback, sandbox testing, and payouts.

Overview

adParagon is a rewarded offerwall network. Your users complete offers — installs, sign-ups, purchases, surveys — and earn your app's currency; you earn a revenue share on every approved conversion. Ranking, fraud scoring, and content screening happen on our side.

There are a few ways to integrate, and you can switch between them without re-applying:

  • Embed — one <script> tag renders the full wall in an auto-sizing iframe. Fastest path; nothing to design.
  • Mobile SDKs — native wrappers for iOS, Android, Unity and React Native that present the wall in one call.
  • Server API — fetch ranked offers as JSON and render them natively in your own UI.

Either way, when a user converts we send you a signed reward postback so you can credit them.

Quick start

1
ApplySubmit the publisher form on our site. You get sandbox keys instantly; live review takes about one business day.
2
IntegratePaste the embed script (or call the API) with your app key and your user's ID. Test against the sandbox.
3
Wire the postbackAdd your reward postback URL in the portal, verify the signature, and credit users on approved conversions.

Get sandbox keys →

Keys

On approval you receive two values from the publisher portal:

KeyWhere it livesPurpose
app_key publicClient-side — safe to ship in the SDK / app.Identifies your app when loading the wall and building click-outs.
app_secret server-onlyServer-side only — never ship it to a client.Verifies the HMAC signature on reward postbacks.
Keep the secret server-side. Anyone with your app_secret can forge reward postbacks. It only ever appears in your backend.

Embed (SDK / iframe)

The simplest integration — one tag renders the wall where you drop it and auto-resizes to fit its content:

<script src="https://wall.ad-paragon.com/sdk.js"
        data-app-key="ap_your_key"
        data-user="END_USER_ID"></script>

Optional attributes:

AttributeDefaultNotes
data-user—Required. Your stable ID for the end user — it comes back on the reward postback.
data-geoUSTwo-letter country; helps target eligible offers.
data-platformiosios, android, or web.
data-heightautoFixed pixel height. Omit to let the wall auto-resize via postMessage.

That's the exact wall your users see — live preview:

 the embedded wall (staging offers)
The wall inherits your brand: set your currency name, icon, and three brand colors in the portal (My apps → Configure) and the whole surface recolors to match your app.

Mobile SDKs

Shipping in an app? Native SDKs wrap the wall for the four surfaces mobile publishers use — iOS, Android, Unity, and React Native. Each one is the same three calls: configure(appKey), showWall(userRef), and an optional fetchOffers(userRef) if you want to render offers in your own UI.

Download the mobile SDK bundle →

PlatformLanguageInstall
iOSSwiftSwift Package Manager (iOS 13+, no dependencies)
AndroidKotlinGradle library module (minSdk 21, androidx.appcompat)
UnityC#UPM package (Unity 2020.3+, no dependencies)
React NativeTypeScriptnpm + react-native-webview

iOS (Swift)

import AdParagon

AdParagon.shared.configure(appKey: "ap_your_key")
AdParagon.shared.showWall(from: self, userRef: currentUserId)

Android (Kotlin)

AdParagon.configure("ap_your_key")
AdParagon.showWall(context, userRef = currentUserId)

Unity (C#)

AdParagonSdk.Configure("ap_your_key");
AdParagonSdk.ShowWall(currentUserId);

React Native

import { configure, AdParagonWallView } from "adparagon-react-native";

configure({ appKey: "ap_your_key" });
// render <AdParagonWallView userRef={userId} onClose={…} /> in a Modal
Rewards are credited server-side. The SDKs present the wall and (optionally) hand you the ranked offers; they never credit on the device. When a conversion is approved we call your reward postback (HMAC-signed) — credit the user there, then refresh their balance in-app after the wall closes. userRef is your stable user id and comes back on the postback.

Each SDK folder in the bundle has its own README with install, custom-UI, and click-out details.

Server API

To render offers in your own UI, fetch the ranked wall as JSON. Base URL:

https://tvaeenjxhgapurqxurea.supabase.co/functions/v1

GET /wall

Returns the personalized, ranked offer list for one user.

# query params: app_key, user_ref, geo, platform
GET /wall?app_key=ap_your_key&user_ref=END_USER_ID&geo=US&platform=ios

Response:

{
  "app": { "name":"Nova Rewards", "currency":"Coins", "currency_icon":null,
            "theme":"modern", "layout_mode":"toggle", "brand_colors":null },
  "offers": [
    {
      "offer_id":  "4f79e246-…",        // pass to /click
      "name":      "Cash Legends – 30 Days",
      "category":  "games",           // games | finance | surveys | shopping | streaming
      "rank":      1,                 // 1 = best pick for this user
      "reward":    345324,            // what the USER earns, in your currency
      "payout_usd":249.8,             // what YOU earn gross (before revshare)
      "icon":      "https://…png",      // square icon
      "image":     "https://…jpg",      // wide creative (may be absent)
      "steps": [ { "name":"Reach level 15", "pct":0.3, "event_id":"lvl15" } ]
    }
  ]
}

Render however you like — icon, name, category, and reward are the essentials; rank lets you flag top picks and image powers featured slots. steps[].pct is each event's share of the payout, so a per-step reward is round(reward × pct).

Cache the response for a couple of minutes per user; don't call /wall on every render. The list is already ranked — preserve the order.

Click-out

When a user taps an offer, send them to the /click endpoint. It records the click (with device signals for fraud scoring) and 302-redirects to the advertiser. The embed does this for you; for a native integration, open:

GET /click?app_key=ap_your_key
           &offer_id=OFFER_ID
           &user_ref=END_USER_ID
           &geo=US&format=wall

Open it in a new tab / external browser. The user_ref you send here is what ties the eventual conversion back to your user.

Reward postback

When a conversion is approved, we call your postback URL so you can credit the user. Set the URL template in the portal (My apps → Configure → Postback) using these macros:

MacroValue
{user_id}The user_ref from the click — your end user.
{reward}Amount to credit, in your currency (already revshare-adjusted).
{txn_id}Unique conversion id — use it to dedupe.
{event}Which step converted (for multi-step offers).
{click_id}The originating click id.
{payout_usd}Your gross revenue on this conversion, in USD.

Example template:

https://api.yourapp.com/adparagon/reward?uid={user_id}&coins={reward}&txn={txn_id}&event={event}

Verify the signature

We append &sig=… to every call: an HMAC-SHA256 over the sorted key=value query pairs (excluding sig), joined with &, keyed by your app_secret. Verify it before crediting:

// Node.js
const crypto = require("crypto");
function verify(query, appSecret) {
  const got = query.sig;
  const base = Object.keys(query).filter(k => k !== "sig").sort()
    .map(k => `${k}=${query[k]}`).join("&");
  const want = crypto.createHmac("sha256", appSecret).update(base).digest("hex");
  return got === want;
}
Respond 200 to acknowledge. Any non-2xx response (or a body starting with FAIL) is treated as a failure and retried up to 5 times. Dedupe on {txn_id} so a retry never double-credits.

Currency & rewards

You set your currency name (e.g. Gems, Coins) and your coins-per-USD rate in the portal. The reward we send on the wall and in the postback is already in your currency and already reflects your revenue share — credit it as-is.

Multi-step offers carry a steps array; each step's pct is its share of the payout, and each fires its own postback as the user progresses, with {event} naming the step.

Sandbox & testing

  • Your sandbox key works the moment you sign up — integrate and see the wall render before live review.
  • Open wall.html?app_key=ap_pub_staging01&user=YOUR_TEST_ID to preview the wall with staging offers (the embed above).
  • The integration you write against sandbox keeps working unchanged when your live key switches on — only the key changes.
Ready for live traffic? Nothing to re-integrate — once your account is approved, swap the sandbox app_key for your live one.

Content policy

Every offer is screened before it can serve. Gambling, real-money/sweepstakes casino, and adult content are blocked automatically — including offers that dodge obvious keywords (a deposit-plus-KYC flow, for example). You don't have to filter these yourself; they never reach your users.

Payouts & terms

  • Revenue share — your share of each approved conversion is set on your account and shown in the portal.
  • Terms — Net-30, $25 minimum payout.
  • Method — PayPal or bank/wire, chosen in the portal; each monthly statement shows conversions, revenue, and any adjustments.
  • Clawbacks — reversed conversions are attributed back to the month the activity happened, so statements stay accurate.

Support

Questions or integration help: support@ad-paragon.com. Include your app key and, for postback issues, a sample txn_id — we can trace it end to end.