Connect iFrame, S2S Postback, Offers API, Report API, Web SDK, Android SDK, Native Banner API or a platform plugin. Every integration uses the same site key, user id and postback contract so you can swap or combine paths at any time.
The fastest way to embed our offerwall. Three steps: apply, get your keys, paste the iFrame.
Step 1 — Apply.
Create a publisher account and submit your app or website for review.
Step 2 — Get keys.
After approval, copy your Public Key (site key) and Secret Key from Setup in your dashboard.
Step 3 — Embed.
Paste the tracking link in an iFrame and configure your postback URL. Replace YOUR_KEY with your Public Key and USER_ID with your user's unique identifier.
When a user completes an offer, we send a HTTP GET request to your postback URL with the parameters below. Use this to credit (and, if needed, debit) your user's balance from the server side.
Parameters
Parameter
Type
Description
subId
string
Your user's unique identifier (the one you passed as USER_ID).
transId
string
Unique transaction ID — use for deduplication.
reward
number
Amount of virtual currency to credit.
payout
number
Offer payout in USD.
signature
string
MD5 hash for verification (see below).
status
integer
1 = credit · 2 = chargeback (subtract).
offer_id
string
Completed offer ID.
offer_name
string
Completed offer name.
round_reward
number
Reward rounded to your site's decimal setting.
userIp
string
User's IP address.
country
string
ISO 2-letter country code.
uuid
string
Unique click ID.
event_id
string
Event ID (multi-reward offers only).
event_name
string
Event name (multi-reward offers only).
Signature verification
Always verify the signature before applying the reward or chargeback. The formula is md5(subId + transId + reward + SECRET_KEY).
Always respond with HTTP 200 and a short body (e.g. OK) once you've handled the event. Non-200 responses trigger retries from our Action Center.
#sec-api
Offers API
Use the Offers API when you want a custom UI and need offer data in JSON. Keep the click id from the response so your postback audit trail can connect back to the user action.
GET/api/v1/offers
Rate limit: requests/hour per site credentials. Responses include an X-RateLimit-Remaining header.
Parameters
Parameter
Required
Type
Description
site_key
required
string
Site public key.
site_secret
required
string
Site secret key.
type
optional
string
offer or multireward.
limit
optional
integer
Results per page (1–500). Default: 100.
offset
optional
integer
Skip N results for pagination.
country
optional
string
ISO 2-letter code (US, DE, BR).
device
optional
string
android, ios, desktop.
min_payout
optional
float
Minimum USD payout.
updated_since
optional
string
ISO 8601 date for incremental sync.
Example request
offers-api.sh
# Fetch US Android offers with a minimum $1 payoutGEThttps://www.demo.pro.adswedmedia.com/api/v1/offers?site_key=YOUR_KEY&site_secret=YOUR_SECRET
&country=US
&device=android
&min_payout=1.00
&limit=50
For the full method-level reference (Kotlin signatures, callbacks, error handling): Android SDK documentation.
#native-banner-api
Native Banner API
Display banner ads in mobile apps (Flutter, Kotlin, Swift, React Native) or any platform that can make HTTP requests. Returns JSON with image URLs — no JavaScript required.
GET/api/banners/v1/native
Parameters
Param
Required
Description
site_key
Yes
Your site/app key from the publisher dashboard.
sub_id
Yes
Unique user ID in your app (for tracking & anti-fraud).
When the banner becomes visible, fire a GET request to impression_url (CPM tracking).
When the user taps the banner, open click_url in the system browser.
Flutter example
banner_ad.dart
import'dart:convert';
import'package:http/http.dart'as http;
import'package:url_launcher/url_launcher.dart';
classBannerAd {
finalint id, width, height;
finalString imageUrl, clickUrl, impressionUrl;
BannerAd.fromJson(Map<String, dynamic> json)
: id = json['id'],
imageUrl = json['image_url'],
clickUrl = json['click_url'],
impressionUrl = json['impression_url'],
width = json['width'],
height = json['height'];
}
Future<BannerAd?> fetchBanner(String siteKey, String userId) async {
final uri = Uri.parse(
'https://pro.adswedmedia.com/api/banners/v1/native''?site_key=$siteKey&sub_id=$userId&size=320x50&limit=1',
);
final res = await http.get(uri);
if (res.statusCode != 200) returnnull;
final data = jsonDecode(res.body);
if (data['success'] != true || (data['banners'] as List).isEmpty) returnnull;
returnBannerAd.fromJson(data['banners'][0]);
}
Kotlin (Android) example
BannerApi.kt
import okhttp3.OkHttpClient
import okhttp3.Request
import org.json.JSONObject
suspend funfetchBanner(siteKey: String, userId: String): JSONObject? {
val url = "https://pro.adswedmedia.com/api/banners/v1/native" +
"?site_key=$siteKey&sub_id=$userId&size=320x50&limit=1"val req = Request.Builder().url(url).get().build()
val res = OkHttpClient().newCall(req).execute()
if (!res.isSuccessful) return null
val json = JSONObject(res.body!!.string())
val banners = json.getJSONArray("banners")
return if (banners.length() > 0) banners.getJSONObject(0) else null
}
Swift (iOS) example
BannerService.swift
import Foundation
struct BannerAd: Decodable {
let id: Intlet imageUrl, clickUrl, impressionUrl: Stringlet width, height: Intenum CodingKeys: String, CodingKey {
case id, width, height
case imageUrl = "image_url"case clickUrl = "click_url"case impressionUrl = "impression_url"
}
}
func fetchBanner(siteKey: String, userId: String) async throws -> BannerAd? {
let urlStr = "https://pro.adswedmedia.com/api/banners/v1/native" +
"?site_key=\(siteKey)&sub_id=\(userId)&size=320x50&limit=1"guard let url = URL(string: urlStr) else { returnnil }
let (data, _) = try await URLSession.shared.data(from: url)
struct Wrap: Decodable { let success: Bool; let banners: [BannerAd] }
let w = try JSONDecoder().decode(Wrap.self, from: data)
return w.banners.first
}
#sec-plugins
Platform Plugins
Install once, monetize instantly. Our plugins load the Web SDK remotely so they always stay up to date — no local SDK copies to update.
All plugins load the SDK from adswedmedia.com/sdk/v1/adsw.js. Every user of your plugin gets the latest fixes automatically.
WordPress
Install the adswedmedia-offerwall plugin, enter your API key in Settings → AdswedMedia, and use shortcodes to display the offerwall on any page or post.
Upload adswedmedia-offerwall to /wp-content/plugins/.
Activate via the Plugins menu.
Go to Settings → AdswedMedia and enter your API Key.
Add the shortcode to any page or post.
Shortcode
Description
[adswedmedia_offerwall]
Button that opens the offerwall modal.
[adswedmedia_offerwall mode="embed"]
Embed the offerwall directly on the page.
[adswedmedia_offerwall button_text="Earn"]
Custom button text.
[adswedmedia_banner size="300x250"]
Banner ad — sizes: 300x250, 728x90, 320x50, 160x600, 468x60.
WooCommerce
Install adswedmedia-woo-rewards. Users earn shop credit from the offerwall that applies automatically at checkout.
Install and activate on top of WordPress + WooCommerce.
Go to WooCommerce → AdswedMedia and enter your API Key.
Set the conversion rate (e.g. 100 coins = $1 store credit).
Add the widget or shortcode to your shop pages.
Shopify
Install the AdswedMedia app from the Shopify marketplace (or manually via the Shopify Admin API). The app injects the Web SDK into your theme and exposes a rewards section in the storefront.
Install the AdswedMedia app from the Shopify App Store.
Connect your account — we auto-generate the site key.
Enable the Earn rewards block in your theme editor.
Map reward currency to shop credit or discount codes.
Wix
Install the AdswedMedia Wix App. Users complete offers inside your Wix site and rewards sync back through Velo webhooks.
Install the AdswedMedia app from the Wix App Market.
Paste your API Key in the app settings.
Drag the Offerwall element onto any page.
(Optional) Use Velo to listen for reward events and update your user model.