Offerwall API
This is the endpoint our hosted offerwall calls to render itself. It returns a richer object than the Offers API, including per-offer goals, and it is the right choice when you are building a custom wall that mirrors ours.
Endpoint
Authentication
This endpoint does not take an API key. Access is authorised by the placement itself: the app must exist
and its status must be Active.
Because there is no key, anyone who knows your app ID can read this feed. Do not treat the response as confidential, and never expose internal pricing you would not want a competitor to see.
Query parameters
| Parameter | Required | Description | Default |
|---|---|---|---|
selected_platform |
No | Filter to one platform. Accepts ios, android, desktop or web. |
Detected from the user agent |
lang |
No | Two-letter language code for offer titles and descriptions. | Parsed from Accept-Language |
Example
curl "http://adplusmedia.com/api/v1/offers-iframe/1042/user_8837?selected_platform=android&lang=de"
Response
{
"offers": [
{
"id": 4821,
"name": "Puzzles & Survival",
"offer_type": "offer",
"description": "Reach castle level 10 and claim your reward.",
"short_description": "Reach castle level 10.",
"instructions": "Install, then reach castle level 10 within 14 days.",
"requirements": "New users only.",
"image": "https://cdn.example.com/offers/4821.png",
"payout": "21.00",
"points": 1260,
"reward": 1260,
"devices": [
"android"
],
"goals": [
{
"id": 1,
"name": "Install the game and play for 1 minute",
"payout": 1,
"reward": 60
},
{
"id": 2,
"name": "Reach castle level 10",
"payout": 20,
"reward": 1200
}
],
"favorite": false,
"isPremium": false,
"is_game": 1,
"incent": 1,
"offerwall_enabled": 1,
"url": "http://adplusmedia.com/api/redirect/eyJpdiI6IlZ4..."
}
]
}
Offer object
| Field | Type | Description |
|---|---|---|
id | Integer | Unique offer ID. |
name | String | Offer title, localised when lang is supported. |
offer_type | String | Offer category. |
description | String | Full description. |
short_description | String | Condensed description for tight layouts. |
instructions | String | What the user has to do to convert. |
requirements | String | Eligibility rules. |
image | String | Offer icon URL. |
payout | String | Total payout in USD across all goals. |
points | Number | Total reward in your virtual currency. |
reward | Number | Reward amount for the offer. |
devices | Array | Supported devices. |
goals | Array | Individual milestones. Empty for single-step offers. |
favorite | Boolean | Whether this user has favourited the offer. |
isPremium | Boolean | Whether the offer is flagged as premium. |
incent | Integer | 1 when incentivised traffic is allowed. |
offerwall_enabled | Integer | 1 when the offer may appear on a wall. |
url | String | Encrypted redirect URL bound to the user ID in the request path. |
Multi-step goals
When goals is non-empty, the user is rewarded incrementally. Each goal fires its own
conversion and therefore its own postback, so the same user can generate several credits from one offer.
Show the goal list in your UI. Offers with visible milestones convert substantially better than a single large payout with no intermediate feedback.
Do not sum goals[].reward and credit it up front. Credit each goal only when its postback
arrives — users frequently complete the first milestone and stop.
Errors
| Status | Body | Cause |
|---|---|---|
400 | Missing parameters | App ID or user ID absent from the path. |
404 | App Not Found | No placement matches the given app ID. |
403 | App Not Active | The placement is disabled, pending, rejected or deleted. |