Developer documentation

oiii integration guide

Integrate the oiii offerwall, JSON API and S2S postback in minutes. If you already support BitcoTasks, oiii uses the same URL formats and postback parameters — swap the domain and keys.

Getting started

Offerwall embed

The wall is responsive and shows Offers, Surveys, PTC, Shortlinks, Tasks and Faucet tabs. Replace [API_KEY] and [USER_ID].

JavaScript (new tab / popup)

window.open("https://oiii.si/offerwall/[API_KEY]/[USER_ID]")

iFrame

<iframe scrolling="yes" frameborder="0" style="width:100%;height:800px;border:0;" src="https://oiii.si/offerwall/[API_KEY]/[USER_ID]"> </iframe>

Add ?tab=offers|surveys|ptc|shortlinks|tasks|faucet to open a specific tab.

Parameters

ParameterDescriptionType
[API_KEY]Your app's API keyvarchar(32)
[USER_ID]Unique ID of the user on your site (letters, digits, _ - . @ :)varchar(64)
[USER_IP]The user's IP (API endpoints only)string
[BEARER_TOKEN]API token from your app pagestring

S2S postback

Whenever a user completes an offer, survey, PTC view, shortlink, approved task or faucet claim, oiii sends an HTTP POST to your postback URL (parameters are sent both in the body and in the query string, so $_REQUEST works). You can also place macros like {subId} in your URL.

ParameterDescriptionExample
subIdYour user IDuser123
transIdUnique transaction ID — use it to prevent double creditsOF-1A2B3C4D5E6F
offer_nameName of the completed offerInstall and reach level 5
offer_typeoffer, survey, ptc, video, shortlink, task, faucetptc
rewardAmount of your currency to credit (always positive)125.00
reward_nameYour currency namePoints
reward_valueYour exchange rate (units per $1)1000.00
payoutYour USD earning for this action0.125000
userIpUser IP at completion203.0.113.7
countryISO2 countryUS
status1 = credit, 2 = chargeback (subtract)1
debug1 = test postback from your dashboard0
signatureMD5 signature, see below17b4e2a7…

reward and payout are always absolute values; use status to add or subtract.

Postback security

Verify every postback: md5($subId . $transId . $reward . $secretKey). Your endpoint must reply with exactly ok. Failed postbacks are retried automatically with growing delays and can be resent from your dashboard.

<?php $secret = "YOUR_SECRET_KEY"; $allowed = [/* oiii postback IP */]; $ip = $_SERVER['REMOTE_ADDR']; if ($allowed && !in_array($ip, $allowed)) { echo "ERROR: Invalid source"; exit; } $userId = $_REQUEST['subId'] ?? null; $transId = $_REQUEST['transId'] ?? null; $reward = $_REQUEST['reward'] ?? null; $offerName = $_REQUEST['offer_name'] ?? null; $offerType = $_REQUEST['offer_type'] ?? null; $payout = $_REQUEST['payout'] ?? null; $status = $_REQUEST['status'] ?? null; $signature = $_REQUEST['signature'] ?? null; if (md5($userId . $transId . $reward . $secret) !== $signature) { echo "ERROR: Signature doesn't match"; exit; } if ($status == 2) $reward = -abs($reward); // chargeback if (isNewTransaction($transId)) { processTransaction($userId, $reward, $transId); } echo "ok";

JSON API

Render the wall content in your own UI. Enable Allow API on your app, then send Authorization: Bearer [BEARER_TOKEN]. Limit: 60 requests per minute per app (HTTP 429 above). Every response looks like {"status":"200","message":"success","data":[…]}. Each item has a url / link — open it in a new tab for the user; completions arrive by postback.

PTC

curl -X GET https://oiii.si/api/[API_KEY]/[USER_ID]/[USER_IP] \ -H "Authorization: Bearer [BEARER_TOKEN]"
{ "status": "200", "message": "success", "data": [{ "id": "12", "image": "", "title": "Visit our site", "description": "…", "duration": "30", "reward": "60.00", "currency_name": "Points", "url": "https://oiii.si/view/12?w=…", "boosted_campaign": false, "ad_type": "Iframe" }] }

Shortlinks

curl -X GET https://oiii.si/sl-api/[API_KEY]/[USER_ID]/[USER_IP] \ -H "Authorization: Bearer [BEARER_TOKEN]" // data[]: id, title, reward, currency_name, completion_rate, available, limit, url, boosted_campaign

Tasks

curl -X GET https://oiii.si/task-api/[API_KEY]/[USER_ID]/[USER_IP] \ -H "Authorization: Bearer [BEARER_TOKEN]" // data[]: id, title, description, instructions, requirement, proof_url_required, category, // image, reward, currency_name, available, repeat_hours, completion_rate, url // last 50 submissions of a user (id = transId of the postback) curl -X GET https://oiii.si/task-api/status/[API_KEY]/[USER_ID] \ -H "Authorization: Bearer [BEARER_TOKEN]"

Faucet

curl -X GET https://oiii.si/faucet-api/[API_KEY]/[USER_ID]/[USER_IP] \ -H "Authorization: Bearer [BEARER_TOKEN]" // data[]: id, name, reward, currency_name, claimed, limit, available, timer, wait, url // wait = seconds until the user can claim again (0 = now). Limits are shared with the iframe wall.

Offers & surveys

curl -X GET "https://oiii.si/offer-api.php?key=[API_KEY]&sub_id=[USER_ID]&ip=[USER_IP]" \ -H "Authorization: Bearer [BEARER_TOKEN]" curl -X GET "https://oiii.si/survey-api.php?key=[API_KEY]&sub_id=[USER_ID]&ip=[USER_IP]" \ -H "Authorization: Bearer [BEARER_TOKEN]" // data[]: id, title, description, image, reward, reward_name, link, requirements, // goals[{name, description, virtual_currency_value}], cpa_type, earn_up_to

Send the end user's browser User-Agent in a User-UA header so device targeting is correct.

Android / iOS

Open https://oiii.si/offerwall/[API_KEY]/[USER_ID] in a WebView (JavaScript enabled) or the system browser.

WebView v = new WebView(ctx); v.getSettings().setJavaScriptEnabled(true); v.loadUrl("https://oiii.si/offerwall/[API_KEY]/[USER_ID]");

Advertisers

Any account can advertise — no website needed. Deposit with FaucetPay (minimum $1.00), then create:

Campaigns are reviewed before going live. Rejected or stopped campaigns refund the unused budget to your ad balance automatically. Publisher earnings can be transferred to your ad balance at any time.