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
Keys
On approval you receive two values from the publisher portal:
| Key | Where it lives | Purpose |
|---|---|---|
app_key public | Client-side — safe to ship in the SDK / app. | Identifies your app when loading the wall and building click-outs. |
app_secret server-only | Server-side only — never ship it to a client. | Verifies the HMAC signature on reward postbacks. |
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:
| Attribute | Default | Notes |
|---|---|---|
data-user | — | Required. Your stable ID for the end user — it comes back on the reward postback. |
data-geo | US | Two-letter country; helps target eligible offers. |
data-platform | ios | ios, android, or web. |
data-height | auto | Fixed pixel height. Omit to let the wall auto-resize via postMessage. |
That's the exact wall your users see — live preview:
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 →
| Platform | Language | Install |
|---|---|---|
| iOS | Swift | Swift Package Manager (iOS 13+, no dependencies) |
| Android | Kotlin | Gradle library module (minSdk 21, androidx.appcompat) |
| Unity | C# | UPM package (Unity 2020.3+, no dependencies) |
| React Native | TypeScript | npm + 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
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).
/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:
| Macro | Value |
|---|---|
{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; }
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_IDto 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.
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.